diff options
872 files changed, 10763 insertions, 6376 deletions
diff --git a/Android.bp b/Android.bp index 37643aa779b5..7658fb2cc2c8 100644 --- a/Android.bp +++ b/Android.bp @@ -906,6 +906,7 @@ java_library { "core/java/android/os/IHwInterface.java", "core/java/android/os/DeadObjectException.java", "core/java/android/os/DeadSystemException.java", + "core/java/android/os/NativeHandle.java", "core/java/android/os/RemoteException.java", "core/java/android/util/AndroidException.java", ], @@ -1038,7 +1039,7 @@ doc_defaults { "ext", "framework", "voip-common", - "android.test.mock", + "android.test.mock.impl", ], local_sourcepaths: frameworks_base_subdirs, html_dirs: [ @@ -1062,99 +1063,6 @@ doc_defaults { installable: false, } -droiddoc { - name: "api-stubs-docs", - defaults: ["api-stubs-default"], - arg_files: [ - "core/res/AndroidManifest.xml", - ":api-version-xml", - "core/java/overview.html", - ":current-support-api", - "api/current.txt", - ], - api_filename: "public_api.txt", - removed_api_filename: "removed.txt", - args: framework_docs_args + " -referenceonly -nodocs", - check_api: { - last_released: { - api_file: ":last-released-public-api", - removed_api_file: "api/removed.txt", - args: "-hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 " + - "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " + - "-error 16 -error 17 -error 18 -error 31", - }, - current: { - api_file: "api/current.txt", - removed_api_file: "api/removed.txt", - args: "-error 2 -error 3 -error 4 -error 5 -error 6 " + - "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " + - "-error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 " + - "-error 25 -error 26 -error 27", - }, - }, -} - -droiddoc { - name: "system-api-stubs-docs", - defaults: ["api-stubs-default"], - arg_files: [ - "core/res/AndroidManifest.xml", - ":api-version-xml", - "core/java/overview.html", - ":current-support-api", - "api/current.txt", - ], - api_tag_name: "SYSTEM", - api_filename: "system-api.txt", - removed_api_filename: "system-removed.txt", - exact_api_filename: "system-exact.txt", - args: framework_docs_args + " -referenceonly -showAnnotation android.annotation.SystemApi -nodocs", - check_api: { - last_released: { - api_file: ":last-released-system-api", - removed_api_file: "api/system-removed.txt", - args: "-hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 " + - "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " + - "-error 16 -error 17 -error 18 -error 31", - }, - current: { - api_file: "api/system-current.txt", - removed_api_file: "api/system-removed.txt", - args: "-error 2 -error 3 -error 4 -error 5 -error 6 " + - "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " + - "-error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 " + - "-error 25 -error 26 -error 27", - }, - }, -} - -droiddoc { - name: "test-api-stubs-docs", - defaults: ["api-stubs-default"], - arg_files: [ - "core/res/AndroidManifest.xml", - ":api-version-xml", - "core/java/overview.html", - ":current-support-api", - "api/current.txt", - ], - api_tag_name: "TEST", - api_filename: "test-api.txt", - removed_api_filename: "test-removed.txt", - exact_api_filename: "test-exact.txt", - args: framework_docs_args + " -referenceonly -showAnnotation android.annotation.TestApi -nodocs", - check_api: { - current: { - api_file: "api/test-current.txt", - removed_api_file: "api/test-removed.txt", - args: "-error 2 -error 3 -error 4 -error 5 -error 6 " + - "-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 " + - "-error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 " + - "-error 25 -error 26 -error 27", - }, - }, -} - doc_defaults { name: "framework-docs-default", srcs: [ @@ -1451,6 +1359,7 @@ droiddoc { "core/java/android/os/IHwInterface.java", "core/java/android/os/DeadObjectException.java", "core/java/android/os/DeadSystemException.java", + "core/java/android/os/NativeHandle.java", "core/java/android/os/RemoteException.java", "core/java/android/util/AndroidException.java", ], @@ -1565,13 +1474,13 @@ doc_defaults { "ext", "framework", "voip-common", - "android.test.mock", + "android.test.mock.impl", ], local_sourcepaths: frameworks_base_subdirs, installable: false, metalava_enabled: true, metalava_annotations_enabled: true, - metalava_previous_api: ":public-api-for-metalava-annotations", + metalava_previous_api: ":last-released-public-api", metalava_merge_annotations_dirs: [ "metalava-manual", "ojluni-annotated-stubs", @@ -1579,9 +1488,8 @@ doc_defaults { } droiddoc { - name: "metalava-api-stubs-docs", + name: "api-stubs-docs", defaults: ["metalava-api-stubs-default"], - api_tag_name: "METALAVA_PUBLIC", api_filename: "public_api.txt", private_api_filename: "private.txt", removed_api_filename: "removed.txt", @@ -1592,9 +1500,9 @@ droiddoc { } droiddoc { - name: "metalava-system-api-stubs-docs", + name: "system-api-stubs-docs", defaults: ["metalava-api-stubs-default"], - api_tag_name: "METALAVA_SYSTEM", + api_tag_name: "SYSTEM", api_filename: "system-api.txt", private_api_filename: "system-private.txt", private_dex_api_filename: "system-private-dex.txt", @@ -1606,9 +1514,9 @@ droiddoc { } droiddoc { - name: "metalava-test-api-stubs-docs", + name: "test-api-stubs-docs", defaults: ["metalava-api-stubs-default"], - api_tag_name: "METALAVA_TEST", + api_tag_name: "TEST", api_filename: "test-api.txt", removed_api_filename: "test-removed.txt", arg_files: [ diff --git a/api/current.txt b/api/current.txt index e89603bac1ff..19a0f31136e8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11,6 +11,7 @@ package android { field public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION"; field public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION"; field public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"; + field public static final java.lang.String ACCESS_MEDIA_LOCATION = "android.permission.ACCESS_MEDIA_LOCATION"; field public static final java.lang.String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE"; field public static final java.lang.String ACCESS_NOTIFICATION_POLICY = "android.permission.ACCESS_NOTIFICATION_POLICY"; field public static final java.lang.String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE"; @@ -101,10 +102,13 @@ package android { field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR"; field public static final java.lang.String READ_CALL_LOG = "android.permission.READ_CALL_LOG"; field public static final java.lang.String READ_CONTACTS = "android.permission.READ_CONTACTS"; - field public static final java.lang.String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; + field public static final deprecated java.lang.String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE"; field public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER"; field public static final deprecated java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE"; field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS"; + field public static final java.lang.String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO"; + field public static final java.lang.String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES"; + field public static final java.lang.String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO"; field public static final java.lang.String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS"; field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; field public static final java.lang.String READ_SMS = "android.permission.READ_SMS"; @@ -151,8 +155,11 @@ package android { field public static final java.lang.String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR"; field public static final java.lang.String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG"; field public static final java.lang.String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS"; - field public static final java.lang.String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE"; + field public static final deprecated java.lang.String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE"; field public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES"; + field public static final java.lang.String WRITE_MEDIA_AUDIO = "android.permission.WRITE_MEDIA_AUDIO"; + field public static final java.lang.String WRITE_MEDIA_IMAGES = "android.permission.WRITE_MEDIA_IMAGES"; + field public static final java.lang.String WRITE_MEDIA_VIDEO = "android.permission.WRITE_MEDIA_VIDEO"; field public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS"; field public static final java.lang.String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS"; field public static final java.lang.String WRITE_SYNC_SETTINGS = "android.permission.WRITE_SYNC_SETTINGS"; @@ -166,11 +173,13 @@ package android { field public static final java.lang.String CAMERA = "android.permission-group.CAMERA"; field public static final java.lang.String CONTACTS = "android.permission-group.CONTACTS"; field public static final java.lang.String LOCATION = "android.permission-group.LOCATION"; + field public static final java.lang.String MEDIA_AURAL = "android.permission-group.MEDIA_AURAL"; + field public static final java.lang.String MEDIA_VISUAL = "android.permission-group.MEDIA_VISUAL"; field public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE"; field public static final java.lang.String PHONE = "android.permission-group.PHONE"; field public static final java.lang.String SENSORS = "android.permission-group.SENSORS"; field public static final java.lang.String SMS = "android.permission-group.SMS"; - field public static final java.lang.String STORAGE = "android.permission-group.STORAGE"; + field public static final deprecated java.lang.String STORAGE = "android.permission-group.STORAGE"; } public final class R { @@ -11241,6 +11250,7 @@ package android.content.pm { method public abstract boolean hasSystemFeature(java.lang.String, int); method public abstract boolean isInstantApp(); method public abstract boolean isInstantApp(java.lang.String); + method public boolean isPackageSuspended(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public boolean isPackageSuspended(); method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String); method public abstract boolean isSafeMode(); @@ -42541,9 +42551,11 @@ package android.telephony { method public deprecated int getMnc(); method public java.lang.String getMncString(); method public java.lang.String getNumber(); + method public int getParentSubId(); method public int getSimSlotIndex(); method public int getSubscriptionId(); method public boolean isEmbedded(); + method public boolean isOpportunistic(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR; } @@ -42568,6 +42580,7 @@ package android.telephony { method public void setSubscriptionOverrideCongested(int, boolean, long); method public void setSubscriptionOverrideUnmetered(int, boolean, long); method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>); + method public void switchToSubscription(int, android.app.PendingIntent); field public static final java.lang.String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"; field public static final java.lang.String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED"; field public static final java.lang.String ACTION_MANAGE_SUBSCRIPTION_PLANS = "android.telephony.action.MANAGE_SUBSCRIPTION_PLANS"; diff --git a/api/system-current.txt b/api/system-current.txt index 6a11e00dc819..d9befc7eb87e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -201,6 +201,7 @@ package android { field public static final java.lang.String WRITE_EMBEDDED_SUBSCRIPTIONS = "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"; field public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES"; field public static final java.lang.String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE"; + field public static final java.lang.String WRITE_OBB = "android.permission.WRITE_OBB"; field public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS"; } @@ -1115,7 +1116,6 @@ package android.content.pm { method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; - method public boolean isPackageSuspended(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceiversAsUser(android.content.Intent, int, android.os.UserHandle); method public abstract void registerDexModule(java.lang.String, android.content.pm.PackageManager.DexModuleRegisterCallback); method public abstract void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener); @@ -3835,6 +3835,7 @@ package android.os { method public final void putInt64Array(long, long[]); method public final void putInt8(long, byte); method public final void putInt8Array(long, byte[]); + method public final void putNativeHandle(long, android.os.NativeHandle); method public final void putString(long, java.lang.String); method public static java.lang.Boolean[] wrapArray(boolean[]); method public static java.lang.Long[] wrapArray(long[]); @@ -3854,6 +3855,7 @@ package android.os { method public final double readDouble(); method public final java.util.ArrayList<java.lang.Double> readDoubleVector(); method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean); + method public final android.os.NativeHandle readEmbeddedNativeHandle(long, long); method public final float readFloat(); method public final java.util.ArrayList<java.lang.Float> readFloatVector(); method public final short readInt16(); @@ -3864,6 +3866,8 @@ package android.os { method public final java.util.ArrayList<java.lang.Long> readInt64Vector(); method public final byte readInt8(); method public final java.util.ArrayList<java.lang.Byte> readInt8Vector(); + method public final android.os.NativeHandle readNativeHandle(); + method public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector(); method public final java.lang.String readString(); method public final java.util.ArrayList<java.lang.String> readStringVector(); method public final android.os.IHwBinder readStrongBinder(); @@ -3887,6 +3891,8 @@ package android.os { method public final void writeInt8(byte); method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>); method public final void writeInterfaceToken(java.lang.String); + method public final void writeNativeHandle(android.os.NativeHandle); + method public final void writeNativeHandleVector(java.util.ArrayList<android.os.NativeHandle>); method public final void writeStatus(int); method public final void writeString(java.lang.String); method public final void writeStringVector(java.util.ArrayList<java.lang.String>); @@ -3932,6 +3938,18 @@ package android.os { field public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR; } + public final class NativeHandle implements java.io.Closeable { + ctor public NativeHandle(); + ctor public NativeHandle(java.io.FileDescriptor, boolean); + ctor public NativeHandle(java.io.FileDescriptor[], int[], boolean); + method public void close() throws java.io.IOException; + method public android.os.NativeHandle dup() throws java.io.IOException; + method public java.io.FileDescriptor getFileDescriptor(); + method public java.io.FileDescriptor[] getFileDescriptors(); + method public int[] getInts(); + method public boolean hasSingleFileDescriptor(); + } + public final class PowerManager { method public void userActivity(long, int, int); field public static final int USER_ACTIVITY_EVENT_ACCESSIBILITY = 3; // 0x3 @@ -4703,7 +4721,8 @@ package android.service.notification { method public final void adjustNotification(android.service.notification.Adjustment); method public final void adjustNotifications(java.util.List<android.service.notification.Adjustment>); method public final android.os.IBinder onBind(android.content.Intent); - method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification); + method public android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification); + method public android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, android.app.NotificationChannel); method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap, android.service.notification.NotificationStats, int); method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, java.lang.String); method public final void unsnoozeNotification(java.lang.String); diff --git a/api/test-current.txt b/api/test-current.txt index 9d6c0eb315fc..3fa202f14d65 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1064,7 +1064,8 @@ package android.service.notification { method public final void adjustNotification(android.service.notification.Adjustment); method public final void adjustNotifications(java.util.List<android.service.notification.Adjustment>); method public final android.os.IBinder onBind(android.content.Intent); - method public abstract android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification); + method public android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification); + method public android.service.notification.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, android.app.NotificationChannel); method public abstract void onNotificationSnoozedUntilContext(android.service.notification.StatusBarNotification, java.lang.String); method public final void unsnoozeNotification(java.lang.String); field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService"; @@ -1461,13 +1462,21 @@ package android.view { method public android.view.View getTooltipView(); method public static boolean isDefaultFocusHighlightEnabled(); method public boolean isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable); + method protected void resetResolvedDrawables(); + method public void resetResolvedLayoutDirection(); + method public void resetResolvedPadding(); + method public void resetResolvedTextAlignment(); + method public void resetResolvedTextDirection(); + method public void resetRtlProperties(); method public boolean restoreFocusInCluster(int); method public boolean restoreFocusNotInCluster(); method public void setAutofilled(boolean); method public final void setFocusedInCluster(); + method public void setIsRootNamespace(boolean); } public class ViewConfiguration { + method public long getDeviceGlobalActionKeyTimeout(); method public static int getHoverTooltipHideShortTimeout(); method public static int getHoverTooltipHideTimeout(); method public static int getHoverTooltipShowTimeout(); diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index bc4ed1543d40..0e0a8c77eac6 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -30,411 +30,13 @@ Landroid/accounts/IAccountManagerResponse$Stub;-><init>()V Landroid/accounts/IAccountManagerResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManagerResponse; Landroid/accounts/IAccountManagerResponse;->onError(ILjava/lang/String;)V Landroid/accounts/IAccountManagerResponse;->onResult(Landroid/os/Bundle;)V -Landroid/app/ActionBar;->collapseActionView()Z -Landroid/app/ActionBar;->DISPLAY_TITLE_MULTIPLE_LINES:I -Landroid/app/ActionBar;->setShowHideAnimationEnabled(Z)V -Landroid/app/Activity;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Landroid/app/Instrumentation;Landroid/os/IBinder;ILandroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Landroid/app/Activity$NonConfigurationInstances;Landroid/content/res/Configuration;Ljava/lang/String;Lcom/android/internal/app/IVoiceInteractor;Landroid/view/Window;Landroid/view/ViewRootImpl$ActivityConfigCallback;)V -Landroid/app/Activity;->dispatchActivityResult(Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;)V -Landroid/app/Activity;->finish(I)V -Landroid/app/Activity;->FRAGMENTS_TAG:Ljava/lang/String; -Landroid/app/Activity;->getActivityOptions()Landroid/app/ActivityOptions; -Landroid/app/Activity;->getActivityToken()Landroid/os/IBinder; -Landroid/app/Activity;->isResumed()Z -Landroid/app/Activity;->mActivityInfo:Landroid/content/pm/ActivityInfo; -Landroid/app/Activity;->mActivityTransitionState:Landroid/app/ActivityTransitionState; -Landroid/app/Activity;->mApplication:Landroid/app/Application; -Landroid/app/Activity;->mCalled:Z -Landroid/app/Activity;->mComponent:Landroid/content/ComponentName; -Landroid/app/Activity;->mConfigChangeFlags:I -Landroid/app/Activity;->mCurrentConfig:Landroid/content/res/Configuration; -Landroid/app/Activity;->mDestroyed:Z -Landroid/app/Activity;->mEmbeddedID:Ljava/lang/String; -Landroid/app/Activity;->mFinished:Z -Landroid/app/Activity;->mFragments:Landroid/app/FragmentController; -Landroid/app/Activity;->mHandler:Landroid/os/Handler; -Landroid/app/Activity;->mIdent:I -Landroid/app/Activity;->mInstrumentation:Landroid/app/Instrumentation; -Landroid/app/Activity;->mIntent:Landroid/content/Intent; -Landroid/app/Activity;->mLastNonConfigurationInstances:Landroid/app/Activity$NonConfigurationInstances; -Landroid/app/Activity;->mMainThread:Landroid/app/ActivityThread; -Landroid/app/Activity;->mParent:Landroid/app/Activity; -Landroid/app/Activity;->mReferrer:Ljava/lang/String; -Landroid/app/Activity;->mResultCode:I -Landroid/app/Activity;->mResultData:Landroid/content/Intent; -Landroid/app/Activity;->mResumed:Z -Landroid/app/Activity;->mStopped:Z -Landroid/app/Activity;->mTitle:Ljava/lang/CharSequence; -Landroid/app/Activity;->mToken:Landroid/os/IBinder; -Landroid/app/Activity;->mVisibleFromClient:Z -Landroid/app/Activity;->mVoiceInteractor:Landroid/app/VoiceInteractor; -Landroid/app/Activity;->mWindow:Landroid/view/Window; -Landroid/app/Activity;->mWindowAdded:Z -Landroid/app/Activity;->mWindowManager:Landroid/view/WindowManager; -Landroid/app/Activity;->performCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V -Landroid/app/Activity;->saveManagedDialogs(Landroid/os/Bundle;)V -Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V -Landroid/app/Activity;->setParent(Landroid/app/Activity;)V -Landroid/app/Activity;->setPersistent(Z)V -Landroid/app/Activity;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V -Landroid/app/Activity;->startActivityForResult(Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)V -Landroid/app/Activity;->startActivityForResultAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)V -Landroid/app/ActivityGroup;->mLocalActivityManager:Landroid/app/LocalActivityManager; -Landroid/app/ActivityManager$MemoryInfo;->foregroundAppThreshold:J -Landroid/app/ActivityManager$MemoryInfo;->hiddenAppThreshold:J -Landroid/app/ActivityManager$MemoryInfo;->secondaryServerThreshold:J -Landroid/app/ActivityManager$MemoryInfo;->visibleAppThreshold:J -Landroid/app/ActivityManager$RunningAppProcessInfo;->flags:I -Landroid/app/ActivityManager$RunningAppProcessInfo;->FLAG_HAS_ACTIVITIES:I -Landroid/app/ActivityManager$RunningAppProcessInfo;->FLAG_PERSISTENT:I -Landroid/app/ActivityManager$RunningAppProcessInfo;->processState:I -Landroid/app/ActivityManager$RunningAppProcessInfo;->procStateToImportance(I)I -Landroid/app/ActivityManager$StackInfo;->bounds:Landroid/graphics/Rect; -Landroid/app/ActivityManager$StackInfo;->displayId:I -Landroid/app/ActivityManager$StackInfo;->position:I -Landroid/app/ActivityManager$StackInfo;->stackId:I -Landroid/app/ActivityManager$StackInfo;->taskBounds:[Landroid/graphics/Rect; -Landroid/app/ActivityManager$StackInfo;->taskIds:[I -Landroid/app/ActivityManager$StackInfo;->taskNames:[Ljava/lang/String; -Landroid/app/ActivityManager$StackInfo;->taskUserIds:[I -Landroid/app/ActivityManager$StackInfo;->topActivity:Landroid/content/ComponentName; -Landroid/app/ActivityManager$StackInfo;->toString(Ljava/lang/String;)Ljava/lang/String; -Landroid/app/ActivityManager$StackInfo;->userId:I -Landroid/app/ActivityManager$StackInfo;->visible:Z -Landroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I -Landroid/app/ActivityManager$TaskDescription;->getInMemoryIcon()Landroid/graphics/Bitmap; -Landroid/app/ActivityManager$TaskDescription;->setIcon(Landroid/graphics/Bitmap;)V -Landroid/app/ActivityManager$TaskSnapshot;->getContentInsets()Landroid/graphics/Rect; -Landroid/app/ActivityManager$TaskSnapshot;->getOrientation()I -Landroid/app/ActivityManager$TaskSnapshot;->getScale()F -Landroid/app/ActivityManager$TaskSnapshot;->isRealSnapshot()Z -Landroid/app/ActivityManager$TaskSnapshot;->isReducedResolution()Z -Landroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V -Landroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I -Landroid/app/ActivityManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)Z -Landroid/app/ActivityManager;->forceStopPackageAsUser(Ljava/lang/String;I)V -Landroid/app/ActivityManager;->getMaxRecentTasksStatic()I -Landroid/app/ActivityManager;->getService()Landroid/app/IActivityManager; -Landroid/app/ActivityManager;->IActivityManagerSingleton:Landroid/util/Singleton; -Landroid/app/ActivityManager;->INTENT_SENDER_ACTIVITY:I -Landroid/app/ActivityManager;->isHighEndGfx()Z -Landroid/app/ActivityManager;->isLowRamDeviceStatic()Z -Landroid/app/ActivityManager;->isUserRunning(I)Z -Landroid/app/ActivityManager;->mContext:Landroid/content/Context; -Landroid/app/ActivityManager;->PROCESS_STATE_BOUND_FOREGROUND_SERVICE:I -Landroid/app/ActivityManager;->PROCESS_STATE_CACHED_ACTIVITY:I -Landroid/app/ActivityManager;->PROCESS_STATE_FOREGROUND_SERVICE:I -Landroid/app/ActivityManager;->PROCESS_STATE_HOME:I -Landroid/app/ActivityManager;->PROCESS_STATE_IMPORTANT_BACKGROUND:I -Landroid/app/ActivityManager;->PROCESS_STATE_RECEIVER:I -Landroid/app/ActivityManager;->PROCESS_STATE_SERVICE:I -Landroid/app/ActivityManager;->PROCESS_STATE_TOP:I -Landroid/app/ActivityManager;->staticGetMemoryClass()I -Landroid/app/ActivityManager;->switchUser(I)Z Landroid/app/ActivityManagerNative;-><init>()V -Landroid/app/ActivityManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager; -Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager; -Landroid/app/ActivityManagerNative;->isSystemReady()Z -Landroid/app/ActivityOptions;->makeCustomAnimation(Landroid/content/Context;IILandroid/os/Handler;Landroid/app/ActivityOptions$OnAnimationStartedListener;)Landroid/app/ActivityOptions; -Landroid/app/ActivityOptions;->makeMultiThumbFutureAspectScaleAnimation(Landroid/content/Context;Landroid/os/Handler;Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/app/ActivityOptions$OnAnimationStartedListener;Z)Landroid/app/ActivityOptions; -Landroid/app/ActivityThread$ActivityClientRecord;-><init>()V -Landroid/app/ActivityThread$ActivityClientRecord;->activity:Landroid/app/Activity; -Landroid/app/ActivityThread$ActivityClientRecord;->activityInfo:Landroid/content/pm/ActivityInfo; -Landroid/app/ActivityThread$ActivityClientRecord;->compatInfo:Landroid/content/res/CompatibilityInfo; -Landroid/app/ActivityThread$ActivityClientRecord;->intent:Landroid/content/Intent; -Landroid/app/ActivityThread$ActivityClientRecord;->mPreserveWindow:Z -Landroid/app/ActivityThread$ActivityClientRecord;->packageInfo:Landroid/app/LoadedApk; -Landroid/app/ActivityThread$ActivityClientRecord;->paused:Z -Landroid/app/ActivityThread$ActivityClientRecord;->stopped:Z -Landroid/app/ActivityThread$ActivityClientRecord;->token:Landroid/os/IBinder; Landroid/app/ActivityThread$AppBindData;-><init>()V -Landroid/app/ActivityThread$AppBindData;->appInfo:Landroid/content/pm/ApplicationInfo; -Landroid/app/ActivityThread$AppBindData;->compatInfo:Landroid/content/res/CompatibilityInfo; -Landroid/app/ActivityThread$AppBindData;->info:Landroid/app/LoadedApk; -Landroid/app/ActivityThread$AppBindData;->instrumentationArgs:Landroid/os/Bundle; -Landroid/app/ActivityThread$AppBindData;->persistent:Z -Landroid/app/ActivityThread$AppBindData;->processName:Ljava/lang/String; -Landroid/app/ActivityThread$AppBindData;->providers:Ljava/util/List; -Landroid/app/ActivityThread$AppBindData;->restrictedBackupMode:Z -Landroid/app/ActivityThread$BindServiceData;->intent:Landroid/content/Intent; -Landroid/app/ActivityThread$BindServiceData;->token:Landroid/os/IBinder; Landroid/app/ActivityThread$CreateServiceData;-><init>()V -Landroid/app/ActivityThread$CreateServiceData;->compatInfo:Landroid/content/res/CompatibilityInfo; -Landroid/app/ActivityThread$CreateServiceData;->info:Landroid/content/pm/ServiceInfo; -Landroid/app/ActivityThread$CreateServiceData;->intent:Landroid/content/Intent; -Landroid/app/ActivityThread$CreateServiceData;->token:Landroid/os/IBinder; -Landroid/app/ActivityThread$H;->BIND_SERVICE:I -Landroid/app/ActivityThread$H;->CREATE_SERVICE:I -Landroid/app/ActivityThread$H;->DUMP_PROVIDER:I -Landroid/app/ActivityThread$H;->ENTER_ANIMATION_COMPLETE:I -Landroid/app/ActivityThread$H;->EXIT_APPLICATION:I -Landroid/app/ActivityThread$H;->GC_WHEN_IDLE:I -Landroid/app/ActivityThread$H;->INSTALL_PROVIDER:I -Landroid/app/ActivityThread$H;->RECEIVER:I -Landroid/app/ActivityThread$H;->REMOVE_PROVIDER:I -Landroid/app/ActivityThread$H;->SCHEDULE_CRASH:I -Landroid/app/ActivityThread$H;->SERVICE_ARGS:I -Landroid/app/ActivityThread$H;->STOP_SERVICE:I -Landroid/app/ActivityThread$H;->UNBIND_SERVICE:I -Landroid/app/ActivityThread$ProviderClientRecord;->mHolder:Landroid/app/ContentProviderHolder; -Landroid/app/ActivityThread$ProviderClientRecord;->mLocalProvider:Landroid/content/ContentProvider; -Landroid/app/ActivityThread$ProviderClientRecord;->mProvider:Landroid/content/IContentProvider; -Landroid/app/ActivityThread$ReceiverData;->compatInfo:Landroid/content/res/CompatibilityInfo; -Landroid/app/ActivityThread$ReceiverData;->info:Landroid/content/pm/ActivityInfo; -Landroid/app/ActivityThread$ReceiverData;->intent:Landroid/content/Intent; -Landroid/app/ActivityThread$ServiceArgsData;->args:Landroid/content/Intent; -Landroid/app/ActivityThread$ServiceArgsData;->token:Landroid/os/IBinder; -Landroid/app/ActivityThread;-><init>()V -Landroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider; -Landroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider; -Landroid/app/ActivityThread;->attach(ZJ)V -Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; -Landroid/app/ActivityThread;->currentApplication()Landroid/app/Application; -Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String; -Landroid/app/ActivityThread;->currentProcessName()Ljava/lang/String; -Landroid/app/ActivityThread;->getActivity(Landroid/os/IBinder;)Landroid/app/Activity; -Landroid/app/ActivityThread;->getApplication()Landroid/app/Application; -Landroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread; -Landroid/app/ActivityThread;->getHandler()Landroid/os/Handler; -Landroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation; -Landroid/app/ActivityThread;->getLooper()Landroid/os/Looper; -Landroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk; -Landroid/app/ActivityThread;->getPackageInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk; -Landroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk; -Landroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager; -Landroid/app/ActivityThread;->getProcessName()Ljava/lang/String; -Landroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl; -Landroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$AppBindData;)V -Landroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V -Landroid/app/ActivityThread;->handleReceiver(Landroid/app/ActivityThread$ReceiverData;)V -Landroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V -Landroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V -Landroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder; -Landroid/app/ActivityThread;->installSystemProviders(Ljava/util/List;)V -Landroid/app/ActivityThread;->mActivities:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mAllApplications:Ljava/util/ArrayList; -Landroid/app/ActivityThread;->mAppThread:Landroid/app/ActivityThread$ApplicationThread; -Landroid/app/ActivityThread;->mBoundApplication:Landroid/app/ActivityThread$AppBindData; -Landroid/app/ActivityThread;->mConfiguration:Landroid/content/res/Configuration; -Landroid/app/ActivityThread;->mCurDefaultDisplayDpi:I -Landroid/app/ActivityThread;->mDensityCompatMode:Z -Landroid/app/ActivityThread;->mH:Landroid/app/ActivityThread$H; -Landroid/app/ActivityThread;->mInitialApplication:Landroid/app/Application; -Landroid/app/ActivityThread;->mInstrumentation:Landroid/app/Instrumentation; -Landroid/app/ActivityThread;->mInstrumentationAppDir:Ljava/lang/String; -Landroid/app/ActivityThread;->mInstrumentedAppDir:Ljava/lang/String; -Landroid/app/ActivityThread;->mLocalProviders:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mLocalProvidersByName:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mLooper:Landroid/os/Looper; -Landroid/app/ActivityThread;->mNumVisibleActivities:I -Landroid/app/ActivityThread;->mPackages:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mPendingConfiguration:Landroid/content/res/Configuration; -Landroid/app/ActivityThread;->mProviderMap:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mProviderRefCountMap:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mResourcePackages:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mResourcesManager:Landroid/app/ResourcesManager; -Landroid/app/ActivityThread;->mServices:Landroid/util/ArrayMap; -Landroid/app/ActivityThread;->mSystemContext:Landroid/app/ContextImpl; -Landroid/app/ActivityThread;->peekPackageInfo(Ljava/lang/String;Z)Landroid/app/LoadedApk; -Landroid/app/ActivityThread;->performNewIntents(Landroid/os/IBinder;Ljava/util/List;Z)V -Landroid/app/ActivityThread;->performStopActivity(Landroid/os/IBinder;ZLjava/lang/String;)V -Landroid/app/ActivityThread;->registerOnActivityPausedListener(Landroid/app/Activity;Landroid/app/OnActivityPausedListener;)V -Landroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z -Landroid/app/ActivityThread;->scheduleGcIdler()V -Landroid/app/ActivityThread;->sCurrentActivityThread:Landroid/app/ActivityThread; -Landroid/app/ActivityThread;->sendActivityResult(Landroid/os/IBinder;Ljava/lang/String;IILandroid/content/Intent;)V -Landroid/app/ActivityThread;->sMainThreadHandler:Landroid/os/Handler; -Landroid/app/ActivityThread;->sPackageManager:Landroid/content/pm/IPackageManager; -Landroid/app/ActivityThread;->startActivityNow(Landroid/app/Activity;Ljava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/Activity$NonConfigurationInstances;)Landroid/app/Activity; -Landroid/app/ActivityThread;->systemMain()Landroid/app/ActivityThread; -Landroid/app/ActivityThread;->unregisterOnActivityPausedListener(Landroid/app/Activity;Landroid/app/OnActivityPausedListener;)V -Landroid/app/admin/DeviceAdminInfo$PolicyInfo;->tag:Ljava/lang/String; -Landroid/app/admin/DeviceAdminInfo;->getUsedPolicies()Ljava/util/ArrayList; -Landroid/app/admin/DevicePolicyManager;->ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED:Ljava/lang/String; -Landroid/app/admin/DevicePolicyManager;->getActiveAdminsAsUser(I)Ljava/util/List; -Landroid/app/admin/DevicePolicyManager;->getCameraDisabled(Landroid/content/ComponentName;I)Z -Landroid/app/admin/DevicePolicyManager;->getCurrentFailedPasswordAttempts(I)I -Landroid/app/admin/DevicePolicyManager;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getMandatoryBackupTransport()Landroid/content/ComponentName; -Landroid/app/admin/DevicePolicyManager;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getMaximumTimeToLock(Landroid/content/ComponentName;I)J -Landroid/app/admin/DevicePolicyManager;->getPasswordHistoryLength(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLength(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLetters(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumLowerCase(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumNonLetter(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumNumeric(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumSymbols(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordMinimumUpperCase(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getPasswordQuality(Landroid/content/ComponentName;I)I -Landroid/app/admin/DevicePolicyManager;->getProfileOwnerAsUser(I)Landroid/content/ComponentName; -Landroid/app/admin/DevicePolicyManager;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;I)J -Landroid/app/admin/DevicePolicyManager;->getStorageEncryptionStatus(I)I -Landroid/app/admin/DevicePolicyManager;->getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;I)Ljava/util/List; -Landroid/app/admin/DevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z -Landroid/app/admin/DevicePolicyManager;->reportFailedPasswordAttempt(I)V -Landroid/app/admin/DevicePolicyManager;->reportSuccessfulPasswordAttempt(I)V -Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;Z)V -Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;ZI)V -Landroid/app/admin/DevicePolicyManager;->setActivePasswordState(Landroid/app/admin/PasswordMetrics;I)V -Landroid/app/admin/DevicePolicyManager;->setDefaultSmsApplication(Landroid/content/ComponentName;Ljava/lang/String;)V -Landroid/app/admin/DevicePolicyManager;->setGlobalProxy(Landroid/content/ComponentName;Ljava/net/Proxy;Ljava/util/List;)Landroid/content/ComponentName; -Landroid/app/admin/DevicePolicyManager;->throwIfParentInstance(Ljava/lang/String;)V Landroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager; Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I Landroid/app/admin/IDevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z -Landroid/app/admin/SecurityLog$SecurityEvent;-><init>([B)V -Landroid/app/AlarmManager;->FLAG_ALLOW_WHILE_IDLE_UNRESTRICTED:I -Landroid/app/AlarmManager;->FLAG_IDLE_UNTIL:I -Landroid/app/AlarmManager;->FLAG_STANDALONE:I -Landroid/app/AlarmManager;->FLAG_WAKE_FROM_IDLE:I -Landroid/app/AlarmManager;->mService:Landroid/app/IAlarmManager; -Landroid/app/AlarmManager;->set(IJJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;Landroid/os/WorkSource;)V -Landroid/app/AlarmManager;->WINDOW_EXACT:J -Landroid/app/AlarmManager;->WINDOW_HEURISTIC:J -Landroid/app/AlertDialog$Builder;->P:Lcom/android/internal/app/AlertController$AlertParams; -Landroid/app/AlertDialog$Builder;->setRecycleOnMeasureEnabled(Z)Landroid/app/AlertDialog$Builder; -Landroid/app/AlertDialog$Builder;->setView(Landroid/view/View;IIII)Landroid/app/AlertDialog$Builder; -Landroid/app/AlertDialog;->mAlert:Lcom/android/internal/app/AlertController; -Landroid/app/AppGlobals;->getInitialApplication()Landroid/app/Application; -Landroid/app/AppGlobals;->getInitialPackage()Ljava/lang/String; -Landroid/app/AppGlobals;->getPackageManager()Landroid/content/pm/IPackageManager; -Landroid/app/Application;->attach(Landroid/content/Context;)V -Landroid/app/Application;->collectActivityLifecycleCallbacks()[Ljava/lang/Object; -Landroid/app/Application;->dispatchActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -Landroid/app/Application;->dispatchActivityDestroyed(Landroid/app/Activity;)V -Landroid/app/Application;->dispatchActivityPaused(Landroid/app/Activity;)V -Landroid/app/Application;->dispatchActivityResumed(Landroid/app/Activity;)V -Landroid/app/Application;->dispatchActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V -Landroid/app/Application;->dispatchActivityStarted(Landroid/app/Activity;)V -Landroid/app/Application;->dispatchActivityStopped(Landroid/app/Activity;)V -Landroid/app/Application;->mActivityLifecycleCallbacks:Ljava/util/ArrayList; -Landroid/app/Application;->mAssistCallbacks:Ljava/util/ArrayList; -Landroid/app/Application;->mComponentCallbacks:Ljava/util/ArrayList; -Landroid/app/Application;->mLoadedApk:Landroid/app/LoadedApk; -Landroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders; -Landroid/app/ApplicationLoaders;->mLoaders:Landroid/util/ArrayMap; -Landroid/app/ApplicationPackageManager;-><init>(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;)V -Landroid/app/ApplicationPackageManager;->configurationChanged()V -Landroid/app/ApplicationPackageManager;->deletePackage(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;I)V -Landroid/app/ApplicationPackageManager;->getPackageCurrentVolume(Landroid/content/pm/ApplicationInfo;)Landroid/os/storage/VolumeInfo; -Landroid/app/ApplicationPackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V -Landroid/app/ApplicationPackageManager;->mPM:Landroid/content/pm/IPackageManager; -Landroid/app/ApplicationPackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z -Landroid/app/AppOpsManager$PackageOps;-><init>(Ljava/lang/String;ILjava/util/List;)V -Landroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I -Landroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I -Landroid/app/AppOpsManager;->mService:Lcom/android/internal/app/IAppOpsService; -Landroid/app/AppOpsManager;->noteOp(I)I -Landroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I -Landroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;)I -Landroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;)I -Landroid/app/AppOpsManager;->opToName(I)Ljava/lang/String; -Landroid/app/AppOpsManager;->opToSwitch(I)I -Landroid/app/AppOpsManager;->OP_ACCEPT_HANDOVER:I -Landroid/app/AppOpsManager;->OP_ACCESS_NOTIFICATIONS:I -Landroid/app/AppOpsManager;->OP_ACTIVATE_VPN:I -Landroid/app/AppOpsManager;->OP_ADD_VOICEMAIL:I -Landroid/app/AppOpsManager;->OP_ANSWER_PHONE_CALLS:I -Landroid/app/AppOpsManager;->OP_ASSIST_SCREENSHOT:I -Landroid/app/AppOpsManager;->OP_ASSIST_STRUCTURE:I -Landroid/app/AppOpsManager;->OP_AUDIO_ACCESSIBILITY_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_ALARM_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_BLUETOOTH_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_MASTER_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_MEDIA_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_NOTIFICATION_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_RING_VOLUME:I -Landroid/app/AppOpsManager;->OP_AUDIO_VOICE_VOLUME:I -Landroid/app/AppOpsManager;->OP_BIND_ACCESSIBILITY_SERVICE:I -Landroid/app/AppOpsManager;->OP_BLUETOOTH_SCAN:I -Landroid/app/AppOpsManager;->OP_BODY_SENSORS:I -Landroid/app/AppOpsManager;->OP_CALL_PHONE:I -Landroid/app/AppOpsManager;->OP_CAMERA:I -Landroid/app/AppOpsManager;->OP_CHANGE_WIFI_STATE:I -Landroid/app/AppOpsManager;->OP_COARSE_LOCATION:I -Landroid/app/AppOpsManager;->OP_FINE_LOCATION:I -Landroid/app/AppOpsManager;->OP_GET_ACCOUNTS:I -Landroid/app/AppOpsManager;->OP_GET_USAGE_STATS:I -Landroid/app/AppOpsManager;->OP_GPS:I -Landroid/app/AppOpsManager;->OP_INSTANT_APP_START_FOREGROUND:I -Landroid/app/AppOpsManager;->OP_MANAGE_IPSEC_TUNNELS:I -Landroid/app/AppOpsManager;->OP_MOCK_LOCATION:I -Landroid/app/AppOpsManager;->OP_MONITOR_HIGH_POWER_LOCATION:I -Landroid/app/AppOpsManager;->OP_MONITOR_LOCATION:I -Landroid/app/AppOpsManager;->OP_MUTE_MICROPHONE:I -Landroid/app/AppOpsManager;->OP_NEIGHBORING_CELLS:I -Landroid/app/AppOpsManager;->OP_NONE:I -Landroid/app/AppOpsManager;->OP_PICTURE_IN_PICTURE:I -Landroid/app/AppOpsManager;->OP_PLAY_AUDIO:I -Landroid/app/AppOpsManager;->OP_POST_NOTIFICATION:I -Landroid/app/AppOpsManager;->OP_PROCESS_OUTGOING_CALLS:I -Landroid/app/AppOpsManager;->OP_PROJECT_MEDIA:I -Landroid/app/AppOpsManager;->OP_READ_CALENDAR:I -Landroid/app/AppOpsManager;->OP_READ_CALL_LOG:I -Landroid/app/AppOpsManager;->OP_READ_CELL_BROADCASTS:I -Landroid/app/AppOpsManager;->OP_READ_CLIPBOARD:I -Landroid/app/AppOpsManager;->OP_READ_CONTACTS:I -Landroid/app/AppOpsManager;->OP_READ_EXTERNAL_STORAGE:I -Landroid/app/AppOpsManager;->OP_READ_ICC_SMS:I -Landroid/app/AppOpsManager;->OP_READ_PHONE_NUMBERS:I -Landroid/app/AppOpsManager;->OP_READ_PHONE_STATE:I -Landroid/app/AppOpsManager;->OP_READ_SMS:I -Landroid/app/AppOpsManager;->OP_RECEIVE_EMERGECY_SMS:I -Landroid/app/AppOpsManager;->OP_RECEIVE_MMS:I -Landroid/app/AppOpsManager;->OP_RECEIVE_SMS:I -Landroid/app/AppOpsManager;->OP_RECEIVE_WAP_PUSH:I -Landroid/app/AppOpsManager;->OP_REQUEST_DELETE_PACKAGES:I -Landroid/app/AppOpsManager;->OP_REQUEST_INSTALL_PACKAGES:I -Landroid/app/AppOpsManager;->OP_RUN_ANY_IN_BACKGROUND:I -Landroid/app/AppOpsManager;->OP_RUN_IN_BACKGROUND:I -Landroid/app/AppOpsManager;->OP_SEND_SMS:I -Landroid/app/AppOpsManager;->OP_START_FOREGROUND:I -Landroid/app/AppOpsManager;->OP_TAKE_AUDIO_FOCUS:I -Landroid/app/AppOpsManager;->OP_TAKE_MEDIA_BUTTONS:I -Landroid/app/AppOpsManager;->OP_TOAST_WINDOW:I -Landroid/app/AppOpsManager;->OP_TURN_SCREEN_ON:I -Landroid/app/AppOpsManager;->OP_USE_FINGERPRINT:I -Landroid/app/AppOpsManager;->OP_USE_SIP:I -Landroid/app/AppOpsManager;->OP_VIBRATE:I -Landroid/app/AppOpsManager;->OP_WAKE_LOCK:I -Landroid/app/AppOpsManager;->OP_WIFI_SCAN:I -Landroid/app/AppOpsManager;->OP_WRITE_CALENDAR:I -Landroid/app/AppOpsManager;->OP_WRITE_CALL_LOG:I -Landroid/app/AppOpsManager;->OP_WRITE_CLIPBOARD:I -Landroid/app/AppOpsManager;->OP_WRITE_CONTACTS:I -Landroid/app/AppOpsManager;->OP_WRITE_EXTERNAL_STORAGE:I -Landroid/app/AppOpsManager;->OP_WRITE_ICC_SMS:I -Landroid/app/AppOpsManager;->OP_WRITE_SETTINGS:I -Landroid/app/AppOpsManager;->OP_WRITE_SMS:I -Landroid/app/AppOpsManager;->OP_WRITE_WALLPAPER:I -Landroid/app/AppOpsManager;->resetAllModes()V -Landroid/app/AppOpsManager;->setRestriction(III[Ljava/lang/String;)V -Landroid/app/AppOpsManager;->sOpPerms:[Ljava/lang/String; -Landroid/app/AppOpsManager;->_NUM_OP:I -Landroid/app/assist/AssistContent;-><init>(Landroid/os/Parcel;)V -Landroid/app/assist/AssistContent;->mClipData:Landroid/content/ClipData; -Landroid/app/assist/AssistContent;->mExtras:Landroid/os/Bundle; -Landroid/app/assist/AssistContent;->mIntent:Landroid/content/Intent; -Landroid/app/assist/AssistContent;->mIsAppProvidedIntent:Z -Landroid/app/assist/AssistContent;->mStructuredData:Ljava/lang/String; -Landroid/app/assist/AssistContent;->mUri:Landroid/net/Uri; -Landroid/app/assist/AssistContent;->writeToParcelInternal(Landroid/os/Parcel;I)V -Landroid/app/backup/BackupDataInput$EntityHeader;->dataSize:I -Landroid/app/backup/BackupDataInput$EntityHeader;->key:Ljava/lang/String; -Landroid/app/backup/BackupDataInputStream;->dataSize:I -Landroid/app/backup/BackupDataInputStream;->key:Ljava/lang/String; -Landroid/app/backup/BackupDataOutput;->mBackupWriter:J -Landroid/app/backup/BackupHelperDispatcher$Header;->chunkSize:I -Landroid/app/backup/BackupHelperDispatcher$Header;->keyPrefix:Ljava/lang/String; -Landroid/app/backup/BackupManager;->checkServiceBinder()V -Landroid/app/backup/BackupManager;->sService:Landroid/app/backup/IBackupManager; -Landroid/app/backup/FileBackupHelperBase;->writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V -Landroid/app/backup/FullBackup;->backupToTar(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/backup/FullBackupDataOutput;)I -Landroid/app/backup/FullBackupDataOutput;-><init>(Landroid/os/ParcelFileDescriptor;)V -Landroid/app/backup/FullBackupDataOutput;->addSize(J)V -Landroid/app/backup/FullBackupDataOutput;->getData()Landroid/app/backup/BackupDataOutput; -Landroid/app/backup/FullBackupDataOutput;->mData:Landroid/app/backup/BackupDataOutput; Landroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager; Landroid/app/backup/IBackupManager;->acknowledgeFullBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V Landroid/app/backup/IBackupManager;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V @@ -448,85 +50,7 @@ Landroid/app/backup/IBackupManager;->setAutoRestore(Z)V Landroid/app/backup/IBackupManager;->setBackupEnabled(Z)V Landroid/app/backup/IFullBackupRestoreObserver$Stub;-><init>()V Landroid/app/backup/IRestoreObserver$Stub;-><init>()V -Landroid/app/ContentProviderHolder;-><init>(Landroid/content/pm/ProviderInfo;)V -Landroid/app/ContentProviderHolder;-><init>(Landroid/os/Parcel;)V -Landroid/app/ContentProviderHolder;->info:Landroid/content/pm/ProviderInfo; -Landroid/app/ContentProviderHolder;->noReleaseNeeded:Z -Landroid/app/ContentProviderHolder;->provider:Landroid/content/IContentProvider; -Landroid/app/ContextImpl$ApplicationContentResolver;->acquireProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/app/ContextImpl$ApplicationContentResolver;->mMainThread:Landroid/app/ActivityThread; -Landroid/app/ContextImpl;->createActivityContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;ILandroid/content/res/Configuration;)Landroid/app/ContextImpl; -Landroid/app/ContextImpl;->createAppContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;)Landroid/app/ContextImpl; -Landroid/app/ContextImpl;->createSystemContext(Landroid/app/ActivityThread;)Landroid/app/ContextImpl; -Landroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder; -Landroid/app/ContextImpl;->getDisplay()Landroid/view/Display; -Landroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl; -Landroid/app/ContextImpl;->getOuterContext()Landroid/content/Context; -Landroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File; -Landroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context; -Landroid/app/ContextImpl;->mBasePackageName:Ljava/lang/String; -Landroid/app/ContextImpl;->mClassLoader:Ljava/lang/ClassLoader; -Landroid/app/ContextImpl;->mContentResolver:Landroid/app/ContextImpl$ApplicationContentResolver; -Landroid/app/ContextImpl;->mFlags:I -Landroid/app/ContextImpl;->mMainThread:Landroid/app/ActivityThread; -Landroid/app/ContextImpl;->mOpPackageName:Ljava/lang/String; -Landroid/app/ContextImpl;->mOuterContext:Landroid/content/Context; -Landroid/app/ContextImpl;->mPackageInfo:Landroid/app/LoadedApk; -Landroid/app/ContextImpl;->mPackageManager:Landroid/content/pm/PackageManager; -Landroid/app/ContextImpl;->mPreferencesDir:Ljava/io/File; -Landroid/app/ContextImpl;->mResources:Landroid/content/res/Resources; -Landroid/app/ContextImpl;->mServiceCache:[Ljava/lang/Object; -Landroid/app/ContextImpl;->mSharedPrefsPaths:Landroid/util/ArrayMap; -Landroid/app/ContextImpl;->mTheme:Landroid/content/res/Resources$Theme; -Landroid/app/ContextImpl;->mThemeResource:I -Landroid/app/ContextImpl;->scheduleFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V -Landroid/app/ContextImpl;->setOuterContext(Landroid/content/Context;)V -Landroid/app/ContextImpl;->sSharedPrefsCache:Landroid/util/ArrayMap; -Landroid/app/DatePickerDialog;->mDatePicker:Landroid/widget/DatePicker; -Landroid/app/Dialog;->CANCEL:I -Landroid/app/Dialog;->dismissDialog()V -Landroid/app/Dialog;->mCancelMessage:Landroid/os/Message; -Landroid/app/Dialog;->mContext:Landroid/content/Context; -Landroid/app/Dialog;->mDismissMessage:Landroid/os/Message; -Landroid/app/Dialog;->mHandler:Landroid/os/Handler; -Landroid/app/Dialog;->mListenersHandler:Landroid/os/Handler; -Landroid/app/Dialog;->mOnKeyListener:Landroid/content/DialogInterface$OnKeyListener; -Landroid/app/Dialog;->mOwnerActivity:Landroid/app/Activity; -Landroid/app/Dialog;->mShowing:Z -Landroid/app/Dialog;->mShowMessage:Landroid/os/Message; -Landroid/app/Dialog;->mWindow:Landroid/view/Window; -Landroid/app/DialogFragment;->mBackStackId:I -Landroid/app/DialogFragment;->mDismissed:Z -Landroid/app/DialogFragment;->mShownByMe:Z -Landroid/app/DialogFragment;->mViewDestroyed:Z -Landroid/app/DialogFragment;->showAllowingStateLoss(Landroid/app/FragmentManager;Ljava/lang/String;)V -Landroid/app/DownloadManager$Query;->orderBy(Ljava/lang/String;I)Landroid/app/DownloadManager$Query; -Landroid/app/DownloadManager$Query;->setOnlyIncludeVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Query; -Landroid/app/DownloadManager$Request;->mUri:Landroid/net/Uri; -Landroid/app/DownloadManager;->getWhereArgsForIds([J)[Ljava/lang/String; -Landroid/app/DownloadManager;->getWhereClauseForIds([J)Ljava/lang/String; Landroid/app/DownloadManager;->restartDownload([J)V -Landroid/app/DownloadManager;->setAccessAllDownloads(Z)V -Landroid/app/DownloadManager;->setAccessFilename(Z)V -Landroid/app/DownloadManager;->UNDERLYING_COLUMNS:[Ljava/lang/String; -Landroid/app/Fragment;->mAdded:Z -Landroid/app/Fragment;->mChildFragmentManager:Landroid/app/FragmentManagerImpl; -Landroid/app/Fragment;->mFragmentId:I -Landroid/app/Fragment;->mFragmentManager:Landroid/app/FragmentManagerImpl; -Landroid/app/Fragment;->mHost:Landroid/app/FragmentHostCallback; -Landroid/app/Fragment;->mIndex:I -Landroid/app/Fragment;->mLoadersStarted:Z -Landroid/app/Fragment;->mSavedFragmentState:Landroid/os/Bundle; -Landroid/app/Fragment;->mView:Landroid/view/View; -Landroid/app/Fragment;->mWho:Ljava/lang/String; -Landroid/app/Fragment;->sClassMap:Landroid/util/ArrayMap; -Landroid/app/FragmentController;->mHost:Landroid/app/FragmentHostCallback; -Landroid/app/FragmentHostCallback;->mLoadersStarted:Z -Landroid/app/FragmentManagerImpl;->loadAnimator(Landroid/app/Fragment;IZI)Landroid/animation/Animator; -Landroid/app/FragmentManagerImpl;->mActive:Landroid/util/SparseArray; -Landroid/app/FragmentManagerImpl;->mAdded:Ljava/util/ArrayList; -Landroid/app/FragmentManagerImpl;->mStateSaved:Z -Landroid/app/FragmentManagerImpl;->noteStateNotSaved()V Landroid/app/IActivityController;->activityResuming(Ljava/lang/String;)Z Landroid/app/IActivityController;->activityStarting(Landroid/content/Intent;Ljava/lang/String;)Z Landroid/app/IActivityController;->appNotResponding(Ljava/lang/String;ILjava/lang/String;)I @@ -653,22 +177,11 @@ Landroid/app/INotificationManager;->areNotificationsEnabledForPackage(Ljava/lang Landroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V Landroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V Landroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V -Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V +Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V Landroid/app/INotificationManager;->getActiveNotifications(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification; Landroid/app/INotificationManager;->getHistoricalNotifications(Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification; Landroid/app/INotificationManager;->getZenMode()I Landroid/app/INotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig; -Landroid/app/Instrumentation;->callActivityOnNewIntent(Landroid/app/Activity;Lcom/android/internal/content/ReferrerIntent;)V -Landroid/app/Instrumentation;->checkStartActivityResult(ILjava/lang/Object;)V -Landroid/app/Instrumentation;->execStartActivities(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;[Landroid/content/Intent;Landroid/os/Bundle;)V -Landroid/app/Instrumentation;->execStartActivitiesAsUser(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;[Landroid/content/Intent;Landroid/os/Bundle;I)I -Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; -Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; -Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/Instrumentation$ActivityResult; -Landroid/app/Instrumentation;->execStartActivityAsCaller(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;ZI)Landroid/app/Instrumentation$ActivityResult; -Landroid/app/Instrumentation;->execStartActivityFromAppTask(Landroid/content/Context;Landroid/os/IBinder;Landroid/app/IAppTask;Landroid/content/Intent;Landroid/os/Bundle;)V -Landroid/app/IntentReceiverLeaked;-><init>(Ljava/lang/String;)V -Landroid/app/IntentService;->mServiceHandler:Landroid/app/IntentService$ServiceHandler; Landroid/app/IProcessObserver$Stub;-><init>()V Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; @@ -718,155 +231,10 @@ Landroid/app/job/IJobService$Stub;-><init>()V Landroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService; Landroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V Landroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V -Landroid/app/job/JobInfo$Builder;->setFlags(I)Landroid/app/job/JobInfo$Builder; -Landroid/app/job/JobInfo$Builder;->setPriority(I)Landroid/app/job/JobInfo$Builder; -Landroid/app/job/JobInfo;->flags:I -Landroid/app/job/JobInfo;->FLAG_WILL_BE_FOREGROUND:I -Landroid/app/job/JobInfo;->jobId:I -Landroid/app/job/JobInfo;->PRIORITY_FOREGROUND_APP:I -Landroid/app/job/JobInfo;->service:Landroid/content/ComponentName; -Landroid/app/job/JobParameters;->callback:Landroid/os/IBinder; -Landroid/app/job/JobParameters;->getCallback()Landroid/app/job/IJobCallback; -Landroid/app/job/JobParameters;->jobId:I -Landroid/app/job/JobWorkItem;-><init>(Landroid/os/Parcel;)V -Landroid/app/job/JobWorkItem;->mDeliveryCount:I -Landroid/app/job/JobWorkItem;->mGrants:Ljava/lang/Object; -Landroid/app/job/JobWorkItem;->mIntent:Landroid/content/Intent; -Landroid/app/job/JobWorkItem;->mWorkId:I -Landroid/app/KeyguardManager;->isDeviceSecure(I)Z -Landroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver; -Landroid/app/LoadedApk$ReceiverDispatcher;->getIntentReceiver()Landroid/content/BroadcastReceiver; -Landroid/app/LoadedApk$ReceiverDispatcher;->mContext:Landroid/content/Context; -Landroid/app/LoadedApk$ReceiverDispatcher;->mReceiver:Landroid/content/BroadcastReceiver; -Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;->mDispatcher:Ljava/lang/ref/WeakReference; -Landroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;I)V -Landroid/app/LoadedApk$ServiceDispatcher;->getIServiceConnection()Landroid/app/IServiceConnection; -Landroid/app/LoadedApk$ServiceDispatcher;->mConnection:Landroid/content/ServiceConnection; -Landroid/app/LoadedApk$ServiceDispatcher;->mContext:Landroid/content/Context; -Landroid/app/LoadedApk;->getAppDir()Ljava/lang/String; -Landroid/app/LoadedApk;->getApplicationInfo()Landroid/content/pm/ApplicationInfo; -Landroid/app/LoadedApk;->getAssets()Landroid/content/res/AssetManager; -Landroid/app/LoadedApk;->getClassLoader()Ljava/lang/ClassLoader; -Landroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; -Landroid/app/LoadedApk;->getDataDirFile()Ljava/io/File; -Landroid/app/LoadedApk;->getOverlayDirs()[Ljava/lang/String; -Landroid/app/LoadedApk;->getPackageName()Ljava/lang/String; -Landroid/app/LoadedApk;->getResDir()Ljava/lang/String; -Landroid/app/LoadedApk;->getResources()Landroid/content/res/Resources; -Landroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;I)Landroid/app/IServiceConnection; -Landroid/app/LoadedApk;->getSplitResDirs()[Ljava/lang/String; -Landroid/app/LoadedApk;->mActivityThread:Landroid/app/ActivityThread; -Landroid/app/LoadedApk;->makeApplication(ZLandroid/app/Instrumentation;)Landroid/app/Application; -Landroid/app/LoadedApk;->mAppDir:Ljava/lang/String; -Landroid/app/LoadedApk;->mApplication:Landroid/app/Application; -Landroid/app/LoadedApk;->mApplicationInfo:Landroid/content/pm/ApplicationInfo; -Landroid/app/LoadedApk;->mBaseClassLoader:Ljava/lang/ClassLoader; -Landroid/app/LoadedApk;->mClassLoader:Ljava/lang/ClassLoader; -Landroid/app/LoadedApk;->mDataDir:Ljava/lang/String; -Landroid/app/LoadedApk;->mDataDirFile:Ljava/io/File; -Landroid/app/LoadedApk;->mDisplayAdjustments:Landroid/view/DisplayAdjustments; -Landroid/app/LoadedApk;->mLibDir:Ljava/lang/String; -Landroid/app/LoadedApk;->mPackageName:Ljava/lang/String; -Landroid/app/LoadedApk;->mReceivers:Landroid/util/ArrayMap; -Landroid/app/LoadedApk;->mResDir:Ljava/lang/String; -Landroid/app/LoadedApk;->mResources:Landroid/content/res/Resources; -Landroid/app/LoadedApk;->mServices:Landroid/util/ArrayMap; -Landroid/app/LoadedApk;->mSplitResDirs:[Ljava/lang/String; -Landroid/app/LoadedApk;->rewriteRValues(Ljava/lang/ClassLoader;Ljava/lang/String;I)V -Landroid/app/LocalActivityManager;->mActivities:Ljava/util/Map; -Landroid/app/LocalActivityManager;->mActivityArray:Ljava/util/ArrayList; -Landroid/app/LocalActivityManager;->moveToState(Landroid/app/LocalActivityManager$LocalActivityRecord;I)V -Landroid/app/LocalActivityManager;->mParent:Landroid/app/Activity; -Landroid/app/LocalActivityManager;->mResumed:Landroid/app/LocalActivityManager$LocalActivityRecord; -Landroid/app/LocalActivityManager;->mSingleMode:Z -Landroid/app/NativeActivity;->hideIme(I)V -Landroid/app/NativeActivity;->loadNativeCode(Ljava/lang/String;Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;[BLjava/lang/ClassLoader;Ljava/lang/String;)J -Landroid/app/NativeActivity;->mNativeHandle:J -Landroid/app/NativeActivity;->setWindowFlags(II)V -Landroid/app/NativeActivity;->setWindowFormat(I)V -Landroid/app/NativeActivity;->showIme(I)V -Landroid/app/Notification$Action;->mIcon:Landroid/graphics/drawable/Icon; -Landroid/app/Notification$Builder;->getBaseLayoutResource()I -Landroid/app/Notification$Builder;->loadHeaderAppName()Ljava/lang/String; -Landroid/app/Notification$Builder;->mActions:Ljava/util/ArrayList; -Landroid/app/Notification$Builder;->makePublicContentView()Landroid/widget/RemoteViews; -Landroid/app/Notification$MediaStyle;->buildStyled(Landroid/app/Notification;)Landroid/app/Notification; -Landroid/app/Notification;-><init>(Landroid/content/Context;ILjava/lang/CharSequence;JLjava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/content/Intent;)V -Landroid/app/Notification;->allPendingIntents:Landroid/util/ArraySet; -Landroid/app/Notification;->isGroupChild()Z -Landroid/app/Notification;->isGroupSummary()Z -Landroid/app/Notification;->mChannelId:Ljava/lang/String; -Landroid/app/Notification;->mGroupKey:Ljava/lang/String; -Landroid/app/Notification;->mLargeIcon:Landroid/graphics/drawable/Icon; -Landroid/app/Notification;->mSmallIcon:Landroid/graphics/drawable/Icon; -Landroid/app/Notification;->setSmallIcon(Landroid/graphics/drawable/Icon;)V -Landroid/app/NotificationChannel;->mId:Ljava/lang/String; -Landroid/app/NotificationChannel;->setBlockableSystem(Z)V -Landroid/app/NotificationChannelGroup;->mId:Ljava/lang/String; -Landroid/app/NotificationManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V -Landroid/app/NotificationManager;->from(Landroid/content/Context;)Landroid/app/NotificationManager; -Landroid/app/NotificationManager;->getService()Landroid/app/INotificationManager; -Landroid/app/NotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig; -Landroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V -Landroid/app/NotificationManager;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V -Landroid/app/NotificationManager;->sService:Landroid/app/INotificationManager; Landroid/app/PackageDeleteObserver;-><init>()V Landroid/app/PackageInstallObserver;-><init>()V -Landroid/app/PackageInstallObserver;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent; -Landroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent; -Landroid/app/PendingIntent;->getIntent()Landroid/content/Intent; -Landroid/app/PendingIntent;->getTag(Ljava/lang/String;)Ljava/lang/String; -Landroid/app/PendingIntent;->isActivity()Z -Landroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V -Landroid/app/PictureInPictureArgs;-><init>()V -Landroid/app/PictureInPictureArgs;->setActions(Ljava/util/List;)V -Landroid/app/PictureInPictureArgs;->setAspectRatio(F)V -Landroid/app/Presentation;->createPresentationContext(Landroid/content/Context;Landroid/view/Display;I)Landroid/content/Context; -Landroid/app/ProgressDialog;->mMessageView:Landroid/widget/TextView; -Landroid/app/ProgressDialog;->mProgress:Landroid/widget/ProgressBar; -Landroid/app/ProgressDialog;->mProgressNumber:Landroid/widget/TextView; -Landroid/app/QueuedWork;->addFinisher(Ljava/lang/Runnable;)V -Landroid/app/QueuedWork;->getHandler()Landroid/os/Handler; -Landroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V -Landroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V -Landroid/app/QueuedWork;->sFinishers:Ljava/util/LinkedList; Landroid/app/ResourcesManager$ActivityResources;-><init>()V Landroid/app/ResourcesManager;-><init>()V -Landroid/app/ResourcesManager;->appendLibAssetForMainAssetPath(Ljava/lang/String;Ljava/lang/String;)V -Landroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;)Landroid/content/res/AssetManager; -Landroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager; -Landroid/app/ResourcesManager;->mActivityResourceReferences:Ljava/util/WeakHashMap; -Landroid/app/ResourcesManager;->mResConfiguration:Landroid/content/res/Configuration; -Landroid/app/ResourcesManager;->mResourceImpls:Landroid/util/ArrayMap; -Landroid/app/ResourcesManager;->mResourceReferences:Ljava/util/ArrayList; -Landroid/app/ResultInfo;-><init>(Ljava/lang/String;IILandroid/content/Intent;)V -Landroid/app/ResultInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/app/ResultInfo;->mData:Landroid/content/Intent; -Landroid/app/ResultInfo;->mRequestCode:I -Landroid/app/ResultInfo;->mResultWho:Ljava/lang/String; -Landroid/app/SearchableInfo$ActionKeyInfo;->getQueryActionMsg()Ljava/lang/String; -Landroid/app/SearchableInfo$ActionKeyInfo;->getSuggestActionMsg()Ljava/lang/String; -Landroid/app/SearchableInfo$ActionKeyInfo;->getSuggestActionMsgColumn()Ljava/lang/String; -Landroid/app/SearchableInfo;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/content/ComponentName;)V -Landroid/app/SearchableInfo;->findActionKey(I)Landroid/app/SearchableInfo$ActionKeyInfo; -Landroid/app/SearchableInfo;->getActivityContext(Landroid/content/Context;)Landroid/content/Context; -Landroid/app/SearchableInfo;->getIconId()I -Landroid/app/SearchableInfo;->getLabelId()I -Landroid/app/SearchableInfo;->getProviderContext(Landroid/content/Context;Landroid/content/Context;)Landroid/content/Context; -Landroid/app/SearchDialog;->isLandscapeMode(Landroid/content/Context;)Z -Landroid/app/SearchDialog;->launchQuerySearch()V -Landroid/app/SearchDialog;->launchQuerySearch(ILjava/lang/String;)V -Landroid/app/SearchDialog;->setWorking(Z)V -Landroid/app/SearchManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V -Landroid/app/SearchManager;->DISABLE_VOICE_SEARCH:Ljava/lang/String; -Landroid/app/SearchManager;->getSuggestions(Landroid/app/SearchableInfo;Ljava/lang/String;)Landroid/database/Cursor; -Landroid/app/SearchManager;->getSuggestions(Landroid/app/SearchableInfo;Ljava/lang/String;I)Landroid/database/Cursor; -Landroid/app/SearchManager;->getWebSearchActivity()Landroid/content/ComponentName; -Landroid/app/SearchManager;->isVisible()Z -Landroid/app/SearchManager;->launchAssist(Landroid/os/Bundle;)V -Landroid/app/SearchManager;->mSearchDialog:Landroid/app/SearchDialog; -Landroid/app/SearchManager;->startSearch(Ljava/lang/String;ZLandroid/content/ComponentName;Landroid/os/Bundle;ZLandroid/graphics/Rect;)V Landroid/app/servertransaction/ActivityResultItem;->mResultInfoList:Ljava/util/List; Landroid/app/servertransaction/ClientTransaction;->getActivityToken()Landroid/os/IBinder; Landroid/app/servertransaction/ClientTransaction;->getCallbacks()Ljava/util/List; @@ -875,95 +243,15 @@ Landroid/app/servertransaction/ClientTransaction;->mActivityCallbacks:Ljava/util Landroid/app/servertransaction/LaunchActivityItem;->mInfo:Landroid/content/pm/ActivityInfo; Landroid/app/servertransaction/LaunchActivityItem;->mIntent:Landroid/content/Intent; Landroid/app/servertransaction/NewIntentItem;->mIntents:Ljava/util/List; -Landroid/app/Service;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Ljava/lang/String;Landroid/os/IBinder;Landroid/app/Application;Ljava/lang/Object;)V -Landroid/app/Service;->mActivityManager:Landroid/app/IActivityManager; -Landroid/app/Service;->mApplication:Landroid/app/Application; -Landroid/app/Service;->mClassName:Ljava/lang/String; -Landroid/app/Service;->mStartCompatibility:Z -Landroid/app/Service;->mThread:Landroid/app/ActivityThread; -Landroid/app/Service;->mToken:Landroid/os/IBinder; -Landroid/app/Service;->setForeground(Z)V -Landroid/app/ServiceConnectionLeaked;-><init>(Ljava/lang/String;)V -Landroid/app/SharedPreferencesImpl;-><init>(Ljava/io/File;I)V -Landroid/app/SharedPreferencesImpl;->mFile:Ljava/io/File; -Landroid/app/SharedPreferencesImpl;->startLoadFromDisk()V -Landroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V -Landroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V -Landroid/app/StatusBarManager;->collapsePanels()V -Landroid/app/StatusBarManager;->disable(I)V -Landroid/app/StatusBarManager;->DISABLE_EXPAND:I -Landroid/app/StatusBarManager;->DISABLE_NONE:I -Landroid/app/StatusBarManager;->DISABLE_NOTIFICATION_TICKER:I -Landroid/app/StatusBarManager;->expandNotificationsPanel()V -Landroid/app/StatusBarManager;->expandSettingsPanel()V -Landroid/app/StatusBarManager;->expandSettingsPanel(Ljava/lang/String;)V -Landroid/app/StatusBarManager;->getService()Lcom/android/internal/statusbar/IStatusBarService; -Landroid/app/StatusBarManager;->mContext:Landroid/content/Context; -Landroid/app/StatusBarManager;->mToken:Landroid/os/IBinder; -Landroid/app/StatusBarManager;->setIconVisibility(Ljava/lang/String;Z)V -Landroid/app/TaskInfo;->lastActiveTime:J -Landroid/app/TaskInfo;->resizeMode:I -Landroid/app/TaskInfo;->stackId:I -Landroid/app/TaskInfo;->supportsSplitScreenMultiWindow:Z -Landroid/app/TaskInfo;->userId:I Landroid/app/TaskStackListener;-><init>()V -Landroid/app/TimePickerDialog;->mTimePicker:Landroid/widget/TimePicker; Landroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V -Landroid/app/trust/TrustManager;->reportUnlockAttempt(ZI)V -Landroid/app/UiAutomation;-><init>(Landroid/os/Looper;Landroid/app/IUiAutomationConnection;)V -Landroid/app/UiAutomation;->connect()V -Landroid/app/UiAutomation;->disconnect()V Landroid/app/UiAutomationConnection;-><init>()V -Landroid/app/UiModeManager;-><init>()V -Landroid/app/usage/ConfigurationStats;->mActivationCount:I -Landroid/app/usage/ConfigurationStats;->mBeginTimeStamp:J -Landroid/app/usage/ConfigurationStats;->mConfiguration:Landroid/content/res/Configuration; -Landroid/app/usage/ConfigurationStats;->mEndTimeStamp:J -Landroid/app/usage/ConfigurationStats;->mLastTimeActive:J -Landroid/app/usage/ConfigurationStats;->mTotalTimeActive:J Landroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager; Landroid/app/usage/IUsageStatsManager;->isAppInactive(Ljava/lang/String;I)Z Landroid/app/usage/IUsageStatsManager;->queryConfigurationStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; Landroid/app/usage/IUsageStatsManager;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; Landroid/app/usage/IUsageStatsManager;->setAppInactive(Ljava/lang/String;ZI)V -Landroid/app/usage/NetworkStatsManager;-><init>(Landroid/content/Context;)V -Landroid/app/usage/UsageEvents$Event;->mClass:Ljava/lang/String; -Landroid/app/usage/UsageEvents$Event;->mConfiguration:Landroid/content/res/Configuration; -Landroid/app/usage/UsageEvents$Event;->mEventType:I -Landroid/app/usage/UsageEvents$Event;->mPackage:Ljava/lang/String; -Landroid/app/usage/UsageEvents$Event;->mTimeStamp:J -Landroid/app/usage/UsageEvents;-><init>(Landroid/os/Parcel;)V -Landroid/app/usage/UsageEvents;->findStringIndex(Ljava/lang/String;)I -Landroid/app/usage/UsageEvents;->mEventCount:I -Landroid/app/usage/UsageEvents;->mEventsToWrite:Ljava/util/List; -Landroid/app/usage/UsageEvents;->mIndex:I -Landroid/app/usage/UsageEvents;->mParcel:Landroid/os/Parcel; -Landroid/app/usage/UsageEvents;->mStringPool:[Ljava/lang/String; -Landroid/app/usage/UsageEvents;->readEventFromParcel(Landroid/os/Parcel;Landroid/app/usage/UsageEvents$Event;)V -Landroid/app/usage/UsageEvents;->writeEventToParcel(Landroid/app/usage/UsageEvents$Event;Landroid/os/Parcel;I)V -Landroid/app/usage/UsageStats;->mBeginTimeStamp:J -Landroid/app/usage/UsageStats;->mEndTimeStamp:J -Landroid/app/usage/UsageStats;->mLastEvent:I -Landroid/app/usage/UsageStats;->mLastTimeUsed:J -Landroid/app/usage/UsageStats;->mLaunchCount:I -Landroid/app/usage/UsageStats;->mPackageName:Ljava/lang/String; -Landroid/app/usage/UsageStats;->mTotalTimeInForeground:J -Landroid/app/usage/UsageStatsManager;->mContext:Landroid/content/Context; -Landroid/app/usage/UsageStatsManager;->mService:Landroid/app/usage/IUsageStatsManager; -Landroid/app/usage/UsageStatsManager;->sEmptyResults:Landroid/app/usage/UsageEvents; Landroid/app/UserSwitchObserver;-><init>()V -Landroid/app/VrManager;->mService:Landroid/service/vr/IVrManager; -Landroid/app/WallpaperColors;->getColorHints()I -Landroid/app/WallpaperManager;->addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;I)V -Landroid/app/WallpaperManager;->getBitmap()Landroid/graphics/Bitmap; -Landroid/app/WallpaperManager;->getBitmap(Z)Landroid/graphics/Bitmap; -Landroid/app/WallpaperManager;->getIWallpaperManager()Landroid/app/IWallpaperManager; -Landroid/app/WallpaperManager;->getWallpaperColors(II)Landroid/app/WallpaperColors; -Landroid/app/WallpaperManager;->getWallpaperFile(II)Landroid/os/ParcelFileDescriptor; -Landroid/app/WallpaperManager;->openDefaultWallpaper(Landroid/content/Context;I)Ljava/io/InputStream; -Landroid/app/WallpaperManager;->setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;ZII)I -Landroid/app/WallpaperManager;->setWallpaperComponent(Landroid/content/ComponentName;I)Z -Landroid/app/WallpaperManager;->sGlobals:Landroid/app/WallpaperManager$Globals; Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; Landroid/bluetooth/IBluetooth$Stub$Proxy;->getConnectionState(Landroid/bluetooth/BluetoothDevice;)I Landroid/bluetooth/IBluetooth$Stub;-><init>()V @@ -1003,113 +291,8 @@ Landroid/bluetooth/IBluetoothManager;->unregisterStateChangeCallback(Landroid/bl Landroid/bluetooth/IBluetoothManagerCallback$Stub;-><init>()V Landroid/bluetooth/IBluetoothPbap$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetoothPbap; Landroid/bluetooth/IBluetoothStateChangeCallback$Stub;-><init>()V -Landroid/content/AsyncTaskLoader;->mExecutor:Ljava/util/concurrent/Executor; -Landroid/content/AsyncTaskLoader;->waitForLoader()V -Landroid/content/BroadcastReceiver$PendingResult;-><init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V -Landroid/content/BroadcastReceiver$PendingResult;->mAbortBroadcast:Z -Landroid/content/BroadcastReceiver$PendingResult;->mFinished:Z -Landroid/content/BroadcastReceiver$PendingResult;->mFlags:I -Landroid/content/BroadcastReceiver$PendingResult;->mInitialStickyHint:Z -Landroid/content/BroadcastReceiver$PendingResult;->mOrderedHint:Z -Landroid/content/BroadcastReceiver$PendingResult;->mResultCode:I -Landroid/content/BroadcastReceiver$PendingResult;->mResultData:Ljava/lang/String; -Landroid/content/BroadcastReceiver$PendingResult;->mResultExtras:Landroid/os/Bundle; -Landroid/content/BroadcastReceiver$PendingResult;->mSendingUser:I -Landroid/content/BroadcastReceiver$PendingResult;->mToken:Landroid/os/IBinder; -Landroid/content/BroadcastReceiver$PendingResult;->mType:I -Landroid/content/BroadcastReceiver;->getPendingResult()Landroid/content/BroadcastReceiver$PendingResult; -Landroid/content/BroadcastReceiver;->mPendingResult:Landroid/content/BroadcastReceiver$PendingResult; -Landroid/content/BroadcastReceiver;->setPendingResult(Landroid/content/BroadcastReceiver$PendingResult;)V -Landroid/content/ClipboardManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V -Landroid/content/ClipboardManager;->reportPrimaryClipChanged()V -Landroid/content/ClipData$Item;->mUri:Landroid/net/Uri; -Landroid/content/ClipData;->getIcon()Landroid/graphics/Bitmap; -Landroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V -Landroid/content/ComponentName;->printShortString(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V -Landroid/content/ContentProvider;->coerceToLocalContentProvider(Landroid/content/IContentProvider;)Landroid/content/ContentProvider; -Landroid/content/ContentProvider;->mAuthorities:[Ljava/lang/String; -Landroid/content/ContentProvider;->mAuthority:Ljava/lang/String; -Landroid/content/ContentProvider;->maybeAddUserId(Landroid/net/Uri;I)Landroid/net/Uri; -Landroid/content/ContentProvider;->mContext:Landroid/content/Context; -Landroid/content/ContentProvider;->mPathPermissions:[Landroid/content/pm/PathPermission; -Landroid/content/ContentProvider;->mReadPermission:Ljava/lang/String; -Landroid/content/ContentProvider;->mWritePermission:Ljava/lang/String; -Landroid/content/ContentProvider;->setAppOps(II)V -Landroid/content/ContentProviderClient;->mContentProvider:Landroid/content/IContentProvider; -Landroid/content/ContentProviderClient;->mPackageName:Ljava/lang/String; -Landroid/content/ContentProviderNative;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentProvider; -Landroid/content/ContentProviderOperation;->getType()I -Landroid/content/ContentProviderOperation;->mSelection:Ljava/lang/String; -Landroid/content/ContentProviderOperation;->mType:I -Landroid/content/ContentProviderOperation;->mUri:Landroid/net/Uri; -Landroid/content/ContentProviderOperation;->TYPE_DELETE:I -Landroid/content/ContentProviderOperation;->TYPE_INSERT:I -Landroid/content/ContentProviderOperation;->TYPE_UPDATE:I -Landroid/content/ContentResolver$OpenResourceIdResult;->id:I -Landroid/content/ContentResolver$OpenResourceIdResult;->r:Landroid/content/res/Resources; -Landroid/content/ContentResolver;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireUnstableProvider(Landroid/content/Context;Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->acquireUnstableProvider(Ljava/lang/String;)Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->getContentService()Landroid/content/IContentService; -Landroid/content/ContentResolver;->getPackageName()Ljava/lang/String; -Landroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult; -Landroid/content/ContentResolver;->getSyncStatus(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncStatusInfo; -Landroid/content/ContentResolver;->getSyncStatusAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Landroid/content/SyncStatusInfo; -Landroid/content/ContentResolver;->mContext:Landroid/content/Context; -Landroid/content/ContentResolver;->mPackageName:Ljava/lang/String; -Landroid/content/ContentResolver;->releaseProvider(Landroid/content/IContentProvider;)Z -Landroid/content/ContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z -Landroid/content/ContentResolver;->sContentService:Landroid/content/IContentService; -Landroid/content/ContentResolver;->SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS:I -Landroid/content/ContentResolver;->SYNC_OBSERVER_TYPE_STATUS:I -Landroid/content/ContentResolver;->takePersistableUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V -Landroid/content/ContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V -Landroid/content/ContentValues;-><init>(Ljava/util/HashMap;)V -Landroid/content/ContentValues;->mValues:Ljava/util/HashMap; -Landroid/content/Context;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z -Landroid/content/Context;->canStartActivityForResult()Z -Landroid/content/Context;->checkPermission(Ljava/lang/String;IILandroid/os/IBinder;)I -Landroid/content/Context;->COUNTRY_DETECTOR:Ljava/lang/String; -Landroid/content/Context;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context; -Landroid/content/Context;->ETHERNET_SERVICE:Ljava/lang/String; -Landroid/content/Context;->getBasePackageName()Ljava/lang/String; -Landroid/content/Context;->getDisplay()Landroid/view/Display; -Landroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File; -Landroid/content/Context;->getThemeResId()I -Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;I)V -Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;I)V -Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V -Landroid/content/Context;->startActivityForResult(Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)V -Landroid/content/Context;->STATUS_BAR_SERVICE:Ljava/lang/String; -Landroid/content/ContextWrapper;->createApplicationContext(Landroid/content/pm/ApplicationInfo;I)Landroid/content/Context; -Landroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String; -Landroid/content/ContextWrapper;->getDisplay()Landroid/view/Display; -Landroid/content/ContextWrapper;->mBase:Landroid/content/Context; -Landroid/content/ContextWrapper;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent; -Landroid/content/ContextWrapper;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V -Landroid/content/ContextWrapper;->startForegroundServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName; -Landroid/content/ContextWrapper;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName; -Landroid/content/CursorEntityIterator;-><init>(Landroid/database/Cursor;)V -Landroid/content/CursorLoader;->mCancellationSignal:Landroid/os/CancellationSignal; -Landroid/content/CursorLoader;->mObserver:Landroid/content/Loader$ForceLoadContentObserver; -Landroid/content/Entity;->mSubValues:Ljava/util/ArrayList; -Landroid/content/Entity;->mValues:Landroid/content/ContentValues; Landroid/content/IClipboard$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; -Landroid/content/IContentProvider;->bulkInsert(Ljava/lang/String;Landroid/net/Uri;[Landroid/content/ContentValues;)I -Landroid/content/IContentProvider;->call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle; -Landroid/content/IContentProvider;->delete(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I -Landroid/content/IContentProvider;->descriptor:Ljava/lang/String; -Landroid/content/IContentProvider;->insert(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; -Landroid/content/IContentProvider;->QUERY_TRANSACTION:I -Landroid/content/IContentProvider;->update(Ljava/lang/String;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I Landroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IContentService$Stub;-><init>()V Landroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService; @@ -1126,29 +309,6 @@ Landroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroi Landroid/content/IIntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V Landroid/content/IIntentSender$Stub;-><init>()V Landroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender; -Landroid/content/Intent;->ACTION_ALARM_CHANGED:Ljava/lang/String; -Landroid/content/Intent;->ACTION_USER_SWITCHED:Ljava/lang/String; -Landroid/content/Intent;->FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT:I -Landroid/content/Intent;->getExtra(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; -Landroid/content/Intent;->isExcludingStopped()Z -Landroid/content/Intent;->mExtras:Landroid/os/Bundle; -Landroid/content/Intent;->parseCommandArgs(Landroid/os/ShellCommand;Landroid/content/Intent$CommandOptionHandler;)Landroid/content/Intent; -Landroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V -Landroid/content/Intent;->printIntentArgsHelp(Ljava/io/PrintWriter;Ljava/lang/String;)V -Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/IBinder;)Landroid/content/Intent; -Landroid/content/Intent;->setAllowFds(Z)V -Landroid/content/Intent;->toInsecureString()Ljava/lang/String; -Landroid/content/IntentFilter;->hasDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)Z -Landroid/content/IntentFilter;->hasDataPath(Landroid/os/PatternMatcher;)Z -Landroid/content/IntentFilter;->hasDataSchemeSpecificPart(Landroid/os/PatternMatcher;)Z -Landroid/content/IntentFilter;->hasExactDataType(Ljava/lang/String;)Z -Landroid/content/IntentFilter;->isVerified()Z -Landroid/content/IntentFilter;->mActions:Ljava/util/ArrayList; -Landroid/content/IntentFilter;->mOrder:I -Landroid/content/IntentFilter;->setAutoVerify(Z)V -Landroid/content/IntentSender;-><init>(Landroid/content/IIntentSender;)V -Landroid/content/IntentSender;->getTarget()Landroid/content/IIntentSender; -Landroid/content/IntentSender;->mTarget:Landroid/content/IIntentSender; Landroid/content/IOnPrimaryClipChangedListener$Stub;-><init>()V Landroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener; Landroid/content/IRestrictionsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager; @@ -1174,38 +334,6 @@ Landroid/content/ISyncStatusObserver;->onStatusChanged(I)V Landroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager; Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map; Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo; -Landroid/content/om/OverlayInfo;->isEnabled()Z -Landroid/content/om/OverlayInfo;->packageName:Ljava/lang/String; -Landroid/content/om/OverlayInfo;->state:I -Landroid/content/om/OverlayInfo;->targetPackageName:Ljava/lang/String; -Landroid/content/pm/ActivityInfo;->activityInfoConfigJavaToNative(I)I -Landroid/content/pm/ActivityInfo;->FLAG_ALLOW_EMBEDDED:I -Landroid/content/pm/ActivityInfo;->FLAG_SHOW_FOR_ALL_USERS:I -Landroid/content/pm/ActivityInfo;->isResizeableMode(I)Z -Landroid/content/pm/ActivityInfo;->resizeMode:I -Landroid/content/pm/ActivityInfo;->supportsPictureInPicture()Z -Landroid/content/pm/ApplicationInfo$DisplayNameComparator;->mPM:Landroid/content/pm/PackageManager; -Landroid/content/pm/ApplicationInfo$DisplayNameComparator;->sCollator:Ljava/text/Collator; -Landroid/content/pm/ApplicationInfo;->disableCompatibilityMode()V -Landroid/content/pm/ApplicationInfo;->enabledSetting:I -Landroid/content/pm/ApplicationInfo;->fullBackupContent:I -Landroid/content/pm/ApplicationInfo;->getBaseResourcePath()Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->getCodePath()Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->hasRtlSupport()Z -Landroid/content/pm/ApplicationInfo;->installLocation:I -Landroid/content/pm/ApplicationInfo;->isForwardLocked()Z -Landroid/content/pm/ApplicationInfo;->isPackageUnavailable(Landroid/content/pm/PackageManager;)Z -Landroid/content/pm/ApplicationInfo;->nativeLibraryRootDir:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->primaryCpuAbi:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->resourceDirs:[Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->scanPublicSourceDir:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->scanSourceDir:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->secondaryCpuAbi:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->secondaryNativeLibraryDir:Ljava/lang/String; -Landroid/content/pm/ApplicationInfo;->versionCode:I -Landroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List; -Landroid/content/pm/BaseParceledListSlice;->writeParcelableCreator(Ljava/lang/Object;Landroid/os/Parcel;)V -Landroid/content/pm/ComponentInfo;->getComponentName()Landroid/content/ComponentName; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->onRemoveCompleted(Ljava/lang/String;Z)V @@ -1319,474 +447,12 @@ Landroid/content/pm/IPackageStatsObserver$Stub;->DESCRIPTOR:Ljava/lang/String; Landroid/content/pm/IPackageStatsObserver$Stub;->TRANSACTION_onGetStatsCompleted:I Landroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService; -Landroid/content/pm/LauncherActivityInfo;->mActivityInfo:Landroid/content/pm/ActivityInfo; -Landroid/content/pm/LauncherApps;->mPm:Landroid/content/pm/PackageManager; -Landroid/content/pm/LauncherApps;->mService:Landroid/content/pm/ILauncherApps; -Landroid/content/pm/LauncherApps;->startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)V -Landroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V -Landroid/content/pm/PackageInfo;->coreApp:Z -Landroid/content/pm/PackageInfo;->INSTALL_LOCATION_UNSPECIFIED:I -Landroid/content/pm/PackageInfo;->overlayTarget:Ljava/lang/String; -Landroid/content/pm/PackageInfoLite;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/content/pm/PackageInstaller$Session;->addProgress(F)V -Landroid/content/pm/PackageInstaller$SessionInfo;-><init>()V -Landroid/content/pm/PackageInstaller$SessionInfo;->active:Z -Landroid/content/pm/PackageInstaller$SessionInfo;->appIcon:Landroid/graphics/Bitmap; -Landroid/content/pm/PackageInstaller$SessionInfo;->appLabel:Ljava/lang/CharSequence; -Landroid/content/pm/PackageInstaller$SessionInfo;->appPackageName:Ljava/lang/String; -Landroid/content/pm/PackageInstaller$SessionInfo;->installerPackageName:Ljava/lang/String; -Landroid/content/pm/PackageInstaller$SessionInfo;->mode:I -Landroid/content/pm/PackageInstaller$SessionInfo;->progress:F -Landroid/content/pm/PackageInstaller$SessionInfo;->resolvedBaseCodePath:Ljava/lang/String; -Landroid/content/pm/PackageInstaller$SessionInfo;->sealed:Z -Landroid/content/pm/PackageInstaller$SessionInfo;->sessionId:I -Landroid/content/pm/PackageInstaller$SessionInfo;->sizeBytes:J -Landroid/content/pm/PackageInstaller$SessionParams;->appIcon:Landroid/graphics/Bitmap; -Landroid/content/pm/PackageInstaller$SessionParams;->appLabel:Ljava/lang/String; -Landroid/content/pm/PackageInstaller$SessionParams;->appPackageName:Ljava/lang/String; -Landroid/content/pm/PackageInstaller$SessionParams;->installFlags:I -Landroid/content/pm/PackageInstaller$SessionParams;->mode:I -Landroid/content/pm/PackageInstaller$SessionParams;->originatingUid:I -Landroid/content/pm/PackageInstaller$SessionParams;->sizeBytes:J -Landroid/content/pm/PackageItemInfo;->setForceSafeLabels(Z)V -Landroid/content/pm/PackageManager;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;III)V -Landroid/content/pm/PackageManager;->addPreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V -Landroid/content/pm/PackageManager;->buildRequestPermissionsIntent([Ljava/lang/String;)Landroid/content/Intent; -Landroid/content/pm/PackageManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/PackageManager;->clearCrossProfileIntentFilters(I)V -Landroid/content/pm/PackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/PackageManager;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/PackageManager;->deletePackage(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;I)V -Landroid/content/pm/PackageManager;->deletePackageAsUser(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;II)V -Landroid/content/pm/PackageManager;->deleteStatusToString(I)Ljava/lang/String; -Landroid/content/pm/PackageManager;->flushPackageRestrictionsAsUser(I)V -Landroid/content/pm/PackageManager;->freeStorage(JLandroid/content/IntentSender;)V -Landroid/content/pm/PackageManager;->freeStorage(Ljava/lang/String;JLandroid/content/IntentSender;)V -Landroid/content/pm/PackageManager;->freeStorageAndNotify(JLandroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/PackageManager;->freeStorageAndNotify(Ljava/lang/String;JLandroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/PackageManager;->getApplicationHiddenSettingAsUser(Ljava/lang/String;Landroid/os/UserHandle;)Z -Landroid/content/pm/PackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/PackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName; -Landroid/content/pm/PackageManager;->getKeySetByAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/KeySet; -Landroid/content/pm/PackageManager;->getMoveStatus(I)I -Landroid/content/pm/PackageManager;->getPackageCandidateVolumes(Landroid/content/pm/ApplicationInfo;)Ljava/util/List; -Landroid/content/pm/PackageManager;->getPackageCurrentVolume(Landroid/content/pm/ApplicationInfo;)Landroid/os/storage/VolumeInfo; -Landroid/content/pm/PackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; -Landroid/content/pm/PackageManager;->getPackageSizeInfo(Ljava/lang/String;Landroid/content/pm/IPackageStatsObserver;)V -Landroid/content/pm/PackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V -Landroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;I)I -Landroid/content/pm/PackageManager;->getPackageUidAsUser(Ljava/lang/String;II)I -Landroid/content/pm/PackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources; -Landroid/content/pm/PackageManager;->getSigningKeySet(Ljava/lang/String;)Landroid/content/pm/KeySet; -Landroid/content/pm/PackageManager;->getUidForSharedUser(Ljava/lang/String;)I -Landroid/content/pm/PackageManager;->getUserBadgeForDensity(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable; -Landroid/content/pm/PackageManager;->getUserBadgeForDensityNoBackground(Landroid/os/UserHandle;I)Landroid/graphics/drawable/Drawable; -Landroid/content/pm/PackageManager;->installExistingPackageAsUser(Ljava/lang/String;I)I -Landroid/content/pm/PackageManager;->installStatusToString(I)Ljava/lang/String; -Landroid/content/pm/PackageManager;->installStatusToString(ILjava/lang/String;)Ljava/lang/String; -Landroid/content/pm/PackageManager;->INSTALL_REPLACE_EXISTING:I -Landroid/content/pm/PackageManager;->isPackageAvailable(Ljava/lang/String;)Z -Landroid/content/pm/PackageManager;->isPackageSuspendedForUser(Ljava/lang/String;I)Z -Landroid/content/pm/PackageManager;->isSignedBy(Ljava/lang/String;Landroid/content/pm/KeySet;)Z -Landroid/content/pm/PackageManager;->isSignedByExactly(Ljava/lang/String;Landroid/content/pm/KeySet;)Z -Landroid/content/pm/PackageManager;->isUpgrade()Z -Landroid/content/pm/PackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; -Landroid/content/pm/PackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; -Landroid/content/pm/PackageManager;->movePackage(Ljava/lang/String;Landroid/os/storage/VolumeInfo;)I -Landroid/content/pm/PackageManager;->MOVE_EXTERNAL_MEDIA:I -Landroid/content/pm/PackageManager;->MOVE_INTERNAL:I -Landroid/content/pm/PackageManager;->NO_NATIVE_LIBRARIES:I -Landroid/content/pm/PackageManager;->queryBroadcastReceivers(Landroid/content/Intent;II)Ljava/util/List; -Landroid/content/pm/PackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List; -Landroid/content/pm/PackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List; -Landroid/content/pm/PackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List; -Landroid/content/pm/PackageManager;->queryIntentServicesAsUser(Landroid/content/Intent;II)Ljava/util/List; -Landroid/content/pm/PackageManager;->registerMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;Landroid/os/Handler;)V -Landroid/content/pm/PackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V -Landroid/content/pm/PackageManager;->replacePreferredActivityAsUser(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V -Landroid/content/pm/PackageManager;->resolveActivityAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo; -Landroid/content/pm/PackageManager;->resolveContentProviderAsUser(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo; -Landroid/content/pm/PackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZLandroid/os/UserHandle;)Z -Landroid/content/pm/PackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z -Landroid/content/pm/PackageManager;->unregisterMoveCallback(Landroid/content/pm/PackageManager$MoveCallback;)V -Landroid/content/pm/PackageParser$Activity;->info:Landroid/content/pm/ActivityInfo; -Landroid/content/pm/PackageParser$ActivityIntentInfo;->activity:Landroid/content/pm/PackageParser$Activity; -Landroid/content/pm/PackageParser$Component;->className:Ljava/lang/String; -Landroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName; -Landroid/content/pm/PackageParser$Component;->intents:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Component;->metaData:Landroid/os/Bundle; -Landroid/content/pm/PackageParser$Component;->owner:Landroid/content/pm/PackageParser$Package; -Landroid/content/pm/PackageParser$Instrumentation;->info:Landroid/content/pm/InstrumentationInfo; -Landroid/content/pm/PackageParser$IntentInfo;-><init>()V -Landroid/content/pm/PackageParser$IntentInfo;->banner:I -Landroid/content/pm/PackageParser$IntentInfo;->hasDefault:Z -Landroid/content/pm/PackageParser$IntentInfo;->icon:I -Landroid/content/pm/PackageParser$IntentInfo;->labelRes:I -Landroid/content/pm/PackageParser$IntentInfo;->logo:I -Landroid/content/pm/PackageParser$IntentInfo;->nonLocalizedLabel:Ljava/lang/CharSequence; -Landroid/content/pm/PackageParser$NewPermissionInfo;->name:Ljava/lang/String; -Landroid/content/pm/PackageParser$NewPermissionInfo;->sdkVersion:I -Landroid/content/pm/PackageParser$Package;-><init>(Ljava/lang/String;)V -Landroid/content/pm/PackageParser$Package;->activities:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->applicationInfo:Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/PackageParser$Package;->configPreferences:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->installLocation:I -Landroid/content/pm/PackageParser$Package;->instrumentation:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->mAppMetaData:Landroid/os/Bundle; -Landroid/content/pm/PackageParser$Package;->mExtras:Ljava/lang/Object; -Landroid/content/pm/PackageParser$Package;->mKeySetMapping:Landroid/util/ArrayMap; -Landroid/content/pm/PackageParser$Package;->mPreferredOrder:I -Landroid/content/pm/PackageParser$Package;->mSharedUserId:Ljava/lang/String; -Landroid/content/pm/PackageParser$Package;->mSharedUserLabel:I -Landroid/content/pm/PackageParser$Package;->mSigningDetails:Landroid/content/pm/PackageParser$SigningDetails; -Landroid/content/pm/PackageParser$Package;->mUpgradeKeySets:Landroid/util/ArraySet; -Landroid/content/pm/PackageParser$Package;->mVersionCode:I -Landroid/content/pm/PackageParser$Package;->mVersionName:Ljava/lang/String; -Landroid/content/pm/PackageParser$Package;->packageName:Ljava/lang/String; -Landroid/content/pm/PackageParser$Package;->permissionGroups:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->permissions:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->protectedBroadcasts:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->providers:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->receivers:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->reqFeatures:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->requestedPermissions:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->services:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->setPackageName(Ljava/lang/String;)V -Landroid/content/pm/PackageParser$Package;->usesLibraries:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$Package;->usesLibraryFiles:[Ljava/lang/String; -Landroid/content/pm/PackageParser$Package;->usesOptionalLibraries:Ljava/util/ArrayList; -Landroid/content/pm/PackageParser$PackageLite;->installLocation:I -Landroid/content/pm/PackageParser$PackageLite;->packageName:Ljava/lang/String; -Landroid/content/pm/PackageParser$Permission;-><init>(Landroid/content/pm/PackageParser$Package;Landroid/content/pm/PermissionInfo;)V -Landroid/content/pm/PackageParser$Permission;->group:Landroid/content/pm/PackageParser$PermissionGroup; -Landroid/content/pm/PackageParser$Permission;->info:Landroid/content/pm/PermissionInfo; -Landroid/content/pm/PackageParser$Permission;->tree:Z -Landroid/content/pm/PackageParser$PermissionGroup;->info:Landroid/content/pm/PermissionGroupInfo; -Landroid/content/pm/PackageParser$Provider;-><init>(Landroid/content/pm/PackageParser$Provider;)V -Landroid/content/pm/PackageParser$Provider;->info:Landroid/content/pm/ProviderInfo; -Landroid/content/pm/PackageParser$Provider;->syncable:Z -Landroid/content/pm/PackageParser$ProviderIntentInfo;->provider:Landroid/content/pm/PackageParser$Provider; -Landroid/content/pm/PackageParser$Service;->info:Landroid/content/pm/ServiceInfo; -Landroid/content/pm/PackageParser$ServiceIntentInfo;->service:Landroid/content/pm/PackageParser$Service; -Landroid/content/pm/PackageParser$SigningDetails$Builder;-><init>()V -Landroid/content/pm/PackageParser$SigningDetails$Builder;->build()Landroid/content/pm/PackageParser$SigningDetails; -Landroid/content/pm/PackageParser$SigningDetails$Builder;->setPastSigningCertificates([Landroid/content/pm/Signature;)Landroid/content/pm/PackageParser$SigningDetails$Builder; -Landroid/content/pm/PackageParser$SigningDetails$Builder;->setPastSigningCertificatesFlags([I)Landroid/content/pm/PackageParser$SigningDetails$Builder; -Landroid/content/pm/PackageParser$SigningDetails$Builder;->setSignatures([Landroid/content/pm/Signature;)Landroid/content/pm/PackageParser$SigningDetails$Builder; -Landroid/content/pm/PackageParser$SigningDetails$Builder;->setSignatureSchemeVersion(I)Landroid/content/pm/PackageParser$SigningDetails$Builder; -Landroid/content/pm/PackageParser$SigningDetails;->signatures:[Landroid/content/pm/Signature; -Landroid/content/pm/PackageParser;-><init>()V -Landroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Ljava/io/File;Z)V -Landroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Z)V -Landroid/content/pm/PackageParser;->generateActivityInfo(Landroid/content/pm/PackageParser$Activity;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ActivityInfo; -Landroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/PackageParser$Package;ILandroid/content/pm/PackageUserState;)Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/PackageParser;->generateApplicationInfo(Landroid/content/pm/PackageParser$Package;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/PackageParser;->generateInstrumentationInfo(Landroid/content/pm/PackageParser$Instrumentation;I)Landroid/content/pm/InstrumentationInfo; -Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;)Landroid/content/pm/PackageInfo; -Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo; -Landroid/content/pm/PackageParser;->generatePermissionGroupInfo(Landroid/content/pm/PackageParser$PermissionGroup;I)Landroid/content/pm/PermissionGroupInfo; -Landroid/content/pm/PackageParser;->generatePermissionInfo(Landroid/content/pm/PackageParser$Permission;I)Landroid/content/pm/PermissionInfo; -Landroid/content/pm/PackageParser;->generateProviderInfo(Landroid/content/pm/PackageParser$Provider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo; -Landroid/content/pm/PackageParser;->generateServiceInfo(Landroid/content/pm/PackageParser$Service;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ServiceInfo; -Landroid/content/pm/PackageParser;->mCallback:Landroid/content/pm/PackageParser$Callback; -Landroid/content/pm/PackageParser;->NEW_PERMISSIONS:[Landroid/content/pm/PackageParser$NewPermissionInfo; -Landroid/content/pm/PackageParser;->parseBaseApk(Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package; -Landroid/content/pm/PackageParser;->parseBaseApplication(Landroid/content/pm/PackageParser$Package;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Z -Landroid/content/pm/PackageParser;->parseMonolithicPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; -Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; -Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package; -Landroid/content/pm/PackageParser;->parsePackageLite(Ljava/io/File;I)Landroid/content/pm/PackageParser$PackageLite; -Landroid/content/pm/PackageParser;->setCompatibilityModeEnabled(Z)V -Landroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V -Landroid/content/pm/PackageStats;->userHandle:I -Landroid/content/pm/PackageUserState;-><init>()V -Landroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V -Landroid/content/pm/ParceledListSlice;->CREATOR:Landroid/os/Parcelable$ClassLoaderCreator; -Landroid/content/pm/ParceledListSlice;->writeParcelableCreator(Landroid/os/Parcelable;Landroid/os/Parcel;)V -Landroid/content/pm/PermissionInfo;->protectionToString(I)Ljava/lang/String; -Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->componentName:Landroid/content/ComponentName; -Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->type:Ljava/lang/Object; -Landroid/content/pm/RegisteredServicesCache$ServiceInfo;->uid:I -Landroid/content/pm/RegisteredServicesCache;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/XmlSerializerAndParser;)V -Landroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo; -Landroid/content/pm/ResolveInfo;->handleAllWebDataURI:Z -Landroid/content/pm/ResolveInfo;->system:Z -Landroid/content/pm/ResolveInfo;->targetUserId:I -Landroid/content/pm/ShortcutInfo;->getIcon()Landroid/graphics/drawable/Icon; -Landroid/content/pm/ShortcutManager;->mService:Landroid/content/pm/IShortcutService; -Landroid/content/pm/Signature;->getPublicKey()Ljava/security/PublicKey; -Landroid/content/pm/UserInfo;-><init>(ILjava/lang/String;I)V -Landroid/content/pm/UserInfo;-><init>(ILjava/lang/String;Ljava/lang/String;I)V -Landroid/content/pm/UserInfo;->creationTime:J -Landroid/content/pm/UserInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/content/pm/UserInfo;->flags:I -Landroid/content/pm/UserInfo;->FLAG_PRIMARY:I -Landroid/content/pm/UserInfo;->getUserHandle()Landroid/os/UserHandle; -Landroid/content/pm/UserInfo;->guestToRemove:Z -Landroid/content/pm/UserInfo;->iconPath:Ljava/lang/String; -Landroid/content/pm/UserInfo;->id:I -Landroid/content/pm/UserInfo;->isAdmin()Z -Landroid/content/pm/UserInfo;->isEnabled()Z -Landroid/content/pm/UserInfo;->isGuest()Z -Landroid/content/pm/UserInfo;->isManagedProfile()Z -Landroid/content/pm/UserInfo;->isPrimary()Z -Landroid/content/pm/UserInfo;->isRestricted()Z -Landroid/content/pm/UserInfo;->lastLoggedInTime:J -Landroid/content/pm/UserInfo;->name:Ljava/lang/String; -Landroid/content/pm/UserInfo;->partial:Z -Landroid/content/pm/UserInfo;->profileGroupId:I -Landroid/content/pm/UserInfo;->serialNumber:I -Landroid/content/pm/VerifierInfo;-><init>(Ljava/lang/String;Ljava/security/PublicKey;)V -Landroid/content/pm/XmlSerializerAndParser;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/Object; -Landroid/content/pm/XmlSerializerAndParser;->writeAsXml(Ljava/lang/Object;Lorg/xmlpull/v1/XmlSerializer;)V -Landroid/content/res/ApkAssets;->getAssetPath()Ljava/lang/String; -Landroid/content/res/AssetFileDescriptor;->mFd:Landroid/os/ParcelFileDescriptor; -Landroid/content/res/AssetFileDescriptor;->mLength:J -Landroid/content/res/AssetFileDescriptor;->mStartOffset:J -Landroid/content/res/AssetManager$AssetInputStream;->getAssetInt()I -Landroid/content/res/AssetManager$AssetInputStream;->getNativeAsset()J -Landroid/content/res/AssetManager;-><init>()V -Landroid/content/res/AssetManager;->addAssetPath(Ljava/lang/String;)I -Landroid/content/res/AssetManager;->addAssetPathAsSharedLibrary(Ljava/lang/String;)I -Landroid/content/res/AssetManager;->addOverlayPath(Ljava/lang/String;)I -Landroid/content/res/AssetManager;->applyStyle(JIILandroid/content/res/XmlBlock$Parser;[IJJ)V -Landroid/content/res/AssetManager;->createTheme()J -Landroid/content/res/AssetManager;->getApkAssets()[Landroid/content/res/ApkAssets; -Landroid/content/res/AssetManager;->getAssignedPackageIdentifiers()Landroid/util/SparseArray; -Landroid/content/res/AssetManager;->getGlobalAssetCount()I -Landroid/content/res/AssetManager;->getGlobalAssetManagerCount()I -Landroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence; -Landroid/content/res/AssetManager;->getResourceEntryName(I)Ljava/lang/String; -Landroid/content/res/AssetManager;->getResourceIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I -Landroid/content/res/AssetManager;->getResourceName(I)Ljava/lang/String; -Landroid/content/res/AssetManager;->getResourcePackageName(I)Ljava/lang/String; -Landroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence; -Landroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String; -Landroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z -Landroid/content/res/AssetManager;->getSystem()Landroid/content/res/AssetManager; -Landroid/content/res/AssetManager;->isUpToDate()Z -Landroid/content/res/AssetManager;->mObject:J -Landroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;)Ljava/io/InputStream; -Landroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream; -Landroid/content/res/AssetManager;->openNonAsset(Ljava/lang/String;)Ljava/io/InputStream; -Landroid/content/res/AssetManager;->openNonAsset(Ljava/lang/String;I)Ljava/io/InputStream; -Landroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z -Landroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z -Landroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V -Landroid/content/res/AssetManager;->sSystem:Landroid/content/res/AssetManager; -Landroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V -Landroid/content/res/ColorStateList;-><init>()V -Landroid/content/res/ColorStateList;->canApplyTheme()Z -Landroid/content/res/ColorStateList;->getColors()[I -Landroid/content/res/ColorStateList;->getStates()[[I -Landroid/content/res/ColorStateList;->mColors:[I -Landroid/content/res/ColorStateList;->mDefaultColor:I -Landroid/content/res/ColorStateList;->mFactory:Landroid/content/res/ColorStateList$ColorStateListFactory; -Landroid/content/res/ColorStateList;->mStateSpecs:[[I -Landroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList; -Landroid/content/res/ColorStateList;->onColorsChanged()V -Landroid/content/res/CompatibilityInfo$Translator;->applicationInvertedScale:F -Landroid/content/res/CompatibilityInfo$Translator;->applicationScale:F -Landroid/content/res/CompatibilityInfo$Translator;->getTranslatedContentInsets(Landroid/graphics/Rect;)Landroid/graphics/Rect; -Landroid/content/res/CompatibilityInfo$Translator;->translateCanvas(Landroid/graphics/Canvas;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateEventInScreenToAppWindow(Landroid/view/MotionEvent;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateRectInAppWindowToScreen(Landroid/graphics/Rect;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateRectInScreenToAppWindow(Landroid/graphics/Rect;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateRectInScreenToAppWinFrame(Landroid/graphics/Rect;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateRegionInWindowToScreen(Landroid/graphics/Region;)V -Landroid/content/res/CompatibilityInfo$Translator;->translateWindowLayout(Landroid/view/WindowManager$LayoutParams;)V -Landroid/content/res/CompatibilityInfo;-><init>()V -Landroid/content/res/CompatibilityInfo;-><init>(Landroid/content/pm/ApplicationInfo;IIZ)V -Landroid/content/res/CompatibilityInfo;->applicationScale:F -Landroid/content/res/CompatibilityInfo;->computeCompatibleScaling(Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;)F -Landroid/content/res/CompatibilityInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/content/res/CompatibilityInfo;->DEFAULT_COMPATIBILITY_INFO:Landroid/content/res/CompatibilityInfo; -Landroid/content/res/CompatibilityInfo;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator; -Landroid/content/res/CompatibilityInfo;->isScalingRequired()Z -Landroid/content/res/CompatibilityInfo;->supportsScreen()Z -Landroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration; -Landroid/content/res/Configuration;->makeDefault()V -Landroid/content/res/Configuration;->resourceQualifierString(Landroid/content/res/Configuration;)Ljava/lang/String; -Landroid/content/res/Configuration;->seq:I -Landroid/content/res/Configuration;->userSetLocale:Z Landroid/content/res/ConfigurationBoundResourceCache;-><init>()V Landroid/content/res/DrawableCache;-><init>()V -Landroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; -Landroid/content/res/ObbInfo;->salt:[B -Landroid/content/res/Resources$Theme;->mThemeImpl:Landroid/content/res/ResourcesImpl$ThemeImpl; -Landroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray; -Landroid/content/res/Resources;-><init>()V -Landroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V -Landroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; -Landroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments; -Landroid/content/res/Resources;->getDrawableInflater()Landroid/graphics/drawable/DrawableInflater; -Landroid/content/res/Resources;->getFloat(I)F -Landroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl; -Landroid/content/res/Resources;->getPreloadedDrawables()Landroid/util/LongSparseArray; -Landroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; -Landroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser; -Landroid/content/res/Resources;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser; -Landroid/content/res/Resources;->mClassLoader:Ljava/lang/ClassLoader; -Landroid/content/res/Resources;->mDrawableInflater:Landroid/graphics/drawable/DrawableInflater; -Landroid/content/res/Resources;->mResourcesImpl:Landroid/content/res/ResourcesImpl; -Landroid/content/res/Resources;->mSystem:Landroid/content/res/Resources; -Landroid/content/res/Resources;->mTmpValue:Landroid/util/TypedValue; -Landroid/content/res/Resources;->mTypedArrayPool:Landroid/util/Pools$SynchronizedPool; -Landroid/content/res/Resources;->selectDefaultTheme(II)I -Landroid/content/res/Resources;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V -Landroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V -Landroid/content/res/Resources;->updateSystemConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V -Landroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V -Landroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager; -Landroid/content/res/ResourcesImpl;->getDisplayMetrics()Landroid/util/DisplayMetrics; -Landroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V -Landroid/content/res/ResourcesImpl;->mAccessLock:Ljava/lang/Object; -Landroid/content/res/ResourcesImpl;->mAnimatorCache:Landroid/content/res/ConfigurationBoundResourceCache; -Landroid/content/res/ResourcesImpl;->mAssets:Landroid/content/res/AssetManager; -Landroid/content/res/ResourcesImpl;->mColorDrawableCache:Landroid/content/res/DrawableCache; -Landroid/content/res/ResourcesImpl;->mConfiguration:Landroid/content/res/Configuration; -Landroid/content/res/ResourcesImpl;->mDrawableCache:Landroid/content/res/DrawableCache; -Landroid/content/res/ResourcesImpl;->mPreloading:Z -Landroid/content/res/ResourcesImpl;->mStateListAnimatorCache:Landroid/content/res/ConfigurationBoundResourceCache; -Landroid/content/res/ResourcesImpl;->sPreloadedColorDrawables:Landroid/util/LongSparseArray; -Landroid/content/res/ResourcesImpl;->sPreloadedComplexColors:Landroid/util/LongSparseArray; -Landroid/content/res/ResourcesImpl;->sPreloadedDrawables:[Landroid/util/LongSparseArray; -Landroid/content/res/ResourcesImpl;->TRACE_FOR_MISS_PRELOAD:Z -Landroid/content/res/ResourcesImpl;->TRACE_FOR_PRELOAD:Z -Landroid/content/res/ResourcesKey;-><init>(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;)V -Landroid/content/res/ResourcesKey;->mResDir:Ljava/lang/String; -Landroid/content/res/ResourcesKey;->mSplitResDirs:[Ljava/lang/String; -Landroid/content/res/StringBlock;-><init>(JZ)V -Landroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence; -Landroid/content/res/ThemedResourceCache;->mThemedEntries:Landroid/util/ArrayMap; -Landroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V -Landroid/content/res/TypedArray;->extractThemeAttrs()[I -Landroid/content/res/TypedArray;->extractThemeAttrs([I)[I -Landroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String; -Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z -Landroid/content/res/TypedArray;->mAssets:Landroid/content/res/AssetManager; -Landroid/content/res/TypedArray;->mData:[I -Landroid/content/res/TypedArray;->mIndices:[I -Landroid/content/res/TypedArray;->mLength:I -Landroid/content/res/TypedArray;->mMetrics:Landroid/util/DisplayMetrics; -Landroid/content/res/TypedArray;->mRecycled:Z -Landroid/content/res/TypedArray;->mResources:Landroid/content/res/Resources; -Landroid/content/res/TypedArray;->mTheme:Landroid/content/res/Resources$Theme; -Landroid/content/res/TypedArray;->mValue:Landroid/util/TypedValue; -Landroid/content/res/TypedArray;->mXml:Landroid/content/res/XmlBlock$Parser; -Landroid/content/res/XmlBlock$Parser;->mBlock:Landroid/content/res/XmlBlock; -Landroid/content/res/XmlBlock$Parser;->mParseState:J -Landroid/content/res/XmlBlock;-><init>([B)V -Landroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser; -Landroid/content/RestrictionsManager;->mService:Landroid/content/IRestrictionsManager; -Landroid/content/SearchRecentSuggestionsProvider;->mSuggestionProjection:[Ljava/lang/String; -Landroid/content/SyncAdaptersCache;-><init>(Landroid/content/Context;)V -Landroid/content/SyncAdapterType;-><init>(Ljava/lang/String;Ljava/lang/String;)V -Landroid/content/SyncAdapterType;->allowParallelSyncs:Z -Landroid/content/SyncAdapterType;->isAlwaysSyncable:Z -Landroid/content/SyncAdapterType;->settingsActivity:Ljava/lang/String; -Landroid/content/SyncAdapterType;->supportsUploading:Z -Landroid/content/SyncAdapterType;->userVisible:Z -Landroid/content/SyncContext;-><init>(Landroid/content/ISyncContext;)V -Landroid/content/SyncContext;->setStatusText(Ljava/lang/String;)V -Landroid/content/SyncInfo;-><init>(ILandroid/accounts/Account;Ljava/lang/String;J)V -Landroid/content/SyncInfo;-><init>(Landroid/os/Parcel;)V -Landroid/content/SyncInfo;->authorityId:I -Landroid/content/SyncInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/content/SyncRequest;->mAccountToSync:Landroid/accounts/Account; -Landroid/content/SyncRequest;->mAuthority:Ljava/lang/String; -Landroid/content/SyncRequest;->mExtras:Landroid/os/Bundle; -Landroid/content/SyncRequest;->mIsPeriodic:Z -Landroid/content/SyncRequest;->mSyncRunTimeSecs:J -Landroid/content/SyncStatusInfo;-><init>(I)V -Landroid/content/SyncStatusInfo;-><init>(Landroid/os/Parcel;)V -Landroid/content/SyncStatusInfo;->authorityId:I -Landroid/content/SyncStatusInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/content/SyncStatusInfo;->ensurePeriodicSyncTimeSize(I)V -Landroid/content/SyncStatusInfo;->getLastFailureMesgAsInt(I)I -Landroid/content/SyncStatusInfo;->getPeriodicSyncTime(I)J -Landroid/content/SyncStatusInfo;->initialFailureTime:J -Landroid/content/SyncStatusInfo;->initialize:Z -Landroid/content/SyncStatusInfo;->lastFailureMesg:Ljava/lang/String; -Landroid/content/SyncStatusInfo;->lastFailureSource:I -Landroid/content/SyncStatusInfo;->lastFailureTime:J -Landroid/content/SyncStatusInfo;->lastSuccessSource:I -Landroid/content/SyncStatusInfo;->lastSuccessTime:J -Landroid/content/SyncStatusInfo;->pending:Z -Landroid/content/SyncStatusInfo;->periodicSyncTimes:Ljava/util/ArrayList; -Landroid/content/SyncStatusInfo;->removePeriodicSyncTime(I)V -Landroid/content/SyncStatusInfo;->setPeriodicSyncTime(IJ)V Landroid/content/UndoManager;-><init>()V -Landroid/content/UndoManager;->addOperation(Landroid/content/UndoOperation;I)V -Landroid/content/UndoManager;->beginUpdate(Ljava/lang/CharSequence;)V -Landroid/content/UndoManager;->commitState(Landroid/content/UndoOwner;)I -Landroid/content/UndoManager;->countRedos([Landroid/content/UndoOwner;)I -Landroid/content/UndoManager;->countUndos([Landroid/content/UndoOwner;)I -Landroid/content/UndoManager;->endUpdate()V -Landroid/content/UndoManager;->forgetRedos([Landroid/content/UndoOwner;I)I -Landroid/content/UndoManager;->forgetUndos([Landroid/content/UndoOwner;I)I -Landroid/content/UndoManager;->getLastOperation(Ljava/lang/Class;Landroid/content/UndoOwner;I)Landroid/content/UndoOperation; -Landroid/content/UndoManager;->getOwner(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/UndoOwner; -Landroid/content/UndoManager;->isInUndo()Z -Landroid/content/UndoManager;->redo([Landroid/content/UndoOwner;I)I -Landroid/content/UndoManager;->restoreInstanceState(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V -Landroid/content/UndoManager;->saveInstanceState(Landroid/os/Parcel;)V -Landroid/content/UndoManager;->setUndoLabel(Ljava/lang/CharSequence;)V -Landroid/content/UndoManager;->undo([Landroid/content/UndoOwner;I)I -Landroid/content/UndoOperation;-><init>(Landroid/content/UndoOwner;)V -Landroid/content/UndoOperation;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V -Landroid/content/UriMatcher;->mChildren:Ljava/util/ArrayList; -Landroid/content/UriMatcher;->mText:Ljava/lang/String; -Landroid/database/AbstractCursor;->mExtras:Landroid/os/Bundle; -Landroid/database/AbstractCursor;->mNotifyUri:Landroid/net/Uri; -Landroid/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V -Landroid/database/AbstractWindowedCursor;->closeWindow()V -Landroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V -Landroid/database/ContentObserver;->releaseContentObserver()Landroid/database/IContentObserver; -Landroid/database/CursorWindow;->mWindowPtr:J -Landroid/database/CursorWindow;->printStats()Ljava/lang/String; -Landroid/database/CursorWindow;->sCursorWindowSize:I -Landroid/database/CursorWindow;->sWindowToPidMap:Landroid/util/LongSparseArray; -Landroid/database/CursorWrapper;->mCursor:Landroid/database/Cursor; -Landroid/database/DatabaseUtils;->cursorPickFillWindowStartPosition(II)I -Landroid/database/DatabaseUtils;->getTypeOfObject(Ljava/lang/Object;)I Landroid/database/IContentObserver$Stub;-><init>()V Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver; Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V -Landroid/database/MatrixCursor;->data:[Ljava/lang/Object; -Landroid/database/MatrixCursor;->get(I)Ljava/lang/Object; -Landroid/database/MatrixCursor;->rowCount:I -Landroid/database/sqlite/DatabaseObjectNotClosedException;-><init>()V -Landroid/database/sqlite/SQLiteClosable;->mReferenceCount:I -Landroid/database/sqlite/SQLiteCursor;->fillWindow(I)V -Landroid/database/sqlite/SQLiteCursor;->mEditTable:Ljava/lang/String; -Landroid/database/sqlite/SQLiteCursor;->mQuery:Landroid/database/sqlite/SQLiteQuery; -Landroid/database/sqlite/SQLiteCustomFunction;->dispatchCallback([Ljava/lang/String;)V -Landroid/database/sqlite/SQLiteCustomFunction;->name:Ljava/lang/String; -Landroid/database/sqlite/SQLiteCustomFunction;->numArgs:I -Landroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V -Landroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V -Landroid/database/sqlite/SQLiteDatabase;->CONFLICT_VALUES:[Ljava/lang/String; -Landroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList; -Landroid/database/sqlite/SQLiteDatabase;->getThreadSession()Landroid/database/sqlite/SQLiteSession; -Landroid/database/sqlite/SQLiteDatabase;->mConfigurationLocked:Landroid/database/sqlite/SQLiteDatabaseConfiguration; -Landroid/database/sqlite/SQLiteDatabase;->mConnectionPoolLocked:Landroid/database/sqlite/SQLiteConnectionPool; -Landroid/database/sqlite/SQLiteDatabase;->mThreadSession:Ljava/lang/ThreadLocal; -Landroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase; -Landroid/database/sqlite/SQLiteDatabase;->reopenReadWrite()V -Landroid/database/sqlite/SQLiteDatabaseConfiguration;->maxSqlCacheSize:I -Landroid/database/sqlite/SQLiteOpenHelper;->mName:Ljava/lang/String; -Landroid/database/sqlite/SQLiteProgram;->mBindArgs:[Ljava/lang/Object; -Landroid/database/sqlite/SQLiteProgram;->mSql:Ljava/lang/String; -Landroid/database/sqlite/SQLiteQueryBuilder;->computeProjection([Ljava/lang/String;)[Ljava/lang/String; -Landroid/database/sqlite/SQLiteQueryBuilder;->mDistinct:Z -Landroid/database/sqlite/SQLiteQueryBuilder;->mTables:Ljava/lang/String; -Landroid/database/sqlite/SQLiteQueryBuilder;->mWhereClause:Ljava/lang/StringBuilder; -Landroid/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V -Landroid/database/sqlite/SQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V -Landroid/database/sqlite/SqliteWrapper;->checkSQLiteException(Landroid/content/Context;Landroid/database/sqlite/SQLiteException;)V -Landroid/database/sqlite/SqliteWrapper;->delete(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I -Landroid/database/sqlite/SqliteWrapper;->update(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I Landroid/hardware/biometrics/BiometricConstants;->BIOMETRIC_ERROR_VENDOR_BASE:I Landroid/hardware/biometrics/BiometricFingerprintConstants;->FINGERPRINT_ERROR_VENDOR_BASE:I Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager; @@ -2319,63 +985,6 @@ Landroid/media/VolumeShaper$State;-><init>(FF)V Landroid/media/VolumeShaper$State;->mVolume:F Landroid/media/VolumeShaper$State;->mXOffset:F Landroid/media/WebVttRenderer;-><init>(Landroid/content/Context;)V -Landroid/net/ConnectivityManager;->ACTION_TETHER_STATE_CHANGED:Ljava/lang/String; -Landroid/net/ConnectivityManager;->EXTRA_ACTIVE_TETHER:Ljava/lang/String; -Landroid/net/ConnectivityManager;->EXTRA_AVAILABLE_TETHER:Ljava/lang/String; -Landroid/net/ConnectivityManager;->EXTRA_ERRORED_TETHER:Ljava/lang/String; -Landroid/net/ConnectivityManager;->from(Landroid/content/Context;)Landroid/net/ConnectivityManager; -Landroid/net/ConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties; -Landroid/net/ConnectivityManager;->getActiveNetworkInfoForUid(I)Landroid/net/NetworkInfo; -Landroid/net/ConnectivityManager;->getDefaultNetworkCapabilitiesForUser(I)[Landroid/net/NetworkCapabilities; -Landroid/net/ConnectivityManager;->getInstance()Landroid/net/ConnectivityManager; -Landroid/net/ConnectivityManager;->getLastTetherError(Ljava/lang/String;)I -Landroid/net/ConnectivityManager;->getLinkProperties(I)Landroid/net/LinkProperties; -Landroid/net/ConnectivityManager;->getMobileDataEnabled()Z -Landroid/net/ConnectivityManager;->getNetworkForType(I)Landroid/net/Network; -Landroid/net/ConnectivityManager;->getNetworkTypeName(I)Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetherableBluetoothRegexs()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetherableIfaces()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetheredIfaces()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String; -Landroid/net/ConnectivityManager;->INET_CONDITION_ACTION:Ljava/lang/String; -Landroid/net/ConnectivityManager;->isNetworkSupported(I)Z -Landroid/net/ConnectivityManager;->isNetworkTypeMobile(I)Z -Landroid/net/ConnectivityManager;->mService:Landroid/net/IConnectivityManager; -Landroid/net/ConnectivityManager;->networkCapabilitiesForFeature(ILjava/lang/String;)Landroid/net/NetworkCapabilities; -Landroid/net/ConnectivityManager;->registerNetworkFactory(Landroid/os/Messenger;Ljava/lang/String;)V -Landroid/net/ConnectivityManager;->removeRequestForFeature(Landroid/net/NetworkCapabilities;)Z -Landroid/net/ConnectivityManager;->requestNetworkForFeatureLocked(Landroid/net/NetworkCapabilities;)Landroid/net/NetworkRequest; -Landroid/net/ConnectivityManager;->requestRouteToHostAddress(ILjava/net/InetAddress;)Z -Landroid/net/ConnectivityManager;->setBackgroundDataSetting(Z)V -Landroid/net/ConnectivityManager;->setProcessDefaultNetworkForHostResolution(Landroid/net/Network;)Z -Landroid/net/ConnectivityManager;->setUsbTethering(Z)I -Landroid/net/ConnectivityManager;->sLegacyRequests:Ljava/util/HashMap; -Landroid/net/ConnectivityManager;->TYPE_MOBILE_CBS:I -Landroid/net/ConnectivityManager;->TYPE_MOBILE_EMERGENCY:I -Landroid/net/ConnectivityManager;->TYPE_MOBILE_FOTA:I -Landroid/net/ConnectivityManager;->TYPE_MOBILE_IA:I -Landroid/net/ConnectivityManager;->TYPE_MOBILE_IMS:I -Landroid/net/ConnectivityManager;->TYPE_NONE:I -Landroid/net/ConnectivityManager;->TYPE_PROXY:I -Landroid/net/ConnectivityManager;->TYPE_WIFI_P2P:I -Landroid/net/ConnectivityManager;->unregisterNetworkFactory(Landroid/os/Messenger;)V -Landroid/net/EthernetManager$Listener;->onAvailabilityChanged(Ljava/lang/String;Z)V -Landroid/net/EthernetManager;->addListener(Landroid/net/EthernetManager$Listener;)V -Landroid/net/EthernetManager;->getAvailableInterfaces()[Ljava/lang/String; -Landroid/net/EthernetManager;->getConfiguration(Ljava/lang/String;)Landroid/net/IpConfiguration; -Landroid/net/EthernetManager;->isAvailable()Z -Landroid/net/EthernetManager;->isAvailable(Ljava/lang/String;)Z -Landroid/net/EthernetManager;->removeListener(Landroid/net/EthernetManager$Listener;)V -Landroid/net/EthernetManager;->setConfiguration(Ljava/lang/String;Landroid/net/IpConfiguration;)V -Landroid/net/http/SslCertificate;->getDigest(Ljava/security/cert/X509Certificate;Ljava/lang/String;)Ljava/lang/String; -Landroid/net/http/SslCertificate;->getSerialNumber(Ljava/security/cert/X509Certificate;)Ljava/lang/String; -Landroid/net/http/SslCertificate;->inflateCertificateView(Landroid/content/Context;)Landroid/view/View; -Landroid/net/http/SslCertificate;->mX509Certificate:Ljava/security/cert/X509Certificate; -Landroid/net/http/SslError;->mCertificate:Landroid/net/http/SslCertificate; -Landroid/net/http/SslError;->mErrors:I -Landroid/net/http/SslError;->mUrl:Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties; Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetworkInfo()Landroid/net/NetworkInfo; @@ -2420,205 +1029,10 @@ Landroid/net/INetworkStatsService;->openSessionForUsageStats(ILjava/lang/String; Landroid/net/INetworkStatsSession;->close()V Landroid/net/INetworkStatsSession;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats; Landroid/net/INetworkStatsSession;->getSummaryForNetwork(Landroid/net/NetworkTemplate;JJ)Landroid/net/NetworkStats; -Landroid/net/InterfaceConfiguration;->clearFlag(Ljava/lang/String;)V -Landroid/net/InterfaceConfiguration;->getFlags()Ljava/lang/Iterable; -Landroid/net/InterfaceConfiguration;->setFlag(Ljava/lang/String;)V -Landroid/net/InterfaceConfiguration;->setInterfaceDown()V -Landroid/net/InterfaceConfiguration;->setInterfaceUp()V -Landroid/net/IpConfiguration$IpAssignment;->STATIC:Landroid/net/IpConfiguration$IpAssignment; -Landroid/net/IpConfiguration$ProxySettings;->NONE:Landroid/net/IpConfiguration$ProxySettings; -Landroid/net/IpConfiguration;-><init>(Landroid/net/IpConfiguration$IpAssignment;Landroid/net/IpConfiguration$ProxySettings;Landroid/net/StaticIpConfiguration;Landroid/net/ProxyInfo;)V -Landroid/net/IpConfiguration;->httpProxy:Landroid/net/ProxyInfo; -Landroid/net/LinkAddress;->address:Ljava/net/InetAddress; -Landroid/net/LinkAddress;->getNetworkPrefixLength()I -Landroid/net/LinkAddress;->prefixLength:I -Landroid/net/LinkProperties;->addLinkAddress(Landroid/net/LinkAddress;)Z -Landroid/net/LinkProperties;->getAddresses()Ljava/util/List; -Landroid/net/LinkProperties;->getAllAddresses()Ljava/util/List; -Landroid/net/LinkProperties;->getAllLinkAddresses()Ljava/util/List; -Landroid/net/LinkProperties;->getTcpBufferSizes()Ljava/lang/String; -Landroid/net/LinkProperties;->isIdenticalHttpProxy(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->isIdenticalInterfaceName(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->mIfaceName:Ljava/lang/String; -Landroid/net/LinkProperties;->setHttpProxy(Landroid/net/ProxyInfo;)V -Landroid/net/LinkQualityInfo;->setDataSampleDuration(I)V -Landroid/net/LinkQualityInfo;->setLastDataSampleTime(J)V -Landroid/net/LinkQualityInfo;->setPacketCount(J)V -Landroid/net/LinkQualityInfo;->setPacketErrorCount(J)V -Landroid/net/LocalSocket;->impl:Landroid/net/LocalSocketImpl; -Landroid/net/LocalSocketImpl;-><init>()V -Landroid/net/LocalSocketImpl;->inboundFileDescriptors:[Ljava/io/FileDescriptor; -Landroid/net/LocalSocketImpl;->outboundFileDescriptors:[Ljava/io/FileDescriptor; Landroid/net/MobileLinkQualityInfo;-><init>()V -Landroid/net/MobileLinkQualityInfo;->getMobileNetworkType()I -Landroid/net/MobileLinkQualityInfo;->setCdmaDbm(I)V -Landroid/net/MobileLinkQualityInfo;->setCdmaEcio(I)V -Landroid/net/MobileLinkQualityInfo;->setEvdoDbm(I)V -Landroid/net/MobileLinkQualityInfo;->setEvdoEcio(I)V -Landroid/net/MobileLinkQualityInfo;->setEvdoSnr(I)V -Landroid/net/MobileLinkQualityInfo;->setGsmErrorRate(I)V -Landroid/net/MobileLinkQualityInfo;->setLteCqi(I)V -Landroid/net/MobileLinkQualityInfo;->setLteRsrp(I)V -Landroid/net/MobileLinkQualityInfo;->setLteRsrq(I)V -Landroid/net/MobileLinkQualityInfo;->setLteRssnr(I)V -Landroid/net/MobileLinkQualityInfo;->setLteSignalStrength(I)V -Landroid/net/MobileLinkQualityInfo;->setMobileNetworkType(I)V -Landroid/net/MobileLinkQualityInfo;->setRssi(I)V -Landroid/net/NetworkAgent;->sendNetworkInfo(Landroid/net/NetworkInfo;)V -Landroid/net/NetworkCapabilities;-><init>()V -Landroid/net/NetworkCapabilities;->addCapability(I)Landroid/net/NetworkCapabilities; -Landroid/net/NetworkCapabilities;->addTransportType(I)Landroid/net/NetworkCapabilities; -Landroid/net/NetworkCapabilities;->mNetworkCapabilities:J -Landroid/net/NetworkCapabilities;->mSignalStrength:I -Landroid/net/NetworkCapabilities;->removeCapability(I)Landroid/net/NetworkCapabilities; -Landroid/net/NetworkCapabilities;->setSignalStrength(I)Landroid/net/NetworkCapabilities; -Landroid/net/NetworkFactory;-><init>(Landroid/os/Looper;Landroid/content/Context;Ljava/lang/String;Landroid/net/NetworkCapabilities;)V -Landroid/net/NetworkFactory;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V -Landroid/net/NetworkFactory;->setScoreFilter(I)V -Landroid/net/NetworkInfo;-><init>(IILjava/lang/String;Ljava/lang/String;)V -Landroid/net/NetworkInfo;-><init>(Landroid/net/NetworkInfo;)V -Landroid/net/NetworkInfo;->setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V -Landroid/net/NetworkInfo;->setFailover(Z)V -Landroid/net/NetworkInfo;->setIsAvailable(Z)V -Landroid/net/NetworkInfo;->setRoaming(Z)V -Landroid/net/NetworkInfo;->setSubtype(ILjava/lang/String;)V -Landroid/net/NetworkPolicy;-><init>(Landroid/net/NetworkTemplate;ILjava/lang/String;JJJJZZ)V -Landroid/net/NetworkPolicy;->clearSnooze()V -Landroid/net/NetworkPolicy;->compareTo(Landroid/net/NetworkPolicy;)I -Landroid/net/NetworkPolicy;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkPolicy;->inferred:Z -Landroid/net/NetworkPolicy;->isOverLimit(J)Z -Landroid/net/NetworkPolicy;->isOverWarning(J)Z -Landroid/net/NetworkPolicy;->limitBytes:J -Landroid/net/NetworkPolicy;->metered:Z -Landroid/net/NetworkPolicy;->template:Landroid/net/NetworkTemplate; -Landroid/net/NetworkPolicy;->warningBytes:J -Landroid/net/NetworkPolicyManager;->from(Landroid/content/Context;)Landroid/net/NetworkPolicyManager; -Landroid/net/NetworkPolicyManager;->getNetworkPolicies()[Landroid/net/NetworkPolicy; -Landroid/net/NetworkPolicyManager;->getRestrictBackground()Z -Landroid/net/NetworkPolicyManager;->getUidPolicy(I)I -Landroid/net/NetworkPolicyManager;->getUidsWithPolicy(I)[I -Landroid/net/NetworkPolicyManager;->mService:Landroid/net/INetworkPolicyManager; -Landroid/net/NetworkPolicyManager;->registerListener(Landroid/net/INetworkPolicyListener;)V -Landroid/net/NetworkPolicyManager;->setRestrictBackground(Z)V -Landroid/net/NetworkPolicyManager;->setUidPolicy(II)V -Landroid/net/NetworkPolicyManager;->unregisterListener(Landroid/net/INetworkPolicyListener;)V -Landroid/net/NetworkQuotaInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkRequest$Builder;->clearCapabilities()Landroid/net/NetworkRequest$Builder; -Landroid/net/NetworkRequest;->legacyType:I -Landroid/net/NetworkRequest;->requestId:I -Landroid/net/NetworkState;-><init>(Landroid/os/Parcel;)V -Landroid/net/NetworkState;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkStats;-><init>(Landroid/os/Parcel;)V -Landroid/net/NetworkStats;->capacity:I -Landroid/net/NetworkStats;->combineAllValues(Landroid/net/NetworkStats;)V -Landroid/net/NetworkStats;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkStats;->defaultNetwork:[I -Landroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; -Landroid/net/NetworkStats;->getTotal(Landroid/net/NetworkStats$Entry;I)Landroid/net/NetworkStats$Entry; -Landroid/net/NetworkStats;->getTotalBytes()J -Landroid/net/NetworkStats;->getTotalIncludingTags(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; -Landroid/net/NetworkStats;->getUniqueUids()[I -Landroid/net/NetworkStats;->getValues(ILandroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry; -Landroid/net/NetworkStats;->iface:[Ljava/lang/String; -Landroid/net/NetworkStats;->metered:[I -Landroid/net/NetworkStats;->operations:[J -Landroid/net/NetworkStats;->roaming:[I -Landroid/net/NetworkStats;->rxBytes:[J -Landroid/net/NetworkStats;->rxPackets:[J -Landroid/net/NetworkStats;->set:[I -Landroid/net/NetworkStats;->size()I -Landroid/net/NetworkStats;->size:I -Landroid/net/NetworkStats;->tag:[I -Landroid/net/NetworkStats;->txBytes:[J -Landroid/net/NetworkStats;->txPackets:[J -Landroid/net/NetworkStats;->uid:[I -Landroid/net/NetworkStatsHistory$Entry;->bucketDuration:J -Landroid/net/NetworkStatsHistory$Entry;->bucketStart:J -Landroid/net/NetworkStatsHistory$Entry;->rxBytes:J -Landroid/net/NetworkStatsHistory$Entry;->rxPackets:J -Landroid/net/NetworkStatsHistory$Entry;->txPackets:J -Landroid/net/NetworkStatsHistory;-><init>(J)V -Landroid/net/NetworkStatsHistory;-><init>(Landroid/os/Parcel;)V -Landroid/net/NetworkStatsHistory;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkStatsHistory;->getEnd()J -Landroid/net/NetworkStatsHistory;->getIndexBefore(J)I -Landroid/net/NetworkStatsHistory;->getValues(ILandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; -Landroid/net/NetworkStatsHistory;->getValues(JJJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; -Landroid/net/NetworkStatsHistory;->recordEntireHistory(Landroid/net/NetworkStatsHistory;)V -Landroid/net/NetworkStatsHistory;->size()I -Landroid/net/NetworkTemplate;-><init>(ILjava/lang/String;Ljava/lang/String;)V -Landroid/net/NetworkTemplate;->buildTemplateEthernet()Landroid/net/NetworkTemplate; -Landroid/net/NetworkTemplate;->buildTemplateMobileWildcard()Landroid/net/NetworkTemplate; -Landroid/net/NetworkTemplate;->buildTemplateWifi()Landroid/net/NetworkTemplate; -Landroid/net/NetworkTemplate;->buildTemplateWifiWildcard()Landroid/net/NetworkTemplate; -Landroid/net/NetworkTemplate;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/NetworkTemplate;->getMatchRule()I -Landroid/net/NetworkTemplate;->getSubscriberId()Ljava/lang/String; -Landroid/net/NetworkTemplate;->normalize(Landroid/net/NetworkTemplate;[Ljava/lang/String;)Landroid/net/NetworkTemplate; -Landroid/net/NetworkUtils;->intToInetAddress(I)Ljava/net/InetAddress; -Landroid/net/NetworkUtils;->numericToInetAddress(Ljava/lang/String;)Ljava/net/InetAddress; -Landroid/net/NetworkUtils;->prefixLengthToNetmaskInt(I)I -Landroid/net/NetworkUtils;->trimV4AddrZeros(Ljava/lang/String;)Ljava/lang/String; Landroid/net/nsd/INsdManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/nsd/INsdManager; Landroid/net/nsd/INsdManager;->getMessenger()Landroid/os/Messenger; -Landroid/net/nsd/NsdServiceInfo;->setAttribute(Ljava/lang/String;[B)V -Landroid/net/Proxy;->getProxy(Landroid/content/Context;Ljava/lang/String;)Ljava/net/Proxy; -Landroid/net/Proxy;->setHttpProxySystemProperty(Landroid/net/ProxyInfo;)V -Landroid/net/ProxyInfo;-><init>(Ljava/lang/String;ILjava/lang/String;)V -Landroid/net/RouteInfo;-><init>(Landroid/net/LinkAddress;Ljava/net/InetAddress;)V -Landroid/net/RouteInfo;-><init>(Landroid/net/LinkAddress;Ljava/net/InetAddress;Ljava/lang/String;)V -Landroid/net/RouteInfo;-><init>(Ljava/net/InetAddress;)V -Landroid/net/RouteInfo;->isHost()Z -Landroid/net/RouteInfo;->mGateway:Ljava/net/InetAddress; -Landroid/net/RouteInfo;->mIsHost:Z Landroid/net/SntpClient;-><init>()V -Landroid/net/SSLCertificateSocketFactory;-><init>(ILandroid/net/SSLSessionCache;Z)V -Landroid/net/SSLCertificateSocketFactory;->castToOpenSSLSocket(Ljava/net/Socket;)Lcom/android/org/conscrypt/OpenSSLSocketImpl; -Landroid/net/SSLCertificateSocketFactory;->getAlpnSelectedProtocol(Ljava/net/Socket;)[B -Landroid/net/SSLCertificateSocketFactory;->getDelegate()Ljavax/net/ssl/SSLSocketFactory; -Landroid/net/SSLCertificateSocketFactory;->INSECURE_TRUST_MANAGER:[Ljavax/net/ssl/TrustManager; -Landroid/net/SSLCertificateSocketFactory;->isSslCheckRelaxed()Z -Landroid/net/SSLCertificateSocketFactory;->makeSocketFactory([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;)Ljavax/net/ssl/SSLSocketFactory; -Landroid/net/SSLCertificateSocketFactory;->mAlpnProtocols:[B -Landroid/net/SSLCertificateSocketFactory;->mChannelIdPrivateKey:Ljava/security/PrivateKey; -Landroid/net/SSLCertificateSocketFactory;->mHandshakeTimeoutMillis:I -Landroid/net/SSLCertificateSocketFactory;->mInsecureFactory:Ljavax/net/ssl/SSLSocketFactory; -Landroid/net/SSLCertificateSocketFactory;->mKeyManagers:[Ljavax/net/ssl/KeyManager; -Landroid/net/SSLCertificateSocketFactory;->mNpnProtocols:[B -Landroid/net/SSLCertificateSocketFactory;->mSecure:Z -Landroid/net/SSLCertificateSocketFactory;->mSecureFactory:Ljavax/net/ssl/SSLSocketFactory; -Landroid/net/SSLCertificateSocketFactory;->mSessionCache:Lcom/android/org/conscrypt/SSLClientSessionCache; -Landroid/net/SSLCertificateSocketFactory;->mTrustManagers:[Ljavax/net/ssl/TrustManager; -Landroid/net/SSLCertificateSocketFactory;->setAlpnProtocols([[B)V -Landroid/net/SSLCertificateSocketFactory;->setChannelIdPrivateKey(Ljava/security/PrivateKey;)V -Landroid/net/SSLCertificateSocketFactory;->setSoWriteTimeout(Ljava/net/Socket;I)V -Landroid/net/SSLCertificateSocketFactory;->TAG:Ljava/lang/String; -Landroid/net/SSLCertificateSocketFactory;->verifyHostname(Ljava/net/Socket;Ljava/lang/String;)V -Landroid/net/SSLSessionCache;->mSessionCache:Lcom/android/org/conscrypt/SSLClientSessionCache; -Landroid/net/StaticIpConfiguration;-><init>()V -Landroid/net/StaticIpConfiguration;->gateway:Ljava/net/InetAddress; -Landroid/net/StaticIpConfiguration;->ipAddress:Landroid/net/LinkAddress; -Landroid/net/TrafficStats;->getMobileIfaces()[Ljava/lang/String; -Landroid/net/TrafficStats;->getRxBytes(Ljava/lang/String;)J -Landroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService; -Landroid/net/TrafficStats;->getTxBytes(Ljava/lang/String;)J -Landroid/net/Uri;-><init>()V -Landroid/net/Uri;->getCanonicalUri()Landroid/net/Uri; -Landroid/net/Uri;->toSafeString()Ljava/lang/String; -Landroid/net/VpnService$Builder;->mAddresses:Ljava/util/List; -Landroid/net/VpnService$Builder;->mRoutes:Ljava/util/List; -Landroid/net/WebAddress;->getAuthInfo()Ljava/lang/String; -Landroid/net/WebAddress;->getHost()Ljava/lang/String; -Landroid/net/WebAddress;->getPath()Ljava/lang/String; -Landroid/net/WebAddress;->getPort()I -Landroid/net/WebAddress;->getScheme()Ljava/lang/String; -Landroid/net/WebAddress;->mHost:Ljava/lang/String; -Landroid/net/WebAddress;->mPath:Ljava/lang/String; -Landroid/net/WebAddress;->mPort:I -Landroid/net/WebAddress;->mScheme:Ljava/lang/String; -Landroid/net/WebAddress;->setHost(Ljava/lang/String;)V -Landroid/net/WebAddress;->setPath(Ljava/lang/String;)V Landroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/wifi/IWifiManager$Stub;-><init>()V Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager; @@ -2631,163 +1045,6 @@ Landroid/net/wifi/IWifiScanner$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/net/wifi/IWifiScanner$Stub;-><init>()V Landroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner; Landroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager; -Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo;->createRequest(Ljava/lang/String;II)Ljava/lang/String; -Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;-><init>(Ljava/util/List;)V -Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;->mQueryList:Ljava/util/List; -Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;-><init>(ILjava/lang/String;)V -Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/p2p/WifiP2pConfig;-><init>(Ljava/lang/String;)V -Landroid/net/wifi/p2p/WifiP2pConfig;->MIN_GROUP_OWNER_INTENT:I -Landroid/net/wifi/p2p/WifiP2pConfig;->netId:I -Landroid/net/wifi/p2p/WifiP2pDevice;-><init>(Ljava/lang/String;)V -Landroid/net/wifi/p2p/WifiP2pDevice;->deviceCapability:I -Landroid/net/wifi/p2p/WifiP2pDevice;->groupCapability:I -Landroid/net/wifi/p2p/WifiP2pDevice;->update(Landroid/net/wifi/p2p/WifiP2pDevice;)V -Landroid/net/wifi/p2p/WifiP2pDevice;->wfdInfo:Landroid/net/wifi/p2p/WifiP2pWfdInfo; -Landroid/net/wifi/p2p/WifiP2pDevice;->wpsConfigMethodsSupported:I -Landroid/net/wifi/p2p/WifiP2pDeviceList;->remove(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pDevice; -Landroid/net/wifi/p2p/WifiP2pDeviceList;->update(Landroid/net/wifi/p2p/WifiP2pDevice;)V -Landroid/net/wifi/p2p/WifiP2pGroup;-><init>(Ljava/lang/String;)V -Landroid/net/wifi/p2p/WifiP2pGroup;->getNetworkId()I -Landroid/net/wifi/p2p/WifiP2pGroup;->isClientListEmpty()Z -Landroid/net/wifi/p2p/WifiP2pGroup;->setInterface(Ljava/lang/String;)V -Landroid/net/wifi/p2p/WifiP2pGroup;->setIsGroupOwner(Z)V -Landroid/net/wifi/p2p/WifiP2pGroup;->setNetworkId(I)V -Landroid/net/wifi/p2p/WifiP2pGroup;->TEMPORARY_NET_ID:I -Landroid/net/wifi/p2p/WifiP2pGroupList;-><init>(Landroid/net/wifi/p2p/WifiP2pGroupList;Landroid/net/wifi/p2p/WifiP2pGroupList$GroupDeleteListener;)V -Landroid/net/wifi/p2p/WifiP2pGroupList;->getGroupList()Ljava/util/Collection; -Landroid/net/wifi/p2p/WifiP2pGroupList;->mGroups:Landroid/util/LruCache; -Landroid/net/wifi/p2p/WifiP2pManager$Channel;->mAsyncChannel:Lcom/android/internal/util/AsyncChannel; -Landroid/net/wifi/p2p/WifiP2pManager$Channel;->putListener(Ljava/lang/Object;)I -Landroid/net/wifi/p2p/WifiP2pManager;-><init>(Landroid/net/wifi/p2p/IWifiP2pManager;)V -Landroid/net/wifi/p2p/WifiP2pManager;->CREATE_GROUP:I -Landroid/net/wifi/p2p/WifiP2pManager;->deletePersistentGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;ILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V -Landroid/net/wifi/p2p/WifiP2pManager;->requestPersistentGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PersistentGroupInfoListener;)V -Landroid/net/wifi/p2p/WifiP2pManager;->setDeviceName(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V -Landroid/net/wifi/p2p/WifiP2pManager;->setMiracastMode(I)V -Landroid/net/wifi/p2p/WifiP2pManager;->setWFDInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pWfdInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V -Landroid/net/wifi/p2p/WifiP2pManager;->setWifiP2pChannels(Landroid/net/wifi/p2p/WifiP2pManager$Channel;IILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V -Landroid/net/wifi/p2p/WifiP2pManager;->startWps(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/WpsInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V -Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;-><init>()V -Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->device:Landroid/net/wifi/p2p/WifiP2pDevice; -Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->event:I -Landroid/net/wifi/p2p/WifiP2pProvDiscEvent;->pin:Ljava/lang/String; -Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>()V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>(III)V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;-><init>(Landroid/net/wifi/p2p/WifiP2pWfdInfo;)V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->getDeviceType()I -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->isWfdEnabled()Z -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setControlPort(I)V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setDeviceType(I)Z -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setMaxThroughput(I)V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setSessionAvailable(Z)V -Landroid/net/wifi/p2p/WifiP2pWfdInfo;->setWfdEnabled(Z)V -Landroid/net/wifi/ScanResult$InformationElement;->bytes:[B -Landroid/net/wifi/ScanResult$InformationElement;->EID_BSS_LOAD:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_ERP:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_EXTENDED_CAPS:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_EXTENDED_SUPPORTED_RATES:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_HT_OPERATION:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_INTERWORKING:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_ROAMING_CONSORTIUM:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_RSN:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_SSID:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_SUPPORTED_RATES:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_TIM:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_VHT_OPERATION:I -Landroid/net/wifi/ScanResult$InformationElement;->EID_VSA:I -Landroid/net/wifi/ScanResult$InformationElement;->id:I -Landroid/net/wifi/ScanResult;->anqpDomainId:I -Landroid/net/wifi/ScanResult;->anqpLines:Ljava/util/List; -Landroid/net/wifi/ScanResult;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/ScanResult;->distanceCm:I -Landroid/net/wifi/ScanResult;->distanceSdCm:I -Landroid/net/wifi/ScanResult;->flags:J -Landroid/net/wifi/ScanResult;->hessid:J -Landroid/net/wifi/ScanResult;->informationElements:[Landroid/net/wifi/ScanResult$InformationElement; -Landroid/net/wifi/ScanResult;->is80211McRTTResponder:Z -Landroid/net/wifi/ScanResult;->numUsage:I -Landroid/net/wifi/ScanResult;->seen:J -Landroid/net/wifi/ScanResult;->wifiSsid:Landroid/net/wifi/WifiSsid; -Landroid/net/wifi/WifiConfiguration;-><init>(Landroid/net/wifi/WifiConfiguration;)V -Landroid/net/wifi/WifiConfiguration;->apBand:I -Landroid/net/wifi/WifiConfiguration;->apChannel:I -Landroid/net/wifi/WifiConfiguration;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/WifiConfiguration;->defaultGwMacAddress:Ljava/lang/String; -Landroid/net/wifi/WifiConfiguration;->getAuthType()I -Landroid/net/wifi/WifiConfiguration;->getIpAssignment()Landroid/net/IpConfiguration$IpAssignment; -Landroid/net/wifi/WifiConfiguration;->getIpConfiguration()Landroid/net/IpConfiguration; -Landroid/net/wifi/WifiConfiguration;->getPrintableSsid()Ljava/lang/String; -Landroid/net/wifi/WifiConfiguration;->getProxySettings()Landroid/net/IpConfiguration$ProxySettings; -Landroid/net/wifi/WifiConfiguration;->getStaticIpConfiguration()Landroid/net/StaticIpConfiguration; -Landroid/net/wifi/WifiConfiguration;->INVALID_RSSI:I -Landroid/net/wifi/WifiConfiguration;->isEnterprise()Z -Landroid/net/wifi/WifiConfiguration;->lastConnectUid:I -Landroid/net/wifi/WifiConfiguration;->mIpConfiguration:Landroid/net/IpConfiguration; -Landroid/net/wifi/WifiConfiguration;->noInternetAccessExpected:Z -Landroid/net/wifi/WifiConfiguration;->numNoInternetAccessReports:I -Landroid/net/wifi/WifiConfiguration;->selfAdded:Z -Landroid/net/wifi/WifiConfiguration;->setIpAssignment(Landroid/net/IpConfiguration$IpAssignment;)V -Landroid/net/wifi/WifiConfiguration;->setIpConfiguration(Landroid/net/IpConfiguration;)V -Landroid/net/wifi/WifiConfiguration;->setProxy(Landroid/net/IpConfiguration$ProxySettings;Landroid/net/ProxyInfo;)V -Landroid/net/wifi/WifiConfiguration;->setProxySettings(Landroid/net/IpConfiguration$ProxySettings;)V -Landroid/net/wifi/WifiConfiguration;->setStaticIpConfiguration(Landroid/net/StaticIpConfiguration;)V -Landroid/net/wifi/WifiConfiguration;->shared:Z -Landroid/net/wifi/WifiConfiguration;->validatedInternetAccess:Z -Landroid/net/wifi/WifiConfiguration;->wepKeyVarNames:[Ljava/lang/String; -Landroid/net/wifi/WifiEnterpriseConfig;->getCaCertificateAlias()Ljava/lang/String; -Landroid/net/wifi/WifiEnterpriseConfig;->getClientCertificateAlias()Ljava/lang/String; -Landroid/net/wifi/WifiEnterpriseConfig;->mFields:Ljava/util/HashMap; -Landroid/net/wifi/WifiEnterpriseConfig;->setCaCertificateAlias(Ljava/lang/String;)V -Landroid/net/wifi/WifiEnterpriseConfig;->setClientCertificateAlias(Ljava/lang/String;)V -Landroid/net/wifi/WifiInfo;-><init>()V -Landroid/net/wifi/WifiInfo;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/WifiInfo;->DEFAULT_MAC_ADDRESS:Ljava/lang/String; -Landroid/net/wifi/WifiInfo;->getMeteredHint()Z -Landroid/net/wifi/WifiInfo;->getWifiSsid()Landroid/net/wifi/WifiSsid; -Landroid/net/wifi/WifiInfo;->INVALID_RSSI:I -Landroid/net/wifi/WifiInfo;->isEphemeral()Z -Landroid/net/wifi/WifiInfo;->mBSSID:Ljava/lang/String; -Landroid/net/wifi/WifiInfo;->mIpAddress:Ljava/net/InetAddress; -Landroid/net/wifi/WifiInfo;->mMacAddress:Ljava/lang/String; -Landroid/net/wifi/WifiInfo;->mWifiSsid:Landroid/net/wifi/WifiSsid; -Landroid/net/wifi/WifiInfo;->removeDoubleQuotes(Ljava/lang/String;)Ljava/lang/String; -Landroid/net/wifi/WifiInfo;->setBSSID(Ljava/lang/String;)V -Landroid/net/wifi/WifiInfo;->setLinkSpeed(I)V -Landroid/net/wifi/WifiInfo;->setMacAddress(Ljava/lang/String;)V -Landroid/net/wifi/WifiInfo;->setNetworkId(I)V -Landroid/net/wifi/WifiInfo;->setRssi(I)V -Landroid/net/wifi/WifiInfo;->setSupplicantState(Landroid/net/wifi/SupplicantState;)V -Landroid/net/wifi/WifiInfo;->setSupplicantState(Ljava/lang/String;)V -Landroid/net/wifi/WifiManager;->cancelLocalOnlyHotspotRequest()V -Landroid/net/wifi/WifiManager;->connect(ILandroid/net/wifi/WifiManager$ActionListener;)V -Landroid/net/wifi/WifiManager;->disable(ILandroid/net/wifi/WifiManager$ActionListener;)V -Landroid/net/wifi/WifiManager;->enableVerboseLogging(I)V -Landroid/net/wifi/WifiManager;->forget(ILandroid/net/wifi/WifiManager$ActionListener;)V -Landroid/net/wifi/WifiManager;->getCountryCode()Ljava/lang/String; -Landroid/net/wifi/WifiManager;->getCurrentNetwork()Landroid/net/Network; -Landroid/net/wifi/WifiManager;->getMatchingWifiConfig(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/WifiConfiguration; -Landroid/net/wifi/WifiManager;->getVerboseLoggingLevel()I -Landroid/net/wifi/WifiManager;->getWifiServiceMessenger()Landroid/os/Messenger; -Landroid/net/wifi/WifiManager;->initializeMulticastFiltering()Z -Landroid/net/wifi/WifiManager;->isDualBandSupported()Z -Landroid/net/wifi/WifiManager;->LINK_CONFIGURATION_CHANGED_ACTION:Ljava/lang/String; -Landroid/net/wifi/WifiManager;->mActiveLockCount:I -Landroid/net/wifi/WifiManager;->MAX_RSSI:I -Landroid/net/wifi/WifiManager;->MIN_RSSI:I -Landroid/net/wifi/WifiManager;->mService:Landroid/net/wifi/IWifiManager; -Landroid/net/wifi/WifiManager;->RSSI_LEVELS:I -Landroid/net/wifi/WifiManager;->save(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiManager$ActionListener;)V -Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_2GHZ:I -Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_5GHZ:I -Landroid/net/wifi/WifiManager;->WIFI_FREQUENCY_BAND_AUTO:I -Landroid/net/wifi/WifiSsid;->createFromAsciiEncoded(Ljava/lang/String;)Landroid/net/wifi/WifiSsid; -Landroid/net/wifi/WifiSsid;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/net/wifi/WifiSsid;->getOctets()[B -Landroid/net/wifi/WifiSsid;->NONE:Ljava/lang/String; -Landroid/net/wifi/WifiSsid;->octets:Ljava/io/ByteArrayOutputStream; Landroid/nfc/INfcAdapter$Stub;->TRANSACTION_enable:I Landroid/nfc/INfcAdapterExtras;->authenticate(Ljava/lang/String;[B)V Landroid/nfc/INfcAdapterExtras;->close(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; @@ -3391,7 +1648,6 @@ Landroid/os/WorkSource;->sTmpWorkSource:Landroid/os/WorkSource; Landroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/String;)V Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/Throwable;)V -Landroid/permissionpresenterservice/RuntimePermissionPresenterService;->onRevokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V Landroid/preference/DialogPreference;->mBuilder:Landroid/app/AlertDialog$Builder; Landroid/preference/DialogPreference;->mDialog:Landroid/app/Dialog; Landroid/preference/DialogPreference;->mDialogIcon:Landroid/graphics/drawable/Drawable; @@ -3466,190 +1722,6 @@ Landroid/preference/VolumePreference$VolumeStore;->originalVolume:I Landroid/preference/VolumePreference$VolumeStore;->volume:I Landroid/preference/VolumePreference;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V Landroid/preference/VolumePreference;->mStreamType:I -Landroid/provider/Browser;->getVisitedHistory(Landroid/content/ContentResolver;)[Ljava/lang/String; -Landroid/provider/Browser;->sendString(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V -Landroid/provider/BrowserContract$Accounts;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/BrowserContract$Bookmarks;->buildFolderUri(J)Landroid/net/Uri; -Landroid/provider/BrowserContract$Bookmarks;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/BrowserContract$Bookmarks;->CONTENT_URI_DEFAULT_FOLDER:Landroid/net/Uri; -Landroid/provider/BrowserContract$Combined;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/BrowserContract$History;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/BrowserContract$Images;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/BrowserContract;->AUTHORITY_URI:Landroid/net/Uri; -Landroid/provider/CalendarContract$CalendarAlerts;->findNextAlarmTime(Landroid/content/ContentResolver;J)J -Landroid/provider/CalendarContract$CalendarAlerts;->rescheduleMissedAlarms(Landroid/content/ContentResolver;Landroid/content/Context;Landroid/app/AlarmManager;)V -Landroid/provider/CalendarContract$CalendarAlerts;->scheduleAlarm(Landroid/content/Context;Landroid/app/AlarmManager;J)V -Landroid/provider/CallLog$Calls;->addCall(Lcom/android/internal/telephony/CallerInfo;Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIILandroid/telecom/PhoneAccountHandle;JILjava/lang/Long;ZLandroid/os/UserHandle;Z)Landroid/net/Uri; -Landroid/provider/ContactsContract$Contacts$AggregationSuggestions;->builder()Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder; -Landroid/provider/ContactsContract$Contacts;->CORP_CONTENT_URI:Landroid/net/Uri; -Landroid/provider/ContactsContract$QuickContact;->composeQuickContactsIntent(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/content/Intent; -Landroid/provider/ContactsInternal;->startQuickContactWithErrorToast(Landroid/content/Context;Landroid/content/Intent;)V -Landroid/provider/DocumentsContract$Root;->FLAG_ADVANCED:I -Landroid/provider/DocumentsContract;->getDocumentThumbnail(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap; -Landroid/provider/DocumentsContract;->METHOD_CREATE_DOCUMENT:Ljava/lang/String; -Landroid/provider/DocumentsContract;->moveDocument(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri; -Landroid/provider/DocumentsContract;->PATH_DOCUMENT:Ljava/lang/String; -Landroid/provider/DocumentsContract;->PATH_TREE:Ljava/lang/String; -Landroid/provider/DocumentsContract;->setManageMode(Landroid/net/Uri;)Landroid/net/Uri; -Landroid/provider/Downloads$Impl$RequestHeaders;->INSERT_KEY_PREFIX:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->ALL_DOWNLOADS_CONTENT_URI:Landroid/net/Uri; -Landroid/provider/Downloads$Impl;->COLUMN_ALLOWED_NETWORK_TYPES:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_ALLOW_ROAMING:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_COOKIE_DATA:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_DELETED:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_DESCRIPTION:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_DESTINATION:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_FILE_NAME_HINT:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_IS_PUBLIC_API:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_MEDIA_SCANNED:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_MIME_TYPE:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_NOTIFICATION_CLASS:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_NOTIFICATION_EXTRAS:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_NOTIFICATION_PACKAGE:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_REFERER:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_TITLE:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_URI:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->COLUMN_VISIBILITY:Ljava/lang/String; -Landroid/provider/Downloads$Impl;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/Downloads$Impl;->DESTINATION_CACHE_PARTITION_PURGEABLE:I -Landroid/provider/Downloads$Impl;->DESTINATION_FILE_URI:I -Landroid/provider/Downloads$Impl;->isNotificationToBeDisplayed(I)Z -Landroid/provider/Downloads$Impl;->isStatusCompleted(I)Z -Landroid/provider/Downloads$Impl;->isStatusError(I)Z -Landroid/provider/Downloads$Impl;->isStatusSuccess(I)Z -Landroid/provider/Downloads$Impl;->PUBLICLY_ACCESSIBLE_DOWNLOADS_URI:Landroid/net/Uri; -Landroid/provider/MediaStore$Files$FileColumns;->FORMAT:Ljava/lang/String; -Landroid/provider/MediaStore$Files$FileColumns;->STORAGE_ID:Ljava/lang/String; -Landroid/provider/MediaStore$Files;->getMtpObjectsUri(Ljava/lang/String;)Landroid/net/Uri; -Landroid/provider/MediaStore$Files;->getMtpObjectsUri(Ljava/lang/String;J)Landroid/net/Uri; -Landroid/provider/MediaStore$Files;->getMtpReferencesUri(Ljava/lang/String;J)Landroid/net/Uri; -Landroid/provider/MediaStore$MediaColumns;->IS_DRM:Ljava/lang/String; -Landroid/provider/Settings$Bookmarks;->add(Landroid/content/ContentResolver;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;CI)Landroid/net/Uri; -Landroid/provider/Settings$Bookmarks;->CONTENT_URI:Landroid/net/Uri; -Landroid/provider/Settings$ContentProviderHolder;->mContentProvider:Landroid/content/IContentProvider; -Landroid/provider/Settings$Global;->ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Global;->HEADS_UP_NOTIFICATIONS_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Global;->HEADS_UP_OFF:I -Landroid/provider/Settings$Global;->HEADS_UP_ON:I -Landroid/provider/Settings$Global;->MOBILE_DATA:Ljava/lang/String; -Landroid/provider/Settings$Global;->MOVED_TO_SECURE:Ljava/util/HashSet; -Landroid/provider/Settings$Global;->MULTI_SIM_USER_PREFERRED_SUBS:[Ljava/lang/String; -Landroid/provider/Settings$Global;->MULTI_SIM_VOICE_PROMPT:Ljava/lang/String; -Landroid/provider/Settings$Global;->NETWORK_SCORER_APP:Ljava/lang/String; -Landroid/provider/Settings$Global;->PACKAGE_VERIFIER_ENABLE:Ljava/lang/String; -Landroid/provider/Settings$Global;->PREFERRED_NETWORK_MODE:Ljava/lang/String; -Landroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z -Landroid/provider/Settings$Global;->REQUIRE_PASSWORD_TO_DECRYPT:Ljava/lang/String; -Landroid/provider/Settings$Global;->sNameValueCache:Landroid/provider/Settings$NameValueCache; -Landroid/provider/Settings$Global;->sProviderHolder:Landroid/provider/Settings$ContentProviderHolder; -Landroid/provider/Settings$Global;->WEBVIEW_PROVIDER:Ljava/lang/String; -Landroid/provider/Settings$Global;->WIFI_SAVED_STATE:Ljava/lang/String; -Landroid/provider/Settings$Global;->WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Global;->ZEN_MODE:Ljava/lang/String; -Landroid/provider/Settings$Global;->ZEN_MODE_ALARMS:I -Landroid/provider/Settings$Global;->ZEN_MODE_CONFIG_ETAG:Ljava/lang/String; -Landroid/provider/Settings$Global;->ZEN_MODE_IMPORTANT_INTERRUPTIONS:I -Landroid/provider/Settings$Global;->ZEN_MODE_NO_INTERRUPTIONS:I -Landroid/provider/Settings$Global;->ZEN_MODE_OFF:I -Landroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; -Landroid/provider/Settings$NameValueCache;->mProviderHolder:Landroid/provider/Settings$ContentProviderHolder; -Landroid/provider/Settings$Secure;->ACCESSIBILITY_AUTOCLICK_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ACCESSIBILITY_CAPTIONING_TYPEFACE:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ACCESSIBILITY_DISPLAY_DALTONIZER:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ACCESSIBILITY_LARGE_POINTER_ICON:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ANR_SHOW_BACKGROUND:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ASSISTANT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->BACKUP_AUTO_RESTORE:Ljava/lang/String; -Landroid/provider/Settings$Secure;->BACKUP_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->BACKUP_PROVISIONED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->BACKUP_TRANSPORT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->DIALER_DEFAULT_APPLICATION:Ljava/lang/String; -Landroid/provider/Settings$Secure;->DOZE_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ENABLED_NOTIFICATION_LISTENERS:Ljava/lang/String; -Landroid/provider/Settings$Secure;->ENABLED_PRINT_SERVICES:Ljava/lang/String; -Landroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I -Landroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)J -Landroid/provider/Settings$Secure;->IMMERSIVE_MODE_CONFIRMATIONS:Ljava/lang/String; -Landroid/provider/Settings$Secure;->INCALL_POWER_BUTTON_BEHAVIOR:Ljava/lang/String; -Landroid/provider/Settings$Secure;->LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS:Ljava/lang/String; -Landroid/provider/Settings$Secure;->LOCK_SCREEN_LOCK_AFTER_TIMEOUT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->LOCK_SCREEN_OWNER_INFO_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$Secure;->LOCK_SCREEN_SHOW_NOTIFICATIONS:Ljava/lang/String; -Landroid/provider/Settings$Secure;->LONG_PRESS_TIMEOUT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->MOVED_TO_GLOBAL:Ljava/util/HashSet; -Landroid/provider/Settings$Secure;->MOVED_TO_LOCK_SETTINGS:Ljava/util/HashSet; -Landroid/provider/Settings$Secure;->NFC_PAYMENT_DEFAULT_COMPONENT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->PACKAGE_VERIFIER_USER_CONSENT:Ljava/lang/String; -Landroid/provider/Settings$Secure;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z -Landroid/provider/Settings$Secure;->putLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)Z -Landroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z -Landroid/provider/Settings$Secure;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZI)Z -Landroid/provider/Settings$Secure;->SELECTED_SPELL_CHECKER:Ljava/lang/String; -Landroid/provider/Settings$Secure;->SELECTED_SPELL_CHECKER_SUBTYPE:Ljava/lang/String; -Landroid/provider/Settings$Secure;->SETTINGS_TO_BACKUP:[Ljava/lang/String; -Landroid/provider/Settings$Secure;->SMS_DEFAULT_APPLICATION:Ljava/lang/String; -Landroid/provider/Settings$Secure;->sNameValueCache:Landroid/provider/Settings$NameValueCache; -Landroid/provider/Settings$Secure;->sProviderHolder:Landroid/provider/Settings$ContentProviderHolder; -Landroid/provider/Settings$Secure;->VOICE_RECOGNITION_SERVICE:Ljava/lang/String; -Landroid/provider/Settings$System;->AIRPLANE_MODE_TOGGLEABLE_RADIOS:Ljava/lang/String; -Landroid/provider/Settings$System;->CAR_DOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->CAR_UNDOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->CLONE_TO_MANAGED_PROFILE:Ljava/util/Set; -Landroid/provider/Settings$System;->DESK_DOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->DESK_UNDOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->DOCK_SOUNDS_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I -Landroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I -Landroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; -Landroid/provider/Settings$System;->HEARING_AID:Ljava/lang/String; -Landroid/provider/Settings$System;->HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY:Ljava/lang/String; -Landroid/provider/Settings$System;->LOCKSCREEN_SOUNDS_ENABLED:Ljava/lang/String; -Landroid/provider/Settings$System;->LOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->MASTER_MONO:Ljava/lang/String; -Landroid/provider/Settings$System;->MOVED_TO_GLOBAL:Ljava/util/HashSet; -Landroid/provider/Settings$System;->MOVED_TO_SECURE:Ljava/util/HashSet; -Landroid/provider/Settings$System;->MOVED_TO_SECURE_THEN_GLOBAL:Ljava/util/HashSet; -Landroid/provider/Settings$System;->NOTIFICATION_LIGHT_PULSE:Ljava/lang/String; -Landroid/provider/Settings$System;->POINTER_LOCATION:Ljava/lang/String; -Landroid/provider/Settings$System;->POINTER_SPEED:Ljava/lang/String; -Landroid/provider/Settings$System;->PRIVATE_SETTINGS:Ljava/util/Set; -Landroid/provider/Settings$System;->PUBLIC_SETTINGS:Ljava/util/Set; -Landroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z -Landroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z -Landroid/provider/Settings$System;->SCREEN_AUTO_BRIGHTNESS_ADJ:Ljava/lang/String; -Landroid/provider/Settings$System;->SETTINGS_TO_BACKUP:[Ljava/lang/String; -Landroid/provider/Settings$System;->SHOW_TOUCHES:Ljava/lang/String; -Landroid/provider/Settings$System;->sNameValueCache:Landroid/provider/Settings$NameValueCache; -Landroid/provider/Settings$System;->sProviderHolder:Landroid/provider/Settings$ContentProviderHolder; -Landroid/provider/Settings$System;->TTY_MODE:Ljava/lang/String; -Landroid/provider/Settings$System;->UNLOCK_SOUND:Ljava/lang/String; -Landroid/provider/Settings$System;->VALIDATORS:Ljava/util/Map; -Landroid/provider/Settings$System;->VIBRATE_IN_SILENT:Ljava/lang/String; -Landroid/provider/Settings;->ACTION_TRUSTED_CREDENTIALS_USER:Ljava/lang/String; -Landroid/provider/Settings;->ACTION_USER_DICTIONARY_INSERT:Ljava/lang/String; -Landroid/provider/Settings;->EXTRA_APP_UID:Ljava/lang/String; -Landroid/provider/Settings;->isCallingPackageAllowedToDrawOverlays(Landroid/content/Context;ILjava/lang/String;Z)Z -Landroid/provider/Settings;->isCallingPackageAllowedToPerformAppOpsProtectedOperation(Landroid/content/Context;ILjava/lang/String;ZI[Ljava/lang/String;Z)Z -Landroid/provider/Settings;->isCallingPackageAllowedToWriteSettings(Landroid/content/Context;ILjava/lang/String;Z)Z -Landroid/provider/Telephony$Mms;->extractAddrSpec(Ljava/lang/String;)Ljava/lang/String; -Landroid/provider/Telephony$Mms;->isPhoneNumber(Ljava/lang/String;)Z -Landroid/provider/Telephony$Mms;->NAME_ADDR_EMAIL_PATTERN:Ljava/util/regex/Pattern; -Landroid/provider/Telephony$Sms$Draft;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; -Landroid/provider/Telephony$Sms$Inbox;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Z)Landroid/net/Uri; -Landroid/provider/Telephony$Sms$Inbox;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Z)Landroid/net/Uri; -Landroid/provider/Telephony$Sms$Sent;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; -Landroid/provider/Telephony$Sms$Sent;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; -Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZ)Landroid/net/Uri; -Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; -Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZ)Landroid/net/Uri; -Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; -Landroid/provider/Telephony$Sms;->isOutgoingFolder(I)Z -Landroid/provider/Telephony$Sms;->moveMessageToFolder(Landroid/content/Context;Landroid/net/Uri;II)Z -Landroid/provider/Telephony$Sms;->query(Landroid/content/ContentResolver;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; -Landroid/provider/Telephony$Threads;->ID_PROJECTION:[Ljava/lang/String; -Landroid/provider/Telephony$Threads;->THREAD_ID_CONTENT_URI:Landroid/net/Uri; Landroid/R$styleable;->ActionBar:[I Landroid/R$styleable;->ActionBar_background:I Landroid/R$styleable;->ActionBar_backgroundSplit:I @@ -3914,11 +1986,6 @@ Landroid/R$styleable;->Window:[I Landroid/R$styleable;->Window_windowBackground:I Landroid/R$styleable;->Window_windowFrame:I Landroid/security/Credentials;->convertToPem([Ljava/security/cert/Certificate;)[B -Landroid/security/Credentials;->getInstance()Landroid/security/Credentials; -Landroid/security/Credentials;->install(Landroid/content/Context;Ljava/lang/String;[B)V -Landroid/security/Credentials;->install(Landroid/content/Context;Ljava/security/KeyPair;)V -Landroid/security/Credentials;->unlock(Landroid/content/Context;)V -Landroid/security/GateKeeper;->getSecureUserId()J Landroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService; Landroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String; Landroid/security/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeystoreService; @@ -3937,42 +2004,8 @@ Landroid/security/IKeystoreService;->reset()I Landroid/security/IKeystoreService;->sign(Ljava/lang/String;[B)[B Landroid/security/IKeystoreService;->ungrant(Ljava/lang/String;I)I Landroid/security/IKeystoreService;->verify(Ljava/lang/String;[B[B)I -Landroid/security/keymaster/ExportResult;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/security/keymaster/KeyCharacteristics;-><init>()V -Landroid/security/keymaster/KeyCharacteristics;->readFromParcel(Landroid/os/Parcel;)V -Landroid/security/keymaster/KeymasterArguments;-><init>()V -Landroid/security/keymaster/KeymasterArguments;->addEnum(II)V -Landroid/security/keymaster/KeymasterArguments;->addUnsignedInt(IJ)V -Landroid/security/keymaster/KeymasterArguments;->addUnsignedLong(ILjava/math/BigInteger;)V -Landroid/security/keymaster/KeymasterArguments;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/security/keymaster/KeymasterArguments;->readFromParcel(Landroid/os/Parcel;)V -Landroid/security/keymaster/KeymasterBlob;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/security/keymaster/OperationResult;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/security/KeyStore$State;->LOCKED:Landroid/security/KeyStore$State; -Landroid/security/KeyStore$State;->UNLOCKED:Landroid/security/KeyStore$State; -Landroid/security/keystore/AndroidKeyStoreProvider;->getKeyStoreOperationHandle(Ljava/lang/Object;)J -Landroid/security/keystore/KeyGenParameterSpec;->getUid()I -Landroid/security/keystore/KeyGenParameterSpec;->isUniqueIdIncluded()Z -Landroid/security/KeyStore;->delete(Ljava/lang/String;)Z -Landroid/security/KeyStore;->get(Ljava/lang/String;)[B -Landroid/security/KeyStore;->getApplicationContext()Landroid/content/Context; -Landroid/security/KeyStore;->getInstance()Landroid/security/KeyStore; -Landroid/security/KeyStore;->getKeyStoreException(I)Landroid/security/KeyStoreException; -Landroid/security/KeyStore;->isEmpty()Z -Landroid/security/KeyStore;->NO_ERROR:I -Landroid/security/KeyStore;->reset()Z -Landroid/security/KeyStore;->state()Landroid/security/KeyStore$State; -Landroid/security/KeyStore;->state(I)Landroid/security/KeyStore$State; -Landroid/security/KeyStore;->unlock(Ljava/lang/String;)Z -Landroid/security/KeystoreArguments;-><init>([[B)V -Landroid/security/KeystoreArguments;->CREATOR:Landroid/os/Parcelable$Creator; -Landroid/security/net/config/RootTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; Landroid/service/carrier/ICarrierMessagingCallback$Stub;-><init>()V Landroid/service/carrier/ICarrierMessagingService;->filterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/ICarrierMessagingCallback;)V -Landroid/service/dreams/DreamService;->getDozeScreenBrightness()I -Landroid/service/dreams/DreamService;->setDozeScreenBrightness(I)V -Landroid/service/dreams/DreamService;->setDozeScreenState(I)V -Landroid/service/dreams/DreamService;->setWindowless(Z)V Landroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager; Landroid/service/dreams/IDreamManager;->awaken()V Landroid/service/dreams/IDreamManager;->dream()V @@ -3996,46 +2029,8 @@ Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnect(Ljava/lang/Stri Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnectFailed()V Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildren(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildrenWithOptions(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/os/Bundle;)V -Landroid/service/media/MediaBrowserService$Result;->mFlags:I -Landroid/service/media/MediaBrowserService;->KEY_MEDIA_ITEM:Ljava/lang/String; Landroid/service/notification/INotificationListener$Stub;-><init>()V -Landroid/service/notification/NotificationListenerService$Ranking;->getVisibilityOverride()I -Landroid/service/notification/NotificationListenerService;->getNotificationInterface()Landroid/app/INotificationManager; -Landroid/service/notification/NotificationListenerService;->isBound()Z -Landroid/service/notification/NotificationListenerService;->mHandler:Landroid/os/Handler; -Landroid/service/notification/NotificationListenerService;->mNoMan:Landroid/app/INotificationManager; -Landroid/service/notification/NotificationListenerService;->mWrapper:Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper; -Landroid/service/notification/NotificationListenerService;->TAG:Ljava/lang/String; -Landroid/service/notification/StatusBarNotification;->getInitialPid()I -Landroid/service/notification/StatusBarNotification;->getOpPkg()Ljava/lang/String; -Landroid/service/notification/StatusBarNotification;->getPackageContext(Landroid/content/Context;)Landroid/content/Context; -Landroid/service/notification/StatusBarNotification;->getUid()I -Landroid/service/notification/StatusBarNotification;->id:I -Landroid/service/notification/StatusBarNotification;->initialPid:I -Landroid/service/notification/StatusBarNotification;->notification:Landroid/app/Notification; -Landroid/service/notification/StatusBarNotification;->pkg:Ljava/lang/String; -Landroid/service/notification/StatusBarNotification;->postTime:J -Landroid/service/notification/StatusBarNotification;->tag:Ljava/lang/String; -Landroid/service/notification/StatusBarNotification;->uid:I -Landroid/service/notification/StatusBarNotification;->user:Landroid/os/UserHandle; -Landroid/service/notification/ZenModeConfig$ScheduleInfo;->days:[I -Landroid/service/notification/ZenModeConfig$ScheduleInfo;->endHour:I -Landroid/service/notification/ZenModeConfig$ScheduleInfo;->endMinute:I -Landroid/service/notification/ZenModeConfig$ScheduleInfo;->startHour:I -Landroid/service/notification/ZenModeConfig$ScheduleInfo;->startMinute:I -Landroid/service/notification/ZenModeConfig$ZenRule;->conditionId:Landroid/net/Uri; -Landroid/service/notification/ZenModeConfig$ZenRule;->creationTime:J -Landroid/service/notification/ZenModeConfig$ZenRule;->enabled:Z -Landroid/service/notification/ZenModeConfig$ZenRule;->name:Ljava/lang/String; -Landroid/service/notification/ZenModeConfig$ZenRule;->snoozing:Z -Landroid/service/notification/ZenModeConfig$ZenRule;->zenMode:I -Landroid/service/notification/ZenModeConfig;-><init>()V -Landroid/service/notification/ZenModeConfig;->allowAlarms:Z -Landroid/service/notification/ZenModeConfig;->automaticRules:Landroid/util/ArrayMap; -Landroid/service/notification/ZenModeConfig;->tryParseScheduleConditionId(Landroid/net/Uri;)Landroid/service/notification/ZenModeConfig$ScheduleInfo; Landroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService; -Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;->getCaptureSession()Ljava/lang/Integer; -Landroid/service/voice/VoiceInteractionService;->isKeyphraseAndLocaleSupportedForHotword(Ljava/lang/String;Ljava/util/Locale;)Z Landroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager; Landroid/service/vr/IVrManager;->getVr2dDisplayId()I Landroid/service/vr/IVrManager;->getVrModeState()Z @@ -4046,9 +2041,6 @@ Landroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lan Landroid/service/wallpaper/IWallpaperEngine;->setDesiredSize(II)V Landroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V Landroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService; -Landroid/service/wallpaper/WallpaperService$Engine;->mPendingXOffset:F -Landroid/service/wallpaper/WallpaperService$Engine;->setFixedSizeAllowed(Z)V -Landroid/service/wallpaper/WallpaperService;->MSG_WINDOW_RESIZED:I Landroid/speech/IRecognitionListener;->onEvent(ILandroid/os/Bundle;)V Landroid/system/Int32Ref;->value:I Landroid/system/OsConstants;-><init>()V @@ -4448,160 +2440,6 @@ Landroid/telephony/TelephonyManager;->setSimOperatorNumericForPhone(ILjava/lang/ Landroid/telephony/TelephonyManager;->setSimStateForPhone(ILjava/lang/String;)V Landroid/telephony/TelephonyManager;->setTelephonyProperty(ILjava/lang/String;Ljava/lang/String;)V Landroid/telephony/VoLteServiceState;-><init>(I)V -Landroid/text/AndroidBidi;->bidi(I[C[B)I -Landroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics; -Landroid/text/DynamicLayout;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V -Landroid/text/DynamicLayout;->getBlockEndLines()[I -Landroid/text/DynamicLayout;->getBlockIndices()[I -Landroid/text/DynamicLayout;->getIndexFirstChangedBlock()I -Landroid/text/DynamicLayout;->getNumberOfBlocks()I -Landroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V -Landroid/text/DynamicLayout;->sStaticLayout:Landroid/text/StaticLayout; -Landroid/text/FontConfig$Family;->getFonts()[Landroid/text/FontConfig$Font; -Landroid/text/FontConfig$Family;->getName()Ljava/lang/String; -Landroid/text/FontConfig$Family;->getVariant()I -Landroid/text/FontConfig$Font;->getAxes()[Landroid/graphics/fonts/FontVariationAxis; -Landroid/text/FontConfig$Font;->getTtcIndex()I -Landroid/text/FontConfig$Font;->getWeight()I -Landroid/text/FontConfig$Font;->isItalic()Z -Landroid/text/FontConfig;->getFamilies()[Landroid/text/FontConfig$Family; -Landroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;)Ljava/lang/String; -Landroid/text/format/DateFormat;->getTimeFormatString(Landroid/content/Context;I)Ljava/lang/String; -Landroid/text/format/DateFormat;->hasDesignator(Ljava/lang/CharSequence;C)Z -Landroid/text/format/DateFormat;->hasSeconds(Ljava/lang/CharSequence;)Z -Landroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z -Landroid/text/format/DateUtils;->formatDuration(J)Ljava/lang/CharSequence; -Landroid/text/format/DateUtils;->formatDuration(JI)Ljava/lang/CharSequence; -Landroid/text/format/Formatter;->formatBytes(Landroid/content/res/Resources;JI)Landroid/text/format/Formatter$BytesResult; -Landroid/text/format/Formatter;->formatShortElapsedTime(Landroid/content/Context;J)Ljava/lang/String; -Landroid/text/format/Formatter;->formatShortElapsedTimeRoundingUpToMinutes(Landroid/content/Context;J)Ljava/lang/String; -Landroid/text/Html;->withinStyle(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;II)V -Landroid/text/InputFilter$LengthFilter;->mMax:I -Landroid/text/Layout$Alignment;->ALIGN_LEFT:Landroid/text/Layout$Alignment; -Landroid/text/Layout$Alignment;->ALIGN_RIGHT:Landroid/text/Layout$Alignment; -Landroid/text/Layout;->DIRS_ALL_LEFT_TO_RIGHT:Landroid/text/Layout$Directions; -Landroid/text/Layout;->DIRS_ALL_RIGHT_TO_LEFT:Landroid/text/Layout$Directions; -Landroid/text/Layout;->DIR_REQUEST_DEFAULT_LTR:I -Landroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V -Landroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V -Landroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J -Landroid/text/Layout;->getPrimaryHorizontal(IZ)F -Landroid/text/Layout;->getSecondaryHorizontal(IZ)F -Landroid/text/Layout;->isLevelBoundary(I)Z -Landroid/text/Layout;->mPaint:Landroid/text/TextPaint; -Landroid/text/Layout;->shouldClampCursor(I)Z -Landroid/text/method/AllCapsTransformationMethod;-><init>(Landroid/content/Context;)V -Landroid/text/method/HideReturnsTransformationMethod;->sInstance:Landroid/text/method/HideReturnsTransformationMethod; -Landroid/text/method/LinkMovementMethod;->sInstance:Landroid/text/method/LinkMovementMethod; -Landroid/text/method/MetaKeyKeyListener;->startSelecting(Landroid/view/View;Landroid/text/Spannable;)V -Landroid/text/method/MetaKeyKeyListener;->stopSelecting(Landroid/view/View;Landroid/text/Spannable;)V -Landroid/text/method/PasswordTransformationMethod;->DOT:C -Landroid/text/method/PasswordTransformationMethod;->sInstance:Landroid/text/method/PasswordTransformationMethod; -Landroid/text/method/TransformationMethod2;->setLengthChangesAllowed(Z)V -Landroid/text/method/WordIterator;-><init>(Ljava/util/Locale;)V -Landroid/text/method/WordIterator;->following(I)I -Landroid/text/method/WordIterator;->getBeginning(I)I -Landroid/text/method/WordIterator;->getEnd(I)I -Landroid/text/method/WordIterator;->getNextWordEndOnTwoWordBoundary(I)I -Landroid/text/method/WordIterator;->getPrevWordBeginningOnTwoWordsBoundary(I)I -Landroid/text/method/WordIterator;->getPunctuationBeginning(I)I -Landroid/text/method/WordIterator;->getPunctuationEnd(I)I -Landroid/text/method/WordIterator;->isAfterPunctuation(I)Z -Landroid/text/method/WordIterator;->isBoundary(I)Z -Landroid/text/method/WordIterator;->isOnPunctuation(I)Z -Landroid/text/method/WordIterator;->nextBoundary(I)I -Landroid/text/method/WordIterator;->preceding(I)I -Landroid/text/method/WordIterator;->prevBoundary(I)I -Landroid/text/method/WordIterator;->setCharSequence(Ljava/lang/CharSequence;II)V -Landroid/text/Selection;->moveToFollowing(Landroid/text/Spannable;Landroid/text/Selection$PositionIterator;Z)Z -Landroid/text/Selection;->moveToPreceding(Landroid/text/Spannable;Landroid/text/Selection$PositionIterator;Z)Z -Landroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;Z)[Ljava/lang/Object; -Landroid/text/SpannableStringBuilder;->mGapLength:I -Landroid/text/SpannableStringBuilder;->mGapStart:I -Landroid/text/SpannableStringBuilder;->mSpanCount:I -Landroid/text/SpannableStringBuilder;->mSpanEnds:[I -Landroid/text/SpannableStringBuilder;->mSpanFlags:[I -Landroid/text/SpannableStringBuilder;->mSpans:[Ljava/lang/Object; -Landroid/text/SpannableStringBuilder;->mSpanStarts:[I -Landroid/text/SpannableStringBuilder;->mText:[C -Landroid/text/SpannableStringBuilder;->sendToSpanWatchers(III)V -Landroid/text/SpannableStringBuilder;->substring(II)Ljava/lang/String; -Landroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;II)V -Landroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V -Landroid/text/SpannableStringInternal;->COLUMNS:I -Landroid/text/SpannableStringInternal;->copySpans(Landroid/text/SpannableStringInternal;II)V -Landroid/text/SpannableStringInternal;->copySpans(Landroid/text/Spanned;II)V -Landroid/text/SpannableStringInternal;->EMPTY:[Ljava/lang/Object; -Landroid/text/SpannableStringInternal;->END:I -Landroid/text/SpannableStringInternal;->FLAGS:I -Landroid/text/SpannableStringInternal;->getSpanEnd(Ljava/lang/Object;)I -Landroid/text/SpannableStringInternal;->getSpanFlags(Ljava/lang/Object;)I -Landroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object; -Landroid/text/SpannableStringInternal;->getSpanStart(Ljava/lang/Object;)I -Landroid/text/SpannableStringInternal;->isIndexFollowsNextLine(I)Z -Landroid/text/SpannableStringInternal;->isOutOfCopyRange(IIII)Z -Landroid/text/SpannableStringInternal;->mSpanCount:I -Landroid/text/SpannableStringInternal;->mSpanData:[I -Landroid/text/SpannableStringInternal;->mSpans:[Ljava/lang/Object; -Landroid/text/SpannableStringInternal;->mText:Ljava/lang/String; -Landroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I -Landroid/text/SpannableStringInternal;->region(II)Ljava/lang/String; -Landroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;)V -Landroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V -Landroid/text/SpannableStringInternal;->sendSpanChanged(Ljava/lang/Object;IIII)V -Landroid/text/SpannableStringInternal;->sendSpanRemoved(Ljava/lang/Object;II)V -Landroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V -Landroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;IIIZ)V -Landroid/text/SpannableStringInternal;->START:I -Landroid/text/SpanSet;->spans:[Ljava/lang/Object; -Landroid/text/StaticLayout$LineBreaks;->ascents:[F -Landroid/text/StaticLayout$LineBreaks;->breaks:[I -Landroid/text/StaticLayout$LineBreaks;->descents:[F -Landroid/text/StaticLayout$LineBreaks;->flags:[I -Landroid/text/StaticLayout$LineBreaks;->widths:[F -Landroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZLandroid/text/TextUtils$TruncateAt;II)V -Landroid/text/StaticLayout;->ELLIPSIS_START:I -Landroid/text/StaticLayout;->getHeight(Z)I -Landroid/text/StaticLayout;->mColumns:I -Landroid/text/StaticLayout;->mLineCount:I -Landroid/text/StaticLayout;->mLineDirections:[Landroid/text/Layout$Directions; -Landroid/text/StaticLayout;->mLines:[I -Landroid/text/StaticLayout;->mMaximumVisibleLineCount:I -Landroid/text/style/BulletSpan;->mColor:I -Landroid/text/style/BulletSpan;->mGapWidth:I -Landroid/text/style/BulletSpan;->mWantColor:Z -Landroid/text/style/DynamicDrawableSpan;->mDrawableRef:Ljava/lang/ref/WeakReference; -Landroid/text/style/EasyEditSpan;->getPendingIntent()Landroid/app/PendingIntent; -Landroid/text/style/EasyEditSpan;->isDeleteEnabled()Z -Landroid/text/style/EasyEditSpan;->setDeleteEnabled(Z)V -Landroid/text/style/ImageSpan;->mDrawable:Landroid/graphics/drawable/Drawable; -Landroid/text/style/SpellCheckSpan;-><init>()V -Landroid/text/style/SpellCheckSpan;-><init>(Landroid/os/Parcel;)V -Landroid/text/style/SpellCheckSpan;->isSpellCheckInProgress()Z -Landroid/text/style/SpellCheckSpan;->setSpellCheckInProgress(Z)V -Landroid/text/style/SuggestionRangeSpan;-><init>()V -Landroid/text/style/SuggestionRangeSpan;-><init>(Landroid/os/Parcel;)V -Landroid/text/style/SuggestionRangeSpan;->setBackgroundColor(I)V -Landroid/text/style/SuggestionSpan;->getNotificationTargetClassName()Ljava/lang/String; -Landroid/text/style/SuggestionSpan;->getUnderlineColor()I -Landroid/text/style/SuggestionSpan;->mEasyCorrectUnderlineColor:I -Landroid/text/style/SuggestionSpan;->mEasyCorrectUnderlineThickness:F -Landroid/text/style/SuggestionSpan;->notifySelection(Landroid/content/Context;Ljava/lang/String;I)V -Landroid/text/TextLine;->mCharacterStyleSpanSet:Landroid/text/SpanSet; -Landroid/text/TextLine;->mMetricAffectingSpanSpanSet:Landroid/text/SpanSet; -Landroid/text/TextLine;->mReplacementSpanSpanSet:Landroid/text/SpanSet; -Landroid/text/TextLine;->mSpanned:Landroid/text/Spanned; -Landroid/text/TextLine;->mText:Ljava/lang/CharSequence; -Landroid/text/TextLine;->obtain()Landroid/text/TextLine; -Landroid/text/TextLine;->sCached:[Landroid/text/TextLine; -Landroid/text/TextPaint;->setUnderlineText(IF)V -Landroid/text/TextPaint;->underlineColor:I -Landroid/text/TextPaint;->underlineThickness:F -Landroid/text/TextUtils$TruncateAt;->END_SMALL:Landroid/text/TextUtils$TruncateAt; -Landroid/text/TextUtils;->packRangeInLong(II)J -Landroid/text/TextUtils;->unpackRangeEndFromLong(J)I -Landroid/text/TextUtils;->unpackRangeStartFromLong(J)I -Landroid/text/util/Linkify;->gatherTelLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Landroid/content/Context;)V Landroid/transition/ChangeBounds;->BOTTOM_RIGHT_ONLY_PROPERTY:Landroid/util/Property; Landroid/transition/ChangeBounds;->POSITION_PROPERTY:Landroid/util/Property; Landroid/transition/Scene;->mEnterAction:Ljava/lang/Runnable; @@ -4613,97 +2451,7 @@ Landroid/transition/Transition;->getRunningAnimators()Landroid/util/ArrayMap; Landroid/transition/TransitionManager;->getRunningTransitions()Landroid/util/ArrayMap; Landroid/transition/TransitionManager;->sPendingTransitions:Ljava/util/ArrayList; Landroid/transition/TransitionManager;->sRunningTransitions:Ljava/lang/ThreadLocal; -Landroid/util/ArrayMap;->allocArrays(I)V -Landroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V -Landroid/util/ArrayMap;->CACHE_SIZE:I -Landroid/util/ArrayMap;->EMPTY:Landroid/util/ArrayMap; -Landroid/util/ArrayMap;->EMPTY_IMMUTABLE_INTS:[I -Landroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V -Landroid/util/ArrayMap;->indexOf(Ljava/lang/Object;I)I -Landroid/util/ArrayMap;->indexOfNull()I -Landroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I -Landroid/util/ArrayMap;->mArray:[Ljava/lang/Object; -Landroid/util/ArrayMap;->mBaseCache:[Ljava/lang/Object; -Landroid/util/ArrayMap;->mBaseCacheSize:I -Landroid/util/ArrayMap;->mHashes:[I -Landroid/util/ArrayMap;->mSize:I -Landroid/util/ArrayMap;->mTwiceBaseCache:[Ljava/lang/Object; -Landroid/util/ArrayMap;->mTwiceBaseCacheSize:I -Landroid/util/ArraySet;-><init>(Ljava/util/Collection;)V -Landroid/util/ArraySet;->allocArrays(I)V -Landroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V -Landroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I -Landroid/util/ArraySet;->indexOfNull()I -Landroid/util/ArraySet;->mArray:[Ljava/lang/Object; -Landroid/util/ArraySet;->mHashes:[I -Landroid/util/ArraySet;->mSize:I -Landroid/util/Base64;-><init>()V -Landroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;IZ)V -Landroid/util/DebugUtils;->buildShortClassTag(Ljava/lang/Object;Ljava/lang/StringBuilder;)V -Landroid/util/DisplayMetrics;->DENSITY_DEVICE:I -Landroid/util/DisplayMetrics;->noncompatDensityDpi:I -Landroid/util/DisplayMetrics;->noncompatHeightPixels:I -Landroid/util/DisplayMetrics;->noncompatWidthPixels:I -Landroid/util/EventLog$Event;-><init>([B)V -Landroid/util/IconDrawableFactory;->getBadgedIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable; -Landroid/util/LocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V -Landroid/util/Log;->println_native(IILjava/lang/String;Ljava/lang/String;)I -Landroid/util/Log;->wtf(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ZZ)I -Landroid/util/LogWriter;-><init>(ILjava/lang/String;)V -Landroid/util/LongSparseLongArray;->mKeys:[J -Landroid/util/LongSparseLongArray;->mSize:I -Landroid/util/LongSparseLongArray;->mValues:[J -Landroid/util/LruCache;->map:Ljava/util/LinkedHashMap; -Landroid/util/MathUtils;->abs(F)F -Landroid/util/MathUtils;->constrain(FFF)F -Landroid/util/MathUtils;->constrain(III)I -Landroid/util/MathUtils;->lerp(FFF)F -Landroid/util/MathUtils;->max(II)F -Landroid/util/NtpTrustedTime;->currentTimeMillis()J -Landroid/util/NtpTrustedTime;->forceRefresh()Z -Landroid/util/NtpTrustedTime;->getCachedNtpTime()J -Landroid/util/NtpTrustedTime;->getCachedNtpTimeReference()J -Landroid/util/NtpTrustedTime;->getInstance(Landroid/content/Context;)Landroid/util/NtpTrustedTime; -Landroid/util/NtpTrustedTime;->hasCache()Z -Landroid/util/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path; -Landroid/util/Pools$Pool;->acquire()Ljava/lang/Object; -Landroid/util/Pools$Pool;->release(Ljava/lang/Object;)Z -Landroid/util/Pools$SimplePool;-><init>(I)V -Landroid/util/Pools$SimplePool;->acquire()Ljava/lang/Object; -Landroid/util/Pools$SimplePool;->mPool:[Ljava/lang/Object; -Landroid/util/Pools$SimplePool;->release(Ljava/lang/Object;)Z -Landroid/util/Pools$SynchronizedPool;-><init>(I)V -Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object; -Landroid/util/Pools$SynchronizedPool;->release(Ljava/lang/Object;)Z -Landroid/util/Rational;->mDenominator:I -Landroid/util/Rational;->mNumerator:I Landroid/util/Singleton;-><init>()V -Landroid/util/Singleton;->get()Ljava/lang/Object; -Landroid/util/Singleton;->mInstance:Ljava/lang/Object; -Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I -Landroid/util/Slog;->i(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->v(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I -Landroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I -Landroid/util/Slog;->wtfStack(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/SparseArray;->mKeys:[I -Landroid/util/SparseArray;->mSize:I -Landroid/util/SparseArray;->mValues:[Ljava/lang/Object; -Landroid/util/SparseBooleanArray;->mKeys:[I -Landroid/util/SparseBooleanArray;->mSize:I -Landroid/util/SparseBooleanArray;->mValues:[Z -Landroid/util/SparseIntArray;->mKeys:[I -Landroid/util/SparseIntArray;->mSize:I -Landroid/util/SparseIntArray;->mValues:[I -Landroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;)V -Landroid/util/TimeUtils;->formatDuration(JLjava/io/PrintWriter;I)V -Landroid/util/TimeUtils;->logTimeOfDay(J)Ljava/lang/String; -Landroid/util/TrustedTime;->currentTimeMillis()J -Landroid/util/TrustedTime;->forceRefresh()Z -Landroid/util/TrustedTime;->getCacheAge()J -Landroid/util/TrustedTime;->hasCache()Z Landroid/view/accessibility/AccessibilityEvent;->mAction:I Landroid/view/accessibility/AccessibilityEvent;->mEventType:I Landroid/view/accessibility/AccessibilityInteractionClient;->clearCache()V @@ -5270,12 +3018,6 @@ Landroid/view/View;->removePerformClickCallback()V Landroid/view/View;->requestAccessibilityFocus()Z Landroid/view/View;->resetDisplayList()V Landroid/view/View;->resetPaddingToInitialValues()V -Landroid/view/View;->resetResolvedDrawables()V -Landroid/view/View;->resetResolvedLayoutDirection()V -Landroid/view/View;->resetResolvedPadding()V -Landroid/view/View;->resetResolvedTextAlignment()V -Landroid/view/View;->resetResolvedTextDirection()V -Landroid/view/View;->resetRtlProperties()V Landroid/view/View;->resolvePadding()V Landroid/view/View;->setAlphaNoInvalidation(F)Z Landroid/view/View;->setAnimationMatrix(Landroid/graphics/Matrix;)V @@ -5283,7 +3025,6 @@ 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;->setIsRootNamespace(Z)V Landroid/view/View;->setLeftTopRightBottom(IIII)V Landroid/view/View;->setTagInternal(ILjava/lang/Object;)V Landroid/view/View;->setTransitionAlpha(F)V @@ -5297,7 +3038,6 @@ 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;->getDeviceGlobalActionKeyTimeout()J Landroid/view/ViewConfiguration;->getDoubleTapMinTime()I Landroid/view/ViewConfiguration;->getDoubleTapSlop()I Landroid/view/ViewConfiguration;->getHoverTapSlop()I @@ -5346,11 +3086,6 @@ 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;->resetResolvedDrawables()V -Landroid/view/ViewGroup;->resetResolvedLayoutDirection()V -Landroid/view/ViewGroup;->resetResolvedPadding()V -Landroid/view/ViewGroup;->resetResolvedTextAlignment()V -Landroid/view/ViewGroup;->resetResolvedTextDirection()V Landroid/view/ViewGroup;->resolvePadding()V Landroid/view/ViewGroup;->suppressLayout(Z)V Landroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V @@ -7833,15 +5568,6 @@ Llibcore/io/Memory;->pokeLong(JJZ)V Llibcore/io/Streams;->copy(Ljava/io/InputStream;Ljava/io/OutputStream;)I Llibcore/util/BasicLruCache;->map:Ljava/util/LinkedHashMap; Llibcore/util/ZoneInfo;->mTransitions:[J -Lorg/apache/http/conn/ssl/AbstractVerifier;->BAD_COUNTRY_2LDS:[Ljava/lang/String; -Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>()V -Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V -Lorg/apache/http/conn/ssl/SSLSocketFactory;->createKeyManagers(Ljava/security/KeyStore;Ljava/lang/String;)[Ljavax/net/ssl/KeyManager; -Lorg/apache/http/conn/ssl/SSLSocketFactory;->createTrustManagers(Ljava/security/KeyStore;)[Ljavax/net/ssl/TrustManager; -Lorg/apache/http/conn/ssl/SSLSocketFactory;->hostnameVerifier:Lorg/apache/http/conn/ssl/X509HostnameVerifier; -Lorg/apache/http/conn/ssl/SSLSocketFactory;->nameResolver:Lorg/apache/http/conn/scheme/HostNameResolver; -Lorg/apache/http/conn/ssl/SSLSocketFactory;->socketfactory:Ljavax/net/ssl/SSLSocketFactory; -Lorg/apache/http/conn/ssl/SSLSocketFactory;->sslcontext:Ljavax/net/ssl/SSLContext; Lorg/ccil/cowan/tagsoup/AttributesImpl;->data:[Ljava/lang/String; Lorg/ccil/cowan/tagsoup/AttributesImpl;->length:I Lorg/ccil/cowan/tagsoup/ElementType;->theAtts:Lorg/ccil/cowan/tagsoup/AttributesImpl; diff --git a/config/hiddenapi-p-light-greylist.txt b/config/hiddenapi-p-light-greylist.txt index e360879ddc7b..e26a4c79320b 100644 --- a/config/hiddenapi-p-light-greylist.txt +++ b/config/hiddenapi-p-light-greylist.txt @@ -534,7 +534,7 @@ Landroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landro Landroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V Landroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V Landroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V -Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V +Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V Landroid/app/IProcessObserver$Stub;-><init>()V Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt index 2808166f7a5b..95d589ad2904 100644 --- a/config/hiddenapi-vendor-list.txt +++ b/config/hiddenapi-vendor-list.txt @@ -1,18 +1,3 @@ -Landroid/app/Activity;->managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; -Landroid/app/Activity;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V -Landroid/app/ActivityManager$TaskDescription;->loadTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap; -Landroid/app/ActivityManager$TaskSnapshot;->getSnapshot()Landroid/graphics/GraphicBuffer; -Landroid/app/ActivityManagerNative;->broadcastStickyIntent(Landroid/content/Intent;Ljava/lang/String;I)V -Landroid/app/ActivityOptions;->makeRemoteAnimation(Landroid/view/RemoteAnimationAdapter;)Landroid/app/ActivityOptions; -Landroid/app/ActivityOptions;->setSplitScreenCreateMode(I)V -Landroid/app/ActivityView;-><init>(Landroid/content/Context;)V -Landroid/app/ActivityView;->release()V -Landroid/app/ActivityView;->startActivity(Landroid/app/PendingIntent;)V -Landroid/app/ActivityView;->startActivity(Landroid/content/Intent;)V -Landroid/app/AppOpsManager$OpEntry;->getOp()I -Landroid/app/AppOpsManager$OpEntry;->getTime()J -Landroid/app/AppOpsManager;->getPackagesForOps([I)Ljava/util/List; -Landroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder; Landroid/app/IActivityController$Stub;-><init>()V Landroid/app/IActivityManager;->cancelRecentsAnimation(Z)V Landroid/app/IActivityManager;->cancelTaskWindowTransition(I)V @@ -34,44 +19,11 @@ Landroid/app/IAlarmManager;->setTime(J)Z Landroid/app/IAssistDataReceiver$Stub;-><init>()V Landroid/app/IAssistDataReceiver;->onHandleAssistData(Landroid/os/Bundle;)V Landroid/app/IAssistDataReceiver;->onHandleAssistScreenshot(Landroid/graphics/Bitmap;)V -Landroid/app/KeyguardManager;->isDeviceLocked(I)Z -Landroid/app/NotificationManager;->cancelAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)V -Landroid/app/StatusBarManager;->removeIcon(Ljava/lang/String;)V -Landroid/app/StatusBarManager;->setIcon(Ljava/lang/String;IILjava/lang/String;)V -Landroid/app/TaskInfo;->configuration:Landroid/content/res/Configuration; -Landroid/app/TaskStackListener;->onActivityDismissingDockedStack()V -Landroid/app/TaskStackListener;->onActivityForcedResizable(Ljava/lang/String;II)V -Landroid/app/TaskStackListener;->onActivityLaunchOnSecondaryDisplayFailed()V -Landroid/app/TaskStackListener;->onActivityPinned(Ljava/lang/String;III)V -Landroid/app/TaskStackListener;->onActivityRequestedOrientationChanged(II)V -Landroid/app/TaskStackListener;->onActivityUnpinned()V -Landroid/app/TaskStackListener;->onPinnedActivityRestartAttempt(Z)V -Landroid/app/TaskStackListener;->onPinnedStackAnimationEnded()V -Landroid/app/TaskStackListener;->onPinnedStackAnimationStarted()V -Landroid/app/TaskStackListener;->onTaskMovedToFront(I)V -Landroid/app/TaskStackListener;->onTaskProfileLocked(II)V -Landroid/app/TaskStackListener;->onTaskRemoved(I)V -Landroid/app/TaskStackListener;->onTaskSnapshotChanged(ILandroid/app/ActivityManager$TaskSnapshot;)V -Landroid/app/TaskStackListener;->onTaskStackChanged()V -Landroid/app/WallpaperColors;-><init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;I)V Landroid/bluetooth/IBluetooth;->sendConnectionStateChange(Landroid/bluetooth/BluetoothDevice;III)V Landroid/companion/ICompanionDeviceDiscoveryService$Stub;-><init>()V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelected(Ljava/lang/String;ILjava/lang/String;)V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelectionCancel()V Landroid/companion/IFindDeviceCallback;->onSuccess(Landroid/app/PendingIntent;)V -Landroid/content/ContentProvider;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V -Landroid/content/ContentProvider;->attachInfoForTesting(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V -Landroid/content/ContentProvider;->getIContentProvider()Landroid/content/IContentProvider; -Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V -Landroid/content/ContentValues;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList; -Landroid/content/ContentValues;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V -Landroid/content/Context;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent; -Landroid/content/Context;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V -Landroid/content/Context;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName; -Landroid/content/ContextWrapper;->getThemeResId()I -Landroid/content/Intent;->getExtra(Ljava/lang/String;)Ljava/lang/Object; -Landroid/content/Intent;->getIBinderExtra(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/content/Intent;->resolveSystemService(Landroid/content/pm/PackageManager;I)Landroid/content/ComponentName; Landroid/content/pm/IPackageDataObserver$Stub;-><init>()V Landroid/content/pm/IPackageDeleteObserver$Stub;-><init>()V Landroid/content/pm/IPackageDeleteObserver;->packageDeleted(Ljava/lang/String;I)V @@ -80,8 +32,6 @@ Landroid/content/pm/IPackageManager;->getApplicationInfo(Ljava/lang/String;II)La Landroid/content/pm/IPackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName; Landroid/content/pm/IPackageManager;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; Landroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V -Landroid/database/sqlite/SqliteWrapper;->insert(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri; -Landroid/database/sqlite/SqliteWrapper;->query(Landroid/content/Context;Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; Landroid/hardware/location/IActivityRecognitionHardwareClient;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V Landroid/location/IGeocodeProvider;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; Landroid/location/IGeocodeProvider;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; @@ -114,23 +64,7 @@ Landroid/media/tv/ITvRemoteServiceInput;->sendPointerDown(Landroid/os/IBinder;II Landroid/media/tv/ITvRemoteServiceInput;->sendPointerSync(Landroid/os/IBinder;)V Landroid/media/tv/ITvRemoteServiceInput;->sendPointerUp(Landroid/os/IBinder;I)V Landroid/media/tv/ITvRemoteServiceInput;->sendTimestamp(Landroid/os/IBinder;J)V -Landroid/net/ConnectivityManager$PacketKeepalive;->stop()V Landroid/net/ConnectivityManager$PacketKeepaliveCallback;-><init>()V -Landroid/net/ConnectivityManager$PacketKeepaliveCallback;->onError(I)V -Landroid/net/ConnectivityManager$PacketKeepaliveCallback;->onStarted()V -Landroid/net/ConnectivityManager$PacketKeepaliveCallback;->onStopped()V -Landroid/net/ConnectivityManager;->getActiveNetworkQuotaInfo()Landroid/net/NetworkQuotaInfo; -Landroid/net/ConnectivityManager;->setAirplaneMode(Z)V -Landroid/net/ConnectivityManager;->startNattKeepalive(Landroid/net/Network;ILandroid/net/ConnectivityManager$PacketKeepaliveCallback;Ljava/net/InetAddress;ILjava/net/InetAddress;)Landroid/net/ConnectivityManager$PacketKeepalive; -Landroid/net/ConnectivityManager;->tether(Ljava/lang/String;)I -Landroid/net/ConnectivityManager;->untether(Ljava/lang/String;)I -Landroid/net/DhcpResults;-><init>()V -Landroid/net/DhcpResults;-><init>(Landroid/net/DhcpResults;)V -Landroid/net/DhcpResults;-><init>(Landroid/net/StaticIpConfiguration;)V -Landroid/net/DhcpResults;->leaseDuration:I -Landroid/net/DhcpResults;->mtu:I -Landroid/net/DhcpResults;->serverAddress:Ljava/net/Inet4Address; -Landroid/net/DhcpResults;->vendorInfo:Ljava/lang/String; Landroid/net/IConnectivityManager;->getAllNetworkState()[Landroid/net/NetworkState; Landroid/net/INetd$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetd; Landroid/net/INetd;->interfaceAddAddress(Ljava/lang/String;Ljava/lang/String;I)V @@ -139,149 +73,7 @@ Landroid/net/INetworkStatsService$Stub;->asInterface(Landroid/os/IBinder;)Landro Landroid/net/INetworkStatsSession;->getHistoryForNetwork(Landroid/net/NetworkTemplate;I)Landroid/net/NetworkStatsHistory; Landroid/net/INetworkStatsSession;->getHistoryForUid(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory; Landroid/net/InterfaceConfiguration;-><init>()V -Landroid/net/InterfaceConfiguration;->setLinkAddress(Landroid/net/LinkAddress;)V -Landroid/net/LinkAddress;-><init>(Ljava/lang/String;)V -Landroid/net/LinkAddress;-><init>(Ljava/net/InetAddress;I)V -Landroid/net/LinkAddress;->isIPv6()Z -Landroid/net/LinkAddress;->isSameAddressAs(Landroid/net/LinkAddress;)Z -Landroid/net/LinkProperties$ProvisioningChange;->GAINED_PROVISIONING:Landroid/net/LinkProperties$ProvisioningChange; -Landroid/net/LinkProperties$ProvisioningChange;->LOST_PROVISIONING:Landroid/net/LinkProperties$ProvisioningChange; -Landroid/net/LinkProperties$ProvisioningChange;->STILL_NOT_PROVISIONED:Landroid/net/LinkProperties$ProvisioningChange; -Landroid/net/LinkProperties$ProvisioningChange;->STILL_PROVISIONED:Landroid/net/LinkProperties$ProvisioningChange; Landroid/net/LinkProperties$ProvisioningChange;->values()[Landroid/net/LinkProperties$ProvisioningChange; -Landroid/net/LinkProperties;-><init>()V -Landroid/net/LinkProperties;-><init>(Landroid/net/LinkProperties;)V -Landroid/net/LinkProperties;->addDnsServer(Ljava/net/InetAddress;)Z -Landroid/net/LinkProperties;->addRoute(Landroid/net/RouteInfo;)Z -Landroid/net/LinkProperties;->addStackedLink(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->clear()V -Landroid/net/LinkProperties;->compareProvisioning(Landroid/net/LinkProperties;Landroid/net/LinkProperties;)Landroid/net/LinkProperties$ProvisioningChange; -Landroid/net/LinkProperties;->getAllInterfaceNames()Ljava/util/List; -Landroid/net/LinkProperties;->getAllRoutes()Ljava/util/List; -Landroid/net/LinkProperties;->getMtu()I -Landroid/net/LinkProperties;->getStackedLinks()Ljava/util/List; -Landroid/net/LinkProperties;->hasGlobalIPv6Address()Z -Landroid/net/LinkProperties;->hasIPv4Address()Z -Landroid/net/LinkProperties;->hasIPv4DefaultRoute()Z -Landroid/net/LinkProperties;->hasIPv4DnsServer()Z -Landroid/net/LinkProperties;->hasIPv6DefaultRoute()Z -Landroid/net/LinkProperties;->hasIPv6DnsServer()Z -Landroid/net/LinkProperties;->isIdenticalAddresses(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->isIdenticalDnses(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->isIdenticalRoutes(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->isIdenticalStackedLinks(Landroid/net/LinkProperties;)Z -Landroid/net/LinkProperties;->isIPv6Provisioned()Z -Landroid/net/LinkProperties;->isProvisioned()Z -Landroid/net/LinkProperties;->isReachable(Ljava/net/InetAddress;)Z -Landroid/net/LinkProperties;->removeDnsServer(Ljava/net/InetAddress;)Z -Landroid/net/LinkProperties;->removeRoute(Landroid/net/RouteInfo;)Z -Landroid/net/LinkProperties;->setDnsServers(Ljava/util/Collection;)V -Landroid/net/LinkProperties;->setDomains(Ljava/lang/String;)V -Landroid/net/LinkProperties;->setInterfaceName(Ljava/lang/String;)V -Landroid/net/LinkProperties;->setLinkAddresses(Ljava/util/Collection;)V -Landroid/net/LinkProperties;->setMtu(I)V -Landroid/net/LinkProperties;->setTcpBufferSizes(Ljava/lang/String;)V -Landroid/net/MacAddress;->ALL_ZEROS_ADDRESS:Landroid/net/MacAddress; -Landroid/net/metrics/ApfProgramEvent;-><init>()V -Landroid/net/metrics/ApfProgramEvent;->actualLifetime:J -Landroid/net/metrics/ApfProgramEvent;->currentRas:I -Landroid/net/metrics/ApfProgramEvent;->filteredRas:I -Landroid/net/metrics/ApfProgramEvent;->flags:I -Landroid/net/metrics/ApfProgramEvent;->flagsFor(ZZ)I -Landroid/net/metrics/ApfProgramEvent;->lifetime:J -Landroid/net/metrics/ApfProgramEvent;->programLength:I -Landroid/net/metrics/ApfStats;-><init>()V -Landroid/net/metrics/ApfStats;->droppedRas:I -Landroid/net/metrics/ApfStats;->durationMs:J -Landroid/net/metrics/ApfStats;->matchingRas:I -Landroid/net/metrics/ApfStats;->maxProgramSize:I -Landroid/net/metrics/ApfStats;->parseErrors:I -Landroid/net/metrics/ApfStats;->programUpdates:I -Landroid/net/metrics/ApfStats;->programUpdatesAll:I -Landroid/net/metrics/ApfStats;->programUpdatesAllowingMulticast:I -Landroid/net/metrics/ApfStats;->receivedRas:I -Landroid/net/metrics/ApfStats;->zeroLifetimeRas:I -Landroid/net/metrics/DhcpClientEvent;-><init>(Ljava/lang/String;I)V -Landroid/net/metrics/DhcpErrorEvent;-><init>(I)V -Landroid/net/metrics/DhcpErrorEvent;->BOOTP_TOO_SHORT:I -Landroid/net/metrics/DhcpErrorEvent;->BUFFER_UNDERFLOW:I -Landroid/net/metrics/DhcpErrorEvent;->DHCP_BAD_MAGIC_COOKIE:I -Landroid/net/metrics/DhcpErrorEvent;->DHCP_INVALID_OPTION_LENGTH:I -Landroid/net/metrics/DhcpErrorEvent;->DHCP_NO_COOKIE:I -Landroid/net/metrics/DhcpErrorEvent;->DHCP_NO_MSG_TYPE:I -Landroid/net/metrics/DhcpErrorEvent;->DHCP_UNKNOWN_MSG_TYPE:I -Landroid/net/metrics/DhcpErrorEvent;->errorCodeWithOption(II)I -Landroid/net/metrics/DhcpErrorEvent;->L2_TOO_SHORT:I -Landroid/net/metrics/DhcpErrorEvent;->L2_WRONG_ETH_TYPE:I -Landroid/net/metrics/DhcpErrorEvent;->L3_INVALID_IP:I -Landroid/net/metrics/DhcpErrorEvent;->L3_NOT_IPV4:I -Landroid/net/metrics/DhcpErrorEvent;->L3_TOO_SHORT:I -Landroid/net/metrics/DhcpErrorEvent;->L4_NOT_UDP:I -Landroid/net/metrics/DhcpErrorEvent;->L4_WRONG_PORT:I -Landroid/net/metrics/DhcpErrorEvent;->PARSING_ERROR:I -Landroid/net/metrics/DhcpErrorEvent;->RECEIVE_ERROR:I -Landroid/net/metrics/IpConnectivityLog;-><init>()V -Landroid/net/metrics/IpConnectivityLog;->log(Landroid/os/Parcelable;)Z -Landroid/net/metrics/IpConnectivityLog;->log(Ljava/lang/String;Landroid/os/Parcelable;)Z -Landroid/net/metrics/IpManagerEvent;-><init>(IJ)V -Landroid/net/metrics/IpReachabilityEvent;-><init>(I)V -Landroid/net/metrics/IpReachabilityEvent;->nudFailureEventType(ZZ)I -Landroid/net/metrics/RaEvent$Builder;-><init>()V -Landroid/net/metrics/RaEvent$Builder;->build()Landroid/net/metrics/RaEvent; -Landroid/net/metrics/RaEvent$Builder;->updateDnsslLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/metrics/RaEvent$Builder;->updatePrefixPreferredLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/metrics/RaEvent$Builder;->updatePrefixValidLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/metrics/RaEvent$Builder;->updateRdnssLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/metrics/RaEvent$Builder;->updateRouteInfoLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/metrics/RaEvent$Builder;->updateRouterLifetime(J)Landroid/net/metrics/RaEvent$Builder; -Landroid/net/Network;-><init>(I)V -Landroid/net/Network;->netId:I -Landroid/net/NetworkCapabilities;->getNetworkSpecifier()Landroid/net/NetworkSpecifier; -Landroid/net/NetworkCapabilities;->getSignalStrength()I -Landroid/net/NetworkCapabilities;->hasSignalStrength()Z -Landroid/net/NetworkCapabilities;->transportNamesOf([I)Ljava/lang/String; -Landroid/net/NetworkQuotaInfo;->getEstimatedBytes()J -Landroid/net/NetworkQuotaInfo;->getHardLimitBytes()J -Landroid/net/NetworkQuotaInfo;->getSoftLimitBytes()J -Landroid/net/NetworkRequest$Builder;->setSignalStrength(I)Landroid/net/NetworkRequest$Builder; -Landroid/net/NetworkRequest;->networkCapabilities:Landroid/net/NetworkCapabilities; -Landroid/net/NetworkState;->network:Landroid/net/Network; -Landroid/net/NetworkStats$Entry;-><init>()V -Landroid/net/NetworkStats$Entry;->iface:Ljava/lang/String; -Landroid/net/NetworkStats$Entry;->rxBytes:J -Landroid/net/NetworkStats$Entry;->rxPackets:J -Landroid/net/NetworkStats$Entry;->set:I -Landroid/net/NetworkStats$Entry;->tag:I -Landroid/net/NetworkStats$Entry;->txBytes:J -Landroid/net/NetworkStats$Entry;->txPackets:J -Landroid/net/NetworkStats$Entry;->uid:I -Landroid/net/NetworkStats;-><init>(JI)V -Landroid/net/NetworkStats;->combineValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats; -Landroid/net/NetworkStatsHistory$Entry;->txBytes:J -Landroid/net/NetworkStatsHistory;->getStart()J -Landroid/net/NetworkStatsHistory;->getValues(JJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; -Landroid/net/NetworkTemplate;->buildTemplateMobileAll(Ljava/lang/String;)Landroid/net/NetworkTemplate; -Landroid/net/NetworkUtils;->attachControlPacketFilter(Ljava/io/FileDescriptor;I)V -Landroid/net/NetworkUtils;->attachDhcpFilter(Ljava/io/FileDescriptor;)V -Landroid/net/NetworkUtils;->attachRaFilter(Ljava/io/FileDescriptor;I)V -Landroid/net/NetworkUtils;->getImplicitNetmask(Ljava/net/Inet4Address;)I -Landroid/net/NetworkUtils;->netmaskToPrefixLength(Ljava/net/Inet4Address;)I -Landroid/net/NetworkUtils;->protectFromVpn(Ljava/io/FileDescriptor;)Z -Landroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;)V -Landroid/net/RouteInfo;->hasGateway()Z -Landroid/net/RouteInfo;->selectBestRoute(Ljava/util/Collection;Ljava/net/InetAddress;)Landroid/net/RouteInfo; -Landroid/net/SntpClient;->getNtpTime()J -Landroid/net/SntpClient;->getNtpTimeReference()J -Landroid/net/SntpClient;->getRoundTripTime()J -Landroid/net/SntpClient;->requestTime(Ljava/lang/String;I)Z -Landroid/net/StaticIpConfiguration;->dnsServers:Ljava/util/ArrayList; -Landroid/net/StaticIpConfiguration;->domains:Ljava/lang/String; -Landroid/net/StaticIpConfiguration;->getRoutes(Ljava/lang/String;)Ljava/util/List; -Landroid/net/StringNetworkSpecifier;->specifier:Ljava/lang/String; -Landroid/net/TrafficStats;->getMobileTcpRxPackets()J -Landroid/net/TrafficStats;->getMobileTcpTxPackets()J -Landroid/net/wifi/WifiInfo;->is5GHz()Z -Landroid/net/wifi/WifiInfo;->score:I Landroid/os/AsyncResult;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Throwable;)V Landroid/os/AsyncResult;->exception:Ljava/lang/Throwable; Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;Ljava/lang/Object;Ljava/lang/Throwable;)Landroid/os/AsyncResult; @@ -350,22 +142,7 @@ Landroid/os/SystemVibrator;-><init>()V Landroid/os/UserHandle;->isSameApp(II)Z Landroid/os/UserManager;->hasUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z Landroid/os/UserManager;->isAdminUser()Z -Landroid/provider/CalendarContract$Events;->PROVIDER_WRITABLE_COLUMNS:[Ljava/lang/String; -Landroid/provider/ContactsContract$CommonDataKinds$Phone;->getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence; -Landroid/provider/Settings$Global;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; -Landroid/provider/Settings$Secure;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; -Landroid/provider/Telephony$Mms;->isEmailAddress(Ljava/lang/String;)Z -Landroid/provider/Telephony$Sms$Draft;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; -Landroid/provider/Telephony$Sms$Outbox;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZJ)Landroid/net/Uri; Landroid/R$styleable;->CheckBoxPreference:[I -Landroid/service/dreams/DreamService;->canDoze()Z -Landroid/service/dreams/DreamService;->isDozing()Z -Landroid/service/dreams/DreamService;->startDozing()V -Landroid/service/dreams/DreamService;->stopDozing()V -Landroid/service/euicc/EuiccProfileInfo;-><init>(Ljava/lang/String;[Landroid/telephony/UiccAccessRule;Ljava/lang/String;)V -Landroid/service/euicc/GetDefaultDownloadableSubscriptionListResult;->result:I -Landroid/service/euicc/GetDownloadableSubscriptionMetadataResult;->result:I -Landroid/service/vr/VrListenerService;->onCurrentVrActivityChanged(Landroid/content/ComponentName;ZI)V Landroid/system/NetlinkSocketAddress;-><init>(II)V Landroid/system/Os;->bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V Landroid/system/Os;->connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V @@ -469,23 +246,6 @@ Landroid/telephony/TelephonyManager;->isImsRegistered()Z Landroid/telephony/TelephonyManager;->nvResetConfig(I)Z Landroid/telephony/TelephonyManager;->putIntAtIndex(Landroid/content/ContentResolver;Ljava/lang/String;II)Z Landroid/telephony/TelephonyManager;->setPreferredNetworkType(II)Z -Landroid/text/TextUtils;->isPrintableAsciiOnly(Ljava/lang/CharSequence;)Z -Landroid/util/IconDrawableFactory;->getBadgedIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;I)Landroid/graphics/drawable/Drawable; -Landroid/util/IconDrawableFactory;->newInstance(Landroid/content/Context;)Landroid/util/IconDrawableFactory; -Landroid/util/LocalLog$ReadOnlyLocalLog;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V -Landroid/util/LocalLog;-><init>(I)V -Landroid/util/LocalLog;->log(Ljava/lang/String;)V -Landroid/util/LocalLog;->readOnlyLocalLog()Landroid/util/LocalLog$ReadOnlyLocalLog; -Landroid/util/LongArray;-><init>()V -Landroid/util/LongArray;->add(IJ)V -Landroid/util/LongArray;->get(I)J -Landroid/util/LongArray;->size()I -Landroid/util/RecurrenceRule;->buildRecurringMonthly(ILjava/time/ZoneId;)Landroid/util/RecurrenceRule; -Landroid/util/RecurrenceRule;->start:Ljava/time/ZonedDateTime; -Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I -Landroid/util/Slog;->println(ILjava/lang/String;Ljava/lang/String;)I -Landroid/util/Slog;->wtf(Ljava/lang/String;Ljava/lang/String;)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; diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index be2e2faf3739..f0a0e88310f9 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -30,7 +30,6 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.hardware.fingerprint.FingerprintManager; -import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; @@ -190,12 +189,10 @@ public class AccessibilityServiceInfo implements Parcelable { * content and also the accessibility service will receive accessibility events from * them. * <p> - * <strong>Note:</strong> For accessibility services targeting API version - * {@link Build.VERSION_CODES#JELLY_BEAN} or higher this flag has to be explicitly - * set for the system to regard views that are not important for accessibility. For - * accessibility services targeting API version lower than - * {@link Build.VERSION_CODES#JELLY_BEAN} this flag is ignored and all views are - * regarded for accessibility purposes. + * <strong>Note:</strong> For accessibility services targeting Android 4.1 (API level 16) or + * higher, this flag has to be explicitly set for the system to regard views that are not + * important for accessibility. For accessibility services targeting Android 4.0.4 (API level + * 15) or lower, this flag is ignored and all views are regarded for accessibility purposes. * </p> * <p> * Usually views not important for accessibility are layout managers that do not @@ -220,19 +217,19 @@ public class AccessibilityServiceInfo implements Parcelable { * flag does not guarantee that the device will not be in touch exploration * mode since there may be another enabled service that requested it. * <p> - * For accessibility services targeting API version higher than - * {@link Build.VERSION_CODES#JELLY_BEAN_MR1} that want to set - * this flag have to declare this capability in their meta-data by setting - * the attribute {@link android.R.attr#canRequestTouchExplorationMode - * canRequestTouchExplorationMode} to true, otherwise this flag will + * For accessibility services targeting Android 4.3 (API level 18) or higher + * that want to set this flag have to declare this capability in their + * meta-data by setting the attribute + * {@link android.R.attr#canRequestTouchExplorationMode + * canRequestTouchExplorationMode} to true. Otherwise, this flag will * be ignored. For how to declare the meta-data of a service refer to * {@value AccessibilityService#SERVICE_META_DATA}. * </p> * <p> - * Services targeting API version equal to or lower than - * {@link Build.VERSION_CODES#JELLY_BEAN_MR1} will work normally, i.e. - * the first time they are run, if this flag is specified, a dialog is - * shown to the user to confirm enabling explore by touch. + * Services targeting Android 4.2.2 (API level 17) or lower will work + * normally. In other words, the first time they are run, if this flag is + * specified, a dialog is shown to the user to confirm enabling explore by + * touch. * </p> * @see android.R.styleable#AccessibilityService_canRequestTouchExplorationMode */ @@ -388,10 +385,10 @@ public class AccessibilityServiceInfo implements Parcelable { public int feedbackType; /** - * The timeout after the most recent event of a given type before an + * The timeout, in milliseconds, after the most recent event of a given type before an * {@link AccessibilityService} is notified. * <p> - * <strong>Can be dynamically set at runtime.</strong>. + * <strong>Can be dynamically set at runtime.</strong> * </p> * <p> * <strong>Note:</strong> The event notification timeout is useful to avoid propagating diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 04ff48cecdc0..831cac261d34 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -22,6 +22,7 @@ import android.annotation.LayoutRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; @@ -210,6 +211,7 @@ public abstract class ActionBar { * Allow the title to wrap onto multiple lines if space is available * @hide pending API approval */ + @UnsupportedAppUsage public static final int DISPLAY_TITLE_MULTIPLE_LINES = 0x20; /** @@ -1050,6 +1052,7 @@ public abstract class ActionBar { } /** @hide */ + @UnsupportedAppUsage public void setShowHideAnimationEnabled(boolean enabled) { } @@ -1092,6 +1095,7 @@ public abstract class ActionBar { } /** @hide */ + @UnsupportedAppUsage public boolean collapseActionView() { return false; } diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 6638dd94c6e4..a0cfa8c8cb2f 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -31,6 +31,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.StyleRes; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.app.VoiceInteractor.Request; import android.app.admin.DevicePolicyManager; import android.app.assist.AssistContent; @@ -735,6 +736,7 @@ public class Activity extends ContextThemeWrapper */ public static final int FINISH_TASK_WITH_ACTIVITY = 2; + @UnsupportedAppUsage static final String FRAGMENTS_TAG = "android:fragments"; private static final String LAST_AUTOFILL_ID = "android:lastAutofillId"; @@ -768,22 +770,38 @@ public class Activity extends ContextThemeWrapper private SparseArray<ManagedDialog> mManagedDialogs; // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. + @UnsupportedAppUsage private Instrumentation mInstrumentation; + @UnsupportedAppUsage private IBinder mToken; + @UnsupportedAppUsage private int mIdent; + @UnsupportedAppUsage /*package*/ String mEmbeddedID; + @UnsupportedAppUsage private Application mApplication; + @UnsupportedAppUsage /*package*/ Intent mIntent; + @UnsupportedAppUsage /*package*/ String mReferrer; + @UnsupportedAppUsage private ComponentName mComponent; + @UnsupportedAppUsage /*package*/ ActivityInfo mActivityInfo; + @UnsupportedAppUsage /*package*/ ActivityThread mMainThread; + @UnsupportedAppUsage Activity mParent; + @UnsupportedAppUsage boolean mCalled; + @UnsupportedAppUsage /*package*/ boolean mResumed; + @UnsupportedAppUsage /*package*/ boolean mStopped; + @UnsupportedAppUsage boolean mFinished; boolean mStartedActivity; + @UnsupportedAppUsage private boolean mDestroyed; private boolean mDoReportFullyDrawn = true; private boolean mRestoredFromBundle; @@ -795,7 +813,9 @@ public class Activity extends ContextThemeWrapper /*package*/ boolean mTemporaryPause = false; /** true if the activity is being destroyed in order to recreate it with a new configuration */ /*package*/ boolean mChangingConfigurations = false; + @UnsupportedAppUsage /*package*/ int mConfigChangeFlags; + @UnsupportedAppUsage /*package*/ Configuration mCurrentConfig; private SearchManager mSearchManager; private MenuInflater mMenuInflater; @@ -810,25 +830,34 @@ public class Activity extends ContextThemeWrapper ArrayMap<String, LoaderManager> loaders; VoiceInteractor voiceInteractor; } + @UnsupportedAppUsage /* package */ NonConfigurationInstances mLastNonConfigurationInstances; + @UnsupportedAppUsage private Window mWindow; + @UnsupportedAppUsage private WindowManager mWindowManager; /*package*/ View mDecor = null; + @UnsupportedAppUsage /*package*/ boolean mWindowAdded = false; /*package*/ boolean mVisibleFromServer = false; + @UnsupportedAppUsage /*package*/ boolean mVisibleFromClient = true; /*package*/ ActionBar mActionBar = null; private boolean mEnableDefaultActionBarUp; + @UnsupportedAppUsage private VoiceInteractor mVoiceInteractor; + @UnsupportedAppUsage private CharSequence mTitle; private int mTitleColor = 0; // we must have a handler before the FragmentController is constructed + @UnsupportedAppUsage final Handler mHandler = new Handler(); + @UnsupportedAppUsage final FragmentController mFragments = FragmentController.createController(new HostCallbacks()); private static final class ManagedCursor { @@ -847,8 +876,10 @@ public class Activity extends ContextThemeWrapper private final ArrayList<ManagedCursor> mManagedCursors = new ArrayList<>(); @GuardedBy("this") + @UnsupportedAppUsage int mResultCode = RESULT_CANCELED; @GuardedBy("this") + @UnsupportedAppUsage Intent mResultData = null; private TranslucentConversionListener mTranslucentCallback; @@ -872,6 +903,7 @@ public class Activity extends ContextThemeWrapper private Thread mUiThread; + @UnsupportedAppUsage ActivityTransitionState mActivityTransitionState = new ActivityTransitionState(); SharedElementCallback mEnterTransitionListener = SharedElementCallback.NULL_CALLBACK; SharedElementCallback mExitTransitionListener = SharedElementCallback.NULL_CALLBACK; @@ -1663,6 +1695,7 @@ public class Activity extends ContextThemeWrapper * * @param outState place to store the saved state. */ + @UnsupportedAppUsage private void saveManagedDialogs(Bundle outState) { if (mManagedDialogs == null) { return; @@ -2521,6 +2554,7 @@ public class Activity extends ContextThemeWrapper * @deprecated Use {@link CursorLoader} instead. */ @Deprecated + @UnsupportedAppUsage public final Cursor managedQuery(Uri uri, String[] projection, String selection, String sortOrder) { Cursor c = getContentResolver().query(uri, projection, selection, null, sortOrder); @@ -2641,6 +2675,7 @@ public class Activity extends ContextThemeWrapper * @hide */ @Deprecated + @UnsupportedAppUsage public void setPersistent(boolean isPersistent) { } @@ -4663,6 +4698,7 @@ public class Activity extends ContextThemeWrapper /** * @hide Implement to provide correct calling token. */ + @UnsupportedAppUsage public void startActivityForResultAsUser(Intent intent, int requestCode, UserHandle user) { startActivityForResultAsUser(intent, requestCode, null, user); } @@ -4708,6 +4744,7 @@ public class Activity extends ContextThemeWrapper /** * @hide Implement to provide correct calling token. */ + @UnsupportedAppUsage public void startActivityAsUser(Intent intent, UserHandle user) { startActivityAsUser(intent, null, user); } @@ -5271,6 +5308,7 @@ public class Activity extends ContextThemeWrapper * @hide */ @Override + @UnsupportedAppUsage public void startActivityForResult( String who, Intent intent, int requestCode, @Nullable Bundle options) { Uri referrer = onProvideReferrer(); @@ -5597,6 +5635,7 @@ public class Activity extends ContextThemeWrapper * Finishes the current activity and specifies whether to remove the task associated with this * activity. */ + @UnsupportedAppUsage private void finish(int finishTask) { if (mParent == null) { int resultCode; @@ -6521,6 +6560,7 @@ public class Activity extends ContextThemeWrapper * @return The ActivityOptions passed to {@link #convertToTranslucent}. * @hide */ + @UnsupportedAppUsage ActivityOptions getActivityOptions() { try { return ActivityOptions.fromBundle( @@ -7041,10 +7081,12 @@ public class Activity extends ContextThemeWrapper // ------------------ Internal API ------------------ + @UnsupportedAppUsage final void setParent(Activity parent) { mParent = parent; } + @UnsupportedAppUsage final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token, int ident, Application application, Intent intent, ActivityInfo info, @@ -7117,6 +7159,7 @@ public class Activity extends ContextThemeWrapper } /** @hide */ + @UnsupportedAppUsage public final IBinder getActivityToken() { return mParent != null ? mParent.getActivityToken() : mToken; } @@ -7131,6 +7174,7 @@ public class Activity extends ContextThemeWrapper performCreate(icicle, null); } + @UnsupportedAppUsage final void performCreate(Bundle icicle, PersistableBundle persistentState) { mCanEnterPictureInPicture = true; restoreHasCurrentPermissionRequest(icicle); @@ -7431,6 +7475,7 @@ public class Activity extends ContextThemeWrapper /** * @hide */ + @UnsupportedAppUsage public final boolean isResumed() { return mResumed; } @@ -7448,6 +7493,7 @@ public class Activity extends ContextThemeWrapper } } + @UnsupportedAppUsage void dispatchActivityResult(String who, int requestCode, int resultCode, Intent data, String reason) { if (false) Log.v( @@ -7815,6 +7861,7 @@ public class Activity extends ContextThemeWrapper * @param disable {@code true} to disable preview screenshots; {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public void setDisablePreviewScreenshots(boolean disable) { try { ActivityTaskManager.getService().setDisablePreviewScreenshots(mToken, disable); @@ -7878,6 +7925,7 @@ public class Activity extends ContextThemeWrapper * @hide */ @RequiresPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS) + @UnsupportedAppUsage public void registerRemoteAnimations(RemoteAnimationDefinition definition) { try { ActivityTaskManager.getService().registerRemoteAnimations(mToken, definition); diff --git a/core/java/android/app/ActivityGroup.java b/core/java/android/app/ActivityGroup.java index 228067c3bf75..d4aa01b8f43e 100644 --- a/core/java/android/app/ActivityGroup.java +++ b/core/java/android/app/ActivityGroup.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.Bundle; @@ -37,6 +38,7 @@ public class ActivityGroup extends Activity { * This field should be made private, so it is hidden from the SDK. * {@hide} */ + @UnsupportedAppUsage protected LocalActivityManager mLocalActivityManager; public ActivityGroup() { diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 1105ed68a8d8..63ffa8bc5369 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -27,6 +27,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -123,6 +124,7 @@ import java.util.List; public class ActivityManager { private static String TAG = "ActivityManager"; + @UnsupportedAppUsage private final Context mContext; private static volatile boolean sSystemReady = false; @@ -425,6 +427,7 @@ public class ActivityManager { * for a startActivity operation. * @hide */ + @UnsupportedAppUsage public static final int INTENT_SENDER_ACTIVITY = 2; /** @@ -488,18 +491,22 @@ public class ActivityManager { /** @hide Process is hosting the current top activities. Note that this covers * all activities that are visible to the user. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_TOP = 2; /** @hide Process is hosting a foreground service. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_FOREGROUND_SERVICE = 3; /** @hide Process is hosting a foreground service due to a system binding. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_BOUND_FOREGROUND_SERVICE = 4; /** @hide Process is important to the user, and something they are aware of. */ public static final int PROCESS_STATE_IMPORTANT_FOREGROUND = 5; /** @hide Process is important to the user, but not something they are aware of. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_IMPORTANT_BACKGROUND = 6; /** @hide Process is in the background transient so we will try to keep running. */ @@ -511,12 +518,14 @@ public class ActivityManager { /** @hide Process is in the background running a service. Unlike oom_adj, this level * is used for both the normal running in background state and the executing * operations state. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_SERVICE = 9; /** @hide Process is in the background running a receiver. Note that from the * perspective of oom_adj, receivers run at a higher foreground level, but for our * prioritization here that is not necessary and putting them below services means * many fewer changes in some process states as they receive broadcasts. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_RECEIVER = 10; /** @hide Same as {@link #PROCESS_STATE_TOP} but while device is sleeping. */ @@ -527,12 +536,14 @@ public class ActivityManager { public static final int PROCESS_STATE_HEAVY_WEIGHT = 12; /** @hide Process is in the background but hosts the home activity. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_HOME = 13; /** @hide Process is in the background but hosts the last shown activity. */ public static final int PROCESS_STATE_LAST_ACTIVITY = 14; /** @hide Process is being cached for later use and contains activities. */ + @UnsupportedAppUsage public static final int PROCESS_STATE_CACHED_ACTIVITY = 15; /** @hide Process is being cached for later use and is a client of another cached @@ -679,6 +690,7 @@ public class ActivityManager { Point mAppTaskThumbnailSize; + @UnsupportedAppUsage /*package*/ ActivityManager(Context context, Handler handler) { mContext = context; } @@ -810,6 +822,7 @@ public class ActivityManager { } /** @hide */ + @UnsupportedAppUsage static public int staticGetMemoryClass() { // Really brain dead right now -- just take this from the configured // vm heap size, and assume it is in megabytes and thus ends with "m". @@ -856,6 +869,7 @@ public class ActivityManager { } /** @hide */ + @UnsupportedAppUsage public static boolean isLowRamDeviceStatic() { return RoSystemProperties.CONFIG_LOW_RAM || (Build.IS_DEBUGGABLE && DEVELOPMENT_FORCE_LOW_RAM); @@ -879,6 +893,7 @@ public class ActivityManager { * (which tends to consume a lot more RAM). * @hide */ + @UnsupportedAppUsage static public boolean isHighEndGfx() { return !isLowRamDeviceStatic() && !RoSystemProperties.CONFIG_AVOID_GFX_ACCEL @@ -903,6 +918,7 @@ public class ActivityManager { * @deprecated Use {@link ActivityTaskManager#getMaxRecentTasksStatic()} */ @Deprecated + @UnsupportedAppUsage static public int getMaxRecentTasksStatic() { return ActivityTaskManager.getMaxRecentTasksStatic(); } @@ -1122,6 +1138,7 @@ public class ActivityManager { * Sets the icon for this task description. * @hide */ + @UnsupportedAppUsage public void setIcon(Bitmap icon) { mIcon = icon; } @@ -1174,11 +1191,13 @@ public class ActivityManager { } /** @hide */ + @UnsupportedAppUsage public Bitmap getInMemoryIcon() { return mIcon; } /** @hide */ + @UnsupportedAppUsage public static Bitmap loadTaskDescriptionIcon(String iconFilename, int userId) { if (iconFilename != null) { try { @@ -1202,6 +1221,7 @@ public class ActivityManager { * @return The background color. * @hide */ + @UnsupportedAppUsage public int getBackgroundColor() { return mColorBackground; } @@ -1763,6 +1783,7 @@ public class ActivityManager { /** * @return The graphic buffer representing the screenshot. */ + @UnsupportedAppUsage public GraphicBuffer getSnapshot() { return mSnapshot; } @@ -1770,6 +1791,7 @@ public class ActivityManager { /** * @return The screen orientation the screenshot was taken in. */ + @UnsupportedAppUsage public int getOrientation() { return mOrientation; } @@ -1778,6 +1800,7 @@ public class ActivityManager { * @return The system/content insets on the snapshot. These can be clipped off in order to * remove any areas behind system bars in the snapshot. */ + @UnsupportedAppUsage public Rect getContentInsets() { return mContentInsets; } @@ -1785,6 +1808,7 @@ public class ActivityManager { /** * @return Whether this snapshot is a down-sampled version of the full resolution. */ + @UnsupportedAppUsage public boolean isReducedResolution() { return mReducedResolution; } @@ -1793,6 +1817,7 @@ public class ActivityManager { * @return Whether or not the snapshot is a real snapshot or an app-theme generated snapshot * due to the task having a secure window or having previews disabled. */ + @UnsupportedAppUsage public boolean isRealSnapshot() { return mIsRealSnapshot; } @@ -1823,6 +1848,7 @@ public class ActivityManager { /** * @return The scale this snapshot was taken in. */ + @UnsupportedAppUsage public float getScale() { return mScale; } @@ -2163,12 +2189,16 @@ public class ActivityManager { public boolean lowMemory; /** @hide */ + @UnsupportedAppUsage public long hiddenAppThreshold; /** @hide */ + @UnsupportedAppUsage public long secondaryServerThreshold; /** @hide */ + @UnsupportedAppUsage public long visibleAppThreshold; /** @hide */ + @UnsupportedAppUsage public long foregroundAppThreshold; public MemoryInfo() { @@ -2238,17 +2268,28 @@ public class ActivityManager { * @hide */ public static class StackInfo implements Parcelable { + @UnsupportedAppUsage public int stackId; + @UnsupportedAppUsage public Rect bounds = new Rect(); + @UnsupportedAppUsage public int[] taskIds; + @UnsupportedAppUsage public String[] taskNames; + @UnsupportedAppUsage public Rect[] taskBounds; + @UnsupportedAppUsage public int[] taskUserIds; + @UnsupportedAppUsage public ComponentName topActivity; + @UnsupportedAppUsage public int displayId; + @UnsupportedAppUsage public int userId; + @UnsupportedAppUsage public boolean visible; // Index of the stack in the display's stack list, can be used for comparison of stack order + @UnsupportedAppUsage public int position; /** * The full configuration the stack is currently running in. @@ -2338,6 +2379,7 @@ public class ActivityManager { readFromParcel(source); } + @UnsupportedAppUsage public String toString(String prefix) { StringBuilder sb = new StringBuilder(256); sb.append(prefix); sb.append("Stack id="); sb.append(stackId); @@ -2375,6 +2417,7 @@ public class ActivityManager { */ @RequiresPermission(anyOf={Manifest.permission.CLEAR_APP_USER_DATA, Manifest.permission.ACCESS_INSTANT_APPS}) + @UnsupportedAppUsage public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) { try { return getService().clearApplicationUserData(packageName, false, @@ -2592,6 +2635,7 @@ public class ActivityManager { * persistent system app. * @hide */ + @UnsupportedAppUsage public static final int FLAG_PERSISTENT = 1<<1; /** @@ -2599,6 +2643,7 @@ public class ActivityManager { * persistent system app. * @hide */ + @UnsupportedAppUsage public static final int FLAG_HAS_ACTIVITIES = 1<<2; /** @@ -2606,6 +2651,7 @@ public class ActivityManager { * {@link #FLAG_CANT_SAVE_STATE}. * @hide */ + @UnsupportedAppUsage public int flags; /** @@ -2759,6 +2805,7 @@ public class ActivityManager { * will be passed to a client, use {@link #procStateToImportanceForClient}. * @hide */ + @UnsupportedAppUsage public static @Importance int procStateToImportance(int procState) { if (procState == PROCESS_STATE_NONEXISTENT) { return IMPORTANCE_GONE; @@ -2911,6 +2958,7 @@ public class ActivityManager { * Current process state, as per PROCESS_STATE_* constants. * @hide */ + @UnsupportedAppUsage public int processState; /** @@ -3299,6 +3347,7 @@ public class ActivityManager { * it allowing them to break other applications by stopping their * services, removing their alarms, etc. */ + @UnsupportedAppUsage public void forceStopPackageAsUser(String packageName, int userId) { try { getService().forceStopPackage(packageName, userId); @@ -3475,6 +3524,7 @@ public class ActivityManager { }*/ /** @hide */ + @UnsupportedAppUsage public static int checkComponentPermission(String permission, int uid, int owningUid, boolean exported) { // Root, system server get to do everything. @@ -3582,6 +3632,7 @@ public class ActivityManager { * @param userid the user's id. Zero indicates the default user. * @hide */ + @UnsupportedAppUsage public boolean switchUser(int userid) { try { return getService().switchUser(userid); @@ -3625,6 +3676,7 @@ public class ActivityManager { * @param userId the user's id. Zero indicates the default user. * @hide */ + @UnsupportedAppUsage public boolean isUserRunning(int userId) { try { return getService().isUserRunning(userId, 0); @@ -3756,6 +3808,7 @@ public class ActivityManager { /** * @hide */ + @UnsupportedAppUsage public static IActivityManager getService() { return IActivityManagerSingleton.get(); } @@ -3764,6 +3817,7 @@ public class ActivityManager { return ActivityTaskManager.getService(); } + @UnsupportedAppUsage private static final Singleton<IActivityManager> IActivityManagerSingleton = new Singleton<IActivityManager>() { @Override diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 4c558f374f91..37509e18ba6f 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -15,6 +15,7 @@ */ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.IBinder; @@ -30,6 +31,7 @@ public abstract class ActivityManagerNative { * * @deprecated use IActivityManager.Stub.asInterface instead. */ + @UnsupportedAppUsage static public IActivityManager asInterface(IBinder obj) { return IActivityManager.Stub.asInterface(obj); } @@ -39,6 +41,7 @@ public abstract class ActivityManagerNative { * * @deprecated use ActivityManager.getService instead. */ + @UnsupportedAppUsage static public IActivityManager getDefault() { return ActivityManager.getService(); } @@ -48,6 +51,7 @@ public abstract class ActivityManagerNative { * * @deprecated use ActivityManagerInternal.isSystemReady instead. */ + @UnsupportedAppUsage static public boolean isSystemReady() { return ActivityManager.isSystemReady(); } @@ -55,6 +59,7 @@ public abstract class ActivityManagerNative { /** * @deprecated use ActivityManager.broadcastStickyIntent instead. */ + @UnsupportedAppUsage static public void broadcastStickyIntent(Intent intent, String permission, int userId) { broadcastStickyIntent(intent, permission, AppOpsManager.OP_NONE, userId); } diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 89145351655a..63c61d319a44 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -25,6 +25,7 @@ import static android.view.Display.INVALID_DISPLAY; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -357,6 +358,7 @@ public class ActivityOptions { * supply these options as the options Bundle when starting an activity. * @hide */ + @UnsupportedAppUsage public static ActivityOptions makeCustomAnimation(Context context, int enterResId, int exitResId, Handler handler, OnAnimationStartedListener listener) { ActivityOptions opts = new ActivityOptions(); @@ -582,6 +584,7 @@ public class ActivityOptions { * thumbnails are aspect scaled to/from a new location. * @hide */ + @UnsupportedAppUsage public static ActivityOptions makeMultiThumbFutureAspectScaleAnimation(Context context, Handler handler, IAppTransitionAnimationSpecsFuture specsFuture, OnAnimationStartedListener listener, boolean scaleUp) { @@ -847,6 +850,7 @@ public class ActivityOptions { * @hide */ @RequiresPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS) + @UnsupportedAppUsage public static ActivityOptions makeRemoteAnimation( RemoteAnimationAdapter remoteAnimationAdapter) { final ActivityOptions opts = new ActivityOptions(); @@ -956,14 +960,15 @@ public class ActivityOptions { } /** - * Sets the bounds (window size) that the activity should be launched in. + * Sets the bounds (window size and position) that the activity should be launched in. * Rect position should be provided in pixels and in screen coordinates. - * Set to null explicitly for fullscreen. + * Set to {@code null} to explicitly launch fullscreen. * <p> - * <strong>NOTE:<strong/> This value is ignored on devices that don't have + * <strong>NOTE:</strong> This value is ignored on devices that don't have * {@link android.content.pm.PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT} or * {@link android.content.pm.PackageManager#FEATURE_PICTURE_IN_PICTURE} enabled. - * @param screenSpacePixelRect Launch bounds to use for the activity or null for fullscreen. + * @param screenSpacePixelRect launch bounds or {@code null} for fullscreen + * @return {@code this} {@link ActivityOptions} instance */ public ActivityOptions setLaunchBounds(@Nullable Rect screenSpacePixelRect) { mLaunchBounds = screenSpacePixelRect != null ? new Rect(screenSpacePixelRect) : null; @@ -1278,6 +1283,7 @@ public class ActivityOptions { } /** @hide */ + @UnsupportedAppUsage public void setSplitScreenCreateMode(int splitScreenCreateMode) { mSplitScreenCreateMode = splitScreenCreateMode; } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 2a3fc04b2451..a010c7238e3d 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -27,6 +27,7 @@ import static android.view.Display.INVALID_DISPLAY; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.assist.AssistContent; import android.app.assist.AssistStructure; import android.app.backup.BackupAgent; @@ -249,15 +250,21 @@ public final class ActivityThread extends ClientTransactionHandler { @GuardedBy("mNetworkPolicyLock") private long mNetworkBlockSeq = INVALID_PROC_STATE_SEQ; + @UnsupportedAppUsage private ContextImpl mSystemContext; private ContextImpl mSystemUiContext; + @UnsupportedAppUsage static volatile IPackageManager sPackageManager; + @UnsupportedAppUsage final ApplicationThread mAppThread = new ApplicationThread(); + @UnsupportedAppUsage final Looper mLooper = Looper.myLooper(); + @UnsupportedAppUsage final H mH = new H(); final Executor mExecutor = new HandlerExecutor(mH); + @UnsupportedAppUsage final ArrayMap<IBinder, ActivityClientRecord> mActivities = new ArrayMap<>(); /** The activities to be truly destroyed (not include relaunch). */ final Map<IBinder, ClientTransactionItem> mActivitiesToBeDestroyed = @@ -266,28 +273,40 @@ public final class ActivityThread extends ClientTransactionHandler { // be reported when next we idle. ActivityClientRecord mNewActivities = null; // Number of activities that are currently visible on-screen. + @UnsupportedAppUsage int mNumVisibleActivities = 0; ArrayList<WeakReference<AssistStructure>> mLastAssistStructures = new ArrayList<>(); private int mLastSessionId; + @UnsupportedAppUsage final ArrayMap<IBinder, Service> mServices = new ArrayMap<>(); + @UnsupportedAppUsage AppBindData mBoundApplication; Profiler mProfiler; + @UnsupportedAppUsage int mCurDefaultDisplayDpi; + @UnsupportedAppUsage boolean mDensityCompatMode; + @UnsupportedAppUsage Configuration mConfiguration; Configuration mCompatConfiguration; + @UnsupportedAppUsage Application mInitialApplication; + @UnsupportedAppUsage final ArrayList<Application> mAllApplications = new ArrayList<Application>(); // set of instantiated backup agents, keyed by package name final ArrayMap<String, BackupAgent> mBackupAgents = new ArrayMap<String, BackupAgent>(); /** Reference to singleton {@link ActivityThread} */ + @UnsupportedAppUsage private static volatile ActivityThread sCurrentActivityThread; + @UnsupportedAppUsage Instrumentation mInstrumentation; String mInstrumentationPackageName = null; + @UnsupportedAppUsage String mInstrumentationAppDir = null; String[] mInstrumentationSplitAppDirs = null; String mInstrumentationLibDir = null; + @UnsupportedAppUsage String mInstrumentedAppDir = null; String[] mInstrumentedSplitAppDirs = null; String mInstrumentedLibDir = null; @@ -307,16 +326,20 @@ public final class ActivityThread extends ClientTransactionHandler { // or window manager or anything that depends on them while holding this lock. // These LoadedApk are only valid for the userId that we're running as. @GuardedBy("mResourcesManager") + @UnsupportedAppUsage final ArrayMap<String, WeakReference<LoadedApk>> mPackages = new ArrayMap<>(); @GuardedBy("mResourcesManager") + @UnsupportedAppUsage final ArrayMap<String, WeakReference<LoadedApk>> mResourcePackages = new ArrayMap<>(); @GuardedBy("mResourcesManager") final ArrayList<ActivityClientRecord> mRelaunchingActivities = new ArrayList<>(); @GuardedBy("mResourcesManager") + @UnsupportedAppUsage Configuration mPendingConfiguration = null; // An executor that performs multi-step transactions. private final TransactionExecutor mTransactionExecutor = new TransactionExecutor(this); + @UnsupportedAppUsage private final ResourcesManager mResourcesManager; private static final class ProviderKey { @@ -344,12 +367,16 @@ public final class ActivityThread extends ClientTransactionHandler { } // The lock of mProviderMap protects the following variables. + @UnsupportedAppUsage final ArrayMap<ProviderKey, ProviderClientRecord> mProviderMap = new ArrayMap<ProviderKey, ProviderClientRecord>(); + @UnsupportedAppUsage final ArrayMap<IBinder, ProviderRefCount> mProviderRefCountMap = new ArrayMap<IBinder, ProviderRefCount>(); + @UnsupportedAppUsage final ArrayMap<IBinder, ProviderClientRecord> mLocalProviders = new ArrayMap<IBinder, ProviderClientRecord>(); + @UnsupportedAppUsage final ArrayMap<ComponentName, ProviderClientRecord> mLocalProvidersByName = new ArrayMap<ComponentName, ProviderClientRecord>(); @@ -366,26 +393,32 @@ public final class ActivityThread extends ClientTransactionHandler { final GcIdler mGcIdler = new GcIdler(); boolean mGcIdlerScheduled = false; + @UnsupportedAppUsage static volatile Handler sMainThreadHandler; // set once in main() Bundle mCoreSettings = null; /** Activity client record, used for bookkeeping for the real {@link Activity} instance. */ public static final class ActivityClientRecord { + @UnsupportedAppUsage public IBinder token; int ident; + @UnsupportedAppUsage Intent intent; String referrer; IVoiceInteractor voiceInteractor; Bundle state; PersistableBundle persistentState; + @UnsupportedAppUsage Activity activity; Window window; Activity parent; String embeddedID; Activity.NonConfigurationInstances lastNonConfigurationInstances; // TODO(lifecycler): Use mLifecycleState instead. + @UnsupportedAppUsage boolean paused; + @UnsupportedAppUsage boolean stopped; boolean hideForNow; Configuration newConfig; @@ -399,8 +432,11 @@ public final class ActivityThread extends ClientTransactionHandler { ProfilerInfo profilerInfo; + @UnsupportedAppUsage ActivityInfo activityInfo; + @UnsupportedAppUsage CompatibilityInfo compatInfo; + @UnsupportedAppUsage public LoadedApk packageInfo; List<ResultInfo> pendingResults; @@ -412,12 +448,14 @@ public final class ActivityThread extends ClientTransactionHandler { Window mPendingRemoveWindow; WindowManager mPendingRemoveWindowManager; + @UnsupportedAppUsage boolean mPreserveWindow; @LifecycleState private int mLifecycleState = PRE_ON_CREATE; @VisibleForTesting + @UnsupportedAppUsage public ActivityClientRecord() { this.isForward = false; init(); @@ -553,8 +591,11 @@ public final class ActivityThread extends ClientTransactionHandler { final class ProviderClientRecord { final String[] mNames; + @UnsupportedAppUsage final IContentProvider mProvider; + @UnsupportedAppUsage final ContentProvider mLocalProvider; + @UnsupportedAppUsage final ContentProviderHolder mHolder; ProviderClientRecord(String[] names, IContentProvider provider, @@ -574,8 +615,11 @@ public final class ActivityThread extends ClientTransactionHandler { this.intent = intent; } + @UnsupportedAppUsage Intent intent; + @UnsupportedAppUsage ActivityInfo info; + @UnsupportedAppUsage CompatibilityInfo compatInfo; public String toString() { return "ReceiverData{intent=" + intent + " packageName=" + @@ -597,9 +641,13 @@ public final class ActivityThread extends ClientTransactionHandler { } static final class CreateServiceData { + @UnsupportedAppUsage IBinder token; + @UnsupportedAppUsage ServiceInfo info; + @UnsupportedAppUsage CompatibilityInfo compatInfo; + @UnsupportedAppUsage Intent intent; public String toString() { return "CreateServiceData{token=" + token + " className=" @@ -609,7 +657,9 @@ public final class ActivityThread extends ClientTransactionHandler { } static final class BindServiceData { + @UnsupportedAppUsage IBinder token; + @UnsupportedAppUsage Intent intent; boolean rebind; public String toString() { @@ -618,10 +668,12 @@ public final class ActivityThread extends ClientTransactionHandler { } static final class ServiceArgsData { + @UnsupportedAppUsage IBinder token; boolean taskRemoved; int startId; int flags; + @UnsupportedAppUsage Intent args; public String toString() { return "ServiceArgsData{token=" + token + " startId=" + startId @@ -630,20 +682,28 @@ public final class ActivityThread extends ClientTransactionHandler { } static final class AppBindData { + @UnsupportedAppUsage LoadedApk info; + @UnsupportedAppUsage String processName; + @UnsupportedAppUsage ApplicationInfo appInfo; + @UnsupportedAppUsage List<ProviderInfo> providers; ComponentName instrumentationName; + @UnsupportedAppUsage Bundle instrumentationArgs; IInstrumentationWatcher instrumentationWatcher; IUiAutomationConnection instrumentationUiAutomationConnection; int debugMode; boolean enableBinderTracking; boolean trackAllocation; + @UnsupportedAppUsage boolean restrictedBackupMode; + @UnsupportedAppUsage boolean persistent; Configuration config; + @UnsupportedAppUsage CompatibilityInfo compatInfo; String buildSerial; @@ -1355,14 +1415,69 @@ public final class ActivityThread extends ClientTransactionHandler { IoUtils.closeQuietly(pfd); } - private void dumpDatabaseInfo(ParcelFileDescriptor pfd, String[] args) { + private File getDatabasesDir(Context context) { + // There's no simple way to get the databases/ path, so do it this way. + return context.getDatabasePath("a").getParentFile(); + } + + private void dumpDatabaseInfo(ParcelFileDescriptor pfd, String[] args, boolean isSystem) { PrintWriter pw = new FastPrintWriter( new FileOutputStream(pfd.getFileDescriptor())); PrintWriterPrinter printer = new PrintWriterPrinter(pw); SQLiteDebug.dump(printer, args); + + if (isSystem) { + dumpDatabaseFileSizes(pw, Environment.getDataSystemDirectory(), true); + dumpDatabaseFileSizes(pw, Environment.getDataSystemDeDirectory(), true); + dumpDatabaseFileSizes(pw, Environment.getDataSystemCeDirectory(), true); + } else { + Context context = getApplication(); + if (context != null) { + dumpDatabaseFileSizes(pw, + getDatabasesDir(context.createDeviceProtectedStorageContext()), + false); + dumpDatabaseFileSizes(pw, + getDatabasesDir(context.createCredentialProtectedStorageContext()), + false); + } + } pw.flush(); } + private void dumpDatabaseFileSizes(PrintWriter pw, File dir, boolean isSystem) { + final File[] files = dir.listFiles(); + if (files == null || files.length == 0) { + return; + } + Arrays.sort(files, (a, b) -> a.getName().compareTo(b.getName())); + + boolean needHeader = true; + for (File f : files) { + if (isSystem) { + // If it's the system server, the directory contains other files too, so + // filter by file extensions. + // (If it's an app, just print all files because they may not use *.db + // extension.) + final String name = f.getName(); + if (!(name.endsWith(".db") || name.endsWith(".db-wal") + || name.endsWith(".db-journal"))) { + continue; + } + } + if (needHeader) { + pw.println(); + pw.println("Database files in " + dir.getAbsolutePath() + ":"); + needHeader = false; + } + + pw.print(" "); + pw.print(f.getName()); + pw.print(" "); + pw.print(f.length()); + pw.println(" bytes"); + } + } + @Override public void dumpDbInfo(final ParcelFileDescriptor pfd, final String[] args) { if (mSystemThread) { @@ -1383,14 +1498,14 @@ public final class ActivityThread extends ClientTransactionHandler { @Override public void run() { try { - dumpDatabaseInfo(dup, args); + dumpDatabaseInfo(dup, args, true); } finally { IoUtils.closeQuietly(dup); } } }); } else { - dumpDatabaseInfo(pfd, args); + dumpDatabaseInfo(pfd, args, false); IoUtils.closeQuietly(pfd); } } @@ -1561,16 +1676,24 @@ public final class ActivityThread extends ClientTransactionHandler { class H extends Handler { public static final int BIND_APPLICATION = 110; + @UnsupportedAppUsage public static final int EXIT_APPLICATION = 111; + @UnsupportedAppUsage public static final int RECEIVER = 113; + @UnsupportedAppUsage public static final int CREATE_SERVICE = 114; + @UnsupportedAppUsage public static final int SERVICE_ARGS = 115; + @UnsupportedAppUsage public static final int STOP_SERVICE = 116; public static final int CONFIGURATION_CHANGED = 118; public static final int CLEAN_UP_CONTEXT = 119; + @UnsupportedAppUsage public static final int GC_WHEN_IDLE = 120; + @UnsupportedAppUsage public static final int BIND_SERVICE = 121; + @UnsupportedAppUsage public static final int UNBIND_SERVICE = 122; public static final int DUMP_SERVICE = 123; public static final int LOW_MEMORY = 124; @@ -1578,21 +1701,26 @@ public final class ActivityThread extends ClientTransactionHandler { public static final int CREATE_BACKUP_AGENT = 128; public static final int DESTROY_BACKUP_AGENT = 129; public static final int SUICIDE = 130; + @UnsupportedAppUsage public static final int REMOVE_PROVIDER = 131; public static final int ENABLE_JIT = 132; public static final int DISPATCH_PACKAGE_BROADCAST = 133; + @UnsupportedAppUsage public static final int SCHEDULE_CRASH = 134; public static final int DUMP_HEAP = 135; public static final int DUMP_ACTIVITY = 136; public static final int SLEEPING = 137; public static final int SET_CORE_SETTINGS = 138; public static final int UPDATE_PACKAGE_COMPATIBILITY_INFO = 139; + @UnsupportedAppUsage public static final int DUMP_PROVIDER = 141; public static final int UNSTABLE_PROVIDER_DIED = 142; public static final int REQUEST_ASSIST_CONTEXT_EXTRAS = 143; public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144; + @UnsupportedAppUsage public static final int INSTALL_PROVIDER = 145; public static final int ON_NEW_ACTIVITY_OPTIONS = 146; + @UnsupportedAppUsage public static final int ENTER_ANIMATION_COMPLETE = 149; public static final int START_BINDER_TRACKING = 150; public static final int STOP_BINDER_TRACKING_AND_DUMP = 151; @@ -1881,6 +2009,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage public static ActivityThread currentActivityThread() { return sCurrentActivityThread; } @@ -1895,23 +2024,27 @@ public final class ActivityThread extends ClientTransactionHandler { ? am.getApplication().getOpPackageName() : null; } + @UnsupportedAppUsage public static String currentPackageName() { ActivityThread am = currentActivityThread(); return (am != null && am.mBoundApplication != null) ? am.mBoundApplication.appInfo.packageName : null; } + @UnsupportedAppUsage public static String currentProcessName() { ActivityThread am = currentActivityThread(); return (am != null && am.mBoundApplication != null) ? am.mBoundApplication.processName : null; } + @UnsupportedAppUsage public static Application currentApplication() { ActivityThread am = currentActivityThread(); return am != null ? am.mInitialApplication : null; } + @UnsupportedAppUsage public static IPackageManager getPackageManager() { if (sPackageManager != null) { //Slog.v("PackageManager", "returning cur default = " + sPackageManager); @@ -1949,10 +2082,12 @@ public final class ActivityThread extends ClientTransactionHandler { displayId, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader()); } + @UnsupportedAppUsage final Handler getHandler() { return mH; } + @UnsupportedAppUsage public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags) { return getPackageInfo(packageName, compatInfo, flags, UserHandle.myUserId()); @@ -2007,6 +2142,7 @@ public final class ActivityThread extends ClientTransactionHandler { return null; } + @UnsupportedAppUsage public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, int flags) { boolean includeCode = (flags&Context.CONTEXT_INCLUDE_CODE) != 0; @@ -2034,11 +2170,13 @@ public final class ActivityThread extends ClientTransactionHandler { } @Override + @UnsupportedAppUsage public final LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo) { return getPackageInfo(ai, compatInfo, null, false, true, false); } + @UnsupportedAppUsage public final LoadedApk peekPackageInfo(String packageName, boolean includeCode) { synchronized (mResourcesManager) { WeakReference<LoadedApk> ref; @@ -2098,15 +2236,18 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage ActivityThread() { mResourcesManager = ResourcesManager.getInstance(); } + @UnsupportedAppUsage public ApplicationThread getApplicationThread() { return mAppThread; } + @UnsupportedAppUsage public Instrumentation getInstrumentation() { return mInstrumentation; @@ -2121,6 +2262,7 @@ public final class ActivityThread extends ClientTransactionHandler { return mProfiler.profileFile; } + @UnsupportedAppUsage public Looper getLooper() { return mLooper; } @@ -2129,14 +2271,17 @@ public final class ActivityThread extends ClientTransactionHandler { return mExecutor; } + @UnsupportedAppUsage public Application getApplication() { return mInitialApplication; } + @UnsupportedAppUsage public String getProcessName() { return mBoundApplication.processName; } + @UnsupportedAppUsage public ContextImpl getSystemContext() { synchronized (this) { if (mSystemContext == null) { @@ -2172,6 +2317,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage void scheduleGcIdler() { if (!mGcIdlerScheduled) { mGcIdlerScheduled = true; @@ -2668,6 +2814,7 @@ public final class ActivityThread extends ClientTransactionHandler { proto.end(asToken); } + @UnsupportedAppUsage public void registerOnActivityPausedListener(Activity activity, OnActivityPausedListener listener) { synchronized (mOnPauseListeners) { @@ -2680,6 +2827,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage public void unregisterOnActivityPausedListener(Activity activity, OnActivityPausedListener listener) { synchronized (mOnPauseListeners) { @@ -2701,6 +2849,7 @@ public final class ActivityThread extends ClientTransactionHandler { return aInfo; } + @UnsupportedAppUsage public final Activity startActivityNow(Activity parent, String id, Intent intent, ActivityInfo activityInfo, IBinder token, Bundle state, Activity.NonConfigurationInstances lastNonConfigurationInstances) { @@ -2731,6 +2880,7 @@ public final class ActivityThread extends ClientTransactionHandler { return performLaunchActivity(r, null /* customIntent */); } + @UnsupportedAppUsage public final Activity getActivity(IBinder token) { final ActivityClientRecord activityRecord = mActivities.get(token); return activityRecord != null ? activityRecord.activity : null; @@ -2741,6 +2891,7 @@ public final class ActivityThread extends ClientTransactionHandler { return mActivities.get(token); } + @UnsupportedAppUsage public final void sendActivityResult( IBinder token, String id, int requestCode, int resultCode, Intent data) { @@ -3122,6 +3273,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage void performNewIntents(IBinder token, List<ReferrerIntent> intents, boolean andPause) { final ActivityClientRecord r = mActivities.get(token); if (r == null) { @@ -3342,6 +3494,7 @@ public final class ActivityThread extends ClientTransactionHandler { return sCurrentBroadcastIntent.get(); } + @UnsupportedAppUsage private void handleReceiver(ReceiverData data) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. @@ -3513,6 +3666,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage private void handleCreateService(CreateServiceData data) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. @@ -4055,6 +4209,7 @@ public final class ActivityThread extends ClientTransactionHandler { } /** Called from {@link LocalActivityManager}. */ + @UnsupportedAppUsage final void performStopActivity(IBinder token, boolean saveState, String reason) { ActivityClientRecord r = mActivities.get(token); performStopActivityInner(r, null /* stopInfo */, false /* keepShown */, saveState, @@ -5561,6 +5716,7 @@ public final class ActivityThread extends ClientTransactionHandler { LocaleList.setDefault(new LocaleList(bestLocale, newLocaleList)); } + @UnsupportedAppUsage private void handleBindApplication(AppBindData data) { // Register the UI Thread as a sensitive thread to the runtime. VMRuntime.registerSensitiveThread(); @@ -5950,6 +6106,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage private void installContentProviders( Context context, List<ProviderInfo> providers) { final ArrayList<ContentProviderHolder> results = new ArrayList<>(); @@ -5979,6 +6136,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage public final IContentProvider acquireProvider( Context c, String auth, int userId, boolean stable) { final IContentProvider provider = acquireExistingProvider(c, auth, userId, stable); @@ -6093,6 +6251,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage public final IContentProvider acquireExistingProvider( Context c, String auth, int userId, boolean stable) { synchronized (mProviderMap) { @@ -6123,6 +6282,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage public final boolean releaseProvider(IContentProvider provider, boolean stable) { if (provider == null) { return false; @@ -6255,6 +6415,7 @@ public final class ActivityThread extends ClientTransactionHandler { } } + @UnsupportedAppUsage final void handleUnstableProviderDied(IBinder provider, boolean fromClient) { synchronized (mProviderMap) { handleUnstableProviderDiedLocked(provider, fromClient); @@ -6356,6 +6517,7 @@ public final class ActivityThread extends ClientTransactionHandler { * and returns the existing provider. This can happen due to concurrent * attempts to acquire the same provider. */ + @UnsupportedAppUsage private ContentProviderHolder installProvider(Context context, ContentProviderHolder holder, ProviderInfo info, boolean noisy, boolean noReleaseNeeded, boolean stable) { @@ -6503,6 +6665,7 @@ public final class ActivityThread extends ClientTransactionHandler { System.exit(0); } + @UnsupportedAppUsage private void attach(boolean system, long startSeq) { sCurrentActivityThread = this; mSystemThread = system; @@ -6587,6 +6750,7 @@ public final class ActivityThread extends ClientTransactionHandler { ViewRootImpl.addConfigCallback(configChangedCallback); } + @UnsupportedAppUsage public static ActivityThread systemMain() { // The system process on low-memory devices do not get to use hardware // accelerated drawing, since this can add too much overhead to the @@ -6601,6 +6765,7 @@ public final class ActivityThread extends ClientTransactionHandler { return thread; } + @UnsupportedAppUsage public final void installSystemProviders(List<ProviderInfo> providers) { if (providers != null) { installContentProviders(mInitialApplication, providers); diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index c7fa33d1745d..c879db8967d3 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager.StackInfo; import android.content.Context; import android.content.Intent; @@ -74,6 +75,7 @@ public class ActivityView extends ViewGroup { private final CloseGuard mGuard = CloseGuard.get(); private boolean mOpened; // Protected by mGuard. + @UnsupportedAppUsage public ActivityView(Context context) { this(context, null /* attrs */); } @@ -156,6 +158,7 @@ public class ActivityView extends ViewGroup { * @see StateCallback * @see #startActivity(PendingIntent) */ + @UnsupportedAppUsage public void startActivity(@NonNull Intent intent) { final ActivityOptions options = prepareActivityOptions(); getContext().startActivity(intent, options.toBundle()); @@ -198,6 +201,7 @@ public class ActivityView extends ViewGroup { * @see StateCallback * @see #startActivity(Intent) */ + @UnsupportedAppUsage public void startActivity(@NonNull PendingIntent pendingIntent) { final ActivityOptions options = prepareActivityOptions(); try { @@ -231,6 +235,7 @@ public class ActivityView extends ViewGroup { * * @see StateCallback */ + @UnsupportedAppUsage public void release() { if (mVirtualDisplay == null) { throw new IllegalStateException( diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index f76f911db99b..ec4c4dbaadc7 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -21,6 +21,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.os.Build; @@ -129,8 +130,10 @@ public class AlarmManager { "android.app.action.NEXT_ALARM_CLOCK_CHANGED"; /** @hide */ + @UnsupportedAppUsage public static final long WINDOW_EXACT = 0; /** @hide */ + @UnsupportedAppUsage public static final long WINDOW_HEURISTIC = -1; /** @@ -138,6 +141,7 @@ public class AlarmManager { * other alarms. * @hide */ + @UnsupportedAppUsage public static final int FLAG_STANDALONE = 1<<0; /** @@ -145,6 +149,7 @@ public class AlarmManager { * is, for example, an alarm for an alarm clock. * @hide */ + @UnsupportedAppUsage public static final int FLAG_WAKE_FROM_IDLE = 1<<1; /** @@ -165,6 +170,7 @@ public class AlarmManager { * * @hide */ + @UnsupportedAppUsage public static final int FLAG_ALLOW_WHILE_IDLE_UNRESTRICTED = 1<<3; /** @@ -174,8 +180,10 @@ public class AlarmManager { * avoids scheduling any further alarms until the marker alarm is executed. * @hide */ + @UnsupportedAppUsage public static final int FLAG_IDLE_UNTIL = 1<<4; + @UnsupportedAppUsage private final IAlarmManager mService; private final Context mContext; private final String mPackageName; @@ -628,6 +636,7 @@ public class AlarmManager { * * @hide */ + @UnsupportedAppUsage public void set(@AlarmType int type, long triggerAtMillis, long windowMillis, long intervalMillis, String tag, OnAlarmListener listener, Handler targetHandler, WorkSource workSource) { diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java index 07b4b9c39e1e..dbc8c5d1727b 100644 --- a/core/java/android/app/AlertDialog.java +++ b/core/java/android/app/AlertDialog.java @@ -21,6 +21,7 @@ import android.annotation.AttrRes; import android.annotation.DrawableRes; import android.annotation.StringRes; import android.annotation.StyleRes; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.DialogInterface; import android.content.res.ResourceId; @@ -69,6 +70,7 @@ import com.android.internal.app.AlertController; * </div> */ public class AlertDialog extends Dialog implements DialogInterface { + @UnsupportedAppUsage private AlertController mAlert; /** @@ -449,6 +451,7 @@ public class AlertDialog extends Dialog implements DialogInterface { } public static class Builder { + @UnsupportedAppUsage private final AlertController.AlertParams P; /** @@ -1049,6 +1052,7 @@ public class AlertDialog extends Dialog implements DialogInterface { * @deprecated Set the padding on the view itself. */ @Deprecated + @UnsupportedAppUsage public Builder setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom) { P.mView = view; @@ -1080,6 +1084,7 @@ public class AlertDialog extends Dialog implements DialogInterface { /** * @hide */ + @UnsupportedAppUsage public Builder setRecycleOnMeasureEnabled(boolean enabled) { P.mRecycleOnMeasure = enabled; return this; diff --git a/core/java/android/app/AppGlobals.java b/core/java/android/app/AppGlobals.java index 2b6db8b590f8..1f737b60964c 100644 --- a/core/java/android/app/AppGlobals.java +++ b/core/java/android/app/AppGlobals.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.pm.IPackageManager; /** @@ -27,6 +28,7 @@ public class AppGlobals { * Return the first Application object made in the process. * NOTE: Only works on the main thread. */ + @UnsupportedAppUsage public static Application getInitialApplication() { return ActivityThread.currentApplication(); } @@ -35,6 +37,7 @@ public class AppGlobals { * Return the package name of the first .apk loaded into the process. * NOTE: Only works on the main thread. */ + @UnsupportedAppUsage public static String getInitialPackage() { return ActivityThread.currentPackageName(); } @@ -43,6 +46,7 @@ public class AppGlobals { * Return the raw interface to the package manager. * @return The package manager. */ + @UnsupportedAppUsage public static IPackageManager getPackageManager() { return ActivityThread.getPackageManager(); } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index c3404a5c79e2..fd92174a8023 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -22,6 +22,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.usage.UsageStatsManager; import android.content.Context; import android.media.AudioAttributes.AttributeUsage; @@ -75,6 +76,7 @@ public class AppOpsManager { */ final Context mContext; + @UnsupportedAppUsage final IAppOpsService mService; final ArrayMap<OnOpChangedListener, IAppOpsCallback> mModeWatchers = new ArrayMap<>(); final ArrayMap<OnOpActiveChangedListener, IAppOpsActiveCallback> mActiveWatchers = @@ -191,168 +193,246 @@ public class AppOpsManager { // - add the op to the appropriate template in AppOpsState.OpsTemplate (settings app) /** @hide No operation specified. */ + @UnsupportedAppUsage public static final int OP_NONE = -1; /** @hide Access to coarse location information. */ + @UnsupportedAppUsage public static final int OP_COARSE_LOCATION = 0; /** @hide Access to fine location information. */ + @UnsupportedAppUsage public static final int OP_FINE_LOCATION = 1; /** @hide Causing GPS to run. */ + @UnsupportedAppUsage public static final int OP_GPS = 2; /** @hide */ + @UnsupportedAppUsage public static final int OP_VIBRATE = 3; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_CONTACTS = 4; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_CONTACTS = 5; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_CALL_LOG = 6; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_CALL_LOG = 7; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_CALENDAR = 8; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_CALENDAR = 9; /** @hide */ + @UnsupportedAppUsage public static final int OP_WIFI_SCAN = 10; /** @hide */ + @UnsupportedAppUsage public static final int OP_POST_NOTIFICATION = 11; /** @hide */ + @UnsupportedAppUsage public static final int OP_NEIGHBORING_CELLS = 12; /** @hide */ + @UnsupportedAppUsage public static final int OP_CALL_PHONE = 13; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_SMS = 14; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_SMS = 15; /** @hide */ + @UnsupportedAppUsage public static final int OP_RECEIVE_SMS = 16; /** @hide */ + @UnsupportedAppUsage public static final int OP_RECEIVE_EMERGECY_SMS = 17; /** @hide */ + @UnsupportedAppUsage public static final int OP_RECEIVE_MMS = 18; /** @hide */ + @UnsupportedAppUsage public static final int OP_RECEIVE_WAP_PUSH = 19; /** @hide */ + @UnsupportedAppUsage public static final int OP_SEND_SMS = 20; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_ICC_SMS = 21; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_ICC_SMS = 22; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_SETTINGS = 23; /** @hide Required to draw on top of other apps. */ @TestApi public static final int OP_SYSTEM_ALERT_WINDOW = 24; /** @hide */ + @UnsupportedAppUsage public static final int OP_ACCESS_NOTIFICATIONS = 25; /** @hide */ + @UnsupportedAppUsage public static final int OP_CAMERA = 26; /** @hide */ @TestApi public static final int OP_RECORD_AUDIO = 27; /** @hide */ + @UnsupportedAppUsage public static final int OP_PLAY_AUDIO = 28; /** @hide */ + @UnsupportedAppUsage public static final int OP_READ_CLIPBOARD = 29; /** @hide */ + @UnsupportedAppUsage public static final int OP_WRITE_CLIPBOARD = 30; /** @hide */ + @UnsupportedAppUsage public static final int OP_TAKE_MEDIA_BUTTONS = 31; /** @hide */ + @UnsupportedAppUsage public static final int OP_TAKE_AUDIO_FOCUS = 32; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_MASTER_VOLUME = 33; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_VOICE_VOLUME = 34; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_RING_VOLUME = 35; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_MEDIA_VOLUME = 36; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_ALARM_VOLUME = 37; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_NOTIFICATION_VOLUME = 38; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_BLUETOOTH_VOLUME = 39; /** @hide */ + @UnsupportedAppUsage public static final int OP_WAKE_LOCK = 40; /** @hide Continually monitoring location data. */ + @UnsupportedAppUsage public static final int OP_MONITOR_LOCATION = 41; /** @hide Continually monitoring location data with a relatively high power request. */ + @UnsupportedAppUsage public static final int OP_MONITOR_HIGH_POWER_LOCATION = 42; /** @hide Retrieve current usage stats via {@link UsageStatsManager}. */ + @UnsupportedAppUsage public static final int OP_GET_USAGE_STATS = 43; /** @hide */ + @UnsupportedAppUsage public static final int OP_MUTE_MICROPHONE = 44; /** @hide */ + @UnsupportedAppUsage public static final int OP_TOAST_WINDOW = 45; /** @hide Capture the device's display contents and/or audio */ + @UnsupportedAppUsage public static final int OP_PROJECT_MEDIA = 46; /** @hide Activate a VPN connection without user intervention. */ + @UnsupportedAppUsage public static final int OP_ACTIVATE_VPN = 47; /** @hide Access the WallpaperManagerAPI to write wallpapers. */ + @UnsupportedAppUsage public static final int OP_WRITE_WALLPAPER = 48; /** @hide Received the assist structure from an app. */ + @UnsupportedAppUsage public static final int OP_ASSIST_STRUCTURE = 49; /** @hide Received a screenshot from assist. */ + @UnsupportedAppUsage public static final int OP_ASSIST_SCREENSHOT = 50; /** @hide Read the phone state. */ + @UnsupportedAppUsage public static final int OP_READ_PHONE_STATE = 51; /** @hide Add voicemail messages to the voicemail content provider. */ + @UnsupportedAppUsage public static final int OP_ADD_VOICEMAIL = 52; /** @hide Access APIs for SIP calling over VOIP or WiFi. */ + @UnsupportedAppUsage public static final int OP_USE_SIP = 53; /** @hide Intercept outgoing calls. */ + @UnsupportedAppUsage public static final int OP_PROCESS_OUTGOING_CALLS = 54; /** @hide User the fingerprint API. */ + @UnsupportedAppUsage public static final int OP_USE_FINGERPRINT = 55; /** @hide Access to body sensors such as heart rate, etc. */ + @UnsupportedAppUsage public static final int OP_BODY_SENSORS = 56; /** @hide Read previously received cell broadcast messages. */ + @UnsupportedAppUsage public static final int OP_READ_CELL_BROADCASTS = 57; /** @hide Inject mock location into the system. */ + @UnsupportedAppUsage public static final int OP_MOCK_LOCATION = 58; /** @hide Read external storage. */ + @UnsupportedAppUsage public static final int OP_READ_EXTERNAL_STORAGE = 59; /** @hide Write external storage. */ + @UnsupportedAppUsage public static final int OP_WRITE_EXTERNAL_STORAGE = 60; /** @hide Turned on the screen. */ + @UnsupportedAppUsage public static final int OP_TURN_SCREEN_ON = 61; /** @hide Get device accounts. */ + @UnsupportedAppUsage public static final int OP_GET_ACCOUNTS = 62; /** @hide Control whether an application is allowed to run in the background. */ + @UnsupportedAppUsage public static final int OP_RUN_IN_BACKGROUND = 63; /** @hide */ + @UnsupportedAppUsage public static final int OP_AUDIO_ACCESSIBILITY_VOLUME = 64; /** @hide Read the phone number. */ + @UnsupportedAppUsage public static final int OP_READ_PHONE_NUMBERS = 65; /** @hide Request package installs through package installer */ + @UnsupportedAppUsage public static final int OP_REQUEST_INSTALL_PACKAGES = 66; /** @hide Enter picture-in-picture. */ + @UnsupportedAppUsage public static final int OP_PICTURE_IN_PICTURE = 67; /** @hide Instant app start foreground service. */ + @UnsupportedAppUsage public static final int OP_INSTANT_APP_START_FOREGROUND = 68; /** @hide Answer incoming phone calls */ + @UnsupportedAppUsage public static final int OP_ANSWER_PHONE_CALLS = 69; /** @hide Run jobs when in background */ + @UnsupportedAppUsage public static final int OP_RUN_ANY_IN_BACKGROUND = 70; /** @hide Change Wi-Fi connectivity state */ + @UnsupportedAppUsage public static final int OP_CHANGE_WIFI_STATE = 71; /** @hide Request package deletion through package installer */ + @UnsupportedAppUsage public static final int OP_REQUEST_DELETE_PACKAGES = 72; /** @hide Bind an accessibility service. */ + @UnsupportedAppUsage public static final int OP_BIND_ACCESSIBILITY_SERVICE = 73; /** @hide Continue handover of a call from another app */ + @UnsupportedAppUsage public static final int OP_ACCEPT_HANDOVER = 74; /** @hide Create and Manage IPsec Tunnels */ + @UnsupportedAppUsage public static final int OP_MANAGE_IPSEC_TUNNELS = 75; /** @hide Any app start foreground service. */ + @UnsupportedAppUsage public static final int OP_START_FOREGROUND = 76; /** @hide */ + @UnsupportedAppUsage public static final int OP_BLUETOOTH_SCAN = 77; /** @hide Use the face authentication API. */ public static final int OP_USE_FACE = 78; /** @hide */ + @UnsupportedAppUsage public static final int _NUM_OP = 79; /** Access to coarse location information. */ @@ -916,6 +996,7 @@ public class AppOpsManager { * This optionally maps a permission to an operation. If there * is no permission associated with an operation, it is null. */ + @UnsupportedAppUsage private static String[] sOpPerms = new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION, @@ -1404,6 +1485,7 @@ public class AppOpsManager { * Retrieve the op switch that controls the given operation. * @hide */ + @UnsupportedAppUsage public static int opToSwitch(int op) { return sOpToSwitch[op]; } @@ -1412,6 +1494,7 @@ public class AppOpsManager { * Retrieve a non-localized name for the operation, for debugging output. * @hide */ + @UnsupportedAppUsage public static String opToName(int op) { if (op == OP_NONE) return "NONE"; return op < sOpNames.length ? sOpNames[op] : ("Unknown(" + op + ")"); @@ -1507,6 +1590,7 @@ public class AppOpsManager { /** * @hide */ + @UnsupportedAppUsage public PackageOps(String packageName, int uid, List<OpEntry> entries) { mPackageName = packageName; mUid = uid; @@ -1621,6 +1705,7 @@ public class AppOpsManager { /** * @hide */ + @UnsupportedAppUsage public int getOp() { return mOp; } @@ -1642,6 +1727,7 @@ public class AppOpsManager { /** * @hide */ + @UnsupportedAppUsage public long getTime() { return maxTime(mTimes, 0, _NUM_UID_STATE); } @@ -1814,6 +1900,7 @@ public class AppOpsManager { * @hide */ @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) + @UnsupportedAppUsage public List<AppOpsManager.PackageOps> getPackagesForOps(int[] ops) { try { return mService.getPackagesForOps(ops); @@ -1944,6 +2031,7 @@ public class AppOpsManager { * @hide */ @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) + @UnsupportedAppUsage public void setRestriction(int code, @AttributeUsage int usage, int mode, String[] exceptionPackages) { try { @@ -1956,6 +2044,7 @@ public class AppOpsManager { /** @hide */ @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) + @UnsupportedAppUsage public void resetAllModes() { try { mService.resetAllModes(mContext.getUserId(), null); @@ -2356,6 +2445,7 @@ public class AppOpsManager { * @throws SecurityException If the app has been configured to crash on this op. * @hide */ + @UnsupportedAppUsage public int checkOp(int op, int uid, String packageName) { try { int mode = mService.checkOperation(op, uid, packageName); @@ -2373,6 +2463,7 @@ public class AppOpsManager { * returns {@link #MODE_ERRORED}. * @hide */ + @UnsupportedAppUsage public int checkOpNoThrow(int op, int uid, String packageName) { try { int mode = mService.checkOperation(op, uid, packageName); @@ -2443,6 +2534,7 @@ public class AppOpsManager { * @throws SecurityException If the app has been configured to crash on this op. * @hide */ + @UnsupportedAppUsage public int noteOp(int op, int uid, String packageName) { final int mode = noteOpNoThrow(op, uid, packageName); if (mode == MODE_ERRORED) { @@ -2469,6 +2561,7 @@ public class AppOpsManager { * * @hide */ + @UnsupportedAppUsage public int noteProxyOp(int op, String proxiedPackageName) { int mode = noteProxyOpNoThrow(op, proxiedPackageName); if (mode == MODE_ERRORED) { @@ -2499,6 +2592,7 @@ public class AppOpsManager { * returns {@link #MODE_ERRORED}. * @hide */ + @UnsupportedAppUsage public int noteOpNoThrow(int op, int uid, String packageName) { try { return mService.noteOperation(op, uid, packageName); @@ -2508,11 +2602,13 @@ public class AppOpsManager { } /** @hide */ + @UnsupportedAppUsage public int noteOp(int op) { return noteOp(op, Process.myUid(), mContext.getOpPackageName()); } /** @hide */ + @UnsupportedAppUsage public static IBinder getToken(IAppOpsService service) { synchronized (AppOpsManager.class) { if (sToken != null) { diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java index 6a58d9b0de36..636366d53af2 100644 --- a/core/java/android/app/Application.java +++ b/core/java/android/app/Application.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.CallSuper; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentCallbacks; import android.content.ComponentCallbacks2; import android.content.Context; @@ -50,13 +51,17 @@ import java.util.ArrayList; */ public class Application extends ContextWrapper implements ComponentCallbacks2 { private static final String TAG = "Application"; + @UnsupportedAppUsage private ArrayList<ComponentCallbacks> mComponentCallbacks = new ArrayList<ComponentCallbacks>(); + @UnsupportedAppUsage private ArrayList<ActivityLifecycleCallbacks> mActivityLifecycleCallbacks = new ArrayList<ActivityLifecycleCallbacks>(); + @UnsupportedAppUsage private ArrayList<OnProvideAssistDataListener> mAssistCallbacks = null; /** @hide */ + @UnsupportedAppUsage public LoadedApk mLoadedApk; public interface ActivityLifecycleCallbacks { @@ -210,11 +215,13 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { /** * @hide */ + @UnsupportedAppUsage /* package */ final void attach(Context context) { attachBaseContext(context); mLoadedApk = ContextImpl.getImpl(context).mPackageInfo; } + @UnsupportedAppUsage /* package */ void dispatchActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) { Object[] callbacks = collectActivityLifecycleCallbacks(); @@ -226,6 +233,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivityStarted(@NonNull Activity activity) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { @@ -235,6 +243,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivityResumed(@NonNull Activity activity) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { @@ -244,6 +253,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivityPaused(@NonNull Activity activity) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { @@ -253,6 +263,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivityStopped(@NonNull Activity activity) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { @@ -262,6 +273,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { Object[] callbacks = collectActivityLifecycleCallbacks(); @@ -273,6 +285,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { } } + @UnsupportedAppUsage /* package */ void dispatchActivityDestroyed(@NonNull Activity activity) { Object[] callbacks = collectActivityLifecycleCallbacks(); if (callbacks != null) { @@ -292,6 +305,7 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 { return callbacks; } + @UnsupportedAppUsage private Object[] collectActivityLifecycleCallbacks() { Object[] callbacks = null; synchronized (mActivityLifecycleCallbacks) { diff --git a/core/java/android/app/ApplicationLoaders.java b/core/java/android/app/ApplicationLoaders.java index 0ed50f2bea97..30d6beed80dd 100644 --- a/core/java/android/app/ApplicationLoaders.java +++ b/core/java/android/app/ApplicationLoaders.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.os.Build; import android.os.GraphicsEnvironment; import android.os.Trace; @@ -29,6 +30,7 @@ import java.util.Collection; /** @hide */ public class ApplicationLoaders { + @UnsupportedAppUsage public static ApplicationLoaders getDefault() { return gApplicationLoaders; } @@ -134,6 +136,7 @@ public class ApplicationLoaders { baseDexClassLoader.addNativePath(libPaths); } + @UnsupportedAppUsage private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<>(); private static final ApplicationLoaders gApplicationLoaders = new ApplicationLoaders(); diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 09a614c8649e..264029b6ace7 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -20,6 +20,7 @@ import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.annotation.XmlRes; import android.content.ComponentName; @@ -699,6 +700,7 @@ public class ApplicationPackageManager extends PackageManager { } @Override + @UnsupportedAppUsage public boolean shouldShowRequestPermissionRationale(String permission) { try { return mPM.shouldShowRequestPermissionRationale(permission, @@ -1531,6 +1533,7 @@ public class ApplicationPackageManager extends PackageManager { } } + @UnsupportedAppUsage static void configurationChanged() { synchronized (sSync) { sIconCache.clear(); @@ -1538,6 +1541,7 @@ public class ApplicationPackageManager extends PackageManager { } } + @UnsupportedAppUsage protected ApplicationPackageManager(ContextImpl context, IPackageManager pm) { mContext = context; @@ -2029,6 +2033,7 @@ public class ApplicationPackageManager extends PackageManager { } @Override + @UnsupportedAppUsage public @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app) { final StorageManager storage = mContext.getSystemService(StorageManager.class); return getPackageCurrentVolume(app, storage); @@ -2182,6 +2187,7 @@ public class ApplicationPackageManager extends PackageManager { } @Override + @UnsupportedAppUsage public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) { deletePackageAsUser(packageName, observer, flags, getUserId()); } @@ -2306,6 +2312,7 @@ public class ApplicationPackageManager extends PackageManager { } @Override + @UnsupportedAppUsage public void getPackageSizeInfoAsUser(String packageName, int userHandle, IPackageStatsObserver observer) { final String msg = "Shame on you for calling the hidden API " @@ -2749,6 +2756,7 @@ public class ApplicationPackageManager extends PackageManager { } private final ContextImpl mContext; + @UnsupportedAppUsage private final IPackageManager mPM; /** Assume locked until we hear otherwise */ diff --git a/core/java/android/app/ContentProviderHolder.java b/core/java/android/app/ContentProviderHolder.java index f9998f4a40e4..10989902fea8 100644 --- a/core/java/android/app/ContentProviderHolder.java +++ b/core/java/android/app/ContentProviderHolder.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.ContentProviderNative; import android.content.IContentProvider; import android.content.pm.ProviderInfo; @@ -29,11 +30,15 @@ import android.os.Parcelable; * @hide */ public class ContentProviderHolder implements Parcelable { + @UnsupportedAppUsage public final ProviderInfo info; + @UnsupportedAppUsage public IContentProvider provider; public IBinder connection; + @UnsupportedAppUsage public boolean noReleaseNeeded; + @UnsupportedAppUsage public ContentProviderHolder(ProviderInfo _info) { info = _info; } @@ -68,6 +73,7 @@ public class ContentProviderHolder implements Parcelable { } }; + @UnsupportedAppUsage private ContentProviderHolder(Parcel source) { info = ProviderInfo.CREATOR.createFromParcel(source); provider = ContentProviderNative.asInterface( diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 2eafb32d088f..bbaaee8eed44 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentProvider; @@ -156,36 +157,50 @@ class ContextImpl extends Context { * Map from package name, to preference name, to cached preferences. */ @GuardedBy("ContextImpl.class") + @UnsupportedAppUsage private static ArrayMap<String, ArrayMap<File, SharedPreferencesImpl>> sSharedPrefsCache; /** * Map from preference name to generated path. */ @GuardedBy("ContextImpl.class") + @UnsupportedAppUsage private ArrayMap<String, File> mSharedPrefsPaths; + @UnsupportedAppUsage final @NonNull ActivityThread mMainThread; + @UnsupportedAppUsage final @NonNull LoadedApk mPackageInfo; + @UnsupportedAppUsage private @Nullable ClassLoader mClassLoader; private final @Nullable IBinder mActivityToken; private final @NonNull UserHandle mUser; + @UnsupportedAppUsage private final ApplicationContentResolver mContentResolver; + @UnsupportedAppUsage private final String mBasePackageName; + @UnsupportedAppUsage private final String mOpPackageName; private final @NonNull ResourcesManager mResourcesManager; + @UnsupportedAppUsage private @NonNull Resources mResources; private @Nullable Display mDisplay; // may be null if default display + @UnsupportedAppUsage private final int mFlags; + @UnsupportedAppUsage private Context mOuterContext; + @UnsupportedAppUsage private int mThemeResource = 0; + @UnsupportedAppUsage private Resources.Theme mTheme = null; + @UnsupportedAppUsage private PackageManager mPackageManager; private Context mReceiverRestrictedContext = null; @@ -200,6 +215,7 @@ class ContextImpl extends Context { @GuardedBy("mSync") private File mDatabasesDir; @GuardedBy("mSync") + @UnsupportedAppUsage private File mPreferencesDir; @GuardedBy("mSync") private File mFilesDir; @@ -211,6 +227,7 @@ class ContextImpl extends Context { private File mCodeCacheDir; // The system service cache for the system services that are cached per-ContextImpl. + @UnsupportedAppUsage final Object[] mServiceCache = SystemServiceRegistry.createServiceCache(); static final int STATE_UNINITIALIZED = 0; @@ -235,6 +252,7 @@ class ContextImpl extends Context { @ServiceInitializationState final int[] mServiceInitializationStateArray = new int[mServiceCache.length]; + @UnsupportedAppUsage static ContextImpl getImpl(Context context) { Context nextContext; while ((context instanceof ContextWrapper) && @@ -546,6 +564,7 @@ class ContextImpl extends Context { } } + @UnsupportedAppUsage private File getPreferencesDir() { synchronized (mSync) { if (mPreferencesDir == null) { @@ -2220,6 +2239,7 @@ class ContextImpl extends Context { } @Override + @UnsupportedAppUsage public Display getDisplay() { if (mDisplay == null) { return mResourcesManager.getAdjustedDisplay(Display.DEFAULT_DISPLAY, @@ -2317,6 +2337,7 @@ class ContextImpl extends Context { mIsAutofillCompatEnabled = autofillCompatEnabled; } + @UnsupportedAppUsage static ContextImpl createSystemContext(ActivityThread mainThread) { LoadedApk packageInfo = new LoadedApk(mainThread); ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0, @@ -2340,6 +2361,7 @@ class ContextImpl extends Context { return context; } + @UnsupportedAppUsage static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo) { if (packageInfo == null) throw new IllegalArgumentException("packageInfo"); ContextImpl context = new ContextImpl(null, mainThread, packageInfo, null, null, null, 0, @@ -2348,6 +2370,7 @@ class ContextImpl extends Context { return context; } + @UnsupportedAppUsage static ContextImpl createActivityContext(ActivityThread mainThread, LoadedApk packageInfo, ActivityInfo activityInfo, IBinder activityToken, int displayId, Configuration overrideConfiguration) { @@ -2462,6 +2485,7 @@ class ContextImpl extends Context { mPackageInfo.installSystemApplicationInfo(info, classLoader); } + @UnsupportedAppUsage final void scheduleFinalCleanup(String who, String what) { mMainThread.scheduleContextCleanup(this, who, what); } @@ -2471,6 +2495,7 @@ class ContextImpl extends Context { mPackageInfo.removeContextRegistrations(getOuterContext(), who, what); } + @UnsupportedAppUsage final Context getReceiverRestrictedContext() { if (mReceiverRestrictedContext != null) { return mReceiverRestrictedContext; @@ -2478,15 +2503,18 @@ class ContextImpl extends Context { return mReceiverRestrictedContext = new ReceiverRestrictedContext(getOuterContext()); } + @UnsupportedAppUsage final void setOuterContext(Context context) { mOuterContext = context; } + @UnsupportedAppUsage final Context getOuterContext() { return mOuterContext; } @Override + @UnsupportedAppUsage public IBinder getActivityToken() { return mActivityToken; } @@ -2567,6 +2595,7 @@ class ContextImpl extends Context { // ---------------------------------------------------------------------- private static final class ApplicationContentResolver extends ContentResolver { + @UnsupportedAppUsage private final ActivityThread mMainThread; public ApplicationContentResolver(Context context, ActivityThread mainThread) { @@ -2575,6 +2604,7 @@ class ContextImpl extends Context { } @Override + @UnsupportedAppUsage protected IContentProvider acquireProvider(Context context, String auth) { return mMainThread.acquireProvider(context, ContentProvider.getAuthorityWithoutUserId(auth), diff --git a/core/java/android/app/DatePickerDialog.java b/core/java/android/app/DatePickerDialog.java index bd55a06c40f5..37a05f0e1d3a 100644 --- a/core/java/android/app/DatePickerDialog.java +++ b/core/java/android/app/DatePickerDialog.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StyleRes; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; @@ -47,6 +48,7 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener, private static final String MONTH = "month"; private static final String DAY = "day"; + @UnsupportedAppUsage private final DatePicker mDatePicker; private OnDateSetListener mDateSetListener; diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index 6557ac4bea11..b7bac52178b0 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -24,6 +24,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.StyleRes; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.ContextWrapper; @@ -93,11 +94,14 @@ import java.lang.ref.WeakReference; public class Dialog implements DialogInterface, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, Window.OnWindowDismissedCallback { private static final String TAG = "Dialog"; + @UnsupportedAppUsage private Activity mOwnerActivity; private final WindowManager mWindowManager; + @UnsupportedAppUsage final Context mContext; + @UnsupportedAppUsage final Window mWindow; View mDecor; @@ -110,22 +114,30 @@ public class Dialog implements DialogInterface, Window.Callback, protected boolean mCancelable = true; private String mCancelAndDismissTaken; + @UnsupportedAppUsage private Message mCancelMessage; + @UnsupportedAppUsage private Message mDismissMessage; + @UnsupportedAppUsage private Message mShowMessage; + @UnsupportedAppUsage private OnKeyListener mOnKeyListener; private boolean mCreated = false; + @UnsupportedAppUsage private boolean mShowing = false; private boolean mCanceled = false; + @UnsupportedAppUsage private final Handler mHandler = new Handler(); private static final int DISMISS = 0x43; + @UnsupportedAppUsage private static final int CANCEL = 0x44; private static final int SHOW = 0x45; + @UnsupportedAppUsage private final Handler mListenersHandler; private SearchEvent mSearchEvent; @@ -361,6 +373,7 @@ public class Dialog implements DialogInterface, Window.Callback, } } + @UnsupportedAppUsage void dismissDialog() { if (mDecor == null || !mShowing) { return; diff --git a/core/java/android/app/DialogFragment.java b/core/java/android/app/DialogFragment.java index 3a355d97a5c2..bfc15c221702 100644 --- a/core/java/android/app/DialogFragment.java +++ b/core/java/android/app/DialogFragment.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; @@ -182,11 +183,15 @@ public class DialogFragment extends Fragment int mTheme = 0; boolean mCancelable = true; boolean mShowsDialog = true; + @UnsupportedAppUsage int mBackStackId = -1; Dialog mDialog; + @UnsupportedAppUsage boolean mViewDestroyed; + @UnsupportedAppUsage boolean mDismissed; + @UnsupportedAppUsage boolean mShownByMe; public DialogFragment() { @@ -236,6 +241,7 @@ public class DialogFragment extends Fragment } /** {@hide} */ + @UnsupportedAppUsage public void showAllowingStateLoss(FragmentManager manager, String tag) { mDismissed = false; mShownByMe = true; diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index b444f17c0b69..35999a223938 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -21,6 +21,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; @@ -329,6 +330,7 @@ public class DownloadManager { * columns to request from DownloadProvider. * @hide */ + @UnsupportedAppUsage public static final String[] UNDERLYING_COLUMNS = new String[] { Downloads.Impl._ID, Downloads.Impl._DATA + " AS " + COLUMN_LOCAL_FILENAME, @@ -381,6 +383,7 @@ public class DownloadManager { @Deprecated public static final int NETWORK_BLUETOOTH = 1 << 2; + @UnsupportedAppUsage private Uri mUri; private Uri mDestinationUri; private List<Pair<String, String>> mRequestHeaders = new ArrayList<Pair<String, String>>(); @@ -860,6 +863,7 @@ public class DownloadManager { * @return this object * @hide */ + @UnsupportedAppUsage public Query setOnlyIncludeVisibleInDownloadsUi(boolean value) { mOnlyIncludeVisibleInDownloadsUi = value; return this; @@ -875,6 +879,7 @@ public class DownloadManager { * @return this object * @hide */ + @UnsupportedAppUsage public Query orderBy(String column, int direction) { if (direction != ORDER_ASCENDING && direction != ORDER_DESCENDING) { throw new IllegalArgumentException("Invalid direction: " + direction); @@ -996,6 +1001,7 @@ public class DownloadManager { * /my_downloads URIs, for clients that have permission to do so. * @hide */ + @UnsupportedAppUsage public void setAccessAllDownloads(boolean accessAllDownloads) { if (accessAllDownloads) { mBaseUri = Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI; @@ -1005,6 +1011,7 @@ public class DownloadManager { } /** {@hide} */ + @UnsupportedAppUsage public void setAccessFilename(boolean accessFilename) { mAccessFilename = accessFilename; } @@ -1439,6 +1446,7 @@ public class DownloadManager { /** * Get a parameterized SQL WHERE clause to select a bunch of IDs. */ + @UnsupportedAppUsage static String getWhereClauseForIds(long[] ids) { StringBuilder whereClause = new StringBuilder(); whereClause.append("("); @@ -1456,6 +1464,7 @@ public class DownloadManager { /** * Get the selection args for a clause returned by {@link #getWhereClauseForIds(long[])}. */ + @UnsupportedAppUsage static String[] getWhereArgsForIds(long[] ids) { String[] whereArgs = new String[ids.length]; return getWhereArgsForIds(ids, whereArgs); diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 8e8270a0890f..9f4157f007f1 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -21,6 +21,7 @@ import android.annotation.CallSuper; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; @@ -263,6 +264,7 @@ import java.lang.reflect.InvocationTargetException; */ @Deprecated public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListener { + @UnsupportedAppUsage private static final ArrayMap<String, Class<?>> sClassMap = new ArrayMap<String, Class<?>>(); @@ -279,13 +281,16 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene int mState = INITIALIZING; // When instantiated from saved state, this is the saved state. + @UnsupportedAppUsage Bundle mSavedFragmentState; SparseArray<Parcelable> mSavedViewState; // Index into active fragment array. + @UnsupportedAppUsage int mIndex = -1; // Internal unique name for this fragment; + @UnsupportedAppUsage String mWho; // Construction arguments; @@ -301,6 +306,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene int mTargetRequestCode; // True if the fragment is in the list of added fragments. + @UnsupportedAppUsage boolean mAdded; // If set this fragment is being removed from its activity. @@ -325,12 +331,15 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene // The fragment manager we are associated with. Set as soon as the // fragment is used in a transaction; cleared after it has been removed // from all transactions. + @UnsupportedAppUsage FragmentManagerImpl mFragmentManager; // Activity this fragment is attached to. + @UnsupportedAppUsage FragmentHostCallback mHost; // Private fragment manager for child fragments inside of this one. + @UnsupportedAppUsage FragmentManagerImpl mChildFragmentManager; // For use when restoring fragment state and descendant fragments are retained. @@ -343,6 +352,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene // The optional identifier for this fragment -- either the container ID if it // was dynamically added to the view hierarchy, or the ID supplied in // layout. + @UnsupportedAppUsage int mFragmentId; // When a fragment is being dynamically added to the view hierarchy, this @@ -380,6 +390,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene ViewGroup mContainer; // The View generated for this fragment. + @UnsupportedAppUsage View mView; // Whether this fragment should defer starting until after other fragments @@ -390,6 +401,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene boolean mUserVisibleHint = true; LoaderManagerImpl mLoaderManager; + @UnsupportedAppUsage boolean mLoadersStarted; boolean mCheckedForLoaderManager; diff --git a/core/java/android/app/FragmentController.java b/core/java/android/app/FragmentController.java index 40bc2483aa40..9316be7a7968 100644 --- a/core/java/android/app/FragmentController.java +++ b/core/java/android/app/FragmentController.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; @@ -43,6 +44,7 @@ import java.util.List; */ @Deprecated public class FragmentController { + @UnsupportedAppUsage private final FragmentHostCallback<?> mHost; /** diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java index b48817b1554d..1a12fdc40886 100644 --- a/core/java/android/app/FragmentHostCallback.java +++ b/core/java/android/app/FragmentHostCallback.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.content.IntentSender; @@ -56,6 +57,7 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer { private LoaderManagerImpl mLoaderManager; private boolean mCheckedForLoaderManager; /** Whether or not the fragment host loader manager was started */ + @UnsupportedAppUsage private boolean mLoadersStarted; public FragmentHostCallback(Context context, Handler handler, int windowAnimations) { diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 708450f672ee..5e7921b6cc6f 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -22,6 +22,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; @@ -688,7 +689,9 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate boolean mExecutingActions; int mNextFragmentIndex = 0; + @UnsupportedAppUsage SparseArray<Fragment> mActive; + @UnsupportedAppUsage final ArrayList<Fragment> mAdded = new ArrayList<>(); ArrayList<BackStackRecord> mBackStack; ArrayList<Fragment> mCreatedMenus; @@ -708,6 +711,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate Fragment mPrimaryNav; boolean mNeedMenuInvalidate; + @UnsupportedAppUsage boolean mStateSaved; boolean mDestroyed; String mNoTransactionsBecause; @@ -1097,6 +1101,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate } } + @UnsupportedAppUsage Animator loadAnimator(Fragment fragment, int transit, boolean enter, int transitionStyle) { Animator animObj = fragment.onCreateAnimator(transit, enter, fragment.getNextAnim()); @@ -2976,6 +2981,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate return 0; } + @UnsupportedAppUsage public void noteStateNotSaved() { mSavedNonConfig = null; mStateSaved = false; diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index cd127102f83b..3171e3e3b992 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -43,7 +43,7 @@ interface INotificationManager void cancelAllNotifications(String pkg, int userId); void clearData(String pkg, int uid, boolean fromApp); - void enqueueToast(String pkg, ITransientNotification callback, int duration); + void enqueueToast(String pkg, ITransientNotification callback, int duration, int displayId); void cancelToast(String pkg, ITransientNotification callback); void finishToken(String pkg, ITransientNotification callback); diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index d9969a77b88a..34c22822403e 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; @@ -1374,6 +1375,7 @@ public class Instrumentation { /** * @hide */ + @UnsupportedAppUsage public void callActivityOnNewIntent(Activity activity, ReferrerIntent intent) { final String oldReferrer = activity.mReferrer; try { @@ -1638,6 +1640,7 @@ public class Instrumentation { * * {@hide} */ + @UnsupportedAppUsage public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { @@ -1691,6 +1694,7 @@ public class Instrumentation { * * {@hide} */ + @UnsupportedAppUsage public void execStartActivities(Context who, IBinder contextThread, IBinder token, Activity target, Intent[] intents, Bundle options) { execStartActivitiesAsUser(who, contextThread, token, target, intents, options, @@ -1709,6 +1713,7 @@ public class Instrumentation { * * {@hide} */ + @UnsupportedAppUsage public int execStartActivitiesAsUser(Context who, IBinder contextThread, IBinder token, Activity target, Intent[] intents, Bundle options, int userId) { @@ -1780,6 +1785,7 @@ public class Instrumentation { * * {@hide} */ + @UnsupportedAppUsage public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, String target, Intent intent, int requestCode, Bundle options) { @@ -1847,6 +1853,7 @@ public class Instrumentation { * * {@hide} */ + @UnsupportedAppUsage public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, String resultWho, Intent intent, int requestCode, Bundle options, UserHandle user) { @@ -1892,6 +1899,7 @@ public class Instrumentation { * Special version! * @hide */ + @UnsupportedAppUsage public ActivityResult execStartActivityAsCaller( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options, boolean ignoreTargetSecurity, @@ -1938,6 +1946,7 @@ public class Instrumentation { * Special version! * @hide */ + @UnsupportedAppUsage public void execStartActivityFromAppTask( Context who, IBinder contextThread, IAppTask appTask, Intent intent, Bundle options) { @@ -1997,6 +2006,7 @@ public class Instrumentation { } /** @hide */ + @UnsupportedAppUsage public static void checkStartActivityResult(int res, Object intent) { if (!ActivityManager.isStartResultFatalError(res)) { return; diff --git a/core/java/android/app/IntentService.java b/core/java/android/app/IntentService.java index 95ec24cdb9c5..11c747f5db17 100644 --- a/core/java/android/app/IntentService.java +++ b/core/java/android/app/IntentService.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.annotation.WorkerThread; import android.annotation.Nullable; import android.content.Intent; @@ -62,6 +63,7 @@ import android.os.Message; */ public abstract class IntentService extends Service { private volatile Looper mServiceLooper; + @UnsupportedAppUsage private volatile ServiceHandler mServiceHandler; private String mName; private boolean mRedelivery; diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 9ceecd96363f..3085fe58c8e6 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.trust.ITrustManager; import android.content.Context; import android.content.Intent; @@ -414,6 +415,7 @@ public class KeyguardManager { * * @hide */ + @UnsupportedAppUsage public boolean isDeviceLocked(int userId) { try { return mTrustManager.isDeviceLocked(userId); @@ -439,6 +441,7 @@ public class KeyguardManager { * * @hide */ + @UnsupportedAppUsage public boolean isDeviceSecure(int userId) { try { return mTrustManager.isDeviceSecure(userId); diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 494b5474ad00..ddd944186705 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -73,12 +74,14 @@ import java.util.List; import java.util.Objects; final class IntentReceiverLeaked extends AndroidRuntimeException { + @UnsupportedAppUsage public IntentReceiverLeaked(String msg) { super(msg); } } final class ServiceConnectionLeaked extends AndroidRuntimeException { + @UnsupportedAppUsage public ServiceConnectionLeaked(String msg) { super(msg); } @@ -93,36 +96,52 @@ public final class LoadedApk { static final boolean DEBUG = false; private static final String PROPERTY_NAME_APPEND_NATIVE = "pi.append_native_lib_paths"; + @UnsupportedAppUsage private final ActivityThread mActivityThread; + @UnsupportedAppUsage final String mPackageName; + @UnsupportedAppUsage private ApplicationInfo mApplicationInfo; + @UnsupportedAppUsage private String mAppDir; + @UnsupportedAppUsage private String mResDir; private String[] mOverlayDirs; + @UnsupportedAppUsage private String mDataDir; + @UnsupportedAppUsage private String mLibDir; + @UnsupportedAppUsage private File mDataDirFile; private File mDeviceProtectedDataDirFile; private File mCredentialProtectedDataDirFile; + @UnsupportedAppUsage private final ClassLoader mBaseClassLoader; private final boolean mSecurityViolation; private final boolean mIncludeCode; private final boolean mRegisterPackage; + @UnsupportedAppUsage private final DisplayAdjustments mDisplayAdjustments = new DisplayAdjustments(); /** WARNING: This may change. Don't hold external references to it. */ + @UnsupportedAppUsage Resources mResources; + @UnsupportedAppUsage private ClassLoader mClassLoader; + @UnsupportedAppUsage private Application mApplication; private String[] mSplitNames; private String[] mSplitAppDirs; + @UnsupportedAppUsage private String[] mSplitResDirs; private String[] mSplitClassLoaderNames; + @UnsupportedAppUsage private final ArrayMap<Context, ArrayMap<BroadcastReceiver, ReceiverDispatcher>> mReceivers = new ArrayMap<>(); private final ArrayMap<Context, ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>> mUnregisteredReceivers = new ArrayMap<>(); + @UnsupportedAppUsage private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mServices = new ArrayMap<>(); private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mUnboundServices @@ -236,10 +255,12 @@ public final class LoadedApk { return mAppComponentFactory; } + @UnsupportedAppUsage public String getPackageName() { return mPackageName; } + @UnsupportedAppUsage public ApplicationInfo getApplicationInfo() { return mApplicationInfo; } @@ -252,6 +273,7 @@ public final class LoadedApk { return mSecurityViolation; } + @UnsupportedAppUsage public CompatibilityInfo getCompatibilityInfo() { return mDisplayAdjustments.getCompatibilityInfo(); } @@ -804,6 +826,7 @@ public final class LoadedApk { } } + @UnsupportedAppUsage public ClassLoader getClassLoader() { synchronized (this) { if (mClassLoader == null) { @@ -972,6 +995,7 @@ public final class LoadedApk { } } + @UnsupportedAppUsage public String getAppDir() { return mAppDir; } @@ -980,6 +1004,7 @@ public final class LoadedApk { return mLibDir; } + @UnsupportedAppUsage public String getResDir() { return mResDir; } @@ -988,10 +1013,12 @@ public final class LoadedApk { return mSplitAppDirs; } + @UnsupportedAppUsage public String[] getSplitResDirs() { return mSplitResDirs; } + @UnsupportedAppUsage public String[] getOverlayDirs() { return mOverlayDirs; } @@ -1000,6 +1027,7 @@ public final class LoadedApk { return mDataDir; } + @UnsupportedAppUsage public File getDataDirFile() { return mDataDirFile; } @@ -1012,10 +1040,12 @@ public final class LoadedApk { return mCredentialProtectedDataDirFile; } + @UnsupportedAppUsage public AssetManager getAssets() { return getResources().getAssets(); } + @UnsupportedAppUsage public Resources getResources() { if (mResources == null) { final String[] splitPaths; @@ -1034,6 +1064,7 @@ public final class LoadedApk { return mResources; } + @UnsupportedAppUsage public Application makeApplication(boolean forceDefaultAppClass, Instrumentation instrumentation) { if (mApplication != null) { @@ -1102,6 +1133,7 @@ public final class LoadedApk { return app; } + @UnsupportedAppUsage private void rewriteRValues(ClassLoader cl, String packageName, int id) { final Class<?> rClazz; try { @@ -1324,7 +1356,9 @@ public final class LoadedApk { } final IIntentReceiver.Stub mIIntentReceiver; + @UnsupportedAppUsage final BroadcastReceiver mReceiver; + @UnsupportedAppUsage final Context mContext; final Handler mActivityThread; final Instrumentation mInstrumentation; @@ -1448,10 +1482,12 @@ public final class LoadedApk { return mLocation; } + @UnsupportedAppUsage BroadcastReceiver getIntentReceiver() { return mReceiver; } + @UnsupportedAppUsage IIntentReceiver getIIntentReceiver() { return mIIntentReceiver; } @@ -1489,6 +1525,7 @@ public final class LoadedApk { } + @UnsupportedAppUsage public final IServiceConnection getServiceDispatcher(ServiceConnection c, Context context, Handler handler, int flags) { synchronized (mServices) { @@ -1566,7 +1603,9 @@ public final class LoadedApk { static final class ServiceDispatcher { private final ServiceDispatcher.InnerConnection mIServiceConnection; + @UnsupportedAppUsage private final ServiceConnection mConnection; + @UnsupportedAppUsage private final Context mContext; private final Handler mActivityThread; private final ServiceConnectionLeaked mLocation; @@ -1582,6 +1621,7 @@ public final class LoadedApk { } private static class InnerConnection extends IServiceConnection.Stub { + @UnsupportedAppUsage final WeakReference<LoadedApk.ServiceDispatcher> mDispatcher; InnerConnection(LoadedApk.ServiceDispatcher sd) { @@ -1600,6 +1640,7 @@ public final class LoadedApk { private final ArrayMap<ComponentName, ServiceDispatcher.ConnectionInfo> mActiveConnections = new ArrayMap<ComponentName, ServiceDispatcher.ConnectionInfo>(); + @UnsupportedAppUsage ServiceDispatcher(ServiceConnection conn, Context context, Handler activityThread, int flags) { mIServiceConnection = new InnerConnection(this); @@ -1645,6 +1686,7 @@ public final class LoadedApk { return mConnection; } + @UnsupportedAppUsage IServiceConnection getIServiceConnection() { return mIServiceConnection; } diff --git a/core/java/android/app/LocalActivityManager.java b/core/java/android/app/LocalActivityManager.java index e297719f9e4c..a52fb1a07b84 100644 --- a/core/java/android/app/LocalActivityManager.java +++ b/core/java/android/app/LocalActivityManager.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityThread.ActivityClientRecord; import android.app.servertransaction.PendingTransactionActions; import android.content.Intent; @@ -73,18 +74,23 @@ public class LocalActivityManager { /** Thread our activities are running in. */ private final ActivityThread mActivityThread; /** The containing activity that owns the activities we create. */ + @UnsupportedAppUsage private final Activity mParent; /** The activity that is currently resumed. */ + @UnsupportedAppUsage private LocalActivityRecord mResumed; /** id -> record of all known activities. */ + @UnsupportedAppUsage private final Map<String, LocalActivityRecord> mActivities = new HashMap<String, LocalActivityRecord>(); /** array of all known activities for easy iterating. */ + @UnsupportedAppUsage private final ArrayList<LocalActivityRecord> mActivityArray = new ArrayList<LocalActivityRecord>(); /** True if only one activity can be resumed at a time */ + @UnsupportedAppUsage private boolean mSingleMode; /** Set to true once we find out the container is finishing. */ @@ -111,6 +117,7 @@ public class LocalActivityManager { mSingleMode = singleMode; } + @UnsupportedAppUsage private void moveToState(LocalActivityRecord r, int desiredState) { if (r.curState == RESTORED || r.curState == DESTROYED) { // startActivity() has not yet been called, so nothing to do. diff --git a/core/java/android/app/NativeActivity.java b/core/java/android/app/NativeActivity.java index ca663fd12a7c..25eb958b61e3 100644 --- a/core/java/android/app/NativeActivity.java +++ b/core/java/android/app/NativeActivity.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; @@ -70,6 +71,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, private NativeContentView mNativeContentView; private InputMethodManager mIMM; + @UnsupportedAppUsage private long mNativeHandle; private InputQueue mCurInputQueue; @@ -85,6 +87,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, private boolean mDestroyed; + @UnsupportedAppUsage private native long loadNativeCode(String path, String funcname, MessageQueue queue, String internalDataPath, String obbPath, String externalDataPath, int sdkVersion, AssetManager assetMgr, byte[] savedState, ClassLoader classLoader, String libraryPath); @@ -312,18 +315,22 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, } } + @UnsupportedAppUsage void setWindowFlags(int flags, int mask) { getWindow().setFlags(flags, mask); } + @UnsupportedAppUsage void setWindowFormat(int format) { getWindow().setFormat(format); } + @UnsupportedAppUsage void showIme(int mode) { mIMM.showSoftInput(mNativeContentView, mode); } + @UnsupportedAppUsage void hideIme(int mode) { mIMM.hideSoftInputFromWindow(mNativeContentView.getWindowToken(), mode); } diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 74d3c0df87ad..9dca0614dc5f 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -27,6 +27,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -873,6 +874,7 @@ public class Notification implements Parcelable */ public String category; + @UnsupportedAppUsage private String mGroupKey; /** @@ -918,6 +920,7 @@ public class Notification implements Parcelable * * @hide */ + @UnsupportedAppUsage public ArraySet<PendingIntent> allPendingIntents; /** @@ -1257,9 +1260,12 @@ public class Notification implements Parcelable */ public static final String EXTRA_FOREGROUND_APPS = "android.foregroundApps"; + @UnsupportedAppUsage private Icon mSmallIcon; + @UnsupportedAppUsage private Icon mLargeIcon; + @UnsupportedAppUsage private String mChannelId; private long mTimeout; @@ -1411,6 +1417,7 @@ public class Notification implements Parcelable public static final int SEMANTIC_ACTION_CALL = 10; private final Bundle mExtras; + @UnsupportedAppUsage private Icon mIcon; private final RemoteInput[] mRemoteInputs; private boolean mAllowGeneratedReplies = true; @@ -2065,6 +2072,7 @@ public class Notification implements Parcelable /** * @hide */ + @UnsupportedAppUsage public Notification(Context context, int icon, CharSequence tickerText, long when, CharSequence contentTitle, CharSequence contentText, Intent contentIntent) { @@ -3077,6 +3085,7 @@ public class Notification implements Parcelable * Used when notifying to clean up legacy small icons. * @hide */ + @UnsupportedAppUsage public void setSmallIcon(Icon icon) { mSmallIcon = icon; } @@ -3093,6 +3102,7 @@ public class Notification implements Parcelable /** * @hide */ + @UnsupportedAppUsage public boolean isGroupSummary() { return mGroupKey != null && (flags & FLAG_GROUP_SUMMARY) != 0; } @@ -3100,6 +3110,7 @@ public class Notification implements Parcelable /** * @hide */ + @UnsupportedAppUsage public boolean isGroupChild() { return mGroupKey != null && (flags & FLAG_GROUP_SUMMARY) == 0; } @@ -3176,6 +3187,7 @@ public class Notification implements Parcelable private Notification mN; private Bundle mUserExtras = new Bundle(); private Style mStyle; + @UnsupportedAppUsage private ArrayList<Action> mActions = new ArrayList<Action>(MAX_ACTION_BUTTONS); private ArrayList<Person> mPersonList = new ArrayList<>(); private ContrastColorUtil mColorUtil; @@ -4793,6 +4805,7 @@ public class Notification implements Parcelable /** * @hide */ + @UnsupportedAppUsage public String loadHeaderAppName() { CharSequence name = null; final PackageManager pm = mContext.getPackageManager(); @@ -5119,6 +5132,7 @@ public class Notification implements Parcelable * * @hide */ + @UnsupportedAppUsage public RemoteViews makePublicContentView() { return makePublicView(false /* ambient */); } @@ -5663,6 +5677,7 @@ public class Notification implements Parcelable return clone; } + @UnsupportedAppUsage private int getBaseLayoutResource() { return R.layout.notification_template_material_base; } @@ -7753,6 +7768,7 @@ public class Notification implements Parcelable * @hide */ @Override + @UnsupportedAppUsage public Notification buildStyled(Notification wip) { super.buildStyled(wip); if (wip.category == null) { @@ -7860,8 +7876,8 @@ public class Notification implements Parcelable final int N = mActionsToShowInCompact == null ? 0 : Math.min(mActionsToShowInCompact.length, MAX_MEDIA_BUTTONS_IN_COMPACT); + view.removeAllViews(com.android.internal.R.id.media_actions); if (N > 0) { - view.removeAllViews(com.android.internal.R.id.media_actions); for (int i = 0; i < N; i++) { if (i >= numActions) { throw new IllegalArgumentException(String.format( diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java index 09d0c5333069..848def63177e 100644 --- a/core/java/android/app/NotificationChannel.java +++ b/core/java/android/app/NotificationChannel.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.app.NotificationManager.Importance; import android.content.ContentResolver; import android.content.Context; @@ -133,6 +134,7 @@ public final class NotificationChannel implements Parcelable { private static final boolean DEFAULT_DELETED = false; private static final boolean DEFAULT_SHOW_BADGE = true; + @UnsupportedAppUsage private final String mId; private String mName; private String mDesc; @@ -300,6 +302,7 @@ public final class NotificationChannel implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setBlockableSystem(boolean blockableSystem) { mBlockableSystem = blockableSystem; } diff --git a/core/java/android/app/NotificationChannelGroup.java b/core/java/android/app/NotificationChannelGroup.java index 0fa3c7fa6492..17c5cba3ed2c 100644 --- a/core/java/android/app/NotificationChannelGroup.java +++ b/core/java/android/app/NotificationChannelGroup.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; @@ -49,6 +50,7 @@ public final class NotificationChannelGroup implements Parcelable { private static final String ATT_ID = "id"; private static final String ATT_BLOCKED = "blocked"; + @UnsupportedAppUsage private final String mId; private CharSequence mName; private String mDescription; diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index f6dc5d15f385..4b25b8b6e1e0 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.SdkConstant; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.Notification.Builder; import android.content.ComponentName; import android.content.Context; @@ -308,9 +309,11 @@ public class NotificationManager { */ public static final int IMPORTANCE_MAX = 5; + @UnsupportedAppUsage private static INotificationManager sService; /** @hide */ + @UnsupportedAppUsage static public INotificationManager getService() { if (sService != null) { @@ -321,12 +324,14 @@ public class NotificationManager { return sService; } + @UnsupportedAppUsage /*package*/ NotificationManager(Context context, Handler handler) { mContext = context; } /** {@hide} */ + @UnsupportedAppUsage public static NotificationManager from(Context context) { return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); } @@ -373,6 +378,7 @@ public class NotificationManager { /** * @hide */ + @UnsupportedAppUsage public void notifyAsUser(String tag, int id, Notification notification, UserHandle user) { INotificationManager service = getService(); @@ -438,6 +444,7 @@ public class NotificationManager { /** * @hide */ + @UnsupportedAppUsage public void cancelAsUser(String tag, int id, UserHandle user) { INotificationManager service = getService(); @@ -666,6 +673,7 @@ public class NotificationManager { /** * @hide */ + @UnsupportedAppUsage public void setZenMode(int mode, Uri conditionId, String reason) { INotificationManager service = getService(); try { @@ -690,6 +698,7 @@ public class NotificationManager { /** * @hide */ + @UnsupportedAppUsage public ZenModeConfig getZenModeConfig() { INotificationManager service = getService(); try { diff --git a/core/java/android/app/PackageDeleteObserver.java b/core/java/android/app/PackageDeleteObserver.java index 9b83ec1995f7..20ae84ca8c39 100644 --- a/core/java/android/app/PackageDeleteObserver.java +++ b/core/java/android/app/PackageDeleteObserver.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.content.pm.IPackageDeleteObserver2; diff --git a/core/java/android/app/PackageInstallObserver.java b/core/java/android/app/PackageInstallObserver.java index ff2867945f06..507ebe566d46 100644 --- a/core/java/android/app/PackageInstallObserver.java +++ b/core/java/android/app/PackageInstallObserver.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.content.pm.IPackageInstallObserver2; import android.os.Bundle; @@ -59,6 +60,7 @@ public class PackageInstallObserver { * basic outcome * @hide */ + @UnsupportedAppUsage public void onPackageInstalled(String basePackageName, int returnCode, String msg, Bundle extras) { } diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index bdaf80e374df..75d95b2c2508 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.IIntentReceiver; import android.content.IIntentSender; @@ -274,6 +275,7 @@ public final class PendingIntent implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static void setOnMarshaledListener(OnMarshaledListener listener) { sOnMarshaledListener.set(listener); } @@ -362,6 +364,7 @@ public final class PendingIntent implements Parcelable { * Note that UserHandle.CURRENT will be interpreted at the time the * activity is started, not when the pending intent is created. */ + @UnsupportedAppUsage public static PendingIntent getActivityAsUser(Context context, int requestCode, @NonNull Intent intent, int flags, Bundle options, UserHandle user) { String packageName = context.getPackageName(); @@ -557,6 +560,7 @@ public final class PendingIntent implements Parcelable { * Note that UserHandle.CURRENT will be interpreted at the time the * broadcast is sent, not when the pending intent is created. */ + @UnsupportedAppUsage public static PendingIntent getBroadcastAsUser(Context context, int requestCode, Intent intent, int flags, UserHandle userHandle) { String packageName = context.getPackageName(); @@ -1084,6 +1088,7 @@ public final class PendingIntent implements Parcelable { * @hide * Check whether this PendingIntent will launch an Activity. */ + @UnsupportedAppUsage public boolean isActivity() { try { return ActivityManager.getService() @@ -1110,6 +1115,7 @@ public final class PendingIntent implements Parcelable { * @hide * Return the Intent of this PendingIntent. */ + @UnsupportedAppUsage public Intent getIntent() { try { return ActivityManager.getService() @@ -1123,6 +1129,7 @@ public final class PendingIntent implements Parcelable { * @hide * Return descriptive tag for this PendingIntent. */ + @UnsupportedAppUsage public String getTag(String prefix) { try { return ActivityManager.getService() diff --git a/core/java/android/app/PictureInPictureArgs.java b/core/java/android/app/PictureInPictureArgs.java index cbe8bb9deea1..adcc49546193 100644 --- a/core/java/android/app/PictureInPictureArgs.java +++ b/core/java/android/app/PictureInPictureArgs.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; @@ -137,6 +138,7 @@ public final class PictureInPictureArgs implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public PictureInPictureArgs() { } @@ -173,6 +175,7 @@ public final class PictureInPictureArgs implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public void setAspectRatio(float aspectRatio) { // Temporary workaround mAspectRatio = new Rational((int) (aspectRatio * 1000000000), 1000000000); @@ -182,6 +185,7 @@ public final class PictureInPictureArgs implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public void setActions(List<RemoteAction> actions) { if (mUserActions != null) { mUserActions = null; diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java index af55788e617f..cb72d4d5dc2c 100644 --- a/core/java/android/app/Presentation.java +++ b/core/java/android/app/Presentation.java @@ -20,6 +20,7 @@ import static android.content.Context.DISPLAY_SERVICE; import static android.content.Context.WINDOW_SERVICE; import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.hardware.display.DisplayManager; @@ -300,6 +301,7 @@ public class Presentation extends Dialog { return dm.equalsPhysical(getResources().getDisplayMetrics()); } + @UnsupportedAppUsage private static Context createPresentationContext( Context outerContext, Display display, int theme) { if (outerContext == null) { diff --git a/core/java/android/app/ProgressDialog.java b/core/java/android/app/ProgressDialog.java index 8a083ebcd7e9..1b10fd7cf86d 100644 --- a/core/java/android/app/ProgressDialog.java +++ b/core/java/android/app/ProgressDialog.java @@ -18,6 +18,7 @@ package android.app; import com.android.internal.R; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; @@ -63,10 +64,13 @@ public class ProgressDialog extends AlertDialog { */ public static final int STYLE_HORIZONTAL = 1; + @UnsupportedAppUsage private ProgressBar mProgress; + @UnsupportedAppUsage private TextView mMessageView; private int mProgressStyle = STYLE_SPINNER; + @UnsupportedAppUsage private TextView mProgressNumber; private String mProgressNumberFormat; private TextView mProgressPercent; diff --git a/core/java/android/app/QueuedWork.java b/core/java/android/app/QueuedWork.java index 56338f58f980..76265390fe1a 100644 --- a/core/java/android/app/QueuedWork.java +++ b/core/java/android/app/QueuedWork.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -70,6 +71,7 @@ public class QueuedWork { /** Finishers {@link #addFinisher added} and not yet {@link #removeFinisher removed} */ @GuardedBy("sLock") + @UnsupportedAppUsage private static final LinkedList<Runnable> sFinishers = new LinkedList<>(); /** {@link #getHandler() Lazily} created handler */ @@ -96,6 +98,7 @@ public class QueuedWork { * * @return the handler */ + @UnsupportedAppUsage private static Handler getHandler() { synchronized (sLock) { if (sHandler == null) { @@ -121,6 +124,7 @@ public class QueuedWork { * * @param finisher The runnable to add as finisher */ + @UnsupportedAppUsage public static void addFinisher(Runnable finisher) { synchronized (sLock) { sFinishers.add(finisher); @@ -132,6 +136,7 @@ public class QueuedWork { * * @param finisher The runnable to remove. */ + @UnsupportedAppUsage public static void removeFinisher(Runnable finisher) { synchronized (sLock) { sFinishers.remove(finisher); @@ -212,6 +217,7 @@ public class QueuedWork { * @param work The new runnable to process * @param shouldDelay If the message should be delayed */ + @UnsupportedAppUsage public static void queue(Runnable work, boolean shouldDelay) { Handler handler = getHandler(); diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index 30256b42e6a1..68869c65d7c9 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -20,6 +20,7 @@ import static android.app.ActivityThread.DEBUG_CONFIGURATION; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.res.ApkAssets; import android.content.res.AssetManager; @@ -76,18 +77,21 @@ public class ResourcesManager { * The global configuration upon which all Resources are based. Multi-window Resources * apply their overrides to this configuration. */ + @UnsupportedAppUsage private final Configuration mResConfiguration = new Configuration(); /** * A mapping of ResourceImpls and their configurations. These are heavy weight objects * which should be reused as much as possible. */ + @UnsupportedAppUsage private final ArrayMap<ResourcesKey, WeakReference<ResourcesImpl>> mResourceImpls = new ArrayMap<>(); /** * A list of Resource references that can be reused. */ + @UnsupportedAppUsage private final ArrayList<WeakReference<Resources>> mResourceReferences = new ArrayList<>(); private static class ApkKey { @@ -144,6 +148,7 @@ public class ResourcesManager { * Each Activity may has a base override configuration that is applied to each Resources object, * which in turn may have their own override configuration specified. */ + @UnsupportedAppUsage private final WeakHashMap<IBinder, ActivityResources> mActivityResourceReferences = new WeakHashMap<>(); @@ -153,6 +158,7 @@ public class ResourcesManager { private final ArrayMap<Pair<Integer, DisplayAdjustments>, WeakReference<Display>> mAdjustedDisplays = new ArrayMap<>(); + @UnsupportedAppUsage public static ResourcesManager getInstance() { synchronized (ResourcesManager.class) { if (sResourcesManager == null) { @@ -349,6 +355,7 @@ public class ResourcesManager { * @return a new AssetManager. */ @VisibleForTesting + @UnsupportedAppUsage protected @Nullable AssetManager createAssetManager(@NonNull final ResourcesKey key) { final AssetManager.Builder builder = new AssetManager.Builder(); @@ -1065,6 +1072,7 @@ public class ResourcesManager { * @param assetPath The main asset path for which to add the library asset path. * @param libAsset The library asset path to add. */ + @UnsupportedAppUsage public void appendLibAssetForMainAssetPath(String assetPath, String libAsset) { synchronized (this) { // Record which ResourcesImpl need updating diff --git a/core/java/android/app/ResultInfo.java b/core/java/android/app/ResultInfo.java index d5af08a655d8..4335488777ba 100644 --- a/core/java/android/app/ResultInfo.java +++ b/core/java/android/app/ResultInfo.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; @@ -26,11 +27,15 @@ import java.util.Objects; * {@hide} */ public class ResultInfo implements Parcelable { + @UnsupportedAppUsage public final String mResultWho; + @UnsupportedAppUsage public final int mRequestCode; public final int mResultCode; + @UnsupportedAppUsage public final Intent mData; + @UnsupportedAppUsage public ResultInfo(String resultWho, int requestCode, int resultCode, Intent data) { mResultWho = resultWho; @@ -60,6 +65,7 @@ public class ResultInfo implements Parcelable { } } + @UnsupportedAppUsage public static final Parcelable.Creator<ResultInfo> CREATOR = new Parcelable.Creator<ResultInfo>() { public ResultInfo createFromParcel(Parcel in) { diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java index 4abca9a13c4b..4a451509f538 100644 --- a/core/java/android/app/SearchDialog.java +++ b/core/java/android/app/SearchDialog.java @@ -17,6 +17,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -312,6 +313,7 @@ public class SearchDialog extends Dialog { * * @param working true to show spinner, false to hide spinner */ + @UnsupportedAppUsage public void setWorking(boolean working) { mWorkingSpinner.setAlpha(working ? 255 : 0); mWorkingSpinner.setVisible(working, false); @@ -373,6 +375,7 @@ public class SearchDialog extends Dialog { } } + @UnsupportedAppUsage static boolean isLandscapeMode(Context context) { return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; @@ -517,6 +520,7 @@ public class SearchDialog extends Dialog { /** * Launch a search for the text in the query text field. */ + @UnsupportedAppUsage public void launchQuerySearch() { launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null); } @@ -529,6 +533,7 @@ public class SearchDialog extends Dialog { * @param actionMsg The message for the action key that was pressed, * or <code>null</code> if none. */ + @UnsupportedAppUsage protected void launchQuerySearch(int actionKey, String actionMsg) { String query = mSearchAutoComplete.getText().toString(); String action = Intent.ACTION_SEARCH; diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index ed6d2f57ba48..9539f3464eca 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ContentResolver; @@ -530,6 +531,7 @@ public class SearchManager * current search engine does not support voice search. * @hide */ + @UnsupportedAppUsage public final static String DISABLE_VOICE_SEARCH = "android.search.DISABLE_VOICE_SEARCH"; @@ -545,8 +547,10 @@ public class SearchManager /* package */ OnDismissListener mDismissListener = null; /* package */ OnCancelListener mCancelListener = null; + @UnsupportedAppUsage private SearchDialog mSearchDialog; + @UnsupportedAppUsage /*package*/ SearchManager(Context context, Handler handler) throws ServiceNotFoundException { mContext = context; mHandler = handler; @@ -609,6 +613,7 @@ public class SearchManager * * @hide */ + @UnsupportedAppUsage public void startSearch(String initialQuery, boolean selectInitialQuery, ComponentName launchActivity, @@ -710,6 +715,7 @@ public class SearchManager * * @hide */ + @UnsupportedAppUsage public ComponentName getWebSearchActivity() { try { return mService.getWebSearchActivity(); @@ -770,6 +776,7 @@ public class SearchManager * * @hide */ + @UnsupportedAppUsage public boolean isVisible() { return mSearchDialog == null? false : mSearchDialog.isShowing(); } @@ -866,6 +873,7 @@ public class SearchManager * * @hide because SearchableInfo is not part of the API. */ + @UnsupportedAppUsage public Cursor getSuggestions(SearchableInfo searchable, String query) { return getSuggestions(searchable, query, -1); } @@ -881,6 +889,7 @@ public class SearchManager * * @hide because SearchableInfo is not part of the API. */ + @UnsupportedAppUsage public Cursor getSuggestions(SearchableInfo searchable, String query, int limit) { if (searchable == null) { return null; @@ -970,6 +979,7 @@ public class SearchManager * * @hide */ + @UnsupportedAppUsage public void launchAssist(Bundle args) { try { if (mService == null) { diff --git a/core/java/android/app/SearchableInfo.java b/core/java/android/app/SearchableInfo.java index a95291514936..ae6d32ac6a40 100644 --- a/core/java/android/app/SearchableInfo.java +++ b/core/java/android/app/SearchableInfo.java @@ -20,6 +20,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.annotation.StringRes; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; @@ -249,6 +250,7 @@ public final class SearchableInfo implements Parcelable { * @return Returns a context related to the searchable activity * @hide */ + @UnsupportedAppUsage public Context getActivityContext(Context context) { return createActivityContext(context, mSearchActivity); } @@ -278,6 +280,7 @@ public final class SearchableInfo implements Parcelable { * @return Returns a context related to the suggestion provider * @hide */ + @UnsupportedAppUsage public Context getProviderContext(Context context, Context activityContext) { Context theirContext = null; if (mSearchActivity.getPackageName().equals(mSuggestProviderPackage)) { @@ -307,6 +310,7 @@ public final class SearchableInfo implements Parcelable { * @param cName The component name of the searchable activity * @throws IllegalArgumentException if the searchability info is invalid or insufficient */ + @UnsupportedAppUsage private SearchableInfo(Context activityContext, AttributeSet attr, final ComponentName cName) { mSearchActivity = cName; @@ -450,6 +454,7 @@ public final class SearchableInfo implements Parcelable { * Gets the action message to use for queries. * @see android.R.styleable#SearchableActionKey_queryActionMsg */ + @UnsupportedAppUsage public String getQueryActionMsg() { return mQueryActionMsg; } @@ -458,6 +463,7 @@ public final class SearchableInfo implements Parcelable { * Gets the action message to use for suggestions. * @see android.R.styleable#SearchableActionKey_suggestActionMsg */ + @UnsupportedAppUsage public String getSuggestActionMsg() { return mSuggestActionMsg; } @@ -466,6 +472,7 @@ public final class SearchableInfo implements Parcelable { * Gets the name of the column to get the suggestion action message from. * @see android.R.styleable#SearchableActionKey_suggestActionMsgColumn */ + @UnsupportedAppUsage public String getSuggestActionMsgColumn() { return mSuggestActionMsgColumn; } @@ -490,6 +497,7 @@ public final class SearchableInfo implements Parcelable { * * @hide ActionKeyInfo is hidden */ + @UnsupportedAppUsage public ActionKeyInfo findActionKey(int keyCode) { if (mActionKeys == null) { return null; @@ -623,6 +631,7 @@ public final class SearchableInfo implements Parcelable { * * @hide deprecated functionality */ + @UnsupportedAppUsage public int getLabelId() { return mLabelId; } @@ -647,6 +656,7 @@ public final class SearchableInfo implements Parcelable { * * @hide deprecated functionality */ + @UnsupportedAppUsage public int getIconId() { return mIconId; } diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java index ea0fd75bec90..67acfe906915 100644 --- a/core/java/android/app/Service.java +++ b/core/java/android/app/Service.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentCallbacks2; import android.content.ComponentName; import android.content.Intent; @@ -658,6 +659,7 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac * @hide */ @Deprecated + @UnsupportedAppUsage public final void setForeground(boolean isForeground) { Log.w(TAG, "setForeground: ignoring old API call on " + getClass().getName()); } @@ -750,6 +752,7 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac /** * @hide */ + @UnsupportedAppUsage public final void attach( Context context, ActivityThread thread, String className, IBinder token, @@ -777,10 +780,16 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac } // set by the thread after the constructor and before onCreate(Bundle icicle) is called. + @UnsupportedAppUsage private ActivityThread mThread = null; + @UnsupportedAppUsage private String mClassName = null; + @UnsupportedAppUsage private IBinder mToken = null; + @UnsupportedAppUsage private Application mApplication = null; + @UnsupportedAppUsage private IActivityManager mActivityManager = null; + @UnsupportedAppUsage private boolean mStartCompatibility = false; } diff --git a/core/java/android/app/SharedPreferencesImpl.java b/core/java/android/app/SharedPreferencesImpl.java index 6ac15a5f8c91..0f8976fe924a 100644 --- a/core/java/android/app/SharedPreferencesImpl.java +++ b/core/java/android/app/SharedPreferencesImpl.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.SharedPreferences; import android.os.FileUtils; import android.os.Looper; @@ -63,6 +64,7 @@ final class SharedPreferencesImpl implements SharedPreferences { // - acquire SharedPreferencesImpl.mLock before EditorImpl.mLock // - acquire mWritingToDiskLock before EditorImpl.mLock + @UnsupportedAppUsage private final File mFile; private final File mBackupFile; private final int mMode; @@ -103,6 +105,7 @@ final class SharedPreferencesImpl implements SharedPreferences { private final ExponentiallyBucketedHistogram mSyncTimes = new ExponentiallyBucketedHistogram(16); private int mNumSync = 0; + @UnsupportedAppUsage SharedPreferencesImpl(File file, int mode) { mFile = file; mBackupFile = makeBackupFile(file); @@ -113,6 +116,7 @@ final class SharedPreferencesImpl implements SharedPreferences { startLoadFromDisk(); } + @UnsupportedAppUsage private void startLoadFromDisk() { synchronized (mLock) { mLoaded = false; @@ -195,6 +199,7 @@ final class SharedPreferencesImpl implements SharedPreferences { return new File(prefsFile.getPath() + ".bak"); } + @UnsupportedAppUsage void startReloadIfChangedUnexpectedly() { synchronized (mLock) { // TODO: wait for any pending writes to disk? diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index c8a831366e23..2718bfacb618 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.Binder; import android.os.IBinder; @@ -39,11 +40,13 @@ import java.lang.annotation.RetentionPolicy; @SystemService(Context.STATUS_BAR_SERVICE) public class StatusBarManager { + @UnsupportedAppUsage public static final int DISABLE_EXPAND = View.STATUS_BAR_DISABLE_EXPAND; public static final int DISABLE_NOTIFICATION_ICONS = View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS; public static final int DISABLE_NOTIFICATION_ALERTS = View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS; @Deprecated + @UnsupportedAppUsage public static final int DISABLE_NOTIFICATION_TICKER = View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER; public static final int DISABLE_SYSTEM_INFO = View.STATUS_BAR_DISABLE_SYSTEM_INFO; @@ -57,6 +60,7 @@ public class StatusBarManager { public static final int DISABLE_NAVIGATION = View.STATUS_BAR_DISABLE_HOME | View.STATUS_BAR_DISABLE_RECENT; + @UnsupportedAppUsage public static final int DISABLE_NONE = 0x00000000; public static final int DISABLE_MASK = DISABLE_EXPAND | DISABLE_NOTIFICATION_ICONS @@ -107,14 +111,18 @@ public class StatusBarManager { public static final int CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = 1; public static final int CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER = 2; + @UnsupportedAppUsage private Context mContext; private IStatusBarService mService; + @UnsupportedAppUsage private IBinder mToken = new Binder(); + @UnsupportedAppUsage StatusBarManager(Context context) { mContext = context; } + @UnsupportedAppUsage private synchronized IStatusBarService getService() { if (mService == null) { mService = IStatusBarService.Stub.asInterface( @@ -130,6 +138,7 @@ public class StatusBarManager { * Disable some features in the status bar. Pass the bitwise-or of the DISABLE_* flags. * To re-enable everything, pass {@link #DISABLE_NONE}. */ + @UnsupportedAppUsage public void disable(int what) { try { final int userId = Binder.getCallingUserHandle().getIdentifier(); @@ -163,6 +172,7 @@ public class StatusBarManager { /** * Expand the notifications panel. */ + @UnsupportedAppUsage public void expandNotificationsPanel() { try { final IStatusBarService svc = getService(); @@ -177,6 +187,7 @@ public class StatusBarManager { /** * Collapse the notifications and settings panels. */ + @UnsupportedAppUsage public void collapsePanels() { try { final IStatusBarService svc = getService(); @@ -191,6 +202,7 @@ public class StatusBarManager { /** * Expand the settings panel. */ + @UnsupportedAppUsage public void expandSettingsPanel() { expandSettingsPanel(null); } @@ -198,6 +210,7 @@ public class StatusBarManager { /** * Expand the settings panel and open a subPanel, pass null to just open the settings panel. */ + @UnsupportedAppUsage public void expandSettingsPanel(String subPanel) { try { final IStatusBarService svc = getService(); @@ -209,6 +222,7 @@ public class StatusBarManager { } } + @UnsupportedAppUsage public void setIcon(String slot, int iconId, int iconLevel, String contentDescription) { try { final IStatusBarService svc = getService(); @@ -221,6 +235,7 @@ public class StatusBarManager { } } + @UnsupportedAppUsage public void removeIcon(String slot) { try { final IStatusBarService svc = getService(); @@ -232,6 +247,7 @@ public class StatusBarManager { } } + @UnsupportedAppUsage public void setIconVisibility(String slot, boolean visible) { try { final IStatusBarService svc = getService(); diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java index 970a0881a407..077b177be930 100644 --- a/core/java/android/app/TaskInfo.java +++ b/core/java/android/app/TaskInfo.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Intent; import android.content.res.Configuration; @@ -33,12 +34,14 @@ public class TaskInfo { * The id of the user the task was running as. * @hide */ + @UnsupportedAppUsage public int userId; /** * The id of the ActivityStack that currently contains this task. * @hide */ + @UnsupportedAppUsage public int stackId; /** @@ -90,6 +93,7 @@ public class TaskInfo { * The last time this task was active since boot (including time spent in sleep). * @hide */ + @UnsupportedAppUsage public long lastActiveTime; /** @@ -102,18 +106,21 @@ public class TaskInfo { * True if the task can go in the split-screen primary stack. * @hide */ + @UnsupportedAppUsage public boolean supportsSplitScreenMultiWindow; /** * The resize mode of the task. See {@link ActivityInfo#resizeMode}. * @hide */ + @UnsupportedAppUsage public int resizeMode; /** * The current configuration of the task. * @hide */ + @UnsupportedAppUsage public final Configuration configuration = new Configuration(); TaskInfo() { diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java index 895d12a7c341..e23352a533e3 100644 --- a/core/java/android/app/TaskStackListener.java +++ b/core/java/android/app/TaskStackListener.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager.TaskSnapshot; import android.content.ComponentName; import android.os.RemoteException; @@ -27,40 +28,49 @@ import android.os.RemoteException; */ public abstract class TaskStackListener extends ITaskStackListener.Stub { @Override + @UnsupportedAppUsage public void onTaskStackChanged() throws RemoteException { } @Override + @UnsupportedAppUsage public void onActivityPinned(String packageName, int userId, int taskId, int stackId) throws RemoteException { } @Override + @UnsupportedAppUsage public void onActivityUnpinned() throws RemoteException { } @Override + @UnsupportedAppUsage public void onPinnedActivityRestartAttempt(boolean clearedTask) throws RemoteException { } @Override + @UnsupportedAppUsage public void onPinnedStackAnimationStarted() throws RemoteException { } @Override + @UnsupportedAppUsage public void onPinnedStackAnimationEnded() throws RemoteException { } @Override + @UnsupportedAppUsage public void onActivityForcedResizable(String packageName, int taskId, int reason) throws RemoteException { } @Override + @UnsupportedAppUsage public void onActivityDismissingDockedStack() throws RemoteException { } @Override + @UnsupportedAppUsage public void onActivityLaunchOnSecondaryDisplayFailed() throws RemoteException { } @@ -69,10 +79,12 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub { } @Override + @UnsupportedAppUsage public void onTaskRemoved(int taskId) throws RemoteException { } @Override + @UnsupportedAppUsage public void onTaskMovedToFront(int taskId) throws RemoteException { } @@ -86,15 +98,18 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub { } @Override + @UnsupportedAppUsage public void onActivityRequestedOrientationChanged(int taskId, int requestedOrientation) throws RemoteException { } @Override + @UnsupportedAppUsage public void onTaskProfileLocked(int taskId, int userId) throws RemoteException { } @Override + @UnsupportedAppUsage public void onTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) throws RemoteException { } } diff --git a/core/java/android/app/TimePickerDialog.java b/core/java/android/app/TimePickerDialog.java index 8686944baeaa..1b281d521957 100644 --- a/core/java/android/app/TimePickerDialog.java +++ b/core/java/android/app/TimePickerDialog.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; @@ -43,6 +44,7 @@ public class TimePickerDialog extends AlertDialog implements OnClickListener, private static final String MINUTE = "minute"; private static final String IS_24_HOUR = "is24hour"; + @UnsupportedAppUsage private final TimePicker mTimePicker; private final OnTimeSetListener mTimeSetListener; diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index 44f2879601b8..dbb6c3d0ee07 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -23,6 +23,7 @@ import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceConnection; import android.annotation.NonNull; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; @@ -192,6 +193,7 @@ public final class UiAutomation { * * @hide */ + @UnsupportedAppUsage public UiAutomation(Looper looper, IUiAutomationConnection connection) { if (looper == null) { throw new IllegalArgumentException("Looper cannot be null!"); @@ -208,6 +210,7 @@ public final class UiAutomation { * * @hide */ + @UnsupportedAppUsage public void connect() { connect(0); } @@ -279,6 +282,7 @@ public final class UiAutomation { * * @hide */ + @UnsupportedAppUsage public void disconnect() { synchronized (mLock) { if (mIsConnecting) { diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index ac3f2e7a14d0..b406d9e30a53 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -18,6 +18,7 @@ package android.app; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.IAccessibilityServiceClient; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.IPackageManager; import android.graphics.Bitmap; diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index 0da5e24929aa..4f172a4251d4 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.os.RemoteException; @@ -126,6 +127,7 @@ public class UiModeManager { private IUiModeManager mService; + @UnsupportedAppUsage /*package*/ UiModeManager() throws ServiceNotFoundException { mService = IUiModeManager.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.UI_MODE_SERVICE)); diff --git a/core/java/android/app/UserSwitchObserver.java b/core/java/android/app/UserSwitchObserver.java index c0f7a4cd63b7..25b243d95fa1 100644 --- a/core/java/android/app/UserSwitchObserver.java +++ b/core/java/android/app/UserSwitchObserver.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.UnsupportedAppUsage; import android.os.IRemoteCallback; import android.os.RemoteException; diff --git a/core/java/android/app/VrManager.java b/core/java/android/app/VrManager.java index e118edd8dbb8..6248e7c38ec1 100644 --- a/core/java/android/app/VrManager.java +++ b/core/java/android/app/VrManager.java @@ -6,6 +6,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.os.RemoteException; @@ -50,6 +51,7 @@ public class VrManager { } } + @UnsupportedAppUsage private final IVrManager mService; private Map<VrStateCallback, CallbackEntry> mCallbackMap = new ArrayMap<>(); diff --git a/core/java/android/app/WallpaperColors.java b/core/java/android/app/WallpaperColors.java index 626b3be733a7..ace814ab4fe0 100644 --- a/core/java/android/app/WallpaperColors.java +++ b/core/java/android/app/WallpaperColors.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -233,6 +234,7 @@ public final class WallpaperColors implements Parcelable { * @see WallpaperColors#fromDrawable(Drawable) * @hide */ + @UnsupportedAppUsage public WallpaperColors(@NonNull Color primaryColor, @Nullable Color secondaryColor, @Nullable Color tertiaryColor, int colorHints) { @@ -347,6 +349,7 @@ public final class WallpaperColors implements Parcelable { * @return True if dark text is supported. * @hide */ + @UnsupportedAppUsage public int getColorHints() { return mColorHints; } diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 6ad6c25c7f4b..2a263d6de2d4 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -25,6 +25,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; @@ -493,6 +494,7 @@ public class WallpaperManager { } private static final Object sSync = new Object[0]; + @UnsupportedAppUsage private static Globals sGlobals; static void initGlobals(IWallpaperManager service, Looper looper) { @@ -517,6 +519,7 @@ public class WallpaperManager { } /** @hide */ + @UnsupportedAppUsage public IWallpaperManager getIWallpaperManager() { return sGlobals.mService; } @@ -820,6 +823,7 @@ public class WallpaperManager { * * @hide */ + @UnsupportedAppUsage public Bitmap getBitmap() { return getBitmap(false); } @@ -831,6 +835,7 @@ public class WallpaperManager { * @see Bitmap.Config#HARDWARE * @hide */ + @UnsupportedAppUsage public Bitmap getBitmap(boolean hardware) { return getBitmapAsUser(mContext.getUserId(), hardware); } @@ -886,6 +891,7 @@ public class WallpaperManager { * @param userId Owner of the wallpaper or UserHandle.USER_ALL. * @hide */ + @UnsupportedAppUsage public void addOnColorsChangedListener(@NonNull OnColorsChangedListener listener, @NonNull Handler handler, int userId) { sGlobals.addOnColorsChangedListener(listener, handler, userId); @@ -939,6 +945,7 @@ public class WallpaperManager { * @return {@link WallpaperColors} or null if colors are unknown. * @hide */ + @UnsupportedAppUsage public @Nullable WallpaperColors getWallpaperColors(int which, int userId) { return sGlobals.getWallpaperColors(which, userId); } @@ -958,6 +965,7 @@ public class WallpaperManager { * * @hide */ + @UnsupportedAppUsage public ParcelFileDescriptor getWallpaperFile(@SetWallpaperFlags int which, int userId) { if (which != FLAG_SYSTEM && which != FLAG_LOCK) { throw new IllegalArgumentException("Must request exactly one kind of wallpaper"); @@ -1280,6 +1288,7 @@ public class WallpaperManager { * requires permission {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}. * @hide */ + @UnsupportedAppUsage public int setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup, @SetWallpaperFlags int which, int userId) throws IOException { @@ -1670,6 +1679,7 @@ public class WallpaperManager { * @hide */ @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) + @UnsupportedAppUsage public boolean setWallpaperComponent(ComponentName name, int userId) { if (sGlobals.mService == null) { Log.w(TAG, "WallpaperService not running"); @@ -1847,6 +1857,7 @@ public class WallpaperManager { * * @hide */ + @UnsupportedAppUsage public static InputStream openDefaultWallpaper(Context context, @SetWallpaperFlags int which) { final String whichProp; final int defaultResId; diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java index 5fbe5b398488..5fe1af0a18ba 100644 --- a/core/java/android/app/admin/DeviceAdminInfo.java +++ b/core/java/android/app/admin/DeviceAdminInfo.java @@ -17,6 +17,7 @@ package android.app.admin; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; @@ -180,6 +181,7 @@ public final class DeviceAdminInfo implements Parcelable { /** @hide */ public static class PolicyInfo { public final int ident; + @UnsupportedAppUsage public final String tag; public final int label; public final int description; @@ -479,6 +481,7 @@ public final class DeviceAdminInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public ArrayList<PolicyInfo> getUsedPolicies() { ArrayList<PolicyInfo> res = new ArrayList<PolicyInfo>(); for (int i=0; i<sPoliciesDisplayOrder.size(); i++) { diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index dfdb7eb22773..aa021a2f02fd 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -30,6 +30,7 @@ import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; @@ -1137,6 +1138,7 @@ public class DevicePolicyManager { * * @hide */ + @UnsupportedAppUsage public static final String ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED = "android.app.action.DEVICE_POLICY_MANAGER_STATE_CHANGED"; @@ -1867,6 +1869,7 @@ public class DevicePolicyManager { * @see #getActiveAdmins() * @hide */ + @UnsupportedAppUsage public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId) { if (mService != null) { try { @@ -1894,6 +1897,7 @@ public class DevicePolicyManager { * or uninstalled. * @hide */ + @UnsupportedAppUsage public boolean packageHasActiveAdmins(String packageName, int userId) { if (mService != null) { try { @@ -2129,6 +2133,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordQuality(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2194,6 +2199,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumLength(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2263,6 +2269,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumUpperCase(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2332,6 +2339,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumLowerCase(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2400,6 +2408,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumLetters(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2468,6 +2477,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumNumeric(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2535,6 +2545,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumSymbols(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2603,6 +2614,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordMinimumNonLetter(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2754,6 +2766,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getPasswordHistoryLength(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -2880,6 +2893,7 @@ public class DevicePolicyManager { * * @hide */ + @UnsupportedAppUsage public int getCurrentFailedPasswordAttempts(int userHandle) { if (mService != null) { try { @@ -2960,6 +2974,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -3232,6 +3247,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public long getMaximumTimeToLock(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -3305,6 +3321,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public long getRequiredStrongAuthTimeout(@Nullable ComponentName admin, @UserIdInt int userId) { if (mService != null) { try { @@ -3493,6 +3510,7 @@ public class DevicePolicyManager { * of the device admin that sets the proxy. * @hide */ + @UnsupportedAppUsage public @Nullable ComponentName setGlobalProxy(@NonNull ComponentName admin, Proxy proxySpec, List<String> exclusionList ) { throwIfParentInstance("setGlobalProxy"); @@ -3827,6 +3845,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getStorageEncryptionStatus(int userHandle) { if (mService != null) { try { @@ -4564,6 +4583,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public boolean getCameraDisabled(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -4819,6 +4839,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public int getKeyguardDisabledFeatures(@Nullable ComponentName admin, int userHandle) { if (mService != null) { try { @@ -4833,6 +4854,7 @@ public class DevicePolicyManager { /** * @hide */ + @UnsupportedAppUsage public void setActiveAdmin(@NonNull ComponentName policyReceiver, boolean refreshing, int userHandle) { if (mService != null) { @@ -4847,6 +4869,7 @@ public class DevicePolicyManager { /** * @hide */ + @UnsupportedAppUsage public void setActiveAdmin(@NonNull ComponentName policyReceiver, boolean refreshing) { setActiveAdmin(policyReceiver, refreshing, myUserId()); } @@ -4867,6 +4890,7 @@ public class DevicePolicyManager { /** * @hide */ + @UnsupportedAppUsage public void setActivePasswordState(PasswordMetrics metrics, int userHandle) { if (mService != null) { try { @@ -4893,6 +4917,7 @@ public class DevicePolicyManager { /** * @hide */ + @UnsupportedAppUsage public void reportFailedPasswordAttempt(int userHandle) { if (mService != null) { try { @@ -4906,6 +4931,7 @@ public class DevicePolicyManager { /** * @hide */ + @UnsupportedAppUsage public void reportSuccessfulPasswordAttempt(int userHandle) { if (mService != null) { try { @@ -5534,6 +5560,7 @@ public class DevicePolicyManager { * @see #getProfileOwner() * @hide */ + @UnsupportedAppUsage public @Nullable ComponentName getProfileOwnerAsUser(final int userId) throws IllegalArgumentException { if (mService != null) { @@ -5652,6 +5679,7 @@ public class DevicePolicyManager { * * @hide */ + @UnsupportedAppUsage public void setDefaultSmsApplication(@NonNull ComponentName admin, String packageName) { throwIfParentInstance("setDefaultSmsApplication"); if (mService != null) { @@ -5867,6 +5895,7 @@ public class DevicePolicyManager { } /** @hide per-user version */ + @UnsupportedAppUsage public @Nullable List<PersistableBundle> getTrustAgentConfiguration( @Nullable ComponentName admin, @NonNull ComponentName agent, int userHandle) { if (mService != null) { @@ -8836,6 +8865,7 @@ public class DevicePolicyManager { } } + @UnsupportedAppUsage private void throwIfParentInstance(String functionName) { if (mParentInstance) { throw new SecurityException(functionName + " cannot be called on the parent instance"); @@ -8918,6 +8948,7 @@ public class DevicePolicyManager { * mandatory or {@code null} if backups are not mandatory. * @hide */ + @UnsupportedAppUsage public ComponentName getMandatoryBackupTransport() { throwIfParentInstance("getMandatoryBackupTransport"); try { diff --git a/core/java/android/app/admin/SecurityLog.java b/core/java/android/app/admin/SecurityLog.java index 38b4f8ff8d67..170c8027cee3 100644 --- a/core/java/android/app/admin/SecurityLog.java +++ b/core/java/android/app/admin/SecurityLog.java @@ -18,6 +18,7 @@ package android.app.admin; import android.annotation.IntDef; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.os.Parcel; import android.os.Parcelable; @@ -476,6 +477,7 @@ public class SecurityLog { * Constructor used by native classes to generate SecurityEvent instances. * @hide */ + @UnsupportedAppUsage /* package */ SecurityEvent(byte[] data) { this(0, data); } diff --git a/core/java/android/app/admin/SystemUpdatePolicy.java b/core/java/android/app/admin/SystemUpdatePolicy.java index 2a451ff07672..bcd5f6c7497f 100644 --- a/core/java/android/app/admin/SystemUpdatePolicy.java +++ b/core/java/android/app/admin/SystemUpdatePolicy.java @@ -76,9 +76,7 @@ import java.util.stream.Collectors; * </code></pre> * * <h3>Developer guide</h3> - * To learn more about managing system updates, read - * <a href="{@docRoot}/work/dpc/security.html#control_remote_software_updates">Control remote - * software updates</a>. + * To learn more, read <a href="{@docRoot}work/dpc/system-updates">Manage system updates</a>. * * @see DevicePolicyManager#setSystemUpdatePolicy * @see DevicePolicyManager#getSystemUpdatePolicy diff --git a/core/java/android/app/assist/AssistContent.java b/core/java/android/app/assist/AssistContent.java index 1c9f573420ad..bdbce5282b94 100644 --- a/core/java/android/app/assist/AssistContent.java +++ b/core/java/android/app/assist/AssistContent.java @@ -1,5 +1,6 @@ package android.app.assist; +import android.annotation.UnsupportedAppUsage; import android.content.ClipData; import android.content.Intent; import android.net.Uri; @@ -13,12 +14,18 @@ import android.os.Parcelable; * {@link android.app.Activity#onProvideAssistContent Activity.onProvideAssistContent}. */ public class AssistContent implements Parcelable { + @UnsupportedAppUsage private boolean mIsAppProvidedIntent = false; private boolean mIsAppProvidedWebUri = false; + @UnsupportedAppUsage private Intent mIntent; + @UnsupportedAppUsage private String mStructuredData; + @UnsupportedAppUsage private ClipData mClipData; + @UnsupportedAppUsage private Uri mUri; + @UnsupportedAppUsage private final Bundle mExtras; public AssistContent() { @@ -148,6 +155,7 @@ public class AssistContent implements Parcelable { return mExtras; } + @UnsupportedAppUsage AssistContent(Parcel in) { if (in.readInt() != 0) { mIntent = Intent.CREATOR.createFromParcel(in); @@ -166,6 +174,7 @@ public class AssistContent implements Parcelable { mIsAppProvidedWebUri = in.readInt() == 1; } + @UnsupportedAppUsage void writeToParcelInternal(Parcel dest, int flags) { if (mIntent != null) { dest.writeInt(1); diff --git a/core/java/android/app/backup/BackupDataInput.java b/core/java/android/app/backup/BackupDataInput.java index 26f9e3ef5dda..2a98ca715a26 100644 --- a/core/java/android/app/backup/BackupDataInput.java +++ b/core/java/android/app/backup/BackupDataInput.java @@ -17,6 +17,7 @@ package android.app.backup; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import java.io.FileDescriptor; import java.io.IOException; @@ -67,7 +68,9 @@ public class BackupDataInput { private boolean mHeaderReady; private static class EntityHeader { + @UnsupportedAppUsage String key; + @UnsupportedAppUsage int dataSize; } diff --git a/core/java/android/app/backup/BackupDataInputStream.java b/core/java/android/app/backup/BackupDataInputStream.java index 94c78457d266..08880665d921 100644 --- a/core/java/android/app/backup/BackupDataInputStream.java +++ b/core/java/android/app/backup/BackupDataInputStream.java @@ -16,6 +16,7 @@ package android.app.backup; +import android.annotation.UnsupportedAppUsage; import java.io.InputStream; import java.io.IOException; @@ -37,7 +38,9 @@ import java.io.IOException; */ public class BackupDataInputStream extends InputStream { + @UnsupportedAppUsage String key; + @UnsupportedAppUsage int dataSize; BackupDataInput mData; diff --git a/core/java/android/app/backup/BackupDataOutput.java b/core/java/android/app/backup/BackupDataOutput.java index 5a66f3407417..01961e78777f 100644 --- a/core/java/android/app/backup/BackupDataOutput.java +++ b/core/java/android/app/backup/BackupDataOutput.java @@ -17,6 +17,7 @@ package android.app.backup; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.ParcelFileDescriptor; import java.io.FileDescriptor; @@ -67,6 +68,7 @@ public class BackupDataOutput { private final long mQuota; private final int mTransportFlags; + @UnsupportedAppUsage long mBackupWriter; /** diff --git a/core/java/android/app/backup/BackupHelperDispatcher.java b/core/java/android/app/backup/BackupHelperDispatcher.java index 681153236967..e9acdbfb61b9 100644 --- a/core/java/android/app/backup/BackupHelperDispatcher.java +++ b/core/java/android/app/backup/BackupHelperDispatcher.java @@ -16,6 +16,7 @@ package android.app.backup; +import android.annotation.UnsupportedAppUsage; import android.os.ParcelFileDescriptor; import android.util.Log; @@ -29,7 +30,9 @@ public class BackupHelperDispatcher { private static final String TAG = "BackupHelperDispatcher"; private static class Header { + @UnsupportedAppUsage int chunkSize; // not including the header + @UnsupportedAppUsage String keyPrefix; } diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index 912baf9f6d72..c6086f10bd00 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -20,6 +20,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -192,8 +193,10 @@ public class BackupManager { public static final int ERROR_TRANSPORT_INVALID = -2; private Context mContext; + @UnsupportedAppUsage private static IBackupManager sService; + @UnsupportedAppUsage private static void checkServiceBinder() { if (sService == null) { sService = IBackupManager.Stub.asInterface( diff --git a/core/java/android/app/backup/FileBackupHelperBase.java b/core/java/android/app/backup/FileBackupHelperBase.java index 4ed5197aa6b4..0caab983448b 100644 --- a/core/java/android/app/backup/FileBackupHelperBase.java +++ b/core/java/android/app/backup/FileBackupHelperBase.java @@ -16,6 +16,7 @@ package android.app.backup; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.ParcelFileDescriptor; import android.util.Log; @@ -101,6 +102,7 @@ class FileBackupHelperBase { return (result == 0); } + @UnsupportedAppUsage public void writeNewStateDescription(ParcelFileDescriptor fd) { int result = writeSnapshot_native(mPtr, fd.getFileDescriptor()); // TODO: Do something with the error. diff --git a/core/java/android/app/backup/FullBackup.java b/core/java/android/app/backup/FullBackup.java index b7a8da59b170..9a595b2da59f 100644 --- a/core/java/android/app/backup/FullBackup.java +++ b/core/java/android/app/backup/FullBackup.java @@ -16,6 +16,7 @@ package android.app.backup; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.XmlResourceParser; @@ -90,6 +91,7 @@ public class FullBackup { /** * @hide */ + @UnsupportedAppUsage static public native int backupToTar(String packageName, String domain, String linkdomain, String rootpath, String path, FullBackupDataOutput output); diff --git a/core/java/android/app/backup/FullBackupDataOutput.java b/core/java/android/app/backup/FullBackupDataOutput.java index 18f428339941..0ce86534afdd 100644 --- a/core/java/android/app/backup/FullBackupDataOutput.java +++ b/core/java/android/app/backup/FullBackupDataOutput.java @@ -1,5 +1,6 @@ package android.app.backup; +import android.annotation.UnsupportedAppUsage; import android.os.ParcelFileDescriptor; /** @@ -9,6 +10,7 @@ import android.os.ParcelFileDescriptor; */ public class FullBackupDataOutput { // Currently a name-scoping shim around BackupDataOutput + @UnsupportedAppUsage private final BackupDataOutput mData; private final long mQuota; private final int mTransportFlags; @@ -65,14 +67,17 @@ public class FullBackupDataOutput { } /** @hide - used only internally to the backup manager service's stream construction */ + @UnsupportedAppUsage public FullBackupDataOutput(ParcelFileDescriptor fd) { this(fd, /*quota=*/ -1, /*transportFlags=*/ 0); } /** @hide */ + @UnsupportedAppUsage public BackupDataOutput getData() { return mData; } /** @hide - used for measurement pass */ + @UnsupportedAppUsage public void addSize(long size) { if (size > 0) { mSize += size; diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index 02afcc7cf706..9baa16f2b72b 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -29,6 +29,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.annotation.UnsupportedAppUsage; import android.content.ClipData; import android.content.ComponentName; import android.net.NetworkRequest; @@ -202,6 +203,7 @@ public class JobInfo implements Parcelable { * JobInfo priority if it is smaller). * @hide */ + @UnsupportedAppUsage public static final int PRIORITY_FOREGROUND_APP = 30; /** @@ -240,6 +242,7 @@ public class JobInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static final int FLAG_WILL_BE_FOREGROUND = 1 << 0; /** @@ -282,11 +285,13 @@ public class JobInfo implements Parcelable { */ public static final int CONSTRAINT_FLAG_STORAGE_NOT_LOW = 1 << 3; + @UnsupportedAppUsage private final int jobId; private final PersistableBundle extras; private final Bundle transientExtras; private final ClipData clipData; private final int clipGrantFlags; + @UnsupportedAppUsage private final ComponentName service; private final int constraintFlags; private final TriggerContentUri[] triggerContentUris; @@ -306,6 +311,7 @@ public class JobInfo implements Parcelable { private final long initialBackoffMillis; private final int backoffPolicy; private final int priority; + @UnsupportedAppUsage private final int flags; /** @@ -1009,12 +1015,14 @@ public class JobInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public Builder setPriority(int priority) { mPriority = priority; return this; } /** @hide */ + @UnsupportedAppUsage public Builder setFlags(int flags) { mFlags = flags; return this; diff --git a/core/java/android/app/job/JobParameters.java b/core/java/android/app/job/JobParameters.java index d67f11bb6c2b..578a9aee539a 100644 --- a/core/java/android/app/job/JobParameters.java +++ b/core/java/android/app/job/JobParameters.java @@ -18,6 +18,7 @@ package android.app.job; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.job.IJobCallback; import android.content.ClipData; import android.net.Network; @@ -59,11 +60,13 @@ public class JobParameters implements Parcelable { } } + @UnsupportedAppUsage private final int jobId; private final PersistableBundle extras; private final Bundle transientExtras; private final ClipData clipData; private final int clipGrantFlags; + @UnsupportedAppUsage private final IBinder callback; private final boolean overrideDeadlineExpired; private final Uri[] mTriggeredContentUris; @@ -273,6 +276,7 @@ public class JobParameters implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public IJobCallback getCallback() { return IJobCallback.Stub.asInterface(callback); } diff --git a/core/java/android/app/job/JobWorkItem.java b/core/java/android/app/job/JobWorkItem.java index 995f5226d5a3..bfc6df260e80 100644 --- a/core/java/android/app/job/JobWorkItem.java +++ b/core/java/android/app/job/JobWorkItem.java @@ -19,6 +19,7 @@ package android.app.job; import static android.app.job.JobInfo.NETWORK_BYTES_UNKNOWN; import android.annotation.BytesLong; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; @@ -29,11 +30,15 @@ import android.os.Parcelable; * {@link JobParameters#dequeueWork() JobParameters.dequeueWork} for more details. */ final public class JobWorkItem implements Parcelable { + @UnsupportedAppUsage final Intent mIntent; final long mNetworkDownloadBytes; final long mNetworkUploadBytes; + @UnsupportedAppUsage int mDeliveryCount; + @UnsupportedAppUsage int mWorkId; + @UnsupportedAppUsage Object mGrants; /** @@ -219,6 +224,7 @@ final public class JobWorkItem implements Parcelable { } }; + @UnsupportedAppUsage JobWorkItem(Parcel in) { if (in.readInt() != 0) { mIntent = Intent.CREATOR.createFromParcel(in); diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java index fb27bedb8d6f..27abdcfbefc9 100644 --- a/core/java/android/app/trust/TrustManager.java +++ b/core/java/android/app/trust/TrustManager.java @@ -19,6 +19,7 @@ package android.app.trust; import android.Manifest; import android.annotation.RequiresPermission; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.hardware.biometrics.BiometricSourceType; import android.os.Handler; @@ -74,6 +75,7 @@ public class TrustManager { * * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission. */ + @UnsupportedAppUsage public void reportUnlockAttempt(boolean successful, int userId) { try { mService.reportUnlockAttempt(successful, userId); diff --git a/core/java/android/app/usage/ConfigurationStats.java b/core/java/android/app/usage/ConfigurationStats.java index 080216ce3b25..dff9b611010f 100644 --- a/core/java/android/app/usage/ConfigurationStats.java +++ b/core/java/android/app/usage/ConfigurationStats.java @@ -15,6 +15,7 @@ */ package android.app.usage; +import android.annotation.UnsupportedAppUsage; import android.content.res.Configuration; import android.os.Parcel; import android.os.Parcelable; @@ -28,31 +29,37 @@ public final class ConfigurationStats implements Parcelable { /** * {@hide} */ + @UnsupportedAppUsage public Configuration mConfiguration; /** * {@hide} */ + @UnsupportedAppUsage public long mBeginTimeStamp; /** * {@hide} */ + @UnsupportedAppUsage public long mEndTimeStamp; /** * {@hide} */ + @UnsupportedAppUsage public long mLastTimeActive; /** * {@hide} */ + @UnsupportedAppUsage public long mTotalTimeActive; /** * {@hide} */ + @UnsupportedAppUsage public int mActivationCount; /** diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java index 9f46f207d645..59ae3347f417 100644 --- a/core/java/android/app/usage/NetworkStatsManager.java +++ b/core/java/android/app/usage/NetworkStatsManager.java @@ -21,6 +21,7 @@ import static com.android.internal.util.Preconditions.checkNotNull; import android.annotation.Nullable; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.usage.NetworkStats.Bucket; import android.content.Context; import android.net.ConnectivityManager; @@ -121,6 +122,7 @@ public class NetworkStatsManager { /** * {@hide} */ + @UnsupportedAppUsage public NetworkStatsManager(Context context) throws ServiceNotFoundException { this(context, INetworkStatsService.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE))); diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java index 3e90af356da0..9f22ad193e42 100644 --- a/core/java/android/app/usage/UsageEvents.java +++ b/core/java/android/app/usage/UsageEvents.java @@ -17,6 +17,7 @@ package android.app.usage; import android.annotation.IntDef; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.res.Configuration; import android.os.Parcel; import android.os.Parcelable; @@ -177,27 +178,32 @@ public final class UsageEvents implements Parcelable { /** * {@hide} */ + @UnsupportedAppUsage public String mPackage; /** * {@hide} */ + @UnsupportedAppUsage public String mClass; /** * {@hide} */ + @UnsupportedAppUsage public long mTimeStamp; /** * {@hide} */ + @UnsupportedAppUsage public int mEventType; /** * Only present for {@link #CONFIGURATION_CHANGE} event types. * {@hide} */ + @UnsupportedAppUsage public Configuration mConfiguration; /** @@ -380,24 +386,30 @@ public final class UsageEvents implements Parcelable { } // Only used when creating the resulting events. Not used for reading/unparceling. + @UnsupportedAppUsage private List<Event> mEventsToWrite = null; // Only used for reading/unparceling events. + @UnsupportedAppUsage private Parcel mParcel = null; + @UnsupportedAppUsage private final int mEventCount; + @UnsupportedAppUsage private int mIndex = 0; /* * In order to save space, since ComponentNames will be duplicated everywhere, * we use a map and index into it. */ + @UnsupportedAppUsage private String[] mStringPool; /** * Construct the iterator from a parcel. * {@hide} */ + @UnsupportedAppUsage public UsageEvents(Parcel in) { byte[] bytes = in.readBlob(); Parcel data = Parcel.obtain(); @@ -482,6 +494,7 @@ public final class UsageEvents implements Parcelable { } } + @UnsupportedAppUsage private int findStringIndex(String str) { final int index = Arrays.binarySearch(mStringPool, str); if (index < 0) { @@ -493,6 +506,7 @@ public final class UsageEvents implements Parcelable { /** * Writes a single event to the parcel. Modify this when updating {@link Event}. */ + @UnsupportedAppUsage private void writeEventToParcel(Event event, Parcel p, int flags) { final int packageIndex; if (event.mPackage != null) { @@ -536,6 +550,7 @@ public final class UsageEvents implements Parcelable { /** * Reads a single event from the parcel. Modify this when updating {@link Event}. */ + @UnsupportedAppUsage private void readEventFromParcel(Parcel p, Event eventOut) { final int packageIndex = p.readInt(); if (packageIndex >= 0) { diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java index 2b14841fb34b..0659a237d522 100644 --- a/core/java/android/app/usage/UsageStats.java +++ b/core/java/android/app/usage/UsageStats.java @@ -17,6 +17,7 @@ package android.app.usage; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -31,32 +32,38 @@ public final class UsageStats implements Parcelable { /** * {@hide} */ + @UnsupportedAppUsage public String mPackageName; /** * {@hide} */ + @UnsupportedAppUsage public long mBeginTimeStamp; /** * {@hide} */ + @UnsupportedAppUsage public long mEndTimeStamp; /** * Last time used by the user with an explicit action (notification, activity launch). * {@hide} */ + @UnsupportedAppUsage public long mLastTimeUsed; /** * {@hide} */ + @UnsupportedAppUsage public long mTotalTimeInForeground; /** * {@hide} */ + @UnsupportedAppUsage public int mLaunchCount; /** @@ -67,6 +74,7 @@ public final class UsageStats implements Parcelable { /** * {@hide} */ + @UnsupportedAppUsage public int mLastEvent; /** diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index 72d209abda16..0994332bcdc7 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.content.Context; import android.content.pm.ParceledListSlice; @@ -231,9 +232,12 @@ public final class UsageStatsManager { @SystemApi public static final String EXTRA_TIME_USED = "android.app.usage.extra.TIME_USED"; + @UnsupportedAppUsage private static final UsageEvents sEmptyResults = new UsageEvents(); + @UnsupportedAppUsage private final Context mContext; + @UnsupportedAppUsage private final IUsageStatsManager mService; /** diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java index c44e35687909..bb7d5e49ccfb 100644 --- a/core/java/android/content/AsyncTaskLoader.java +++ b/core/java/android/content/AsyncTaskLoader.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.AsyncTask; import android.os.Handler; import android.os.OperationCanceledException; @@ -128,6 +129,7 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { } } + @UnsupportedAppUsage private final Executor mExecutor; volatile LoadTask mTask; @@ -354,6 +356,7 @@ public abstract class AsyncTaskLoader<D> extends Loader<D> { * * @hide */ + @UnsupportedAppUsage public void waitForLoader() { LoadTask task = mTask; if (task != null) { diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java index 58a9183d1b09..b55fe7618b94 100644 --- a/core/java/android/content/BroadcastReceiver.java +++ b/core/java/android/content/BroadcastReceiver.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.IActivityManager; @@ -43,6 +44,7 @@ import android.util.Slog; * */ public abstract class BroadcastReceiver { + @UnsupportedAppUsage private PendingResult mPendingResult; private boolean mDebugUnregister; @@ -69,20 +71,32 @@ public abstract class BroadcastReceiver { /** @hide */ public static final int TYPE_UNREGISTERED = 2; + @UnsupportedAppUsage final int mType; + @UnsupportedAppUsage final boolean mOrderedHint; + @UnsupportedAppUsage final boolean mInitialStickyHint; + @UnsupportedAppUsage final IBinder mToken; + @UnsupportedAppUsage final int mSendingUser; + @UnsupportedAppUsage final int mFlags; + @UnsupportedAppUsage int mResultCode; + @UnsupportedAppUsage String mResultData; + @UnsupportedAppUsage Bundle mResultExtras; + @UnsupportedAppUsage boolean mAbortBroadcast; + @UnsupportedAppUsage boolean mFinished; /** @hide */ + @UnsupportedAppUsage public PendingResult(int resultCode, String resultData, Bundle resultExtras, int type, boolean ordered, boolean sticky, IBinder token, int userId, int flags) { mResultCode = resultCode; @@ -595,6 +609,7 @@ public abstract class BroadcastReceiver { /** * For internal use to set the result data that is active. @hide */ + @UnsupportedAppUsage public final void setPendingResult(PendingResult result) { mPendingResult = result; } @@ -602,6 +617,7 @@ public abstract class BroadcastReceiver { /** * For internal use to set the result data that is active. @hide */ + @UnsupportedAppUsage public final PendingResult getPendingResult() { return mPendingResult; } diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index 94e1e2dff235..2b7ea66d2054 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -21,6 +21,7 @@ import static android.content.ContentResolver.SCHEME_ANDROID_RESOURCE; import static android.content.ContentResolver.SCHEME_CONTENT; import static android.content.ContentResolver.SCHEME_FILE; +import android.annotation.UnsupportedAppUsage; import android.content.res.AssetFileDescriptor; import android.graphics.Bitmap; import android.net.Uri; @@ -197,6 +198,7 @@ public class ClipData implements Parcelable { final CharSequence mText; final String mHtmlText; final Intent mIntent; + @UnsupportedAppUsage Uri mUri; /** @hide */ @@ -912,6 +914,7 @@ public class ClipData implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public Bitmap getIcon() { return mIcon; } diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java index 73b6eb27bed3..3b6c8c148dcb 100644 --- a/core/java/android/content/ClipboardManager.java +++ b/core/java/android/content/ClipboardManager.java @@ -19,6 +19,7 @@ package android.content; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; @@ -82,6 +83,7 @@ public class ClipboardManager extends android.text.ClipboardManager { } /** {@hide} */ + @UnsupportedAppUsage public ClipboardManager(Context context, Handler handler) throws ServiceNotFoundException { mContext = context; mHandler = handler; @@ -221,6 +223,7 @@ public class ClipboardManager extends android.text.ClipboardManager { } } + @UnsupportedAppUsage void reportPrimaryClipChanged() { Object[] listeners; diff --git a/core/java/android/content/ComponentName.java b/core/java/android/content/ComponentName.java index fc5853353ce6..54e6342747db 100644 --- a/core/java/android/content/ComponentName.java +++ b/core/java/android/content/ComponentName.java @@ -18,6 +18,7 @@ package android.content; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -229,12 +230,14 @@ public final class ComponentName implements Parcelable, Cloneable, Comparable<Co } /** @hide */ + @UnsupportedAppUsage public static void appendShortString(StringBuilder sb, String packageName, String className) { sb.append(packageName).append('/'); appendShortClassName(sb, packageName, className); } /** @hide */ + @UnsupportedAppUsage public static void printShortString(PrintWriter pw, String packageName, String className) { pw.print(packageName); pw.print('/'); diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index 7bde87101d8d..085d77d5c1cd 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -25,6 +25,7 @@ import static android.os.Trace.TRACE_TAG_DATABASE; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.AppOpsManager; import android.content.pm.PathPermission; import android.content.pm.ProviderInfo; @@ -107,15 +108,21 @@ public abstract class ContentProvider implements ComponentCallbacks2 { * MockContentProvider. */ + @UnsupportedAppUsage private Context mContext = null; private int mMyUid; // Since most Providers have only one authority, we keep both a String and a String[] to improve // performance. + @UnsupportedAppUsage private String mAuthority; + @UnsupportedAppUsage private String[] mAuthorities; + @UnsupportedAppUsage private String mReadPermission; + @UnsupportedAppUsage private String mWritePermission; + @UnsupportedAppUsage private PathPermission[] mPathPermissions; private boolean mExported; private boolean mNoPerms; @@ -156,6 +163,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { * in the test, which is available via {@link #getPathPermissions()}. * @hide */ + @UnsupportedAppUsage public ContentProvider( Context context, String readPermission, @@ -180,6 +188,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { * ContentProvider instance. Otherwise returns {@code null}. * @hide */ + @UnsupportedAppUsage public static ContentProvider coerceToLocalContentProvider( IContentProvider abstractInterface) { if (abstractInterface instanceof Transport) { @@ -887,6 +896,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } /** @hide */ + @UnsupportedAppUsage public final void setAppOps(int readOp, int writeOp) { if (!mNoPerms) { mTransport.mReadOp = readOp; @@ -1906,6 +1916,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { * @return the Binder object for this provider * @hide */ + @UnsupportedAppUsage public IContentProvider getIContentProvider() { return mTransport; } @@ -1915,6 +1926,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { * when directly instantiating the provider for testing. * @hide */ + @UnsupportedAppUsage public void attachInfoForTesting(Context context, ProviderInfo info) { attachInfo(context, info, true); } @@ -2134,6 +2146,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } /** @hide */ + @UnsupportedAppUsage public static Uri maybeAddUserId(Uri uri, int userId) { if (uri == null) return null; if (userId != UserHandle.USER_CURRENT diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java index 9d8c318f8092..04be572ad97a 100644 --- a/core/java/android/content/ContentProviderClient.java +++ b/core/java/android/content/ContentProviderClient.java @@ -18,6 +18,7 @@ package android.content; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.res.AssetFileDescriptor; import android.database.CrossProcessCursorWrapper; import android.database.Cursor; @@ -70,7 +71,9 @@ public class ContentProviderClient implements AutoCloseable { private static Handler sAnrHandler; private final ContentResolver mContentResolver; + @UnsupportedAppUsage private final IContentProvider mContentProvider; + @UnsupportedAppUsage private final String mPackageName; private final boolean mStable; diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java index d428a3a857b7..6bede131c817 100644 --- a/core/java/android/content/ContentProviderNative.java +++ b/core/java/android/content/ContentProviderNative.java @@ -17,6 +17,7 @@ package android.content; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.res.AssetFileDescriptor; import android.database.BulkCursorDescriptor; import android.database.BulkCursorToCursorAdaptor; @@ -50,6 +51,7 @@ abstract public class ContentProviderNative extends Binder implements IContentPr * Cast a Binder object into a content resolver interface, generating * a proxy if needed. */ + @UnsupportedAppUsage static public IContentProvider asInterface(IBinder obj) { if (obj == null) { diff --git a/core/java/android/content/ContentProviderOperation.java b/core/java/android/content/ContentProviderOperation.java index 8f3a31746266..e3d9b1931faa 100644 --- a/core/java/android/content/ContentProviderOperation.java +++ b/core/java/android/content/ContentProviderOperation.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.content.ContentProvider; import android.database.Cursor; import android.net.Uri; @@ -35,16 +36,22 @@ import java.util.Map; */ public class ContentProviderOperation implements Parcelable { /** @hide exposed for unit tests */ + @UnsupportedAppUsage public final static int TYPE_INSERT = 1; /** @hide exposed for unit tests */ + @UnsupportedAppUsage public final static int TYPE_UPDATE = 2; /** @hide exposed for unit tests */ + @UnsupportedAppUsage public final static int TYPE_DELETE = 3; /** @hide exposed for unit tests */ public final static int TYPE_ASSERT = 4; + @UnsupportedAppUsage private final int mType; + @UnsupportedAppUsage private final Uri mUri; + @UnsupportedAppUsage private final String mSelection; private final String[] mSelectionArgs; private final ContentValues mValues; @@ -218,6 +225,7 @@ public class ContentProviderOperation implements Parcelable { } /** @hide exposed for unit tests */ + @UnsupportedAppUsage public int getType() { return mType; } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 0ca7daedf9df..5867a9c8890e 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -22,6 +22,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityThread; @@ -437,6 +438,7 @@ public abstract class ContentResolver { public static final String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*"; /** @hide */ + @UnsupportedAppUsage public static final int SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS = 1; /** @hide */ public static final int SYNC_ERROR_AUTHENTICATION = 2; @@ -493,6 +495,7 @@ public abstract class ContentResolver { public static final int SYNC_OBSERVER_TYPE_PENDING = 1<<1; public static final int SYNC_OBSERVER_TYPE_ACTIVE = 1<<2; /** @hide */ + @UnsupportedAppUsage public static final int SYNC_OBSERVER_TYPE_STATUS = 1<<3; /** @hide */ public static final int SYNC_OBSERVER_TYPE_ALL = 0x7fffffff; @@ -575,6 +578,7 @@ public abstract class ContentResolver { } /** @hide */ + @UnsupportedAppUsage protected abstract IContentProvider acquireProvider(Context c, String name); /** @@ -584,17 +588,22 @@ public abstract class ContentResolver { * * @hide */ + @UnsupportedAppUsage protected IContentProvider acquireExistingProvider(Context c, String name) { return acquireProvider(c, name); } /** @hide */ + @UnsupportedAppUsage public abstract boolean releaseProvider(IContentProvider icp); /** @hide */ + @UnsupportedAppUsage protected abstract IContentProvider acquireUnstableProvider(Context c, String name); /** @hide */ + @UnsupportedAppUsage public abstract boolean releaseUnstableProvider(IContentProvider icp); /** @hide */ + @UnsupportedAppUsage public abstract void unstableProviderDied(IContentProvider icp); /** @hide */ @@ -1528,7 +1537,9 @@ public abstract class ContentResolver { * @hide */ public class OpenResourceIdResult { + @UnsupportedAppUsage public Resources r; + @UnsupportedAppUsage public int id; } @@ -1537,6 +1548,7 @@ public abstract class ContentResolver { * * @hide */ + @UnsupportedAppUsage public OpenResourceIdResult getResourceId(Uri uri) throws FileNotFoundException { String authority = uri.getAuthority(); Resources r; @@ -1782,6 +1794,7 @@ public abstract class ContentResolver { * @return The ContentProvider for the given URI, or null if no content provider is found. * @hide */ + @UnsupportedAppUsage public final IContentProvider acquireProvider(Uri uri) { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; @@ -1801,6 +1814,7 @@ public abstract class ContentResolver { * @return The ContentProvider for the given URI, or null if no content provider is found. * @hide */ + @UnsupportedAppUsage public final IContentProvider acquireExistingProvider(Uri uri) { if (!SCHEME_CONTENT.equals(uri.getScheme())) { return null; @@ -1815,6 +1829,7 @@ public abstract class ContentResolver { /** * @hide */ + @UnsupportedAppUsage public final IContentProvider acquireProvider(String name) { if (name == null) { return null; @@ -1843,6 +1858,7 @@ public abstract class ContentResolver { /** * @hide */ + @UnsupportedAppUsage public final IContentProvider acquireUnstableProvider(String name) { if (name == null) { return null; @@ -1976,6 +1992,7 @@ public abstract class ContentResolver { } /** @hide - designated user version */ + @UnsupportedAppUsage public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer, @UserIdInt int userHandle) { try { @@ -2155,6 +2172,7 @@ public abstract class ContentResolver { /** * @hide */ + @UnsupportedAppUsage public void takePersistableUriPermission(@NonNull String toPackage, @NonNull Uri uri, @Intent.AccessUriMode int modeFlags) { Preconditions.checkNotNull(toPackage, "toPackage"); @@ -2789,6 +2807,7 @@ public abstract class ContentResolver { * @return the SyncStatusInfo for the authority, or null if none exists * @hide */ + @UnsupportedAppUsage public static SyncStatusInfo getSyncStatus(Account account, String authority) { try { return getContentService().getSyncStatus(account, authority, null); @@ -2801,6 +2820,7 @@ public abstract class ContentResolver { * @see #getSyncStatus(Account, String) * @hide */ + @UnsupportedAppUsage public static SyncStatusInfo getSyncStatusAsUser(Account account, String authority, @UserIdInt int userId) { try { @@ -3043,6 +3063,7 @@ public abstract class ContentResolver { public static final String CONTENT_SERVICE_NAME = "content"; /** @hide */ + @UnsupportedAppUsage public static IContentService getContentService() { if (sContentService != null) { return sContentService; @@ -3053,13 +3074,17 @@ public abstract class ContentResolver { } /** @hide */ + @UnsupportedAppUsage public String getPackageName() { return mPackageName; } + @UnsupportedAppUsage private static volatile IContentService sContentService; + @UnsupportedAppUsage private final Context mContext; + @UnsupportedAppUsage final String mPackageName; final int mTargetSdkVersion; diff --git a/core/java/android/content/ContentValues.java b/core/java/android/content/ContentValues.java index b06dd7ae7b32..06d0f66d8548 100644 --- a/core/java/android/content/ContentValues.java +++ b/core/java/android/content/ContentValues.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.ArrayMap; @@ -41,6 +42,7 @@ public final class ContentValues implements Parcelable { * @deprecated kept around for lame people doing reflection */ @Deprecated + @UnsupportedAppUsage private HashMap<String, Object> mValues; private final ArrayMap<String, Object> mMap; @@ -77,6 +79,7 @@ public final class ContentValues implements Parcelable { * @deprecated kept around for lame people doing reflection */ @Deprecated + @UnsupportedAppUsage private ContentValues(HashMap<String, Object> from) { mMap = new ArrayMap<>(); mMap.putAll(from); @@ -523,6 +526,7 @@ public final class ContentValues implements Parcelable { * {@hide} */ @Deprecated + @UnsupportedAppUsage public void putStringArrayList(String key, ArrayList<String> value) { mMap.put(key, value); } @@ -533,6 +537,7 @@ public final class ContentValues implements Parcelable { */ @SuppressWarnings("unchecked") @Deprecated + @UnsupportedAppUsage public ArrayList<String> getStringArrayList(String key) { return (ArrayList<String>) mMap.get(key); } diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 6abe777bc09d..a352e84b060e 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -31,6 +31,7 @@ import android.annotation.StyleRes; import android.annotation.StyleableRes; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.IApplicationThread; @@ -654,6 +655,7 @@ public abstract class Context { /** @hide Needed for some internal implementation... not public because * you can't assume this actually means anything. */ + @UnsupportedAppUsage public int getThemeResId() { return 0; } @@ -722,6 +724,7 @@ public abstract class Context { public abstract String getPackageName(); /** @hide Return the name of the base context this context is derived from. */ + @UnsupportedAppUsage public abstract String getBasePackageName(); /** @hide Return the package name that should be used for app ops calls from @@ -764,6 +767,7 @@ public abstract class Context { * @deprecated use {@link #getSharedPreferencesPath(String)} */ @Deprecated + @UnsupportedAppUsage public File getSharedPrefsFile(String name) { return getSharedPreferencesPath(name); } @@ -1697,6 +1701,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + @UnsupportedAppUsage public void startActivityAsUser(@RequiresPermission Intent intent, UserHandle user) { throw new RuntimeException("Not implemented. Must override in a subclass."); } @@ -1743,6 +1748,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + @UnsupportedAppUsage public void startActivityAsUser(@RequiresPermission Intent intent, @Nullable Bundle options, UserHandle userId) { throw new RuntimeException("Not implemented. Must override in a subclass."); @@ -1761,6 +1767,7 @@ public abstract class Context { * for building it manually. * @hide */ + @UnsupportedAppUsage public void startActivityForResult( @NonNull String who, Intent intent, int requestCode, @Nullable Bundle options) { throw new RuntimeException("This method is only implemented for Activity-based Contexts. " @@ -1772,6 +1779,7 @@ public abstract class Context { * {@link #startActivityForResult(String, Intent, int, Bundle)}. * @hide */ + @UnsupportedAppUsage public boolean canStartActivityForResult() { return false; } @@ -2039,6 +2047,7 @@ public abstract class Context { * of an associated app op as per {@link android.app.AppOpsManager}. * @hide */ + @UnsupportedAppUsage public abstract void sendBroadcast(Intent intent, String receiverPermission, int appOp); @@ -2165,6 +2174,7 @@ public abstract class Context { * of an associated app op as per {@link android.app.AppOpsManager}. * @hide */ + @UnsupportedAppUsage public abstract void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, @@ -2240,6 +2250,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public abstract void sendBroadcastAsUser(@RequiresPermission Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp); @@ -2285,6 +2296,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @Nullable String initialData, @@ -2297,6 +2309,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, @Nullable String receiverPermission, int appOp, @Nullable Bundle options, BroadcastReceiver resultReceiver, @Nullable Handler scheduler, int initialCode, @@ -2689,6 +2702,7 @@ public abstract class Context { */ @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) + @UnsupportedAppUsage public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler); @@ -2836,6 +2850,7 @@ public abstract class Context { */ @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public abstract ComponentName startServiceAsUser(Intent service, UserHandle user); /** @@ -2923,6 +2938,7 @@ public abstract class Context { * @hide */ @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags, Handler handler, UserHandle user) { throw new RuntimeException("Not implemented. Must override in a subclass."); @@ -3415,6 +3431,7 @@ public abstract class Context { * * @hide */ + @UnsupportedAppUsage public static final String COUNTRY_DETECTOR = "country_detector"; /** @@ -3484,6 +3501,7 @@ public abstract class Context { * @see android.app.StatusBarManager * @hide */ + @UnsupportedAppUsage public static final String STATUS_BAR_SERVICE = "statusbar"; /** @@ -3630,6 +3648,7 @@ public abstract class Context { * * @hide */ + @UnsupportedAppUsage public static final String ETHERNET_SERVICE = "ethernet"; /** @@ -4285,6 +4304,7 @@ public abstract class Context { /** @hide */ @PackageManager.PermissionResult + @UnsupportedAppUsage public abstract int checkPermission(@NonNull String permission, int pid, int uid, IBinder callerToken); @@ -4777,6 +4797,7 @@ public abstract class Context { * * @hide */ + @UnsupportedAppUsage public abstract Context createApplicationContext(ApplicationInfo application, @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException; @@ -4922,6 +4943,7 @@ public abstract class Context { /** * @hide */ + @UnsupportedAppUsage public abstract Display getDisplay(); /** diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index bae99b85d6b8..1cc398e701a7 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -18,6 +18,7 @@ package android.content; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.IApplicationThread; import android.app.IServiceConnection; import android.content.pm.ApplicationInfo; @@ -54,6 +55,7 @@ import java.util.concurrent.Executor; * the original Context. */ public class ContextWrapper extends Context { + @UnsupportedAppUsage Context mBase; public ContextWrapper(Context base) { @@ -123,6 +125,7 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public int getThemeResId() { return mBase.getThemeResId(); } @@ -144,6 +147,7 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public String getBasePackageName() { return mBase.getBasePackageName(); } @@ -381,6 +385,7 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public void startActivityAsUser(Intent intent, UserHandle user) { mBase.startActivityAsUser(intent, user); } @@ -647,6 +652,7 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public Intent registerReceiverAsUser( BroadcastReceiver receiver, UserHandle user, IntentFilter filter, String broadcastPermission, Handler scheduler) { @@ -676,12 +682,14 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public ComponentName startServiceAsUser(Intent service, UserHandle user) { return mBase.startServiceAsUser(service, user); } /** @hide */ @Override + @UnsupportedAppUsage public ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) { return mBase.startForegroundServiceAsUser(service, user); } @@ -861,6 +869,7 @@ public class ContextWrapper extends Context { /** @hide */ @Override + @UnsupportedAppUsage public Context createApplicationContext(ApplicationInfo application, int flags) throws PackageManager.NameNotFoundException { return mBase.createApplicationContext(application, flags); @@ -904,6 +913,7 @@ public class ContextWrapper extends Context { * @hide */ @Override + @UnsupportedAppUsage public Display getDisplay() { return mBase.getDisplay(); } diff --git a/core/java/android/content/CursorEntityIterator.java b/core/java/android/content/CursorEntityIterator.java index 18437e5f92a1..2c630d29621b 100644 --- a/core/java/android/content/CursorEntityIterator.java +++ b/core/java/android/content/CursorEntityIterator.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.database.Cursor; import android.os.RemoteException; @@ -33,6 +34,7 @@ public abstract class CursorEntityIterator implements EntityIterator { * first Entity, if there are any. * @param cursor the cursor that contains the rows that make up the entities */ + @UnsupportedAppUsage public CursorEntityIterator(Cursor cursor) { mIsClosed = false; mCursor = cursor; diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java index 5a08636c8fff..4e46d5716c7b 100644 --- a/core/java/android/content/CursorLoader.java +++ b/core/java/android/content/CursorLoader.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.database.Cursor; import android.net.Uri; import android.os.CancellationSignal; @@ -44,6 +45,7 @@ import java.util.Arrays; */ @Deprecated public class CursorLoader extends AsyncTaskLoader<Cursor> { + @UnsupportedAppUsage final ForceLoadContentObserver mObserver; Uri mUri; @@ -53,6 +55,7 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> { String mSortOrder; Cursor mCursor; + @UnsupportedAppUsage CancellationSignal mCancellationSignal; /* Runs on a worker thread */ diff --git a/core/java/android/content/Entity.java b/core/java/android/content/Entity.java index 607cb3f4d841..b9473e04c63c 100644 --- a/core/java/android/content/Entity.java +++ b/core/java/android/content/Entity.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.net.Uri; import java.util.ArrayList; @@ -28,7 +29,9 @@ import java.util.ArrayList; * corresponds to that RawContact. The uri refers to the Data table uri for each row. */ public final class Entity { + @UnsupportedAppUsage final private ContentValues mValues; + @UnsupportedAppUsage final private ArrayList<NamedContentValues> mSubValues; public Entity(ContentValues values) { diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java index 66087fb99cdf..d814e676886e 100644 --- a/core/java/android/content/IContentProvider.java +++ b/core/java/android/content/IContentProvider.java @@ -17,6 +17,7 @@ package android.content; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.net.Uri; @@ -39,12 +40,16 @@ public interface IContentProvider extends IInterface { @Nullable Bundle queryArgs, @Nullable ICancellationSignal cancellationSignal) throws RemoteException; public String getType(Uri url) throws RemoteException; + @UnsupportedAppUsage public Uri insert(String callingPkg, Uri url, ContentValues initialValues) throws RemoteException; + @UnsupportedAppUsage public int bulkInsert(String callingPkg, Uri url, ContentValues[] initialValues) throws RemoteException; + @UnsupportedAppUsage public int delete(String callingPkg, Uri url, String selection, String[] selectionArgs) throws RemoteException; + @UnsupportedAppUsage public int update(String callingPkg, Uri url, ContentValues values, String selection, String[] selectionArgs) throws RemoteException; public ParcelFileDescriptor openFile( @@ -57,6 +62,7 @@ public interface IContentProvider extends IInterface { public ContentProviderResult[] applyBatch(String callingPkg, ArrayList<ContentProviderOperation> operations) throws RemoteException, OperationApplicationException; + @UnsupportedAppUsage public Bundle call( String callingPkg, String method, @Nullable String arg, @Nullable Bundle extras) throws RemoteException; @@ -74,8 +80,10 @@ public interface IContentProvider extends IInterface { Bundle opts, ICancellationSignal signal) throws RemoteException, FileNotFoundException; /* IPC constants */ + @UnsupportedAppUsage static final String descriptor = "android.content.IContentProvider"; + @UnsupportedAppUsage static final int QUERY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION; static final int GET_TYPE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 1; static final int INSERT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 2; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 78738e9c3b06..a6b81b52633e 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -26,6 +26,7 @@ import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; @@ -2027,6 +2028,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @UnsupportedAppUsage public static final String ACTION_ALARM_CHANGED = "android.intent.action.ALARM_CHANGED"; /** @@ -3254,6 +3256,7 @@ public class Intent implements Parcelable, Cloneable { * {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast. * @hide */ + @UnsupportedAppUsage public static final String ACTION_USER_SWITCHED = "android.intent.action.USER_SWITCHED"; @@ -5740,6 +5743,7 @@ public class Intent implements Parcelable, Cloneable { * * @hide */ + @UnsupportedAppUsage public static final int FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT = 0x04000000; /** * Set when this broadcast is for a boot upgrade, a special mode that @@ -5906,6 +5910,7 @@ public class Intent implements Parcelable, Cloneable { private ComponentName mComponent; private int mFlags; private ArraySet<String> mCategories; + @UnsupportedAppUsage private Bundle mExtras; private Rect mSourceBounds; private Intent mSelector; @@ -6573,6 +6578,7 @@ public class Intent implements Parcelable, Cloneable { } /** @hide */ + @UnsupportedAppUsage public static Intent parseCommandArgs(ShellCommand cmd, CommandOptionHandler optionHandler) throws URISyntaxException { Intent intent = new Intent(); @@ -6957,6 +6963,7 @@ public class Intent implements Parcelable, Cloneable { } /** @hide */ + @UnsupportedAppUsage public static void printIntentArgsHelp(PrintWriter pw, String prefix) { final String[] lines = new String[] { "<INTENT> specifications include these flags and arguments:", @@ -7234,6 +7241,7 @@ public class Intent implements Parcelable, Cloneable { } /** {@hide} */ + @UnsupportedAppUsage public void setAllowFds(boolean allowFds) { if (mExtras != null) { mExtras.setAllowFds(allowFds); @@ -7259,6 +7267,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @Deprecated + @UnsupportedAppUsage public Object getExtra(String name) { return getExtra(name, null); } @@ -7697,6 +7706,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @Deprecated + @UnsupportedAppUsage public IBinder getIBinderExtra(String name) { return mExtras == null ? null : mExtras.getIBinder(name); } @@ -7717,6 +7727,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @Deprecated + @UnsupportedAppUsage public Object getExtra(String name, Object defaultValue) { Object result = defaultValue; if (mExtras != null) { @@ -7789,6 +7800,7 @@ public class Intent implements Parcelable, Cloneable { } /** @hide */ + @UnsupportedAppUsage public boolean isExcludingStopped() { return (mFlags&(FLAG_EXCLUDE_STOPPED_PACKAGES|FLAG_INCLUDE_STOPPED_PACKAGES)) == FLAG_EXCLUDE_STOPPED_PACKAGES; @@ -7938,6 +7950,7 @@ public class Intent implements Parcelable, Cloneable { * there are no matches. * @hide */ + @UnsupportedAppUsage public @Nullable ComponentName resolveSystemService(@NonNull PackageManager pm, @PackageManager.ComponentInfoFlags int flags) { if (mComponent != null) { @@ -8947,6 +8960,7 @@ public class Intent implements Parcelable, Cloneable { * @hide */ @Deprecated + @UnsupportedAppUsage public @NonNull Intent putExtra(String name, IBinder value) { if (mExtras == null) { mExtras = new Bundle(); @@ -9514,6 +9528,7 @@ public class Intent implements Parcelable, Cloneable { } /** @hide */ + @UnsupportedAppUsage public String toInsecureString() { StringBuilder b = new StringBuilder(128); @@ -10163,6 +10178,7 @@ public class Intent implements Parcelable, Cloneable { * * @hide */ + @UnsupportedAppUsage public void prepareToLeaveProcess(Context context) { final boolean leavingPackage = (mComponent == null) || !Objects.equals(mComponent.getPackageName(), context.getPackageName()); diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index cec3badd2e6c..212e13262433 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -18,6 +18,7 @@ package android.content; import android.annotation.IntDef; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; @@ -271,7 +272,9 @@ public class IntentFilter implements Parcelable { public static final String SCHEME_HTTPS = "https"; private int mPriority; + @UnsupportedAppUsage private int mOrder; + @UnsupportedAppUsage private final ArrayList<String> mActions; private ArrayList<String> mCategories = null; private ArrayList<String> mDataSchemes = null; @@ -536,6 +539,7 @@ public class IntentFilter implements Parcelable { * * @hide */ + @UnsupportedAppUsage public final void setAutoVerify(boolean autoVerify) { mVerifyState &= ~STATE_VERIFY_AUTO; if (autoVerify) mVerifyState |= STATE_VERIFY_AUTO; @@ -651,6 +655,7 @@ public class IntentFilter implements Parcelable { * * @hide */ + @UnsupportedAppUsage public final boolean isVerified() { if ((mVerifyState & STATE_NEED_VERIFY_CHECKED) == STATE_NEED_VERIFY_CHECKED) { return ((mVerifyState & STATE_NEED_VERIFY) == STATE_NEED_VERIFY); @@ -806,6 +811,7 @@ public class IntentFilter implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public final boolean hasExactDataType(String type) { return mDataTypes != null && mDataTypes.contains(type); } @@ -1071,6 +1077,7 @@ public class IntentFilter implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public final boolean hasDataSchemeSpecificPart(PatternMatcher ssp) { if (mDataSchemeSpecificParts == null) { return false; @@ -1154,6 +1161,7 @@ public class IntentFilter implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public final boolean hasDataAuthority(AuthorityEntry auth) { if (mDataAuthorities == null) { return false; @@ -1250,6 +1258,7 @@ public class IntentFilter implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public final boolean hasDataPath(PatternMatcher path) { if (mDataPaths == null) { return false; diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java index ff127df6ec9b..bfd1a43d36be 100644 --- a/core/java/android/content/IntentSender.java +++ b/core/java/android/content/IntentSender.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.os.Bundle; import android.os.RemoteException; @@ -55,6 +56,7 @@ import android.util.AndroidException; * {@link android.app.PendingIntent#getIntentSender() PendingIntent.getIntentSender()}. */ public class IntentSender implements Parcelable { + @UnsupportedAppUsage private final IIntentSender mTarget; IBinder mWhitelistToken; @@ -356,6 +358,7 @@ public class IntentSender implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public IIntentSender getTarget() { return mTarget; } @@ -366,6 +369,7 @@ public class IntentSender implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public IntentSender(IIntentSender target) { mTarget = target; } diff --git a/core/java/android/content/RestrictionsManager.java b/core/java/android/content/RestrictionsManager.java index b463ec6277e7..33395ec37d9d 100644 --- a/core/java/android/content/RestrictionsManager.java +++ b/core/java/android/content/RestrictionsManager.java @@ -17,6 +17,7 @@ package android.content; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.pm.ApplicationInfo; @@ -402,6 +403,7 @@ public class RestrictionsManager { private static final String TAG_RESTRICTION = "restriction"; private final Context mContext; + @UnsupportedAppUsage private final IRestrictionsManager mService; /** diff --git a/core/java/android/content/SearchRecentSuggestionsProvider.java b/core/java/android/content/SearchRecentSuggestionsProvider.java index d6f7d97367a7..8ee7b9e403b4 100644 --- a/core/java/android/content/SearchRecentSuggestionsProvider.java +++ b/core/java/android/content/SearchRecentSuggestionsProvider.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.app.SearchManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -115,6 +116,7 @@ public class SearchRecentSuggestionsProvider extends ContentProvider { private UriMatcher mUriMatcher; private String mSuggestSuggestionClause; + @UnsupportedAppUsage private String[] mSuggestionProjection; /** diff --git a/core/java/android/content/SyncAdapterType.java b/core/java/android/content/SyncAdapterType.java index 6ef7fd214069..ff77676505a7 100644 --- a/core/java/android/content/SyncAdapterType.java +++ b/core/java/android/content/SyncAdapterType.java @@ -17,6 +17,7 @@ package android.content; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.text.TextUtils; import android.os.Parcelable; import android.os.Parcel; @@ -29,10 +30,15 @@ public class SyncAdapterType implements Parcelable { public final String authority; public final String accountType; public final boolean isKey; + @UnsupportedAppUsage private final boolean userVisible; + @UnsupportedAppUsage private final boolean supportsUploading; + @UnsupportedAppUsage private final boolean isAlwaysSyncable; + @UnsupportedAppUsage private final boolean allowParallelSyncs; + @UnsupportedAppUsage private final String settingsActivity; private final String packageName; @@ -79,6 +85,7 @@ public class SyncAdapterType implements Parcelable { this.packageName = packageName; } + @UnsupportedAppUsage private SyncAdapterType(String authority, String accountType) { if (TextUtils.isEmpty(authority)) { throw new IllegalArgumentException("the authority must not be empty: " + authority); diff --git a/core/java/android/content/SyncAdaptersCache.java b/core/java/android/content/SyncAdaptersCache.java index ccd799407308..d4e52175f9b5 100644 --- a/core/java/android/content/SyncAdaptersCache.java +++ b/core/java/android/content/SyncAdaptersCache.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.content.pm.RegisteredServicesCache; import android.content.pm.XmlSerializerAndParser; import android.content.res.Resources; @@ -51,6 +52,7 @@ public class SyncAdaptersCache extends RegisteredServicesCache<SyncAdapterType> private SparseArray<ArrayMap<String,String[]>> mAuthorityToSyncAdapters = new SparseArray<>(); + @UnsupportedAppUsage public SyncAdaptersCache(Context context) { super(context, SERVICE_INTERFACE, SERVICE_META_DATA, ATTRIBUTES_NAME, sSerializer); } diff --git a/core/java/android/content/SyncContext.java b/core/java/android/content/SyncContext.java index cc914c0c4c44..50d1dc96fc0a 100644 --- a/core/java/android/content/SyncContext.java +++ b/core/java/android/content/SyncContext.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.RemoteException; import android.os.SystemClock; import android.os.IBinder; @@ -29,6 +30,7 @@ public class SyncContext { /** * @hide */ + @UnsupportedAppUsage public SyncContext(ISyncContext syncContextInterface) { mSyncContext = syncContextInterface; mLastHeartbeatSendTime = 0; @@ -42,6 +44,7 @@ public class SyncContext { * * @hide */ + @UnsupportedAppUsage public void setStatusText(String message) { updateHeartbeat(); } diff --git a/core/java/android/content/SyncInfo.java b/core/java/android/content/SyncInfo.java index ab3c30bb2d2a..7ebf922aead0 100644 --- a/core/java/android/content/SyncInfo.java +++ b/core/java/android/content/SyncInfo.java @@ -17,6 +17,7 @@ package android.content; import android.accounts.Account; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -32,6 +33,7 @@ public class SyncInfo implements Parcelable { private static final Account REDACTED_ACCOUNT = new Account("*****", "*****"); /** @hide */ + @UnsupportedAppUsage public final int authorityId; /** @@ -63,6 +65,7 @@ public class SyncInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public SyncInfo(int authorityId, Account account, String authority, long startTime) { this.authorityId = authorityId; this.account = account; @@ -92,6 +95,7 @@ public class SyncInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage SyncInfo(Parcel parcel) { authorityId = parcel.readInt(); account = parcel.readParcelable(Account.class.getClassLoader()); @@ -100,6 +104,7 @@ public class SyncInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public static final Creator<SyncInfo> CREATOR = new Creator<SyncInfo>() { public SyncInfo createFromParcel(Parcel in) { return new SyncInfo(in); diff --git a/core/java/android/content/SyncRequest.java b/core/java/android/content/SyncRequest.java index 74d2f114aae5..fd12d7acc8d7 100644 --- a/core/java/android/content/SyncRequest.java +++ b/core/java/android/content/SyncRequest.java @@ -17,6 +17,7 @@ package android.content; import android.accounts.Account; +import android.annotation.UnsupportedAppUsage; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -29,10 +30,13 @@ import android.os.Parcelable; public class SyncRequest implements Parcelable { private static final String TAG = "SyncRequest"; /** Account to pass to the sync adapter. Can be null. */ + @UnsupportedAppUsage private final Account mAccountToSync; /** Authority string that corresponds to a ContentProvider. */ + @UnsupportedAppUsage private final String mAuthority; /** Bundle containing user info as well as sync settings. */ + @UnsupportedAppUsage private final Bundle mExtras; /** Don't allow this sync request on metered networks. */ private final boolean mDisallowMetered; @@ -44,8 +48,10 @@ public class SyncRequest implements Parcelable { /** * Specifies a point in the future at which the sync must have been scheduled to run. */ + @UnsupportedAppUsage private final long mSyncRunTimeSecs; /** Periodic versus one-off. */ + @UnsupportedAppUsage private final boolean mIsPeriodic; /** Service versus provider. */ private final boolean mIsAuthority; diff --git a/core/java/android/content/SyncStatusInfo.java b/core/java/android/content/SyncStatusInfo.java index 2d521e9e4e60..a9065caec13d 100644 --- a/core/java/android/content/SyncStatusInfo.java +++ b/core/java/android/content/SyncStatusInfo.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; @@ -37,6 +38,7 @@ public class SyncStatusInfo implements Parcelable { */ private static final int SOURCE_COUNT = 6; + @UnsupportedAppUsage public final int authorityId; /** @@ -117,13 +119,21 @@ public class SyncStatusInfo implements Parcelable { public final Stats todayStats = new Stats(); public final Stats yesterdayStats = new Stats(); + @UnsupportedAppUsage public long lastSuccessTime; + @UnsupportedAppUsage public int lastSuccessSource; + @UnsupportedAppUsage public long lastFailureTime; + @UnsupportedAppUsage public int lastFailureSource; + @UnsupportedAppUsage public String lastFailureMesg; + @UnsupportedAppUsage public long initialFailureTime; + @UnsupportedAppUsage public boolean pending; + @UnsupportedAppUsage public boolean initialize; public final long[] perSourceLastSuccessTimes = new long[SOURCE_COUNT]; @@ -131,15 +141,18 @@ public class SyncStatusInfo implements Parcelable { // Warning: It is up to the external caller to ensure there are // no race conditions when accessing this list + @UnsupportedAppUsage private ArrayList<Long> periodicSyncTimes; private final ArrayList<Long> mLastEventTimes = new ArrayList<>(); private final ArrayList<String> mLastEvents = new ArrayList<>(); + @UnsupportedAppUsage public SyncStatusInfo(int authorityId) { this.authorityId = authorityId; } + @UnsupportedAppUsage public int getLastFailureMesgAsInt(int def) { final int i = ContentResolver.syncErrorStringToInt(lastFailureMesg); if (i > 0) { @@ -205,6 +218,7 @@ public class SyncStatusInfo implements Parcelable { parcel.writeLongArray(perSourceLastFailureTimes); } + @UnsupportedAppUsage public SyncStatusInfo(Parcel parcel) { int version = parcel.readInt(); if (version != VERSION && version != 1) { @@ -309,6 +323,7 @@ public class SyncStatusInfo implements Parcelable { System.arraycopy(from, 0, to, 0, to.length); } + @UnsupportedAppUsage public void setPeriodicSyncTime(int index, long when) { // The list is initialized lazily when scheduling occurs so we need to make sure // we initialize elements < index to zero (zero is ignore for scheduling purposes) @@ -316,6 +331,7 @@ public class SyncStatusInfo implements Parcelable { periodicSyncTimes.set(index, when); } + @UnsupportedAppUsage public long getPeriodicSyncTime(int index) { if (periodicSyncTimes != null && index < periodicSyncTimes.size()) { return periodicSyncTimes.get(index); @@ -324,6 +340,7 @@ public class SyncStatusInfo implements Parcelable { } } + @UnsupportedAppUsage public void removePeriodicSyncTime(int index) { if (periodicSyncTimes != null && index < periodicSyncTimes.size()) { periodicSyncTimes.remove(index); @@ -383,6 +400,7 @@ public class SyncStatusInfo implements Parcelable { } } + @UnsupportedAppUsage public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() { public SyncStatusInfo createFromParcel(Parcel in) { return new SyncStatusInfo(in); @@ -393,6 +411,7 @@ public class SyncStatusInfo implements Parcelable { } }; + @UnsupportedAppUsage private void ensurePeriodicSyncTimeSize(int index) { if (periodicSyncTimes == null) { periodicSyncTimes = new ArrayList<Long>(0); diff --git a/core/java/android/content/UndoManager.java b/core/java/android/content/UndoManager.java index fb21641e40b6..f6a0d771bf4c 100644 --- a/core/java/android/content/UndoManager.java +++ b/core/java/android/content/UndoManager.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.os.ParcelableParcel; @@ -86,6 +87,7 @@ public class UndoManager { */ public static final int MERGE_MODE_ANY = 2; + @UnsupportedAppUsage public UndoOwner getOwner(String tag, Object data) { if (tag == null) { throw new NullPointerException("tag can't be null"); @@ -122,6 +124,7 @@ public class UndoManager { * Flatten the current undo state into a Parcel object, which can later be restored * with {@link #restoreInstanceState(android.os.Parcel, java.lang.ClassLoader)}. */ + @UnsupportedAppUsage public void saveInstanceState(Parcel p) { if (mUpdateCount > 0) { throw new IllegalStateException("Can't save state while updating"); @@ -170,6 +173,7 @@ public class UndoManager { * associated with each {@link UndoOwner}, which requires separate calls to * {@link #getOwner(String, Object)} to re-associate the owner with its data. */ + @UnsupportedAppUsage public void restoreInstanceState(Parcel p, ClassLoader loader) { if (mUpdateCount > 0) { throw new IllegalStateException("Can't save state while updating"); @@ -230,6 +234,7 @@ public class UndoManager { * @param count Number of undo states to pop. * @return Returns the number of undo states that were actually popped. */ + @UnsupportedAppUsage public int undo(UndoOwner[] owners, int count) { if (mWorking != null) { throw new IllegalStateException("Can't be called during an update"); @@ -267,6 +272,7 @@ public class UndoManager { * @param count Number of undo states to pop. * @return Returns the number of undo states that were actually redone. */ + @UnsupportedAppUsage public int redo(UndoOwner[] owners, int count) { if (mWorking != null) { throw new IllegalStateException("Can't be called during an update"); @@ -295,10 +301,12 @@ public class UndoManager { * useful for editors to know whether they should be generating new undo state * when they see edit operations happening. */ + @UnsupportedAppUsage public boolean isInUndo() { return mInUndo; } + @UnsupportedAppUsage public int forgetUndos(UndoOwner[] owners, int count) { if (count < 0) { count = mUndos.size(); @@ -320,6 +328,7 @@ public class UndoManager { return removed; } + @UnsupportedAppUsage public int forgetRedos(UndoOwner[] owners, int count) { if (count < 0) { count = mRedos.size(); @@ -346,6 +355,7 @@ public class UndoManager { * @param owners If non-null, only those states containing an operation with one of * the owners supplied here will be counted. */ + @UnsupportedAppUsage public int countUndos(UndoOwner[] owners) { if (owners == null) { return mUndos.size(); @@ -365,6 +375,7 @@ public class UndoManager { * @param owners If non-null, only those states containing an operation with one of * the owners supplied here will be counted. */ + @UnsupportedAppUsage public int countRedos(UndoOwner[] owners) { if (owners == null) { return mRedos.size(); @@ -404,6 +415,7 @@ public class UndoManager { * they are all matched by a later call to {@link #endUpdate}. * @param label Optional user-visible label for this new undo state. */ + @UnsupportedAppUsage public void beginUpdate(CharSequence label) { if (mInUndo) { throw new IllegalStateException("Can't being update while performing undo/redo"); @@ -436,6 +448,7 @@ public class UndoManager { * Forcibly set a new for the new undo state being built within a {@link #beginUpdate}. * Any existing label will be replaced with this one. */ + @UnsupportedAppUsage public void setUndoLabel(CharSequence label) { if (mWorking == null) { throw new IllegalStateException("Must be called during an update"); @@ -510,6 +523,7 @@ public class UndoManager { * @param mergeMode May be either {@link #MERGE_MODE_NONE}, {@link #MERGE_MODE_UNIQUE}, * or {@link #MERGE_MODE_ANY}. */ + @UnsupportedAppUsage public <T extends UndoOperation> T getLastOperation(Class<T> clazz, UndoOwner owner, int mergeMode) { if (mWorking == null) { @@ -539,6 +553,7 @@ public class UndoManager { * @param mergeMode May be either {@link #MERGE_MODE_NONE}, {@link #MERGE_MODE_UNIQUE}, * or {@link #MERGE_MODE_ANY}. */ + @UnsupportedAppUsage public void addOperation(UndoOperation<?> op, int mergeMode) { if (mWorking == null) { throw new IllegalStateException("Must be called during an update"); @@ -565,6 +580,7 @@ public class UndoManager { * Finish the creation of an undo state, matching a previous call to * {@link #beginUpdate}. */ + @UnsupportedAppUsage public void endUpdate() { if (mWorking == null) { throw new IllegalStateException("Must be called during an update"); @@ -613,6 +629,7 @@ public class UndoManager { * @return Returns an integer identifier for the committed undo state, which * can later be used to try to uncommit the state to perform further edits on it. */ + @UnsupportedAppUsage public int commitState(UndoOwner owner) { if (mWorking != null && mWorking.hasData()) { if (owner == null || mWorking.hasOperation(owner)) { diff --git a/core/java/android/content/UndoOperation.java b/core/java/android/content/UndoOperation.java index 1ff32d4a8013..a425486e5739 100644 --- a/core/java/android/content/UndoOperation.java +++ b/core/java/android/content/UndoOperation.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -34,6 +35,7 @@ public abstract class UndoOperation<DATA> implements Parcelable { * @param owner Who owns the data being modified by this undo state; must be * returned by {@link UndoManager#getOwner(String, Object) UndoManager.getOwner}. */ + @UnsupportedAppUsage public UndoOperation(UndoOwner owner) { mOwner = owner; } @@ -41,6 +43,7 @@ public abstract class UndoOperation<DATA> implements Parcelable { /** * Construct from a Parcel. */ + @UnsupportedAppUsage protected UndoOperation(Parcel src, ClassLoader loader) { } diff --git a/core/java/android/content/UriMatcher.java b/core/java/android/content/UriMatcher.java index 8db82a8a1107..208bc01aef9d 100644 --- a/core/java/android/content/UriMatcher.java +++ b/core/java/android/content/UriMatcher.java @@ -16,6 +16,7 @@ package android.content; +import android.annotation.UnsupportedAppUsage; import android.net.Uri; import java.util.ArrayList; @@ -277,6 +278,8 @@ public class UriMatcher private int mCode; private final int mWhich; + @UnsupportedAppUsage private final String mText; + @UnsupportedAppUsage private ArrayList<UriMatcher> mChildren; } diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java index edacbb0bb2b4..07b23d1decc0 100644 --- a/core/java/android/content/om/OverlayInfo.java +++ b/core/java/android/content/om/OverlayInfo.java @@ -18,6 +18,7 @@ package android.content.om; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -107,11 +108,13 @@ public final class OverlayInfo implements Parcelable { /** * Package name of the overlay package */ + @UnsupportedAppUsage public final String packageName; /** * Package name of the target package */ + @UnsupportedAppUsage public final String targetPackageName; /** @@ -127,6 +130,7 @@ public final class OverlayInfo implements Parcelable { /** * The state of this OverlayInfo as defined by the STATE_* constants in this class. */ + @UnsupportedAppUsage public final @State int state; /** @@ -251,6 +255,7 @@ public final class OverlayInfo implements Parcelable { * * @return true if the overlay is enabled, else false. */ + @UnsupportedAppUsage public boolean isEnabled() { switch (state) { case STATE_ENABLED: diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index dcf8c772fb5e..5926af6f9082 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -18,6 +18,7 @@ package android.content.pm; import android.annotation.IntDef; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Intent; import android.content.res.Configuration; @@ -222,6 +223,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * See {@link android.R.attr#resizeableActivity}. * @hide */ + @UnsupportedAppUsage public int resizeMode = RESIZE_MODE_RESIZEABLE; /** @@ -355,6 +357,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * {@link android.R.attr#showForAllUsers} attribute. * @hide */ + @UnsupportedAppUsage public static final int FLAG_SHOW_FOR_ALL_USERS = 0x0400; /** * Bit in {@link #flags} corresponding to an immersive activity @@ -476,6 +479,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * this activity is launched into such a container a SecurityException will be * thrown. Set from the {@link android.R.attr#allowEmbedded} attribute. */ + @UnsupportedAppUsage public static final int FLAG_ALLOW_EMBEDDED = 0x80000000; /** @@ -816,6 +820,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static @NativeConfig int activityInfoConfigJavaToNative(@Config int input) { int output = 0; for (int i = 0; i < CONFIG_NATIVE_BITS.length; i++) { @@ -1047,11 +1052,13 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * Returns true if the activity supports picture-in-picture. * @hide */ + @UnsupportedAppUsage public boolean supportsPictureInPicture() { return (flags & FLAG_SUPPORTS_PICTURE_IN_PICTURE) != 0; } /** @hide */ + @UnsupportedAppUsage public static boolean isResizeableMode(int mode) { return mode == RESIZE_MODE_RESIZEABLE || mode == RESIZE_MODE_FORCE_RESIZEABLE diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 13b67fd6d713..83e287aecb41 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -22,6 +22,7 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; @@ -127,6 +128,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public int fullBackupContent = 0; /** @@ -704,8 +706,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public UUID storageUuid; /** {@hide} */ + @UnsupportedAppUsage public String scanSourceDir; /** {@hide} */ + @UnsupportedAppUsage public String scanPublicSourceDir; /** @@ -771,6 +775,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public String[] resourceDirs; /** @@ -847,6 +852,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public String secondaryNativeLibraryDir; /** @@ -858,6 +864,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public String nativeLibraryRootDir; /** @@ -877,6 +884,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public String primaryCpuAbi; /** @@ -886,6 +894,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public String secondaryCpuAbi; /** @@ -925,6 +934,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public int versionCode; /** @@ -960,12 +970,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * For convenient access to the current enabled setting of this app. * @hide */ + @UnsupportedAppUsage public int enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; /** * For convenient access to package's install location. * @hide */ + @UnsupportedAppUsage public int installLocation = PackageInfo.INSTALL_LOCATION_UNSPECIFIED; /** @@ -1374,6 +1386,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * @return true if "supportsRtl" has been set to true in the AndroidManifest * @hide */ + @UnsupportedAppUsage public boolean hasRtlSupport() { return (flags & FLAG_SUPPORTS_RTL) == FLAG_SUPPORTS_RTL; } @@ -1402,7 +1415,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return sCollator.compare(sa.toString(), sb.toString()); } + @UnsupportedAppUsage private final Collator sCollator = Collator.getInstance(); + @UnsupportedAppUsage private PackageManager mPM; } @@ -1641,6 +1656,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public void disableCompatibilityMode() { flags |= (FLAG_SUPPORTS_LARGE_SCREENS | FLAG_SUPPORTS_NORMAL_SCREENS | FLAG_SUPPORTS_SMALL_SCREENS | FLAG_RESIZEABLE_FOR_SCREENS | @@ -1765,6 +1781,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { return pm.getDefaultActivityIcon(); } + @UnsupportedAppUsage private boolean isPackageUnavailable(PackageManager pm) { try { return pm.getPackageInfo(packageName, 0) == null; @@ -1800,6 +1817,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public boolean isForwardLocked() { return (privateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0; } @@ -1900,10 +1918,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** {@hide} */ public void setBaseResourcePath(String baseResourcePath) { publicSourceDir = baseResourcePath; } /** {@hide} */ public void setSplitResourcePaths(String[] splitResourcePaths) { splitPublicSourceDirs = splitResourcePaths; } - /** {@hide} */ public String getCodePath() { return scanSourceDir; } + /** {@hide} */ + @UnsupportedAppUsage + public String getCodePath() { return scanSourceDir; } /** {@hide} */ public String getBaseCodePath() { return sourceDir; } /** {@hide} */ public String[] getSplitCodePaths() { return splitSourceDirs; } /** {@hide} */ public String getResourcePath() { return scanPublicSourceDir; } - /** {@hide} */ public String getBaseResourcePath() { return publicSourceDir; } + /** {@hide} */ + @UnsupportedAppUsage + public String getBaseResourcePath() { return publicSourceDir; } /** {@hide} */ public String[] getSplitResourcePaths() { return splitPublicSourceDirs; } } diff --git a/core/java/android/content/pm/BaseParceledListSlice.java b/core/java/android/content/pm/BaseParceledListSlice.java index 5877a09b7759..a3e5d6d43588 100644 --- a/core/java/android/content/pm/BaseParceledListSlice.java +++ b/core/java/android/content/pm/BaseParceledListSlice.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Binder; import android.os.IBinder; import android.os.Parcel; @@ -132,6 +133,7 @@ abstract class BaseParceledListSlice<T> implements Parcelable { } } + @UnsupportedAppUsage public List<T> getList() { return mList; } @@ -205,6 +207,7 @@ abstract class BaseParceledListSlice<T> implements Parcelable { protected abstract void writeElement(T parcelable, Parcel reply, int callFlags); + @UnsupportedAppUsage protected abstract void writeParcelableCreator(T parcelable, Parcel dest); protected abstract Parcelable.Creator<?> readParcelableCreator(Parcel from, ClassLoader loader); diff --git a/core/java/android/content/pm/ComponentInfo.java b/core/java/android/content/pm/ComponentInfo.java index 0269b6c3e5e1..29612c25d0cd 100644 --- a/core/java/android/content/pm/ComponentInfo.java +++ b/core/java/android/content/pm/ComponentInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.graphics.drawable.Drawable; import android.os.Parcel; @@ -162,6 +163,7 @@ public class ComponentInfo extends PackageItemInfo { } /** {@hide} */ + @UnsupportedAppUsage public ComponentName getComponentName() { return new ComponentName(packageName, name); } diff --git a/core/java/android/content/pm/LauncherActivityInfo.java b/core/java/android/content/pm/LauncherActivityInfo.java index e9c958857d5c..1451431b7852 100644 --- a/core/java/android/content/pm/LauncherActivityInfo.java +++ b/core/java/android/content/pm/LauncherActivityInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; @@ -35,6 +36,7 @@ public class LauncherActivityInfo { private final PackageManager mPm; + @UnsupportedAppUsage private ActivityInfo mActivityInfo; private ComponentName mComponentName; private UserHandle mUser; diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index fa423e29406a..46877ca9fe5c 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -23,6 +23,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; @@ -135,7 +136,9 @@ public class LauncherApps { "android.content.pm.extra.PIN_ITEM_REQUEST"; private final Context mContext; + @UnsupportedAppUsage private final ILauncherApps mService; + @UnsupportedAppUsage private final PackageManager mPm; private final UserManager mUserManager; @@ -1055,6 +1058,7 @@ public class LauncherApps { shortcut.getUserId()); } + @UnsupportedAppUsage private void startShortcut(@NonNull String packageName, @NonNull String shortcutId, @Nullable Rect sourceBounds, @Nullable Bundle startActivityOptions, int userId) { diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 5d8122f65c71..d9d177760243 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -17,6 +17,7 @@ package android.content.pm; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -297,6 +298,7 @@ public class PackageInfo implements Parcelable { * the {@link android.R.attr#installLocation} attribute. * @hide */ + @UnsupportedAppUsage public static final int INSTALL_LOCATION_UNSPECIFIED = -1; /** @@ -329,6 +331,7 @@ public class PackageInfo implements Parcelable { public boolean isStub; /** @hide */ + @UnsupportedAppUsage public boolean coreApp; /** @hide */ @@ -346,6 +349,7 @@ public class PackageInfo implements Parcelable { * Package name of target package, or null. * @hide */ + @UnsupportedAppUsage public String overlayTarget; /** @@ -483,6 +487,7 @@ public class PackageInfo implements Parcelable { } }; + @UnsupportedAppUsage private PackageInfo(Parcel source) { packageName = source.readString(); splitNames = source.createStringArray(); diff --git a/core/java/android/content/pm/PackageInfoLite.java b/core/java/android/content/pm/PackageInfoLite.java index bbf020d76c92..e0e67b9321aa 100644 --- a/core/java/android/content/pm/PackageInfoLite.java +++ b/core/java/android/content/pm/PackageInfoLite.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -115,6 +116,7 @@ public class PackageInfoLite implements Parcelable { } } + @UnsupportedAppUsage public static final Parcelable.Creator<PackageInfoLite> CREATOR = new Parcelable.Creator<PackageInfoLite>() { public PackageInfoLite createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index f99c52f4004c..316ace16f0a4 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -23,6 +23,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.AppGlobals; import android.content.Intent; @@ -787,6 +788,7 @@ public class PackageInstaller { } /** {@hide} */ + @UnsupportedAppUsage public void addProgress(float progress) { try { mSession.addClientProgress(progress); @@ -1089,26 +1091,33 @@ public class PackageInstaller { public static final int UID_UNKNOWN = -1; /** {@hide} */ + @UnsupportedAppUsage public int mode = MODE_INVALID; /** {@hide} */ + @UnsupportedAppUsage public int installFlags; /** {@hide} */ public int installLocation = PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY; /** {@hide} */ public @InstallReason int installReason = PackageManager.INSTALL_REASON_UNKNOWN; /** {@hide} */ + @UnsupportedAppUsage public long sizeBytes = -1; /** {@hide} */ + @UnsupportedAppUsage public String appPackageName; /** {@hide} */ + @UnsupportedAppUsage public Bitmap appIcon; /** {@hide} */ + @UnsupportedAppUsage public String appLabel; /** {@hide} */ public long appIconLastModified = -1; /** {@hide} */ public Uri originatingUri; /** {@hide} */ + @UnsupportedAppUsage public int originatingUid = UID_UNKNOWN; /** {@hide} */ public Uri referrerUri; @@ -1426,29 +1435,40 @@ public class PackageInstaller { public static class SessionInfo implements Parcelable { /** {@hide} */ + @UnsupportedAppUsage public int sessionId; /** {@hide} */ + @UnsupportedAppUsage public String installerPackageName; /** {@hide} */ + @UnsupportedAppUsage public String resolvedBaseCodePath; /** {@hide} */ + @UnsupportedAppUsage public float progress; /** {@hide} */ + @UnsupportedAppUsage public boolean sealed; /** {@hide} */ + @UnsupportedAppUsage public boolean active; /** {@hide} */ + @UnsupportedAppUsage public int mode; /** {@hide} */ public @InstallReason int installReason; /** {@hide} */ + @UnsupportedAppUsage public long sizeBytes; /** {@hide} */ + @UnsupportedAppUsage public String appPackageName; /** {@hide} */ + @UnsupportedAppUsage public Bitmap appIcon; /** {@hide} */ + @UnsupportedAppUsage public CharSequence appLabel; /** {@hide} */ @@ -1465,6 +1485,7 @@ public class PackageInstaller { public int installFlags; /** {@hide} */ + @UnsupportedAppUsage public SessionInfo() { } diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index 14d3f91ffba0..0c70a3d9509d 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -22,6 +22,7 @@ import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -103,6 +104,7 @@ public class PackageItemInfo { private static volatile boolean sForceSafeLabels = false; /** {@hide} */ + @UnsupportedAppUsage public static void setForceSafeLabels(boolean forceSafeLabels) { sForceSafeLabels = forceSafeLabels; } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index c0b3400d835d..4f39ec01a11c 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -29,6 +29,7 @@ import android.annotation.SdkConstant.SdkConstantType; import android.annotation.StringRes; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.annotation.XmlRes; import android.app.ActivityManager; @@ -724,6 +725,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public static final int INSTALL_REPLACE_EXISTING = 0x00000002; /** @@ -1317,6 +1319,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public static final int NO_NATIVE_LIBRARIES = -114; /** {@hide} */ @@ -1541,6 +1544,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public static final int MOVE_INTERNAL = 0x00000001; /** @@ -1549,6 +1553,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public static final int MOVE_EXTERNAL_MEDIA = 0x00000002; /** {@hide} */ @@ -3090,6 +3095,7 @@ public abstract class PackageManager { * @hide */ @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS) + @UnsupportedAppUsage public abstract PackageInfo getPackageInfoAsUser(String packageName, @PackageInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException; @@ -3219,6 +3225,7 @@ public abstract class PackageManager { * found on the system. * @hide */ + @UnsupportedAppUsage public abstract int getPackageUidAsUser(String packageName, @UserIdInt int userId) throws NameNotFoundException; @@ -3236,6 +3243,7 @@ public abstract class PackageManager { * found on the system. * @hide */ + @UnsupportedAppUsage public abstract int getPackageUidAsUser(String packageName, @PackageInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException; @@ -3330,6 +3338,7 @@ public abstract class PackageManager { @ApplicationInfoFlags int flags) throws NameNotFoundException; /** {@hide} */ + @UnsupportedAppUsage public abstract ApplicationInfo getApplicationInfoAsUser(String packageName, @ApplicationInfoFlags int flags, @UserIdInt int userId) throws NameNotFoundException; @@ -3672,6 +3681,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public abstract boolean shouldShowRequestPermissionRationale(String permission); /** @@ -3683,6 +3693,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) { if (ArrayUtils.isEmpty(permissions)) { throw new IllegalArgumentException("permission cannot be null or empty"); @@ -3783,6 +3794,7 @@ public abstract class PackageManager { * found on the system. * @hide */ + @UnsupportedAppUsage public abstract int getUidForSharedUser(String sharedUserName) throws NameNotFoundException; @@ -4110,6 +4122,7 @@ public abstract class PackageManager { * containing something else, such as the activity resolver. * @hide */ + @UnsupportedAppUsage public abstract ResolveInfo resolveActivityAsUser(Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); @@ -4148,6 +4161,7 @@ public abstract class PackageManager { * empty list is returned. * @hide */ + @UnsupportedAppUsage public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); @@ -4213,12 +4227,14 @@ public abstract class PackageManager { /** * @hide */ + @UnsupportedAppUsage public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); /** {@hide} */ @Deprecated + @UnsupportedAppUsage public List<ResolveInfo> queryBroadcastReceivers(Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId) { final String msg = "Shame on you for calling the hidden API " @@ -4276,6 +4292,7 @@ public abstract class PackageManager { * empty list or null is returned. * @hide */ + @UnsupportedAppUsage public abstract List<ResolveInfo> queryIntentServicesAsUser(Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); @@ -4291,6 +4308,7 @@ public abstract class PackageManager { * no matching services, an empty list or null is returned. * @hide */ + @UnsupportedAppUsage public abstract List<ResolveInfo> queryIntentContentProvidersAsUser( Intent intent, @ResolveInfoFlags int flags, @UserIdInt int userId); @@ -4334,6 +4352,7 @@ public abstract class PackageManager { * provider. If a provider was not found, returns null. * @hide */ + @UnsupportedAppUsage public abstract ProviderInfo resolveContentProviderAsUser(String name, @ComponentInfoFlags int flags, @UserIdInt int userId); @@ -4695,6 +4714,7 @@ public abstract class PackageManager { * @return the drawable or null if no drawable is required. * @hide */ + @UnsupportedAppUsage public abstract Drawable getUserBadgeForDensity(UserHandle user, int density); /** @@ -4711,6 +4731,7 @@ public abstract class PackageManager { * @return the drawable or null if no drawable is required. * @hide */ + @UnsupportedAppUsage public abstract Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density); /** @@ -4824,6 +4845,7 @@ public abstract class PackageManager { throws NameNotFoundException; /** @hide */ + @UnsupportedAppUsage public abstract Resources getResourcesForApplicationAsUser(String appPackageName, @UserIdInt int userId) throws NameNotFoundException; @@ -4887,6 +4909,7 @@ public abstract class PackageManager { Manifest.permission.INSTALL_EXISTING_PACKAGES, Manifest.permission.INSTALL_PACKAGES, Manifest.permission.INTERACT_ACROSS_USERS_FULL}) + @UnsupportedAppUsage public abstract int installExistingPackageAsUser(String packageName, @UserIdInt int userId) throws NameNotFoundException; @@ -5119,6 +5142,7 @@ public abstract class PackageManager { * @hide */ @RequiresPermission(Manifest.permission.DELETE_PACKAGES) + @UnsupportedAppUsage public abstract void deletePackage(String packageName, IPackageDeleteObserver observer, @DeleteFlags int flags); @@ -5140,6 +5164,7 @@ public abstract class PackageManager { @RequiresPermission(anyOf = { Manifest.permission.DELETE_PACKAGES, Manifest.permission.INTERACT_ACROSS_USERS_FULL}) + @UnsupportedAppUsage public abstract void deletePackageAsUser(@NonNull String packageName, IPackageDeleteObserver observer, @DeleteFlags int flags, @UserIdInt int userId); @@ -5166,6 +5191,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public abstract void clearApplicationUserData(String packageName, IPackageDataObserver observer); /** @@ -5184,6 +5210,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public abstract void deleteApplicationCacheFiles(String packageName, IPackageDataObserver observer); @@ -5205,6 +5232,7 @@ public abstract class PackageManager { * callback is desired. * @hide */ + @UnsupportedAppUsage public abstract void deleteApplicationCacheFilesAsUser(String packageName, int userId, IPackageDataObserver observer); @@ -5230,11 +5258,13 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer) { freeStorageAndNotify(null, freeStorageSize, observer); } /** {@hide} */ + @UnsupportedAppUsage public abstract void freeStorageAndNotify(String volumeUuid, long freeStorageSize, IPackageDataObserver observer); @@ -5261,11 +5291,13 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public void freeStorage(long freeStorageSize, IntentSender pi) { freeStorage(null, freeStorageSize, pi); } /** {@hide} */ + @UnsupportedAppUsage public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi); /** @@ -5288,6 +5320,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public abstract void getPackageSizeInfoAsUser(String packageName, @UserIdInt int userId, IPackageStatsObserver observer); @@ -5299,6 +5332,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) { getPackageSizeInfoAsUser(packageName, getUserId(), observer); } @@ -5359,6 +5393,7 @@ public abstract class PackageManager { to. * @hide */ + @UnsupportedAppUsage public void addPreferredActivityAsUser(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, @UserIdInt int userId) { throw new RuntimeException("Not implemented. Must override in a subclass."); @@ -5386,6 +5421,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public abstract void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); @@ -5393,6 +5429,7 @@ public abstract class PackageManager { * @hide */ @Deprecated + @UnsupportedAppUsage public void replacePreferredActivityAsUser(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, @UserIdInt int userId) { throw new RuntimeException("Not implemented. Must override in a subclass."); @@ -5434,6 +5471,7 @@ public abstract class PackageManager { * default, if any. * @hide */ + @UnsupportedAppUsage public abstract ComponentName getHomeActivities(List<ResolveInfo> outActivities); /** @@ -5500,6 +5538,7 @@ public abstract class PackageManager { * @param userId Ther userId of the user whose restrictions are to be flushed. * @hide */ + @UnsupportedAppUsage public abstract void flushPackageRestrictionsAsUser(int userId); /** @@ -5509,6 +5548,7 @@ public abstract class PackageManager { * or by installing it, such as with {@link #installExistingPackage(String)} * @hide */ + @UnsupportedAppUsage public abstract boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, UserHandle userHandle); @@ -5517,6 +5557,7 @@ public abstract class PackageManager { * @see #setApplicationHiddenSettingAsUser(String, boolean, UserHandle) * @hide */ + @UnsupportedAppUsage public abstract boolean getApplicationHiddenSettingAsUser(String packageName, UserHandle userHandle); @@ -5555,11 +5596,13 @@ public abstract class PackageManager { * application's AndroidManifest.xml. * @hide */ + @UnsupportedAppUsage public abstract KeySet getKeySetByAlias(String packageName, String alias); /** Return the signing {@link KeySet} for this application. * @hide */ + @UnsupportedAppUsage public abstract KeySet getSigningKeySet(String packageName); /** @@ -5569,6 +5612,7 @@ public abstract class PackageManager { * Compare to {@link #isSignedByExactly(String packageName, KeySet ks)}. * @hide */ + @UnsupportedAppUsage public abstract boolean isSignedBy(String packageName, KeySet ks); /** @@ -5577,6 +5621,7 @@ public abstract class PackageManager { * {@link #isSignedBy(String packageName, KeySet ks)}. * @hide */ + @UnsupportedAppUsage public abstract boolean isSignedByExactly(String packageName, KeySet ks); /** @@ -5639,6 +5684,7 @@ public abstract class PackageManager { * @throws IllegalArgumentException if the package was not found. * @hide */ + @UnsupportedAppUsage public abstract boolean isPackageSuspendedForUser(String packageName, int userId); /** @@ -5647,10 +5693,8 @@ public abstract class PackageManager { * @return {@code true} if the given package is suspended, {@code false} otherwise * @throws NameNotFoundException if the package could not be found. * - * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String) - * @hide + * @see #isPackageSuspended() */ - @SystemApi public boolean isPackageSuspended(String packageName) throws NameNotFoundException { throw new UnsupportedOperationException("isPackageSuspended not implemented"); } @@ -5730,18 +5774,24 @@ public abstract class PackageManager { } /** {@hide} */ + @UnsupportedAppUsage public abstract int getMoveStatus(int moveId); /** {@hide} */ + @UnsupportedAppUsage public abstract void registerMoveCallback(MoveCallback callback, Handler handler); /** {@hide} */ + @UnsupportedAppUsage public abstract void unregisterMoveCallback(MoveCallback callback); /** {@hide} */ + @UnsupportedAppUsage public abstract int movePackage(String packageName, VolumeInfo vol); /** {@hide} */ + @UnsupportedAppUsage public abstract @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app); /** {@hide} */ + @UnsupportedAppUsage public abstract @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app); /** {@hide} */ @@ -5765,6 +5815,7 @@ public abstract class PackageManager { * * @hide */ + @UnsupportedAppUsage public abstract boolean isUpgrade(); /** @@ -5786,6 +5837,7 @@ public abstract class PackageManager { * {@link #ONLY_IF_NO_MATCH_FOUND}. * @hide */ + @UnsupportedAppUsage public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId, int targetUserId, int flags); @@ -5796,22 +5848,27 @@ public abstract class PackageManager { * @param sourceUserId The source user id. * @hide */ + @UnsupportedAppUsage public abstract void clearCrossProfileIntentFilters(int sourceUserId); /** * @hide */ + @UnsupportedAppUsage public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); /** * @hide */ + @UnsupportedAppUsage public abstract Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo); /** {@hide} */ + @UnsupportedAppUsage public abstract boolean isPackageAvailable(String packageName); /** {@hide} */ + @UnsupportedAppUsage public static String installStatusToString(int status, String msg) { final String str = installStatusToString(status); if (msg != null) { @@ -5822,6 +5879,7 @@ public abstract class PackageManager { } /** {@hide} */ + @UnsupportedAppUsage public static String installStatusToString(int status) { switch (status) { case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED"; @@ -5932,6 +5990,7 @@ public abstract class PackageManager { } /** {@hide} */ + @UnsupportedAppUsage public static String deleteStatusToString(int status) { switch (status) { case DELETE_SUCCEEDED: return "DELETE_SUCCEEDED"; diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index a2a483280123..823d9951862c 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -31,6 +31,7 @@ import android.util.SparseArray; import com.android.internal.util.function.TriFunction; +import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; @@ -680,4 +681,20 @@ public abstract class PackageManagerInternal { * @return a SparseArray mapping from appId to it's sharedUserId. */ public abstract SparseArray<String> getAppsWithSharedUserIds(); + + /** + * Return if device is currently in a "core" boot environment, typically + * used to support full-disk encryption. Only apps marked with + * {@code coreApp} attribute are available. + */ + public abstract boolean isOnlyCoreApps(); + + /** + * Make a best-effort attempt to provide the requested free disk space by + * deleting cached files. + * + * @throws IOException if the request was unable to be fulfilled. + */ + public abstract void freeStorage(String volumeUuid, long bytes, int storageFlags) + throws IOException; } diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index b4e9ad11ddfd..876cf2bda6fd 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -46,6 +46,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityTaskManager; import android.content.ComponentName; import android.content.Intent; @@ -244,7 +245,9 @@ public class PackageParser { /** @hide */ public static class NewPermissionInfo { + @UnsupportedAppUsage public final String name; + @UnsupportedAppUsage public final int sdkVersion; public final int fileVersion; @@ -277,6 +280,7 @@ public class PackageParser { * granted during a platform update. * @hide */ + @UnsupportedAppUsage public static final PackageParser.NewPermissionInfo NEW_PERMISSIONS[] = new PackageParser.NewPermissionInfo[] { new PackageParser.NewPermissionInfo(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, @@ -322,6 +326,7 @@ public class PackageParser { private String[] mSeparateProcesses; private boolean mOnlyCoreApps; private DisplayMetrics mMetrics; + @UnsupportedAppUsage private Callback mCallback; private File mCacheDir; @@ -389,9 +394,11 @@ public class PackageParser { * Lightweight parsed details about a single package. */ public static class PackageLite { + @UnsupportedAppUsage public final String packageName; public final int versionCode; public final int versionCodeMajor; + @UnsupportedAppUsage public final int installLocation; public final VerifierInfo[] verifiers; @@ -547,11 +554,13 @@ public class PackageParser { private static final String TAG = "PackageParser"; + @UnsupportedAppUsage public PackageParser() { mMetrics = new DisplayMetrics(); mMetrics.setToDefaults(); } + @UnsupportedAppUsage public void setSeparateProcesses(String[] procs) { mSeparateProcesses = procs; } @@ -631,6 +640,7 @@ public class PackageParser { * @param p the parsed package. * @param flags indicating which optional information is included. */ + @UnsupportedAppUsage public static PackageInfo generatePackageInfo(PackageParser.Package p, int gids[], int flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state) { @@ -665,6 +675,7 @@ public class PackageParser { return checkUseInstalledOrHidden(0, state, null); } + @UnsupportedAppUsage public static PackageInfo generatePackageInfo(PackageParser.Package p, int gids[], int flags, long firstInstallTime, long lastUpdateTime, Set<String> grantedPermissions, PackageUserState state, int userId) { @@ -891,6 +902,7 @@ public class PackageParser { * * @see PackageParser#parsePackage(File, int) */ + @UnsupportedAppUsage public static PackageLite parsePackageLite(File packageFile, int flags) throws PackageParserException { if (packageFile.isDirectory()) { @@ -1015,6 +1027,7 @@ public class PackageParser { * * @see #parsePackageLite(File, int) */ + @UnsupportedAppUsage public Package parsePackage(File packageFile, int flags, boolean useCaches) throws PackageParserException { Package parsed = useCaches ? getCachedResult(packageFile, flags) : null; @@ -1045,6 +1058,7 @@ public class PackageParser { /** * Equivalent to {@link #parsePackage(File, int, boolean)} with {@code useCaches == false}. */ + @UnsupportedAppUsage public Package parsePackage(File packageFile, int flags) throws PackageParserException { return parsePackage(packageFile, flags, false /* useCaches */); } @@ -1292,6 +1306,7 @@ public class PackageParser { * be marked private. */ @Deprecated + @UnsupportedAppUsage public Package parseMonolithicPackage(File apkFile, int flags) throws PackageParserException { final PackageLite lite = parseMonolithicPackageLite(apkFile, flags); if (mOnlyCoreApps) { @@ -1488,6 +1503,7 @@ public class PackageParser { * populating {@link Package#mSigningDetails}. Also asserts that all APK * contents are signed correctly and consistently. */ + @UnsupportedAppUsage public static void collectCertificates(Package pkg, boolean skipVerify) throws PackageParserException { collectCertificatesInternal(pkg, skipVerify); @@ -1516,6 +1532,7 @@ public class PackageParser { } } + @UnsupportedAppUsage private static void collectCertificates(Package pkg, File apkFile, boolean skipVerify) throws PackageParserException { final String apkPath = apkFile.getAbsolutePath(); @@ -1885,6 +1902,7 @@ public class PackageParser { * @throws XmlPullParserException * @throws IOException */ + @UnsupportedAppUsage private Package parseBaseApk(String apkPath, Resources res, XmlResourceParser parser, int flags, String[] outError) throws XmlPullParserException, IOException { final String splitName; @@ -2507,6 +2525,49 @@ public class PackageParser { if (pkg.applicationInfo.usesCompatibilityMode()) { adjustPackageToBeUnresizeableAndUnpipable(pkg); } + + // If the storage model feature flag is disabled, we need to fiddle + // around with permission definitions to return us to pre-Q behavior. + // STOPSHIP(b/112545973): remove once feature enabled by default + if (!SystemProperties.getBoolean(StorageManager.PROP_ISOLATED_STORAGE, false)) { + if ("android".equals(pkg.packageName)) { + final ArraySet<String> newGroups = new ArraySet<>(); + newGroups.add(android.Manifest.permission_group.MEDIA_AURAL); + newGroups.add(android.Manifest.permission_group.MEDIA_VISUAL); + + for (int i = pkg.permissionGroups.size() - 1; i >= 0; i--) { + final PermissionGroup pg = pkg.permissionGroups.get(i); + if (newGroups.contains(pg.info.name)) { + pkg.permissionGroups.remove(i); + } + } + + final ArraySet<String> newPermissions = new ArraySet<>(); + newPermissions.add(android.Manifest.permission.READ_MEDIA_AUDIO); + newPermissions.add(android.Manifest.permission.WRITE_MEDIA_AUDIO); + newPermissions.add(android.Manifest.permission.READ_MEDIA_VIDEO); + newPermissions.add(android.Manifest.permission.WRITE_MEDIA_VIDEO); + newPermissions.add(android.Manifest.permission.READ_MEDIA_IMAGES); + newPermissions.add(android.Manifest.permission.WRITE_MEDIA_IMAGES); + newPermissions.add(android.Manifest.permission.ACCESS_MEDIA_LOCATION); + newPermissions.add(android.Manifest.permission.WRITE_OBB); + + final ArraySet<String> dangerousPermissions = new ArraySet<>(); + dangerousPermissions.add(android.Manifest.permission.READ_EXTERNAL_STORAGE); + dangerousPermissions.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE); + + for (int i = pkg.permissions.size() - 1; i >= 0; i--) { + final Permission p = pkg.permissions.get(i); + if (newPermissions.contains(p.info.name)) { + pkg.permissions.remove(i); + } else if (dangerousPermissions.contains(p.info.name)) { + p.info.protectionLevel &= ~PermissionInfo.PROTECTION_MASK_BASE; + p.info.protectionLevel |= PermissionInfo.PROTECTION_DANGEROUS; + } + } + } + } + return pkg; } @@ -3344,6 +3405,7 @@ public class PackageParser { * When adding new features, carefully consider if they should also be * supported by split APKs. */ + @UnsupportedAppUsage private boolean parseBaseApplication(Package owner, Resources res, XmlResourceParser parser, int flags, String[] outError) throws XmlPullParserException, IOException { @@ -5701,6 +5763,7 @@ public class PackageParser { } @Nullable + @UnsupportedAppUsage public final Signature[] signatures; @SignatureSchemeVersion public final int signatureSchemeVersion; @@ -6166,28 +6229,33 @@ public class PackageParser { private Signature[] mPastSigningCertificates; private int[] mPastSigningCertificatesFlags; + @UnsupportedAppUsage public Builder() { } /** get signing certificates used to sign the current APK */ + @UnsupportedAppUsage public Builder setSignatures(Signature[] signatures) { mSignatures = signatures; return this; } /** set the signature scheme version used to sign the APK */ + @UnsupportedAppUsage public Builder setSignatureSchemeVersion(int signatureSchemeVersion) { mSignatureSchemeVersion = signatureSchemeVersion; return this; } /** set the signing certificates by which the APK proved it can be authenticated */ + @UnsupportedAppUsage public Builder setPastSigningCertificates(Signature[] pastSigningCertificates) { mPastSigningCertificates = pastSigningCertificates; return this; } /** set the flags for the {@code pastSigningCertificates} */ + @UnsupportedAppUsage public Builder setPastSigningCertificatesFlags(int[] pastSigningCertificatesFlags) { mPastSigningCertificatesFlags = pastSigningCertificatesFlags; return this; @@ -6216,6 +6284,7 @@ public class PackageParser { } } /** build a {@code SigningDetails} object */ + @UnsupportedAppUsage public SigningDetails build() throws CertificateException { checkInvariants(); @@ -6231,6 +6300,7 @@ public class PackageParser { */ public final static class Package implements Parcelable { + @UnsupportedAppUsage public String packageName; // The package name declared in the manifest as the package can be @@ -6274,18 +6344,28 @@ public class PackageParser { public boolean baseHardwareAccelerated; // For now we only support one application per package. + @UnsupportedAppUsage public ApplicationInfo applicationInfo = new ApplicationInfo(); + @UnsupportedAppUsage public final ArrayList<Permission> permissions = new ArrayList<Permission>(0); + @UnsupportedAppUsage public final ArrayList<PermissionGroup> permissionGroups = new ArrayList<PermissionGroup>(0); + @UnsupportedAppUsage public final ArrayList<Activity> activities = new ArrayList<Activity>(0); + @UnsupportedAppUsage public final ArrayList<Activity> receivers = new ArrayList<Activity>(0); + @UnsupportedAppUsage public final ArrayList<Provider> providers = new ArrayList<Provider>(0); + @UnsupportedAppUsage public final ArrayList<Service> services = new ArrayList<Service>(0); + @UnsupportedAppUsage public final ArrayList<Instrumentation> instrumentation = new ArrayList<Instrumentation>(0); + @UnsupportedAppUsage public final ArrayList<String> requestedPermissions = new ArrayList<String>(); + @UnsupportedAppUsage public ArrayList<String> protectedBroadcasts; public Package parentPackage; @@ -6294,11 +6374,14 @@ public class PackageParser { public String staticSharedLibName = null; public long staticSharedLibVersion = 0; public ArrayList<String> libraryNames = null; + @UnsupportedAppUsage public ArrayList<String> usesLibraries = null; public ArrayList<String> usesStaticLibraries = null; public long[] usesStaticLibrariesVersions = null; public String[][] usesStaticLibrariesCertDigests = null; + @UnsupportedAppUsage public ArrayList<String> usesOptionalLibraries = null; + @UnsupportedAppUsage public String[] usesLibraryFiles = null; public ArrayList<ActivityIntentInfo> preferredActivityFilters = null; @@ -6308,9 +6391,11 @@ public class PackageParser { public ArrayList<String> mAdoptPermissions = null; // We store the application meta-data independently to avoid multiple unwanted references + @UnsupportedAppUsage public Bundle mAppMetaData = null; // The version code declared for this package. + @UnsupportedAppUsage public int mVersionCode; // The major version code declared for this package. @@ -6322,19 +6407,24 @@ public class PackageParser { } // The version name declared for this package. + @UnsupportedAppUsage public String mVersionName; // The shared user id that this package wants to use. + @UnsupportedAppUsage public String mSharedUserId; // The shared user label that this package wants to use. + @UnsupportedAppUsage public int mSharedUserLabel; // Signatures that were read from the package. + @UnsupportedAppUsage @NonNull public SigningDetails mSigningDetails = SigningDetails.UNKNOWN; // For use by package manager service for quick lookup of // preferred up order. + @UnsupportedAppUsage public int mPreferredOrder = 0; // For use by package manager to keep track of when a package was last used. @@ -6348,17 +6438,21 @@ public class PackageParser { // public boolean mSetStopped = false; // Additional data supplied by callers. + @UnsupportedAppUsage public Object mExtras; // Applications hardware preferences + @UnsupportedAppUsage public ArrayList<ConfigurationInfo> configPreferences = null; // Applications requested features + @UnsupportedAppUsage public ArrayList<FeatureInfo> reqFeatures = null; // Applications requested feature groups public ArrayList<FeatureGroupInfo> featureGroups = null; + @UnsupportedAppUsage public int installLocation; public boolean coreApp; @@ -6383,7 +6477,9 @@ public class PackageParser { /** * Data used to feed the KeySetManagerService */ + @UnsupportedAppUsage public ArraySet<String> mUpgradeKeySets; + @UnsupportedAppUsage public ArrayMap<String, ArraySet<PublicKey>> mKeySetMapping; /** @@ -6409,6 +6505,7 @@ public class PackageParser { /** Whether or not the package is a stub and must be replaced by the full version. */ public boolean isStub; + @UnsupportedAppUsage public Package(String packageName) { this.packageName = packageName; this.manifestPackageName = packageName; @@ -6606,6 +6703,7 @@ public class PackageParser { return paths; } + @UnsupportedAppUsage public void setPackageName(String newName) { packageName = newName; applicationInfo.packageName = newName; @@ -7094,10 +7192,14 @@ public class PackageParser { } public static abstract class Component<II extends IntentInfo> { + @UnsupportedAppUsage public final ArrayList<II> intents; + @UnsupportedAppUsage public final String className; + @UnsupportedAppUsage public Bundle metaData; + @UnsupportedAppUsage public Package owner; /** The order of this component in relation to its peers */ public int order; @@ -7160,6 +7262,7 @@ public class PackageParser { componentShortName = clone.componentShortName; } + @UnsupportedAppUsage public ComponentName getComponentName() { if (componentName != null) { return componentName; @@ -7263,8 +7366,11 @@ public class PackageParser { } public final static class Permission extends Component<IntentInfo> implements Parcelable { + @UnsupportedAppUsage public final PermissionInfo info; + @UnsupportedAppUsage public boolean tree; + @UnsupportedAppUsage public PermissionGroup group; public Permission(Package _owner) { @@ -7272,6 +7378,7 @@ public class PackageParser { info = new PermissionInfo(); } + @UnsupportedAppUsage public Permission(Package _owner, PermissionInfo _info) { super(_owner); info = _info; @@ -7330,6 +7437,7 @@ public class PackageParser { } public final static class PermissionGroup extends Component<IntentInfo> implements Parcelable { + @UnsupportedAppUsage public final PermissionGroupInfo info; public PermissionGroup(Package _owner) { @@ -7420,6 +7528,7 @@ public class PackageParser { return false; } + @UnsupportedAppUsage public static ApplicationInfo generateApplicationInfo(Package p, int flags, PackageUserState state) { return generateApplicationInfo(p, flags, state, UserHandle.getCallingUserId()); @@ -7475,6 +7584,7 @@ public class PackageParser { ai.resourceDirs = state.overlayPaths; } + @UnsupportedAppUsage public static ApplicationInfo generateApplicationInfo(Package p, int flags, PackageUserState state, int userId) { if (p == null) return null; @@ -7532,6 +7642,7 @@ public class PackageParser { return ai; } + @UnsupportedAppUsage public static final PermissionInfo generatePermissionInfo( Permission p, int flags) { if (p == null) return null; @@ -7543,6 +7654,7 @@ public class PackageParser { return pi; } + @UnsupportedAppUsage public static final PermissionGroupInfo generatePermissionGroupInfo( PermissionGroup pg, int flags) { if (pg == null) return null; @@ -7555,6 +7667,7 @@ public class PackageParser { } public final static class Activity extends Component<ActivityIntentInfo> implements Parcelable { + @UnsupportedAppUsage public final ActivityInfo info; private boolean mHasMaxAspectRatio; @@ -7638,6 +7751,7 @@ public class PackageParser { }; } + @UnsupportedAppUsage public static final ActivityInfo generateActivityInfo(Activity a, int flags, PackageUserState state, int userId) { if (a == null) return null; @@ -7669,6 +7783,7 @@ public class PackageParser { } public final static class Service extends Component<ServiceIntentInfo> implements Parcelable { + @UnsupportedAppUsage public final ServiceInfo info; public Service(final ParseComponentArgs args, final ServiceInfo _info) { @@ -7728,6 +7843,7 @@ public class PackageParser { }; } + @UnsupportedAppUsage public static final ServiceInfo generateServiceInfo(Service s, int flags, PackageUserState state, int userId) { if (s == null) return null; @@ -7746,7 +7862,9 @@ public class PackageParser { } public final static class Provider extends Component<ProviderIntentInfo> implements Parcelable { + @UnsupportedAppUsage public final ProviderInfo info; + @UnsupportedAppUsage public boolean syncable; public Provider(final ParseComponentArgs args, final ProviderInfo _info) { @@ -7756,6 +7874,7 @@ public class PackageParser { syncable = false; } + @UnsupportedAppUsage public Provider(Provider existingProvider) { super(existingProvider); this.info = existingProvider.info; @@ -7822,6 +7941,7 @@ public class PackageParser { }; } + @UnsupportedAppUsage public static final ProviderInfo generateProviderInfo(Provider p, int flags, PackageUserState state, int userId) { if (p == null) return null; @@ -7846,6 +7966,7 @@ public class PackageParser { public final static class Instrumentation extends Component<IntentInfo> implements Parcelable { + @UnsupportedAppUsage public final InstrumentationInfo info; public Instrumentation(final ParsePackageItemArgs args, final InstrumentationInfo _info) { @@ -7903,6 +8024,7 @@ public class PackageParser { }; } + @UnsupportedAppUsage public static final InstrumentationInfo generateInstrumentationInfo( Instrumentation i, int flags) { if (i == null) return null; @@ -7915,14 +8037,21 @@ public class PackageParser { } public static abstract class IntentInfo extends IntentFilter { + @UnsupportedAppUsage public boolean hasDefault; + @UnsupportedAppUsage public int labelRes; + @UnsupportedAppUsage public CharSequence nonLocalizedLabel; + @UnsupportedAppUsage public int icon; + @UnsupportedAppUsage public int logo; + @UnsupportedAppUsage public int banner; public int preferred; + @UnsupportedAppUsage protected IntentInfo() { } @@ -7951,6 +8080,7 @@ public class PackageParser { } public final static class ActivityIntentInfo extends IntentInfo { + @UnsupportedAppUsage public Activity activity; public ActivityIntentInfo(Activity _activity) { @@ -7973,6 +8103,7 @@ public class PackageParser { } public final static class ServiceIntentInfo extends IntentInfo { + @UnsupportedAppUsage public Service service; public ServiceIntentInfo(Service _service) { @@ -7995,6 +8126,7 @@ public class PackageParser { } public static final class ProviderIntentInfo extends IntentInfo { + @UnsupportedAppUsage public Provider provider; public ProviderIntentInfo(Provider provider) { @@ -8019,6 +8151,7 @@ public class PackageParser { /** * @hide */ + @UnsupportedAppUsage public static void setCompatibilityModeEnabled(boolean compatibilityModeEnabled) { sCompatibilityModeEnabled = compatibilityModeEnabled; } diff --git a/core/java/android/content/pm/PackageStats.java b/core/java/android/content/pm/PackageStats.java index 27b3506f49a7..f70ec390e90e 100644 --- a/core/java/android/content/pm/PackageStats.java +++ b/core/java/android/content/pm/PackageStats.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.app.usage.StorageStatsManager; import android.os.Parcel; import android.os.Parcelable; @@ -37,6 +38,7 @@ public class PackageStats implements Parcelable { public String packageName; /** @hide */ + @UnsupportedAppUsage public int userHandle; /** Size of the code (e.g., APK) */ diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java index de173c437916..248d523a78ef 100644 --- a/core/java/android/content/pm/PackageUserState.java +++ b/core/java/android/content/pm/PackageUserState.java @@ -28,6 +28,7 @@ import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS; import static android.content.pm.PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS; import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY; +import android.annotation.UnsupportedAppUsage; import android.os.BaseBundle; import android.os.PersistableBundle; import android.util.ArraySet; @@ -67,6 +68,7 @@ public class PackageUserState { public String[] overlayPaths; + @UnsupportedAppUsage public PackageUserState() { installed = true; hidden = false; diff --git a/core/java/android/content/pm/ParceledListSlice.java b/core/java/android/content/pm/ParceledListSlice.java index d12e8846aabb..2eef16584c9d 100644 --- a/core/java/android/content/pm/ParceledListSlice.java +++ b/core/java/android/content/pm/ParceledListSlice.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -31,6 +32,7 @@ import java.util.List; * @hide */ public class ParceledListSlice<T extends Parcelable> extends BaseParceledListSlice<T> { + @UnsupportedAppUsage public ParceledListSlice(List<T> list) { super(list); } @@ -59,6 +61,7 @@ public class ParceledListSlice<T extends Parcelable> extends BaseParceledListSli } @Override + @UnsupportedAppUsage protected void writeParcelableCreator(T parcelable, Parcel dest) { dest.writeParcelableCreator((Parcelable) parcelable); } @@ -69,6 +72,7 @@ public class ParceledListSlice<T extends Parcelable> extends BaseParceledListSli } @SuppressWarnings("unchecked") + @UnsupportedAppUsage public static final Parcelable.ClassLoaderCreator<ParceledListSlice> CREATOR = new Parcelable.ClassLoaderCreator<ParceledListSlice>() { public ParceledListSlice createFromParcel(Parcel in) { diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index 535ef00d58a1..60c06a1e4d87 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -19,6 +19,7 @@ package android.content.pm; import android.annotation.IntDef; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -322,6 +323,7 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public static String protectionToString(int level) { String protLevel = "????"; switch (level & PROTECTION_MASK_BASE) { diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java index 020e8c22b128..a8c3b889421b 100644 --- a/core/java/android/content/pm/RegisteredServicesCache.java +++ b/core/java/android/content/pm/RegisteredServicesCache.java @@ -17,6 +17,7 @@ package android.content.pm; import android.Manifest; +import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -145,6 +146,7 @@ public abstract class RegisteredServicesCache<V> { private RegisteredServicesCacheListener<V> mListener; private Handler mHandler; + @UnsupportedAppUsage public RegisteredServicesCache(Context context, String interfaceName, String metaDataName, String attributeName, XmlSerializerAndParser<V> serializerAndParser) { mContext = context; @@ -299,9 +301,12 @@ public abstract class RegisteredServicesCache<V> { * to bind to the service. */ public static class ServiceInfo<V> { + @UnsupportedAppUsage public final V type; public final ComponentInfo componentInfo; + @UnsupportedAppUsage public final ComponentName componentName; + @UnsupportedAppUsage public final int uid; /** @hide */ diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java index fc2eba282352..701c5dbc8398 100644 --- a/core/java/android/content/pm/ResolveInfo.java +++ b/core/java/android/content/pm/ResolveInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.IntentFilter; import android.graphics.drawable.Drawable; @@ -149,6 +150,7 @@ public class ResolveInfo implements Parcelable { * If not equal to UserHandle.USER_CURRENT, then the intent will be forwarded to this user. * @hide */ + @UnsupportedAppUsage public int targetUserId; /** @@ -169,14 +171,17 @@ public class ResolveInfo implements Parcelable { /** * @hide Target comes from system process? */ + @UnsupportedAppUsage public boolean system; /** * @hide Does the associated IntentFilter comes from a Browser ? */ + @UnsupportedAppUsage public boolean handleAllWebDataURI; /** {@hide} */ + @UnsupportedAppUsage public ComponentInfo getComponentInfo() { if (activityInfo != null) return activityInfo; if (serviceInfo != null) return serviceInfo; diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index ea476b0abf33..546c21331dbd 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -19,6 +19,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.app.TaskStackBuilder; import android.content.ComponentName; @@ -1242,6 +1243,7 @@ public final class ShortcutInfo implements Parcelable { * @hide */ @Nullable + @UnsupportedAppUsage public Icon getIcon() { return mIcon; } diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java index 25e0ccd8d551..60ac1f08ba66 100644 --- a/core/java/android/content/pm/ShortcutManager.java +++ b/core/java/android/content/pm/ShortcutManager.java @@ -19,8 +19,8 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; -import android.app.Activity; import android.app.usage.UsageStatsManager; import android.content.Context; import android.content.Intent; @@ -29,256 +29,23 @@ import android.graphics.drawable.AdaptiveIconDrawable; import android.os.Build.VERSION_CODES; import android.os.RemoteException; import android.os.ServiceManager; -import android.os.UserHandle; import com.android.internal.annotations.VisibleForTesting; import java.util.List; /** - * The ShortcutManager performs operations on an app's set of <em>shortcuts</em>. The - * {@link ShortcutInfo} class contains information about each of the shortcuts themselves. + * <p><code>ShortcutManager</code> executes operations on an app's set of <i>shortcuts</i>, which + * represent specific tasks and actions that users can perform within your app. This page lists + * components of the <code>ShortcutManager</code> class that you can use to create and manage + * sets of shortcuts. * - * <p>An app's shortcuts represent specific tasks and actions that users can perform within your - * app. When a user selects a shortcut in the currently-active launcher, your app opens an activity - * other than the app's starting activity, provided that the currently-active launcher supports app - * shortcuts.</p> + * <p>To learn about methods that retrieve information about a single shortcut—including + * identifiers, type, and status—read the <code> + * <a href="/reference/android/content/pm/ShortcutInfo.html">ShortcutInfo</a></code> reference. * - * <p>The types of shortcuts that you create for your app depend on the app's key use cases. For - * example, an email app may publish the "compose new email" shortcut, which allows the app to - * directly open the compose activity.</p> - * - * <p class="note"><b>Note:</b> Only main activities—activities that handle the - * {@link Intent#ACTION_MAIN} action and the {@link Intent#CATEGORY_LAUNCHER} category—can - * have shortcuts. If an app has multiple main activities, you need to define the set of shortcuts - * for <em>each</em> activity. - * - * <p>This page discusses the implementation details of the <code>ShortcutManager</code> class. For - * definitions of key terms and guidance on performing operations on shortcuts within your app, see - * the <a href="/guide/topics/ui/shortcuts.html">App Shortcuts</a> feature guide. - * - * <h3>Shortcut characteristics</h3> - * - * This section describes in-depth details about each shortcut type's usage and availability. - * - * <p class="note"><b>Important security note:</b> All shortcut information is stored in - * <a href="/training/articles/direct-boot.html">credential encrypted storage</a>, so your app - * cannot access a user's shortcuts until after they've unlocked the device. - * - * <h4>Static and dynamic shortcuts</h4> - * - * <p>Static shortcuts and dynamic shortcuts are shown in a supported launcher when the user - * performs a specific gesture. On currently-supported launchers, the gesture is a long-press on the - * app's launcher icon, but the actual gesture may be different on other launcher apps. - * - * <p>The {@link LauncherApps} class provides APIs for launcher apps to access shortcuts. - * - * <h4>Pinned shortcuts</h4> - * - * <p>Because pinned shortcuts appear in the launcher itself, they're always visible. A pinned - * shortcut is removed from the launcher only in the following situations: - * <ul> - * <li>The user removes it. - * <li>The publisher app associated with the shortcut is uninstalled. - * <li>The user selects <b>Clear data</b> from the publisher app's <i>Storage</i> screen, within - * the system's <b>Settings</b> app. - * </ul> - * - * <p>Because the system performs - * <a href="/guide/topics/ui/shortcuts.html#backup-and-restore">backup and restore</a> on pinned - * shortcuts automatically, these shortcuts' IDs should contain either stable, constant strings or - * server-side identifiers, rather than identifiers generated locally that might not make sense on - * other devices. - * - * <h3>Shortcut display order</h3> - * - * <p>When the launcher displays an app's shortcuts, they should appear in the following order: - * - * <ol> - * <li><b>Static shortcuts:</b> Shortcuts whose {@link ShortcutInfo#isDeclaredInManifest()} method - * returns {@code true}.</li> - * <li><b>Dynamic shortcuts:</b> Shortcuts whose {@link ShortcutInfo#isDynamic()} method returns - * {@code true}.</li> - * </ol> - * - * <p>Within each shortcut type (static and dynamic), shortcuts are sorted in order of increasing - * rank according to {@link ShortcutInfo#getRank()}.</p> - * - * <h4>Shortcut ranks</h4> - * - * <p>Shortcut ranks are non-negative, sequential integers that determine the order in which - * shortcuts appear, assuming that the shortcuts are all in the same category. You can update ranks - * of existing shortcuts when you call {@link #updateShortcuts(List)}, - * {@link #addDynamicShortcuts(List)}, or {@link #setDynamicShortcuts(List)}. - * - * <p class="note"><b>Note:</b> Ranks are auto-adjusted so that they're unique for each type of - * shortcut (static or dynamic). For example, if there are 3 dynamic shortcuts with ranks 0, 1 and - * 2, adding another dynamic shortcut with a rank of 1 represents a request to place this shortcut - * at the second position. In response, the third and fourth shortcuts move closer to the bottom of - * the shortcut list, with their ranks changing to 2 and 3, respectively. - * - * <h3>Options for static shortcuts</h3> - * - * The following list includes descriptions for the different attributes within a static shortcut. - * You must provide a value for {@code android:shortcutId} and {@code android:shortcutShortLabel}; - * all other values are optional. - * - * <dl> - * <dt>{@code android:shortcutId}</dt> - * <dd><p>A string literal, which represents the shortcut when a {@code ShortcutManager} object - * performs operations on it.</p> - * <p class="note"><b>Note: </b>You cannot set this attribute's value to a resource string, such - * as <code>@string/foo</code>.</p> - * </dd> - * - * <dt>{@code android:enabled}</dt> - * <dd><p>Whether the user can interact with the shortcut from a supported launcher.</p> - * <p>The default value is {@code true}. If you set it to {@code false}, you should also set - * {@code android:shortcutDisabledMessage} to a message that explains why you've disabled the - * shortcut. If you don't think you need to provide such a message, it's easiest to just remove - * the shortcut from the XML file entirely, rather than changing the values of the shortcut's - * {@code android:enabled} and {@code android:shortcutDisabledMessage} attributes. - * </dd> - * - * <dt>{@code android:icon}</dt> - * <dd><p>The <a href="/topic/performance/graphics/index.html">bitmap</a> or - * <a href="/guide/practices/ui_guidelines/icon_design_adaptive.html">adaptive icon</a> that the - * launcher uses when displaying the shortcut to the user. This value can be either the path to an - * image or the resource file that contains the image. Use adaptive icons whenever possible to - * improve performance and consistency.</p> - * <p class="note"><b>Note: </b>Shortcut icons cannot include - * <a href="/training/material/drawables.html#DrawableTint">tints</a>. - * </dd> - * - * <dt>{@code android:shortcutShortLabel}</dt> - * <dd><p>A concise phrase that describes the shortcut's purpose. For more information, see - * {@link ShortcutInfo.Builder#setShortLabel(CharSequence)}.</p> - * <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as - * <code>@string/shortcut_short_label</code>.</p> - * </dd> - * - * <dt>{@code android:shortcutLongLabel}</dt> - * <dd><p>An extended phrase that describes the shortcut's purpose. If there's enough space, the - * launcher displays this value instead of {@code android:shortcutShortLabel}. For more - * information, see {@link ShortcutInfo.Builder#setLongLabel(CharSequence)}.</p> - * <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as - * <code>@string/shortcut_long_label</code>.</p> - * </dd> - * - * <dt>{@code android:shortcutDisabledMessage}</dt> - * <dd><p>The message that appears in a supported launcher when the user attempts to launch a - * disabled shortcut. The message should explain to the user why the shortcut is now disabled. - * This attribute's value has no effect if {@code android:enabled} is {@code true}.</p> - * <p class="note"><b>Note: </b>This attribute's value must be a resource string, such as - * <code>@string/shortcut_disabled_message</code>.</p> - * </dd> - * </dl> - * - * <h3>Inner elements that define static shortcuts</h3> - * - * <p>The XML file that lists an app's static shortcuts supports the following elements inside each - * {@code <shortcut>} element. You must include an {@code intent} inner element for each - * static shortcut that you define.</p> - * - * <dl> - * <dt>{@code intent}</dt> - * <dd><p>The action that the system launches when the user selects the shortcut. This intent must - * provide a value for the {@code android:action} attribute.</p> - * <p>You can provide multiple intents for a single shortcut. If you do so, the last defined - * activity is launched, and the other activities are placed in the - * <a href="/guide/components/tasks-and-back-stack.html">back stack</a>. See - * <a href="/guide/topics/ui/shortcuts.html#static">Using Static Shortcuts</a> and the - * {@link android.app.TaskStackBuilder} class reference for details.</p> - * <p class="note"><b>Note:</b> This {@code intent} element cannot include string resources.</p> - * <p>To learn more about how to configure intents, see - * <a href="{@docRoot}guide/topics/ui/settings.html#Intents">Using intents</a>.</p> - * </dd> - * - * <dt>{@code categories}</dt> - * <dd><p>Provides a grouping for the types of actions that your app's shortcuts perform, such as - * creating new chat messages.</p> - * <p>For a list of supported shortcut categories, see the {@link ShortcutInfo} class reference - * for a list of supported shortcut categories. - * </dd> - * </dl> - * - * <h3>Updating shortcuts</h3> - * - * <p>Each app's launcher icon can contain at most {@link #getMaxShortcutCountPerActivity()} number - * of static and dynamic shortcuts combined. There is no limit to the number of pinned shortcuts - * that an app can create, though. - * - * <p>When a dynamic shortcut is pinned, even when the publisher removes it as a dynamic shortcut, - * the pinned shortcut is still visible and launchable. This allows an app to have more than - * {@link #getMaxShortcutCountPerActivity()} number of shortcuts. - * - * <p>As an example, suppose {@link #getMaxShortcutCountPerActivity()} is 5: - * <ol> - * <li>A chat app publishes 5 dynamic shortcuts for the 5 most recent - * conversations (c1, c2, ..., c5). - * - * <li>The user pins all 5 of the shortcuts. - * - * <li>Later, the user has started 3 additional conversations (c6, c7, and c8), so the publisher - * app re-publishes its dynamic shortcuts. The new dynamic shortcut list is: c4, c5, ..., c8. - * <p>The publisher app has to remove c1, c2, and c3 because it can't have more than 5 dynamic - * shortcuts. However, c1, c2, and c3 are still pinned shortcuts that the user can access and - * launch. - * <p>At this point, the user can access a total of 8 shortcuts that link to activities in the - * publisher app, including the 3 pinned shortcuts, even though an app can have at most 5 - * dynamic shortcuts. - * - * <li>The app can use {@link #updateShortcuts(List)} to update <em>any</em> of the existing - * 8 shortcuts, when, for example, the chat peers' icons have changed. - * <p>The {@link #addDynamicShortcuts(List)} and {@link #setDynamicShortcuts(List)} methods - * can also be used to update existing shortcuts with the same IDs, but they <b>cannot</b> be - * used for updating non-dynamic, pinned shortcuts because these 2 methods try to convert the - * given lists of shortcuts to dynamic shortcuts. - * </ol> - * - * <h3>Shortcut intents</h3> - * - * <p> - * Dynamic shortcuts can be published with any set of {@link Intent#addFlags Intent} flags. - * Typically, {@link Intent#FLAG_ACTIVITY_CLEAR_TASK} is specified, possibly along with other - * flags; otherwise, if the app is already running, the app is simply brought to - * the foreground, and the target activity might not appear. - * - * <p>Static shortcuts <b>cannot</b> have custom intent flags. - * The first intent of a static shortcut will always have {@link Intent#FLAG_ACTIVITY_NEW_TASK} - * and {@link Intent#FLAG_ACTIVITY_CLEAR_TASK} set. This means, when the app is already running, all - * the existing activities in your app are destroyed when a static shortcut is launched. - * If this behavior is not desirable, you can use a <em>trampoline activity</em>, or an invisible - * activity that starts another activity in {@link Activity#onCreate}, then calls - * {@link Activity#finish()}: - * <ol> - * <li>In the <code>AndroidManifest.xml</code> file, the trampoline activity should include the - * attribute assignment {@code android:taskAffinity=""}. - * <li>In the shortcuts resource file, the intent within the static shortcut should reference - * the trampoline activity. - * </ol> - * - * <h3>Rate limiting</h3> - * - * <p>When <a href="/guide/topics/ui/shortcuts.html#rate-limit">rate limiting</a> is active, - * {@link #isRateLimitingActive()} returns {@code true}. - * - * <p>Rate limiting is reset upon certain events, so even background apps can call these APIs until - * the rate limit is reached again. These events include the following: - * <ul> - * <li>An app comes to the foreground. - * <li>The system locale changes. - * <li>The user performs the <a href="/guide/topics/ui/notifiers/notifications.html#direct">inline - * reply</a> action on a notification. - * </ul> - * - * <h3>Handling system locale changes</h3> - * - * <p>Apps should update dynamic and pinned shortcuts when they receive the - * {@link Intent#ACTION_LOCALE_CHANGED} broadcast, indicating that the system locale has changed. - * <p>When the system locale changes, <a href="/guide/topics/ui/shortcuts.html#rate-limit">rate - * limiting</a> is reset, so even background apps can add and update dynamic shortcuts until the - * rate limit is reached again. + * <p>For guidance about using shortcuts, see + * <a href="/guide/topics/ui/shortcuts/index.html">App shortcuts</a>. * * <h3>Retrieving class instances</h3> * <!-- Provides a heading for the content filled in by the @SystemService annotation below --> @@ -288,6 +55,7 @@ public class ShortcutManager { private static final String TAG = "ShortcutManager"; private final Context mContext; + @UnsupportedAppUsage private final IShortcutService mService; /** @@ -458,8 +226,9 @@ public class ShortcutManager { } /** - * Disable pinned shortcuts. For more details, see the Javadoc for the {@link ShortcutManager} - * class. + * Disable pinned shortcuts. For more details, read + * <a href="/guide/topics/ui/shortcuts/managing-shortcuts.html#disable-shortcuts"> + * Disable shortcuts</a>. * * @throws IllegalArgumentException If trying to disable immutable shortcuts. * @@ -498,7 +267,9 @@ public class ShortcutManager { /** * Disable pinned shortcuts, showing the user a custom error message when they try to select * the disabled shortcuts. - * For more details, see the Javadoc for the {@link ShortcutManager} class. + * For more details, read + * <a href="/guide/topics/ui/shortcuts/managing-shortcuts.html#disable-shortcuts"> + * Disable shortcuts</a>. * * @throws IllegalArgumentException If trying to disable immutable shortcuts. * @@ -586,7 +357,8 @@ public class ShortcutManager { /** * Return {@code true} when rate-limiting is active for the caller app. * - * <p>See the class level javadoc for details. + * <p>For details, see <a href="/guide/topics/ui/shortcuts/managing-shortcuts#rate-limiting"> + * Rate limiting</a>. * * @throws IllegalStateException when the user is locked. */ @@ -632,7 +404,9 @@ public class ShortcutManager { * Apps that publish shortcuts should call this method whenever the user * selects the shortcut containing the given ID or when the user completes * an action in the app that is equivalent to selecting the shortcut. - * For more details, see the Javadoc for the {@link ShortcutManager} class + * For more details, read about + * <a href="/guide/topics/ui/shortcuts/managing-shortcuts.html#track-usage"> + * tracking shortcut usage</a>. * * <p>The information is accessible via {@link UsageStatsManager#queryEvents} * Typically, launcher apps use this information to build a prediction model @@ -700,7 +474,9 @@ public class ShortcutManager { * @param resultIntent If not null, this intent will be sent when the shortcut is pinned. * Use {@link android.app.PendingIntent#getIntentSender()} to create an {@link IntentSender}. * To avoid background execution limits, use an unexported, manifest-declared receiver. - * For more details, see the overview documentation for the {@link ShortcutManager} class. + * For more details, see + * <a href="/guide/topics/ui/shortcuts/creating-shortcuts.html#pinned"> + * Creating pinned shortcuts</a>. * * @return {@code TRUE} if the launcher supports this feature. Note the API will return without * waiting for the user to respond, so getting {@code TRUE} from this API does *not* mean diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java index a2a14eddd59f..e58ca609f1a8 100644 --- a/core/java/android/content/pm/Signature.java +++ b/core/java/android/content/pm/Signature.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -170,6 +171,7 @@ public class Signature implements Parcelable { * certificate; shouldn't happen. * @hide */ + @UnsupportedAppUsage public PublicKey getPublicKey() throws CertificateException { final CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); final ByteArrayInputStream bais = new ByteArrayInputStream(mSignature); diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index f34b590e693c..b75ed35c36aa 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemProperties; @@ -41,6 +42,7 @@ public class UserInfo implements Parcelable { * Primary user. Only one user can have this flag set. It identifies the first human user * on a device. */ + @UnsupportedAppUsage public static final int FLAG_PRIMARY = 0x00000001; /** @@ -94,12 +96,19 @@ public class UserInfo implements Parcelable { public static final int NO_PROFILE_GROUP_ID = UserHandle.USER_NULL; + @UnsupportedAppUsage public int id; + @UnsupportedAppUsage public int serialNumber; + @UnsupportedAppUsage public String name; + @UnsupportedAppUsage public String iconPath; + @UnsupportedAppUsage public int flags; + @UnsupportedAppUsage public long creationTime; + @UnsupportedAppUsage public long lastLoggedInTime; public String lastLoggedInFingerprint; /** @@ -107,19 +116,24 @@ public class UserInfo implements Parcelable { * If this user is a child user, it would be its parent user id. * Otherwise, it would be {@link #NO_PROFILE_GROUP_ID}. */ + @UnsupportedAppUsage public int profileGroupId; public int restrictedProfileParentId; /** Which profile badge color/label to use. */ public int profileBadge; /** User is only partially created. */ + @UnsupportedAppUsage public boolean partial; + @UnsupportedAppUsage public boolean guestToRemove; + @UnsupportedAppUsage public UserInfo(int id, String name, int flags) { this(id, name, null, flags); } + @UnsupportedAppUsage public UserInfo(int id, String name, String iconPath, int flags) { this.id = id; this.name = name; @@ -129,26 +143,32 @@ public class UserInfo implements Parcelable { this.restrictedProfileParentId = NO_PROFILE_GROUP_ID; } + @UnsupportedAppUsage public boolean isPrimary() { return (flags & FLAG_PRIMARY) == FLAG_PRIMARY; } + @UnsupportedAppUsage public boolean isAdmin() { return (flags & FLAG_ADMIN) == FLAG_ADMIN; } + @UnsupportedAppUsage public boolean isGuest() { return (flags & FLAG_GUEST) == FLAG_GUEST; } + @UnsupportedAppUsage public boolean isRestricted() { return (flags & FLAG_RESTRICTED) == FLAG_RESTRICTED; } + @UnsupportedAppUsage public boolean isManagedProfile() { return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE; } + @UnsupportedAppUsage public boolean isEnabled() { return (flags & FLAG_DISABLED) != FLAG_DISABLED; } @@ -238,6 +258,7 @@ public class UserInfo implements Parcelable { profileBadge = orig.profileBadge; } + @UnsupportedAppUsage public UserHandle getUserHandle() { return new UserHandle(id); } @@ -267,6 +288,7 @@ public class UserInfo implements Parcelable { dest.writeInt(profileBadge); } + @UnsupportedAppUsage public static final Parcelable.Creator<UserInfo> CREATOR = new Parcelable.Creator<UserInfo>() { public UserInfo createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/VerifierInfo.java b/core/java/android/content/pm/VerifierInfo.java index 0a2b2832d319..b4e72e6659d0 100644 --- a/core/java/android/content/pm/VerifierInfo.java +++ b/core/java/android/content/pm/VerifierInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -43,6 +44,7 @@ public class VerifierInfo implements Parcelable { * not be {@code null} or empty. * @throws IllegalArgumentException if either argument is null or empty. */ + @UnsupportedAppUsage public VerifierInfo(String packageName, PublicKey publicKey) { if (packageName == null || packageName.length() == 0) { throw new IllegalArgumentException("packageName must not be null or empty"); diff --git a/core/java/android/content/pm/XmlSerializerAndParser.java b/core/java/android/content/pm/XmlSerializerAndParser.java index 20cb61c2ff2d..6d24800edb07 100644 --- a/core/java/android/content/pm/XmlSerializerAndParser.java +++ b/core/java/android/content/pm/XmlSerializerAndParser.java @@ -20,10 +20,13 @@ import org.xmlpull.v1.XmlSerializer; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; +import android.annotation.UnsupportedAppUsage; import java.io.IOException; /** @hide */ public interface XmlSerializerAndParser<T> { + @UnsupportedAppUsage void writeAsXml(T item, XmlSerializer out) throws IOException; + @UnsupportedAppUsage T createFromXml(XmlPullParser parser) throws IOException, XmlPullParserException; } diff --git a/core/java/android/content/res/ApkAssets.java b/core/java/android/content/res/ApkAssets.java index 9de8be3e86af..dc1d052da64f 100644 --- a/core/java/android/content/res/ApkAssets.java +++ b/core/java/android/content/res/ApkAssets.java @@ -16,6 +16,7 @@ package android.content.res; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; @@ -125,6 +126,7 @@ public final class ApkAssets { mStringBlock = new StringBlock(nativeGetStringBlock(mNativePtr), true /*useSparse*/); } + @UnsupportedAppUsage public @NonNull String getAssetPath() { synchronized (this) { return nativeGetAssetPath(mNativePtr); diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java index be4103622b11..b6cbf08e5e78 100644 --- a/core/java/android/content/res/AssetFileDescriptor.java +++ b/core/java/android/content/res/AssetFileDescriptor.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.os.Bundle; import android.os.Parcel; import android.os.ParcelFileDescriptor; @@ -40,8 +41,11 @@ public class AssetFileDescriptor implements Parcelable, Closeable { */ public static final long UNKNOWN_LENGTH = -1; + @UnsupportedAppUsage private final ParcelFileDescriptor mFd; + @UnsupportedAppUsage private final long mStartOffset; + @UnsupportedAppUsage private final long mLength; private final Bundle mExtras; diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 289534273d13..0350effd84b8 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.StyleRes; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.res.Configuration.NativeConfig; import android.os.ParcelFileDescriptor; @@ -65,6 +66,7 @@ public final class AssetManager implements AutoCloseable { private static final ApkAssets[] sEmptyApkAssets = new ApkAssets[0]; // Not private for LayoutLib's BridgeAssetManager. + @UnsupportedAppUsage @GuardedBy("sSync") static AssetManager sSystem = null; @GuardedBy("sSync") private static ApkAssets[] sSystemApkAssets = new ApkAssets[0]; @@ -95,6 +97,7 @@ public final class AssetManager implements AutoCloseable { @GuardedBy("this") private final long[] mOffsets = new long[2]; // Pointer to native implementation, stuffed inside a long. + @UnsupportedAppUsage @GuardedBy("this") private long mObject; // The loaded asset paths. @@ -152,6 +155,7 @@ public final class AssetManager implements AutoCloseable { * use by applications. * @hide */ + @UnsupportedAppUsage public AssetManager() { final ApkAssets[] assets; synchronized (sSync) { @@ -249,6 +253,7 @@ public final class AssetManager implements AutoCloseable { * system assets (no application assets). * @hide */ + @UnsupportedAppUsage public static AssetManager getSystem() { synchronized (sSync) { createSystemAssetsInZygoteLocked(); @@ -328,6 +333,7 @@ public final class AssetManager implements AutoCloseable { * returns a 0-length array. * @hide */ + @UnsupportedAppUsage public @NonNull ApkAssets[] getApkAssets() { synchronized (this) { if (mOpen) { @@ -362,6 +368,7 @@ public final class AssetManager implements AutoCloseable { * @hide */ @Deprecated + @UnsupportedAppUsage public int addAssetPath(String path) { return addAssetPathInternal(path, false /*overlay*/, false /*appAsLib*/); } @@ -371,6 +378,7 @@ public final class AssetManager implements AutoCloseable { * @hide */ @Deprecated + @UnsupportedAppUsage public int addAssetPathAsSharedLibrary(String path) { return addAssetPathInternal(path, false /*overlay*/, true /*appAsLib*/); } @@ -380,6 +388,7 @@ public final class AssetManager implements AutoCloseable { * @hide */ @Deprecated + @UnsupportedAppUsage public int addOverlayPath(String path) { return addAssetPathInternal(path, true /*overlay*/, false /*appAsLib*/); } @@ -457,6 +466,7 @@ public final class AssetManager implements AutoCloseable { * @return {@code true} if the data was loaded into {@code outValue}, * {@code false} otherwise */ + @UnsupportedAppUsage boolean getResourceValue(@AnyRes int resId, int densityDpi, @NonNull TypedValue outValue, boolean resolveRefs) { Preconditions.checkNotNull(outValue, "outValue"); @@ -486,6 +496,7 @@ public final class AssetManager implements AutoCloseable { * @param resId the resource identifier to load * @return the string value, or {@code null} */ + @UnsupportedAppUsage @Nullable CharSequence getResourceText(@StringRes int resId) { synchronized (this) { final TypedValue outValue = mValue; @@ -504,6 +515,7 @@ public final class AssetManager implements AutoCloseable { * @param bagEntryId the index into the bag to load * @return the string value, or {@code null} */ + @UnsupportedAppUsage @Nullable CharSequence getResourceBagText(@StringRes int resId, int bagEntryId) { synchronized (this) { ensureValidLocked(); @@ -665,6 +677,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage @Nullable String getResourceName(@AnyRes int resId) { synchronized (this) { ensureValidLocked(); @@ -672,6 +685,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage @Nullable String getResourcePackageName(@AnyRes int resId) { synchronized (this) { ensureValidLocked(); @@ -679,6 +693,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage @Nullable String getResourceTypeName(@AnyRes int resId) { synchronized (this) { ensureValidLocked(); @@ -686,6 +701,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage @Nullable String getResourceEntryName(@AnyRes int resId) { synchronized (this) { ensureValidLocked(); @@ -693,6 +709,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage @AnyRes int getResourceIdentifier(@NonNull String name, @Nullable String defType, @Nullable String defPackage) { synchronized (this) { @@ -804,6 +821,7 @@ public final class AssetManager implements AutoCloseable { * @see #open(String) * @hide */ + @UnsupportedAppUsage public @NonNull InputStream openNonAsset(@NonNull String fileName) throws IOException { return openNonAsset(0, fileName, ACCESS_STREAMING); } @@ -824,6 +842,7 @@ public final class AssetManager implements AutoCloseable { * @see #open(String, int) * @hide */ + @UnsupportedAppUsage public @NonNull InputStream openNonAsset(@NonNull String fileName, int accessMode) throws IOException { return openNonAsset(0, fileName, accessMode); @@ -836,6 +855,7 @@ public final class AssetManager implements AutoCloseable { * @param fileName Name of the asset to retrieve. * @hide */ + @UnsupportedAppUsage public @NonNull InputStream openNonAsset(int cookie, @NonNull String fileName) throws IOException { return openNonAsset(cookie, fileName, ACCESS_STREAMING); @@ -849,6 +869,7 @@ public final class AssetManager implements AutoCloseable { * @param accessMode Desired access mode for retrieving the data. * @hide */ + @UnsupportedAppUsage public @NonNull InputStream openNonAsset(int cookie, @NonNull String fileName, int accessMode) throws IOException { Preconditions.checkNotNull(fileName, "fileName"); @@ -970,6 +991,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage void applyStyle(long themePtr, @AttrRes int defStyleAttr, @StyleRes int defStyleRes, @Nullable XmlBlock.Parser parser, @NonNull int[] inAttrs, long outValuesAddress, long outIndicesAddress) { @@ -984,6 +1006,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage boolean resolveAttrs(long themePtr, @AttrRes int defStyleAttr, @StyleRes int defStyleRes, @Nullable int[] inValues, @NonNull int[] inAttrs, @NonNull int[] outValues, @NonNull int[] outIndices) { @@ -999,6 +1022,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage boolean retrieveAttributes(@NonNull XmlBlock.Parser parser, @NonNull int[] inAttrs, @NonNull int[] outValues, @NonNull int[] outIndices) { Preconditions.checkNotNull(parser, "parser"); @@ -1014,6 +1038,7 @@ public final class AssetManager implements AutoCloseable { } } + @UnsupportedAppUsage long createTheme() { synchronized (this) { ensureValidLocked(); @@ -1066,6 +1091,7 @@ public final class AssetManager implements AutoCloseable { /** * @hide */ + @UnsupportedAppUsage public final int getAssetInt() { throw new UnsupportedOperationException(); } @@ -1073,6 +1099,7 @@ public final class AssetManager implements AutoCloseable { /** * @hide */ + @UnsupportedAppUsage public final long getNativeAsset() { return mAssetNativePtr; } @@ -1169,6 +1196,7 @@ public final class AssetManager implements AutoCloseable { * instantiate a new AssetManager class to see the new data. * @hide */ + @UnsupportedAppUsage public boolean isUpToDate() { for (ApkAssets apkAssets : getApkAssets()) { if (!apkAssets.isUpToDate()) { @@ -1228,6 +1256,7 @@ public final class AssetManager implements AutoCloseable { * applications. * @hide */ + @UnsupportedAppUsage public void setConfiguration(int mcc, int mnc, @Nullable String locale, int orientation, int touchscreen, int density, int keyboard, int keyboardHidden, int navigation, int screenWidth, int screenHeight, int smallestScreenWidthDp, int screenWidthDp, @@ -1244,6 +1273,7 @@ public final class AssetManager implements AutoCloseable { /** * @hide */ + @UnsupportedAppUsage public SparseArray<String> getAssignedPackageIdentifiers() { synchronized (this) { ensureValidLocked(); @@ -1367,6 +1397,7 @@ public final class AssetManager implements AutoCloseable { /** * @hide */ + @UnsupportedAppUsage public static native int getGlobalAssetCount(); /** @@ -1377,5 +1408,6 @@ public final class AssetManager implements AutoCloseable { /** * @hide */ + @UnsupportedAppUsage public static native int getGlobalAssetManagerCount(); } diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index faf238164a09..16b9726a4b15 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -30,6 +30,7 @@ import com.android.internal.util.GrowingArrayUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; +import android.annotation.UnsupportedAppUsage; import android.util.AttributeSet; import android.util.Log; import android.util.MathUtils; @@ -132,16 +133,21 @@ public class ColorStateList extends ComplexColor implements Parcelable { private static final SparseArray<WeakReference<ColorStateList>> sCache = new SparseArray<>(); /** Lazily-created factory for this color state list. */ + @UnsupportedAppUsage private ColorStateListFactory mFactory; private int[][] mThemeAttrs; private @Config int mChangingConfigurations; + @UnsupportedAppUsage private int[][] mStateSpecs; + @UnsupportedAppUsage private int[] mColors; + @UnsupportedAppUsage private int mDefaultColor; private boolean mIsOpaque; + @UnsupportedAppUsage private ColorStateList() { // Not publicly instantiable. } @@ -394,6 +400,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { * @hide only for resource preloading */ @Override + @UnsupportedAppUsage public boolean canApplyTheme() { return mThemeAttrs != null; } @@ -474,6 +481,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { * @hide only for resource preloading */ @Override + @UnsupportedAppUsage public ColorStateList obtainForTheme(Theme t) { if (t == null || !canApplyTheme()) { return this; @@ -579,6 +587,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { * @return the states in this {@link ColorStateList} * @hide */ + @UnsupportedAppUsage public int[][] getStates() { return mStateSpecs; } @@ -590,6 +599,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { * @return the colors in this {@link ColorStateList} * @hide */ + @UnsupportedAppUsage public int[] getColors() { return mColors; } @@ -634,6 +644,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { /** * Updates the default color and opacity. */ + @UnsupportedAppUsage private void onColorsChanged() { int defaultColor = DEFAULT_COLOR; boolean isOpaque = true; @@ -677,6 +688,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { private static class ColorStateListFactory extends ConstantState<ComplexColor> { private final ColorStateList mSrc; + @UnsupportedAppUsage public ColorStateListFactory(ColorStateList src) { mSrc = src; } diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index 781e23533870..1ca7b132fdab 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ApplicationInfo; import android.graphics.Canvas; import android.graphics.PointF; @@ -38,6 +39,7 @@ import android.view.WindowManager.LayoutParams; */ public class CompatibilityInfo implements Parcelable { /** default compatibility info object for compatible applications */ + @UnsupportedAppUsage public static final CompatibilityInfo DEFAULT_COMPATIBILITY_INFO = new CompatibilityInfo() { }; @@ -92,6 +94,7 @@ public class CompatibilityInfo implements Parcelable { /** * Application's scale. */ + @UnsupportedAppUsage public final float applicationScale; /** @@ -99,6 +102,7 @@ public class CompatibilityInfo implements Parcelable { */ public final float applicationInvertedScale; + @UnsupportedAppUsage public CompatibilityInfo(ApplicationInfo appInfo, int screenLayout, int sw, boolean forceCompat) { int compatFlags = 0; @@ -259,6 +263,7 @@ public class CompatibilityInfo implements Parcelable { applicationInvertedScale = invertedScale; } + @UnsupportedAppUsage private CompatibilityInfo() { this(NEVER_NEEDS_COMPAT, DisplayMetrics.DENSITY_DEVICE, 1.0f, @@ -268,10 +273,12 @@ public class CompatibilityInfo implements Parcelable { /** * @return true if the scaling is required */ + @UnsupportedAppUsage public boolean isScalingRequired() { return (mCompatibilityFlags&SCALING_REQUIRED) != 0; } + @UnsupportedAppUsage public boolean supportsScreen() { return (mCompatibilityFlags&NEEDS_SCREEN_COMPAT) == 0; } @@ -292,6 +299,7 @@ public class CompatibilityInfo implements Parcelable { * Returns the translator which translates the coordinates in compatibility mode. * @param params the window's parameter */ + @UnsupportedAppUsage public Translator getTranslator() { return isScalingRequired() ? new Translator() : null; } @@ -301,7 +309,9 @@ public class CompatibilityInfo implements Parcelable { * @hide */ public class Translator { + @UnsupportedAppUsage final public float applicationScale; + @UnsupportedAppUsage final public float applicationInvertedScale; private Rect mContentInsetsBuffer = null; @@ -321,6 +331,7 @@ public class CompatibilityInfo implements Parcelable { /** * Translate the screen rect to the application frame. */ + @UnsupportedAppUsage public void translateRectInScreenToAppWinFrame(Rect rect) { rect.scale(applicationInvertedScale); } @@ -328,6 +339,7 @@ public class CompatibilityInfo implements Parcelable { /** * Translate the region in window to screen. */ + @UnsupportedAppUsage public void translateRegionInWindowToScreen(Region transparentRegion) { transparentRegion.scale(applicationScale); } @@ -335,6 +347,7 @@ public class CompatibilityInfo implements Parcelable { /** * Apply translation to the canvas that is necessary to draw the content. */ + @UnsupportedAppUsage public void translateCanvas(Canvas canvas) { if (applicationScale == 1.5f) { /* When we scale for compatibility, we can put our stretched @@ -361,6 +374,7 @@ public class CompatibilityInfo implements Parcelable { /** * Translate the motion event captured on screen to the application's window. */ + @UnsupportedAppUsage public void translateEventInScreenToAppWindow(MotionEvent event) { event.scale(applicationInvertedScale); } @@ -369,6 +383,7 @@ public class CompatibilityInfo implements Parcelable { * Translate the window's layout parameter, from application's view to * Screen's view. */ + @UnsupportedAppUsage public void translateWindowLayout(WindowManager.LayoutParams params) { params.scale(applicationScale); } @@ -376,6 +391,7 @@ public class CompatibilityInfo implements Parcelable { /** * Translate a Rect in application's window to screen. */ + @UnsupportedAppUsage public void translateRectInAppWindowToScreen(Rect rect) { rect.scale(applicationScale); } @@ -383,6 +399,7 @@ public class CompatibilityInfo implements Parcelable { /** * Translate a Rect in screen coordinates into the app window's coordinates. */ + @UnsupportedAppUsage public void translateRectInScreenToAppWindow(Rect rect) { rect.scale(applicationInvertedScale); } @@ -410,6 +427,7 @@ public class CompatibilityInfo implements Parcelable { * Translate the content insets in application window to Screen. This uses * the internal buffer for content insets to avoid extra object allocation. */ + @UnsupportedAppUsage public Rect getTranslatedContentInsets(Rect contentInsets) { if (mContentInsetsBuffer == null) mContentInsetsBuffer = new Rect(); mContentInsetsBuffer.set(contentInsets); @@ -488,6 +506,7 @@ public class CompatibilityInfo implements Parcelable { * @param outDm If non-null the width and height will be set to their scaled values. * @return Returns the scaling factor for the window. */ + @UnsupportedAppUsage public static float computeCompatibleScaling(DisplayMetrics dm, DisplayMetrics outDm) { final int width = dm.noncompatWidthPixels; final int height = dm.noncompatHeightPixels; @@ -593,6 +612,7 @@ public class CompatibilityInfo implements Parcelable { dest.writeFloat(applicationInvertedScale); } + @UnsupportedAppUsage public static final Parcelable.Creator<CompatibilityInfo> CREATOR = new Parcelable.Creator<CompatibilityInfo>() { @Override diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 193e56ef404d..f7aea978f5d1 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -44,6 +44,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.WindowConfiguration; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.Config; @@ -127,6 +128,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration * questionable whether this is the right way to expose the functionality. * @hide */ + @UnsupportedAppUsage public boolean userSetLocale; @@ -793,6 +795,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration /** * @hide Internal book-keeping. */ + @UnsupportedAppUsage public int seq; /** @hide */ @@ -1207,6 +1210,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration } /** {@hide} */ + @UnsupportedAppUsage @Deprecated public void makeDefault() { setToDefaults(); } @@ -1978,6 +1982,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration * * @hide */ + @UnsupportedAppUsage public static String resourceQualifierString(Configuration config) { return resourceQualifierString(config, null); } @@ -2264,6 +2269,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration * This is fine for device configurations as no member is ever undefined. * {@hide} */ + @UnsupportedAppUsage public static Configuration generateDelta(Configuration base, Configuration change) { final Configuration delta = new Configuration(); if (base.fontScale != change.fontScale) { diff --git a/core/java/android/content/res/ConfigurationBoundResourceCache.java b/core/java/android/content/res/ConfigurationBoundResourceCache.java index 70290c4b0595..3af395a4fc19 100644 --- a/core/java/android/content/res/ConfigurationBoundResourceCache.java +++ b/core/java/android/content/res/ConfigurationBoundResourceCache.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo.Config; /** diff --git a/core/java/android/content/res/DrawableCache.java b/core/java/android/content/res/DrawableCache.java index 7b27fac2a44d..d4f0ca5f8ebf 100644 --- a/core/java/android/content/res/DrawableCache.java +++ b/core/java/android/content/res/DrawableCache.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.graphics.drawable.Drawable; /** @@ -31,6 +32,7 @@ class DrawableCache extends ThemedResourceCache<Drawable.ConstantState> { * @return a new instance of the resource, or {@code null} if not in * the cache */ + @UnsupportedAppUsage public Drawable getInstance(long key, Resources resources, Resources.Theme theme) { final Drawable.ConstantState entry = get(key, theme); if (entry != null) { diff --git a/core/java/android/content/res/ObbInfo.java b/core/java/android/content/res/ObbInfo.java index b653f9ff8c24..452fdce6f031 100644 --- a/core/java/android/content/res/ObbInfo.java +++ b/core/java/android/content/res/ObbInfo.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -53,6 +54,7 @@ public class ObbInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public byte[] salt; // Only allow things in this package to instantiate. diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index ef0dce3a2f64..cd250b8c016e 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -39,6 +39,7 @@ import android.annotation.RawRes; import android.annotation.StringRes; import android.annotation.StyleRes; import android.annotation.StyleableRes; +import android.annotation.UnsupportedAppUsage; import android.annotation.XmlRes; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.Config; @@ -102,22 +103,28 @@ public class Resources { private static final Object sSync = new Object(); // Used by BridgeResources in layoutlib + @UnsupportedAppUsage static Resources mSystem = null; + @UnsupportedAppUsage private ResourcesImpl mResourcesImpl; // Pool of TypedArrays targeted to this Resources object. + @UnsupportedAppUsage final SynchronizedPool<TypedArray> mTypedArrayPool = new SynchronizedPool<>(5); /** Used to inflate drawable objects from XML. */ + @UnsupportedAppUsage private DrawableInflater mDrawableInflater; /** Lock object used to protect access to {@link #mTmpValue}. */ private final Object mTmpValueLock = new Object(); /** Single-item pool used to minimize TypedValue allocations. */ + @UnsupportedAppUsage private TypedValue mTmpValue = new TypedValue(); + @UnsupportedAppUsage final ClassLoader mClassLoader; /** @@ -149,6 +156,7 @@ public class Resources { * @return A theme resource identifier * @hide */ + @UnsupportedAppUsage public static int selectDefaultTheme(int curTheme, int targetSdkVersion) { return selectSystemTheme(curTheme, targetSdkVersion, com.android.internal.R.style.Theme, @@ -236,6 +244,7 @@ public class Resources { * class loader * @hide */ + @UnsupportedAppUsage public Resources(@Nullable ClassLoader classLoader) { mClassLoader = classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader; } @@ -243,6 +252,7 @@ public class Resources { /** * Only for creating the System resources. */ + @UnsupportedAppUsage private Resources() { this(null); @@ -261,6 +271,7 @@ public class Resources { * and updates all Theme references to new implementations as well. * @hide */ + @UnsupportedAppUsage public void setImpl(ResourcesImpl impl) { if (impl == mResourcesImpl) { return; @@ -284,6 +295,7 @@ public class Resources { /** * @hide */ + @UnsupportedAppUsage public ResourcesImpl getImpl() { return mResourcesImpl; } @@ -299,6 +311,7 @@ public class Resources { * @return the inflater used to create drawable objects * @hide Pending API finalization. */ + @UnsupportedAppUsage public final DrawableInflater getDrawableInflater() { if (mDrawableInflater == null) { mDrawableInflater = new DrawableInflater(this, mClassLoader); @@ -891,6 +904,7 @@ public class Resources { } @NonNull + @UnsupportedAppUsage Drawable loadDrawable(@NonNull TypedValue value, int id, int density, @Nullable Theme theme) throws NotFoundException { return mResourcesImpl.loadDrawable(this, value, id, density, theme); @@ -1115,6 +1129,7 @@ public class Resources { * not exist or is not a floating-point value. * @hide Pending API council approval. */ + @UnsupportedAppUsage public float getFloat(int id) { final TypedValue value = obtainTempTypedValue(); try { @@ -1389,6 +1404,7 @@ public class Resources { * retrieve XML attributes with style and theme information applied. */ public final class Theme { + @UnsupportedAppUsage private ResourcesImpl.ThemeImpl mThemeImpl; private Theme() { @@ -1552,6 +1568,7 @@ public class Resources { * @hide */ @NonNull + @UnsupportedAppUsage public TypedArray resolveAttributes(@NonNull int[] values, @NonNull int[] attrs) { return mThemeImpl.resolveAttributes(this, values, attrs); } @@ -1841,6 +1858,7 @@ public class Resources { * * @hide */ + @UnsupportedAppUsage public static void updateSystemConfiguration(Configuration config, DisplayMetrics metrics, CompatibilityInfo compat) { if (mSystem != null) { @@ -1861,6 +1879,7 @@ public class Resources { } /** @hide */ + @UnsupportedAppUsage public DisplayAdjustments getDisplayAdjustments() { return mResourcesImpl.getDisplayAdjustments(); } @@ -1887,6 +1906,7 @@ public class Resources { * @return compatibility info. * @hide */ + @UnsupportedAppUsage public CompatibilityInfo getCompatibilityInfo() { return mResourcesImpl.getCompatibilityInfo(); } @@ -1896,6 +1916,7 @@ public class Resources { * @hide */ @VisibleForTesting + @UnsupportedAppUsage public void setCompatibilityInfo(CompatibilityInfo ci) { if (ci != null) { mResourcesImpl.updateConfiguration(null, null, ci); @@ -2133,6 +2154,7 @@ public class Resources { /** * @hide */ + @UnsupportedAppUsage public LongSparseArray<ConstantState> getPreloadedDrawables() { return mResourcesImpl.getPreloadedDrawables(); } @@ -2146,6 +2168,7 @@ public class Resources { * @throws NotFoundException if the file could not be loaded */ @NonNull + @UnsupportedAppUsage XmlResourceParser loadXmlResourceParser(@AnyRes int id, @NonNull String type) throws NotFoundException { final TypedValue value = obtainTempTypedValue(); @@ -2174,6 +2197,7 @@ public class Resources { * @throws NotFoundException if the file could not be loaded */ @NonNull + @UnsupportedAppUsage XmlResourceParser loadXmlResourceParser(String file, int id, int assetCookie, String type) throws NotFoundException { return mResourcesImpl.loadXmlResourceParser(file, id, assetCookie, type); diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index 8c980677fdd0..19e399a50724 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -25,6 +25,7 @@ import android.annotation.PluralsRes; import android.annotation.RawRes; import android.annotation.StyleRes; import android.annotation.StyleableRes; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.Config; import android.content.res.AssetManager.AssetInputStream; @@ -79,7 +80,9 @@ public class ResourcesImpl { static final String TAG_PRELOAD = TAG + ".preload"; + @UnsupportedAppUsage private static final boolean TRACE_FOR_PRELOAD = false; // Do we still need it? + @UnsupportedAppUsage private static final boolean TRACE_FOR_MISS_PRELOAD = false; // Do we still need it? public static final boolean TRACE_FOR_DETAILED_PRELOAD = @@ -96,28 +99,37 @@ public class ResourcesImpl { private static final Object sSync = new Object(); private static boolean sPreloaded; + @UnsupportedAppUsage private boolean mPreloading; // Information about preloaded resources. Note that they are not // protected by a lock, because while preloading in zygote we are all // single-threaded, and after that these are immutable. + @UnsupportedAppUsage private static final LongSparseArray<Drawable.ConstantState>[] sPreloadedDrawables; + @UnsupportedAppUsage private static final LongSparseArray<Drawable.ConstantState> sPreloadedColorDrawables = new LongSparseArray<>(); + @UnsupportedAppUsage private static final LongSparseArray<android.content.res.ConstantState<ComplexColor>> sPreloadedComplexColors = new LongSparseArray<>(); /** Lock object used to protect access to caches and configuration. */ + @UnsupportedAppUsage private final Object mAccessLock = new Object(); // These are protected by mAccessLock. private final Configuration mTmpConfig = new Configuration(); + @UnsupportedAppUsage private final DrawableCache mDrawableCache = new DrawableCache(); + @UnsupportedAppUsage private final DrawableCache mColorDrawableCache = new DrawableCache(); private final ConfigurationBoundResourceCache<ComplexColor> mComplexColorCache = new ConfigurationBoundResourceCache<>(); + @UnsupportedAppUsage private final ConfigurationBoundResourceCache<Animator> mAnimatorCache = new ConfigurationBoundResourceCache<>(); + @UnsupportedAppUsage private final ConfigurationBoundResourceCache<StateListAnimator> mStateListAnimatorCache = new ConfigurationBoundResourceCache<>(); @@ -138,12 +150,14 @@ public class ResourcesImpl { private final XmlBlock[] mCachedXmlBlocks = new XmlBlock[XML_BLOCK_CACHE_SIZE]; + @UnsupportedAppUsage final AssetManager mAssets; private final DisplayMetrics mMetrics = new DisplayMetrics(); private final DisplayAdjustments mDisplayAdjustments; private PluralRules mPluralRule; + @UnsupportedAppUsage private final Configuration mConfiguration = new Configuration(); static { @@ -163,6 +177,7 @@ public class ResourcesImpl { * @param displayAdjustments this resource's Display override and compatibility info. * Must not be null. */ + @UnsupportedAppUsage public ResourcesImpl(@NonNull AssetManager assets, @Nullable DisplayMetrics metrics, @Nullable Configuration config, @NonNull DisplayAdjustments displayAdjustments) { mAssets = assets; @@ -176,10 +191,12 @@ public class ResourcesImpl { return mDisplayAdjustments; } + @UnsupportedAppUsage public AssetManager getAssets() { return mAssets; } + @UnsupportedAppUsage DisplayMetrics getDisplayMetrics() { if (DEBUG_CONFIG) Slog.v(TAG, "Returning DisplayMetrics: " + mMetrics.widthPixels + "x" + mMetrics.heightPixels + " " + mMetrics.density); @@ -207,6 +224,7 @@ public class ResourcesImpl { } } + @UnsupportedAppUsage void getValue(@AnyRes int id, TypedValue outValue, boolean resolveRefs) throws NotFoundException { boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs); diff --git a/core/java/android/content/res/ResourcesKey.java b/core/java/android/content/res/ResourcesKey.java index b03ed1eee768..1db2dd85fb37 100644 --- a/core/java/android/content/res/ResourcesKey.java +++ b/core/java/android/content/res/ResourcesKey.java @@ -18,6 +18,7 @@ package android.content.res; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.text.TextUtils; import java.util.Arrays; @@ -26,9 +27,11 @@ import java.util.Objects; /** @hide */ public final class ResourcesKey { @Nullable + @UnsupportedAppUsage public final String mResDir; @Nullable + @UnsupportedAppUsage public final String[] mSplitResDirs; @Nullable @@ -47,6 +50,7 @@ public final class ResourcesKey { private final int mHash; + @UnsupportedAppUsage public ResourcesKey(@Nullable String resDir, @Nullable String[] splitResDirs, @Nullable String[] overlayDirs, diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java index 5cfc41f2eae6..b5ec0f9f3712 100644 --- a/core/java/android/content/res/StringBlock.java +++ b/core/java/android/content/res/StringBlock.java @@ -16,6 +16,7 @@ package android.content.res; +import android.annotation.UnsupportedAppUsage; import android.graphics.Color; import android.text.*; import android.text.style.*; @@ -59,6 +60,7 @@ final class StringBlock { + ": " + nativeGetSize(mNative)); } + @UnsupportedAppUsage public CharSequence get(int idx) { synchronized (this) { if (mStrings != null) { @@ -478,6 +480,7 @@ final class StringBlock { * are doing! The given native object must exist for the entire lifetime * of this newly creating StringBlock. */ + @UnsupportedAppUsage StringBlock(long obj, boolean useSparse) { mNative = obj; mUseSparse = useSparse; diff --git a/core/java/android/content/res/ThemedResourceCache.java b/core/java/android/content/res/ThemedResourceCache.java index f1b1e74a697e..06cafdb2bb91 100644 --- a/core/java/android/content/res/ThemedResourceCache.java +++ b/core/java/android/content/res/ThemedResourceCache.java @@ -18,6 +18,7 @@ package android.content.res; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo.Config; import android.content.res.Resources.Theme; import android.content.res.Resources.ThemeKey; @@ -32,6 +33,7 @@ import java.lang.ref.WeakReference; * @param <T> type of data to cache */ abstract class ThemedResourceCache<T> { + @UnsupportedAppUsage private ArrayMap<ThemeKey, LongSparseArray<WeakReference<T>>> mThemedEntries; private LongSparseArray<WeakReference<T>> mUnthemedEntries; private LongSparseArray<WeakReference<T>> mNullThemedEntries; @@ -116,6 +118,7 @@ abstract class ThemedResourceCache<T> { * * @param configChanges a bitmask of configuration changes */ + @UnsupportedAppUsage public void onConfigurationChange(@Config int configChanges) { prune(configChanges); } diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java index cbb3c6df0558..30d2d5f73206 100644 --- a/core/java/android/content/res/TypedArray.java +++ b/core/java/android/content/res/TypedArray.java @@ -20,6 +20,7 @@ import android.annotation.AnyRes; import android.annotation.ColorInt; import android.annotation.Nullable; import android.annotation.StyleableRes; +import android.annotation.UnsupportedAppUsage; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.Config; import android.graphics.Typeface; @@ -70,19 +71,29 @@ public class TypedArray { static final int STYLE_CHANGING_CONFIGURATIONS = 4; static final int STYLE_DENSITY = 5; + @UnsupportedAppUsage private final Resources mResources; + @UnsupportedAppUsage private DisplayMetrics mMetrics; + @UnsupportedAppUsage private AssetManager mAssets; + @UnsupportedAppUsage private boolean mRecycled; + @UnsupportedAppUsage /*package*/ XmlBlock.Parser mXml; + @UnsupportedAppUsage /*package*/ Resources.Theme mTheme; + @UnsupportedAppUsage /*package*/ int[] mData; /*package*/ long mDataAddress; + @UnsupportedAppUsage /*package*/ int[] mIndices; /*package*/ long mIndicesAddress; + @UnsupportedAppUsage /*package*/ int mLength; + @UnsupportedAppUsage /*package*/ TypedValue mValue = new TypedValue(); private void resize(int len) { @@ -276,6 +287,7 @@ public class TypedArray { * @throws RuntimeException if the TypedArray has already been recycled. * @hide */ + @UnsupportedAppUsage public String getNonConfigurationString(@StyleableRes int index, @Config int allowedChangingConfigs) { if (mRecycled) { @@ -1165,6 +1177,7 @@ public class TypedArray { * @hide */ @Nullable + @UnsupportedAppUsage public int[] extractThemeAttrs() { return extractThemeAttrs(null); } @@ -1173,6 +1186,7 @@ public class TypedArray { * @hide */ @Nullable + @UnsupportedAppUsage public int[] extractThemeAttrs(@Nullable int[] scrap) { if (mRecycled) { throw new RuntimeException("Cannot make calls to a recycled instance!"); @@ -1244,6 +1258,7 @@ public class TypedArray { return changingConfig; } + @UnsupportedAppUsage private boolean getValueAt(int index, TypedValue outValue) { final int[] data = mData; final int type = data[index + STYLE_TYPE]; diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java index d4ccffb83ca5..4e1159a9bce9 100644 --- a/core/java/android/content/res/XmlBlock.java +++ b/core/java/android/content/res/XmlBlock.java @@ -17,6 +17,7 @@ package android.content.res; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.TypedValue; import com.android.internal.util.XmlUtils; @@ -37,6 +38,7 @@ import java.io.Reader; final class XmlBlock implements AutoCloseable { private static final boolean DEBUG=false; + @UnsupportedAppUsage public XmlBlock(byte[] data) { mAssets = null; mNative = nativeCreate(data, 0, data.length); @@ -69,6 +71,7 @@ final class XmlBlock implements AutoCloseable { } } + @UnsupportedAppUsage public XmlResourceParser newParser() { synchronized (this) { if (mNative != 0) { @@ -462,7 +465,9 @@ final class XmlBlock implements AutoCloseable { return mStrings.get(id); } + @UnsupportedAppUsage /*package*/ long mParseState; + @UnsupportedAppUsage private final XmlBlock mBlock; private boolean mStarted = false; private boolean mDecNextDepth = false; diff --git a/core/java/android/database/AbstractCursor.java b/core/java/android/database/AbstractCursor.java index 76fa008799dd..c6c2aa57f533 100644 --- a/core/java/android/database/AbstractCursor.java +++ b/core/java/android/database/AbstractCursor.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.net.Uri; import android.os.Bundle; @@ -68,6 +69,7 @@ public abstract class AbstractCursor implements CrossProcessCursor { @Deprecated protected ContentResolver mContentResolver; + @UnsupportedAppUsage private Uri mNotifyUri; private final Object mSelfObserverLock = new Object(); @@ -77,6 +79,7 @@ public abstract class AbstractCursor implements CrossProcessCursor { private final DataSetObservable mDataSetObservable = new DataSetObservable(); private final ContentObservable mContentObservable = new ContentObservable(); + @UnsupportedAppUsage private Bundle mExtras = Bundle.EMPTY; /* -------------------------------------------------------- */ diff --git a/core/java/android/database/AbstractWindowedCursor.java b/core/java/android/database/AbstractWindowedCursor.java index 083485facb98..a988f0684fca 100644 --- a/core/java/android/database/AbstractWindowedCursor.java +++ b/core/java/android/database/AbstractWindowedCursor.java @@ -16,6 +16,8 @@ package android.database; +import android.annotation.UnsupportedAppUsage; + /** * A base class for Cursors that store their data in {@link CursorWindow}s. * <p> @@ -179,6 +181,7 @@ public abstract class AbstractWindowedCursor extends AbstractCursor { * Closes the cursor window and sets {@link #mWindow} to null. * @hide */ + @UnsupportedAppUsage protected void closeWindow() { if (mWindow != null) { mWindow.close(); @@ -193,6 +196,7 @@ public abstract class AbstractWindowedCursor extends AbstractCursor { * @param name The window name. * @hide */ + @UnsupportedAppUsage protected void clearOrCreateWindow(String name) { if (mWindow == null) { mWindow = new CursorWindow(name); @@ -203,6 +207,7 @@ public abstract class AbstractWindowedCursor extends AbstractCursor { /** @hide */ @Override + @UnsupportedAppUsage protected void onDeactivateOrClose() { super.onDeactivateOrClose(); closeWindow(); diff --git a/core/java/android/database/ContentObserver.java b/core/java/android/database/ContentObserver.java index 5f01e300bf42..798b7830ac50 100644 --- a/core/java/android/database/ContentObserver.java +++ b/core/java/android/database/ContentObserver.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import android.net.Uri; import android.os.Handler; import android.os.UserHandle; @@ -59,6 +60,7 @@ public abstract class ContentObserver { * * {@hide} */ + @UnsupportedAppUsage public IContentObserver releaseContentObserver() { synchronized (mLock) { final Transport oldTransport = mTransport; diff --git a/core/java/android/database/CursorWindow.java b/core/java/android/database/CursorWindow.java index a748f4d2cbce..d9443d9a3c5f 100644 --- a/core/java/android/database/CursorWindow.java +++ b/core/java/android/database/CursorWindow.java @@ -17,6 +17,7 @@ package android.database; import android.annotation.BytesLong; +import android.annotation.UnsupportedAppUsage; import android.content.res.Resources; import android.database.sqlite.SQLiteClosable; import android.database.sqlite.SQLiteException; @@ -45,12 +46,14 @@ public class CursorWindow extends SQLiteClosable implements Parcelable { private static final String STATS_TAG = "CursorWindowStats"; // This static member will be evaluated when first used. + @UnsupportedAppUsage private static int sCursorWindowSize = -1; /** * The native CursorWindow object pointer. (FOR INTERNAL USE ONLY) * @hide */ + @UnsupportedAppUsage public long mWindowPtr; private int mStartPos; @@ -744,6 +747,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable { dispose(); } + @UnsupportedAppUsage private static final LongSparseArray<Integer> sWindowToPidMap = new LongSparseArray<Integer>(); private void recordNewWindow(int pid, long window) { @@ -765,6 +769,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable { } } + @UnsupportedAppUsage private String printStats() { StringBuilder buff = new StringBuilder(); int myPid = Process.myPid(); diff --git a/core/java/android/database/CursorWrapper.java b/core/java/android/database/CursorWrapper.java index 63a2792dd5d3..0d27dfb872f0 100644 --- a/core/java/android/database/CursorWrapper.java +++ b/core/java/android/database/CursorWrapper.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.net.Uri; import android.os.Bundle; @@ -26,6 +27,7 @@ import android.os.Bundle; */ public class CursorWrapper implements Cursor { /** @hide */ + @UnsupportedAppUsage protected final Cursor mCursor; /** diff --git a/core/java/android/database/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java index 7a8ab60c502d..f78b484e0491 100644 --- a/core/java/android/database/DatabaseUtils.java +++ b/core/java/android/database/DatabaseUtils.java @@ -17,6 +17,7 @@ package android.database; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ContentValues; import android.content.Context; import android.content.OperationApplicationException; @@ -321,6 +322,7 @@ public class DatabaseUtils { * @return object value type * @hide */ + @UnsupportedAppUsage public static int getTypeOfObject(Object obj) { if (obj == null) { return Cursor.FIELD_TYPE_NULL; @@ -849,6 +851,7 @@ public class DatabaseUtils { * the requested row. * @hide */ + @UnsupportedAppUsage public static int cursorPickFillWindowStartPosition( int cursorPosition, int cursorWindowCapacity) { return Math.max(cursorPosition - cursorWindowCapacity / 3, 0); diff --git a/core/java/android/database/MatrixCursor.java b/core/java/android/database/MatrixCursor.java index 5e107f23d3d4..5033296df9fb 100644 --- a/core/java/android/database/MatrixCursor.java +++ b/core/java/android/database/MatrixCursor.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import java.util.ArrayList; /** @@ -26,7 +27,9 @@ import java.util.ArrayList; public class MatrixCursor extends AbstractCursor { private final String[] columnNames; + @UnsupportedAppUsage private Object[] data; + @UnsupportedAppUsage private int rowCount = 0; private final int columnCount; @@ -61,6 +64,7 @@ public class MatrixCursor extends AbstractCursor { /** * Gets value at the given column for the current row. */ + @UnsupportedAppUsage private Object get(int column) { if (column < 0 || column >= columnCount) { throw new CursorIndexOutOfBoundsException("Requested column: " diff --git a/core/java/android/database/sqlite/DatabaseObjectNotClosedException.java b/core/java/android/database/sqlite/DatabaseObjectNotClosedException.java index f28c70fe1efe..2af06e116da0 100644 --- a/core/java/android/database/sqlite/DatabaseObjectNotClosedException.java +++ b/core/java/android/database/sqlite/DatabaseObjectNotClosedException.java @@ -16,6 +16,8 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; + /** * An exception that indicates that garbage-collector is finalizing a database object * that is not explicitly closed @@ -25,6 +27,7 @@ public class DatabaseObjectNotClosedException extends RuntimeException { private static final String s = "Application did not close the cursor or database object " + "that was opened here"; + @UnsupportedAppUsage public DatabaseObjectNotClosedException() { super(s); } diff --git a/core/java/android/database/sqlite/SQLiteClosable.java b/core/java/android/database/sqlite/SQLiteClosable.java index adfbc6e177ac..d6a71da105dd 100644 --- a/core/java/android/database/sqlite/SQLiteClosable.java +++ b/core/java/android/database/sqlite/SQLiteClosable.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import java.io.Closeable; /** @@ -24,6 +25,7 @@ import java.io.Closeable; * This class implements a primitive reference counting scheme for database objects. */ public abstract class SQLiteClosable implements Closeable { + @UnsupportedAppUsage private int mReferenceCount = 1; /** diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java index 47a5138c1a6c..3ca852a34594 100644 --- a/core/java/android/database/sqlite/SQLiteConnection.java +++ b/core/java/android/database/sqlite/SQLiteConnection.java @@ -208,10 +208,15 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen } private void open() { - mConnectionPtr = nativeOpen(mConfiguration.path, mConfiguration.openFlags, - mConfiguration.label, - SQLiteDebug.Consts.DEBUG_SQL_STATEMENTS, SQLiteDebug.Consts.DEBUG_SQL_TIME, - mConfiguration.lookasideSlotSize, mConfiguration.lookasideSlotCount); + final int cookie = mRecentOperations.beginOperation("open", null, null); + try { + mConnectionPtr = nativeOpen(mConfiguration.path, mConfiguration.openFlags, + mConfiguration.label, + SQLiteDebug.Consts.DEBUG_SQL_STATEMENTS, SQLiteDebug.Consts.DEBUG_SQL_TIME, + mConfiguration.lookasideSlotSize, mConfiguration.lookasideSlotCount); + } finally { + mRecentOperations.endOperation(cookie); + } setPageSize(); setForeignKeyModeFromConfiguration(); setWalModeFromConfiguration(); diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java index 13e6f7182e8a..e3c409891c54 100644 --- a/core/java/android/database/sqlite/SQLiteCursor.java +++ b/core/java/android/database/sqlite/SQLiteCursor.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import android.database.AbstractWindowedCursor; import android.database.CursorWindow; import android.database.DatabaseUtils; @@ -39,12 +40,14 @@ public class SQLiteCursor extends AbstractWindowedCursor { static final int NO_COUNT = -1; /** The name of the table to edit */ + @UnsupportedAppUsage private final String mEditTable; /** The names of the columns in the rows */ private final String[] mColumns; /** The query object for the cursor */ + @UnsupportedAppUsage private final SQLiteQuery mQuery; /** The compiled query this cursor came from */ @@ -139,6 +142,7 @@ public class SQLiteCursor extends AbstractWindowedCursor { return mCount; } + @UnsupportedAppUsage private void fillWindow(int requiredPos) { clearOrCreateWindow(getDatabase().getPath()); try { diff --git a/core/java/android/database/sqlite/SQLiteCustomFunction.java b/core/java/android/database/sqlite/SQLiteCustomFunction.java index 02f3284b4258..ec204581aef5 100644 --- a/core/java/android/database/sqlite/SQLiteCustomFunction.java +++ b/core/java/android/database/sqlite/SQLiteCustomFunction.java @@ -16,13 +16,17 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; + /** * Describes a custom SQL function. * * @hide */ public final class SQLiteCustomFunction { + @UnsupportedAppUsage public final String name; + @UnsupportedAppUsage public final int numArgs; public final SQLiteDatabase.CustomFunction callback; @@ -47,6 +51,7 @@ public final class SQLiteCustomFunction { // Called from native. @SuppressWarnings("unused") + @UnsupportedAppUsage private void dispatchCallback(String[] args) { callback.callback(args); } diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index a4b989a72492..01557c59f8ac 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.content.ContentValues; import android.database.Cursor; @@ -91,6 +92,7 @@ public final class SQLiteDatabase extends SQLiteClosable { // Thread-local for database sessions that belong to this database. // Each thread has its own database session. // INVARIANT: Immutable. + @UnsupportedAppUsage private final ThreadLocal<SQLiteSession> mThreadSession = ThreadLocal .withInitial(this::createSession); @@ -124,12 +126,14 @@ public final class SQLiteDatabase extends SQLiteClosable { // The database configuration. // INVARIANT: Guarded by mLock. + @UnsupportedAppUsage private final SQLiteDatabaseConfiguration mConfigurationLocked; // The connection pool for the database, null when closed. // The pool itself is thread-safe, but the reference to it can only be acquired // when the lock is held. // INVARIANT: Guarded by mLock. + @UnsupportedAppUsage private SQLiteConnectionPool mConnectionPoolLocked; // True if the database has attached databases. @@ -190,6 +194,7 @@ public final class SQLiteDatabase extends SQLiteClosable { public static final int CONFLICT_NONE = 0; /** {@hide} */ + @UnsupportedAppUsage public static final String[] CONFLICT_VALUES = new String[] {"", " OR ROLLBACK ", " OR ABORT ", " OR FAIL ", " OR IGNORE ", " OR REPLACE "}; @@ -400,6 +405,7 @@ public final class SQLiteDatabase extends SQLiteClosable { * @throws IllegalStateException if the thread does not yet have a session and * the database is not open. */ + @UnsupportedAppUsage SQLiteSession getThreadSession() { return mThreadSession.get(); // initialValue() throws if database closed } @@ -543,6 +549,7 @@ public final class SQLiteDatabase extends SQLiteClosable { beginTransaction(transactionListener, false); } + @UnsupportedAppUsage private void beginTransaction(SQLiteTransactionListener transactionListener, boolean exclusive) { acquireReference(); @@ -730,6 +737,7 @@ public final class SQLiteDatabase extends SQLiteClosable { return openDatabase(path.getPath(), openParams); } + @UnsupportedAppUsage private static SQLiteDatabase openDatabase(@NonNull String path, @NonNull OpenParams openParams) { Preconditions.checkArgument(openParams != null, "OpenParams cannot be null"); @@ -839,6 +847,7 @@ public final class SQLiteDatabase extends SQLiteClosable { * @see #isReadOnly() * @hide */ + @UnsupportedAppUsage public void reopenReadWrite() { synchronized (mLock) { throwIfNotOpenLocked(); @@ -2139,6 +2148,7 @@ public final class SQLiteDatabase extends SQLiteClosable { return dbStatsList; } + @UnsupportedAppUsage private void collectDbStats(ArrayList<DbStats> dbStatsList) { synchronized (mLock) { if (mConnectionPoolLocked != null) { @@ -2147,6 +2157,7 @@ public final class SQLiteDatabase extends SQLiteClosable { } } + @UnsupportedAppUsage private static ArrayList<SQLiteDatabase> getActiveDatabases() { ArrayList<SQLiteDatabase> databases = new ArrayList<SQLiteDatabase>(); synchronized (sActiveDatabases) { diff --git a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java index bb62268ce742..48f10219921b 100644 --- a/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java +++ b/core/java/android/database/sqlite/SQLiteDatabaseConfiguration.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import java.util.ArrayList; import java.util.Locale; import java.util.regex.Pattern; @@ -67,6 +68,7 @@ public final class SQLiteDatabaseConfiguration { * * Default is 25. */ + @UnsupportedAppUsage public int maxSqlCacheSize; /** diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java index 7ff66358de5f..1377806cb213 100644 --- a/core/java/android/database/sqlite/SQLiteOpenHelper.java +++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java @@ -19,6 +19,7 @@ package android.database.sqlite; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.SQLException; @@ -52,6 +53,7 @@ public abstract class SQLiteOpenHelper { private static final String TAG = SQLiteOpenHelper.class.getSimpleName(); private final Context mContext; + @UnsupportedAppUsage private final String mName; private final int mNewVersion; private final int mMinimumSupportedVersion; diff --git a/core/java/android/database/sqlite/SQLiteProgram.java b/core/java/android/database/sqlite/SQLiteProgram.java index 26e8c318299f..8304133cd41e 100644 --- a/core/java/android/database/sqlite/SQLiteProgram.java +++ b/core/java/android/database/sqlite/SQLiteProgram.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import android.database.DatabaseUtils; import android.os.CancellationSignal; @@ -31,10 +32,12 @@ public abstract class SQLiteProgram extends SQLiteClosable { private static final String[] EMPTY_STRING_ARRAY = new String[0]; private final SQLiteDatabase mDatabase; + @UnsupportedAppUsage private final String mSql; private final boolean mReadOnly; private final String[] mColumnNames; private final int mNumParameters; + @UnsupportedAppUsage private final Object[] mBindArgs; SQLiteProgram(SQLiteDatabase db, String sql, Object[] bindArgs, diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index 06560f2e4887..b705ebb77d9b 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -18,6 +18,7 @@ package android.database.sqlite; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ContentValues; import android.database.Cursor; import android.database.DatabaseUtils; @@ -49,8 +50,11 @@ public class SQLiteQueryBuilder { Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); private Map<String, String> mProjectionMap = null; + @UnsupportedAppUsage private String mTables = ""; + @UnsupportedAppUsage private StringBuilder mWhereClause = null; // lazily created + @UnsupportedAppUsage private boolean mDistinct; private SQLiteDatabase.CursorFactory mFactory; private boolean mStrict; @@ -782,6 +786,7 @@ public class SQLiteQueryBuilder { return query.toString(); } + @UnsupportedAppUsage private String[] computeProjection(String[] projectionIn) { if (projectionIn != null && projectionIn.length > 0) { if (mProjectionMap != null) { diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java index d80ab1f2e867..a9ac9e7f882f 100644 --- a/core/java/android/database/sqlite/SQLiteSession.java +++ b/core/java/android/database/sqlite/SQLiteSession.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import android.database.CursorWindow; import android.database.DatabaseUtils; import android.os.CancellationSignal; @@ -291,6 +292,7 @@ public final class SQLiteSession { * @see #yieldTransaction * @see #endTransaction */ + @UnsupportedAppUsage public void beginTransaction(int transactionMode, SQLiteTransactionListener transactionListener, int connectionFlags, CancellationSignal cancellationSignal) { diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java index b1092d765a9a..8f8f67625a33 100644 --- a/core/java/android/database/sqlite/SQLiteStatement.java +++ b/core/java/android/database/sqlite/SQLiteStatement.java @@ -16,6 +16,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import android.os.ParcelFileDescriptor; /** @@ -27,6 +28,7 @@ import android.os.ParcelFileDescriptor; * </p> */ public final class SQLiteStatement extends SQLiteProgram { + @UnsupportedAppUsage SQLiteStatement(SQLiteDatabase db, String sql, Object[] bindArgs) { super(db, sql, bindArgs, null); } diff --git a/core/java/android/database/sqlite/SqliteWrapper.java b/core/java/android/database/sqlite/SqliteWrapper.java index b019618a0f49..e3171640a25c 100644 --- a/core/java/android/database/sqlite/SqliteWrapper.java +++ b/core/java/android/database/sqlite/SqliteWrapper.java @@ -17,6 +17,7 @@ package android.database.sqlite; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; @@ -44,6 +45,7 @@ public final class SqliteWrapper { return e.getMessage().equals(SQLITE_EXCEPTION_DETAIL_MESSAGE); } + @UnsupportedAppUsage public static void checkSQLiteException(Context context, SQLiteException e) { if (isLowMemory(e)) { Toast.makeText(context, com.android.internal.R.string.low_memory, @@ -53,6 +55,7 @@ public final class SqliteWrapper { } } + @UnsupportedAppUsage public static Cursor query(Context context, ContentResolver resolver, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { try { @@ -73,6 +76,7 @@ public final class SqliteWrapper { return false; } } + @UnsupportedAppUsage public static int update(Context context, ContentResolver resolver, Uri uri, ContentValues values, String where, String[] selectionArgs) { try { @@ -84,6 +88,7 @@ public final class SqliteWrapper { } } + @UnsupportedAppUsage public static int delete(Context context, ContentResolver resolver, Uri uri, String where, String[] selectionArgs) { try { @@ -95,6 +100,7 @@ public final class SqliteWrapper { } } + @UnsupportedAppUsage public static Uri insert(Context context, ContentResolver resolver, Uri uri, ContentValues values) { try { diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 1275a852ee2b..caa99d5cb2a8 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -819,11 +819,11 @@ public abstract class CameraMetadata<TKey> { * camera in the list of supported camera devices.</p> * <p>This capability requires the camera device to support the following:</p> * <ul> - * <li>This camera device must list the following static metadata entries in {@link android.hardware.camera2.CameraCharacteristics }:<ul> - * <li>android.logicalMultiCamera.physicalIds</li> - * <li>{@link CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE android.logicalMultiCamera.sensorSyncType}</li> - * </ul> - * </li> + * <li>The IDs of underlying physical cameras are returned via + * {@link android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds }.</li> + * <li>This camera device must list static metadata + * {@link CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE android.logicalMultiCamera.sensorSyncType} in + * {@link android.hardware.camera2.CameraCharacteristics }.</li> * <li>The underlying physical cameras' static metadata must list the following entries, * so that the application can correlate pixels from the physical streams:<ul> * <li>{@link CameraCharacteristics#LENS_POSE_REFERENCE android.lens.poseReference}</li> diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 104134ab859e..fb916d38f3ba 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -22,6 +22,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; @@ -311,6 +312,7 @@ public class ConnectivityManager { * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @UnsupportedAppUsage public static final String INET_CONDITION_ACTION = "android.net.conn.INET_CONDITION_ACTION"; @@ -325,6 +327,7 @@ public class ConnectivityManager { * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @UnsupportedAppUsage public static final String ACTION_TETHER_STATE_CHANGED = "android.net.conn.TETHER_STATE_CHANGED"; @@ -333,6 +336,7 @@ public class ConnectivityManager { * gives a String[] listing all the interfaces configured for * tethering and currently available for tethering. */ + @UnsupportedAppUsage public static final String EXTRA_AVAILABLE_TETHER = "availableArray"; /** @@ -347,6 +351,7 @@ public class ConnectivityManager { * gives a String[] listing all the interfaces currently tethered * (ie, has DHCPv4 support and packets potentially forwarded/NATed) */ + @UnsupportedAppUsage public static final String EXTRA_ACTIVE_TETHER = "tetherArray"; /** @@ -355,6 +360,7 @@ public class ConnectivityManager { * failed. Use {@link #getLastTetherError} to find the error code * for any interfaces listed here. */ + @UnsupportedAppUsage public static final String EXTRA_ERRORED_TETHER = "erroredArray"; /** @@ -459,6 +465,7 @@ public class ConnectivityManager { * The absence of a connection type. * @hide */ + @UnsupportedAppUsage public static final int TYPE_NONE = -1; /** @@ -575,6 +582,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_MOBILE_FOTA = 10; /** @@ -583,6 +591,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_MOBILE_IMS = 11; /** @@ -591,6 +600,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_MOBILE_CBS = 12; /** @@ -600,6 +610,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_WIFI_P2P = 13; /** @@ -608,6 +619,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_MOBILE_IA = 14; /** @@ -617,6 +629,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_MOBILE_EMERGENCY = 15; /** @@ -625,6 +638,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final int TYPE_PROXY = 16; /** @@ -707,6 +721,7 @@ public class ConnectivityManager { */ public static final String PRIVATE_DNS_DEFAULT_MODE_FALLBACK = PRIVATE_DNS_MODE_OPPORTUNISTIC; + @UnsupportedAppUsage private final IConnectivityManager mService; /** * A kludge to facilitate static access where a Context pointer isn't available, like in the @@ -743,6 +758,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static String getNetworkTypeName(int type) { switch (type) { case TYPE_NONE: @@ -797,6 +813,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static boolean isNetworkTypeMobile(int networkType) { switch (networkType) { case TYPE_MOBILE: @@ -1010,6 +1027,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) + @UnsupportedAppUsage public NetworkInfo getActiveNetworkInfoForUid(int uid) { return getActiveNetworkInfoForUid(uid, false); } @@ -1107,6 +1125,7 @@ public class ConnectivityManager { */ @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public Network getNetworkForType(int networkType) { try { return mService.getNetworkForType(networkType); @@ -1135,6 +1154,7 @@ public class ConnectivityManager { * the Networks that applications run by the given user will use by default. * @hide */ + @UnsupportedAppUsage public NetworkCapabilities[] getDefaultNetworkCapabilitiesForUser(int userId) { try { return mService.getDefaultNetworkCapabilitiesForUser(userId); @@ -1153,6 +1173,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public LinkProperties getActiveLinkProperties() { try { return mService.getActiveLinkProperties(); @@ -1177,6 +1198,7 @@ public class ConnectivityManager { */ @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public LinkProperties getLinkProperties(int networkType) { try { return mService.getLinkPropertiesForType(networkType); @@ -1332,6 +1354,7 @@ public class ConnectivityManager { return 1; } + @UnsupportedAppUsage private NetworkCapabilities networkCapabilitiesForFeature(int networkType, String feature) { if (networkType == TYPE_MOBILE) { switch (feature) { @@ -1495,6 +1518,7 @@ public class ConnectivityManager { }; } + @UnsupportedAppUsage private static final HashMap<NetworkCapabilities, LegacyRequest> sLegacyRequests = new HashMap<>(); @@ -1523,6 +1547,7 @@ public class ConnectivityManager { Log.d(TAG, "expireRequest with " + ourSeqNum + ", " + sequenceNum); } + @UnsupportedAppUsage private NetworkRequest requestNetworkForFeatureLocked(NetworkCapabilities netCap) { int delay = -1; int type = legacyTypeForNetworkCapabilities(netCap); @@ -1552,6 +1577,7 @@ public class ConnectivityManager { } } + @UnsupportedAppUsage private boolean removeRequestForFeature(NetworkCapabilities netCap) { final LegacyRequest l; synchronized (sLegacyRequests) { @@ -1619,10 +1645,13 @@ public class ConnectivityManager { /** @hide */ public static class PacketKeepaliveCallback { /** The requested keepalive was successfully started. */ + @UnsupportedAppUsage public void onStarted() {} /** The keepalive was successfully stopped. */ + @UnsupportedAppUsage public void onStopped() {} /** An error occurred. */ + @UnsupportedAppUsage public void onError(int error) {} } @@ -1689,6 +1718,7 @@ public class ConnectivityManager { mLooper.quit(); } + @UnsupportedAppUsage public void stop() { try { mService.stopKeepalive(mNetwork, mSlot); @@ -1744,6 +1774,7 @@ public class ConnectivityManager { * * @hide */ + @UnsupportedAppUsage public PacketKeepalive startNattKeepalive( Network network, int intervalSeconds, PacketKeepaliveCallback callback, InetAddress srcAddr, int srcPort, InetAddress dstAddr) { @@ -1805,6 +1836,7 @@ public class ConnectivityManager { * {@link #bindProcessToNetwork} API. */ @Deprecated + @UnsupportedAppUsage public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) { checkLegacyRoutingApiAccess(); try { @@ -1848,12 +1880,14 @@ public class ConnectivityManager { * @hide */ @Deprecated + @UnsupportedAppUsage public void setBackgroundDataSetting(boolean allowBackgroundData) { // ignored } /** {@hide} */ @Deprecated + @UnsupportedAppUsage public NetworkQuotaInfo getActiveNetworkQuotaInfo() { try { return mService.getActiveNetworkQuotaInfo(); @@ -1867,6 +1901,7 @@ public class ConnectivityManager { * @deprecated Talk to TelephonyManager directly */ @Deprecated + @UnsupportedAppUsage public boolean getMobileDataEnabled() { IBinder b = ServiceManager.getService(Context.TELEPHONY_SERVICE); if (b != null) { @@ -1986,6 +2021,7 @@ public class ConnectivityManager { } /** {@hide} */ + @UnsupportedAppUsage public static ConnectivityManager from(Context context) { return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); } @@ -2036,6 +2072,7 @@ public class ConnectivityManager { * @hide */ @Deprecated + @UnsupportedAppUsage private static ConnectivityManager getInstance() { if (getInstanceOrNull() == null) { throw new IllegalStateException("No ConnectivityManager yet constructed"); @@ -2052,6 +2089,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetherableIfaces() { try { return mService.getTetherableIfaces(); @@ -2068,6 +2106,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetheredIfaces() { try { return mService.getTetheredIfaces(); @@ -2090,6 +2129,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetheringErroredIfaces() { try { return mService.getTetheringErroredIfaces(); @@ -2136,6 +2176,7 @@ public class ConnectivityManager { * * {@hide} */ + @UnsupportedAppUsage public int tether(String iface) { try { String pkgName = mContext.getOpPackageName(); @@ -2164,6 +2205,7 @@ public class ConnectivityManager { * * {@hide} */ + @UnsupportedAppUsage public int untether(String iface) { try { String pkgName = mContext.getOpPackageName(); @@ -2317,6 +2359,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetherableUsbRegexs() { try { return mService.getTetherableUsbRegexs(); @@ -2336,6 +2379,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetherableWifiRegexs() { try { return mService.getTetherableWifiRegexs(); @@ -2355,6 +2399,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public String[] getTetherableBluetoothRegexs() { try { return mService.getTetherableBluetoothRegexs(); @@ -2380,6 +2425,7 @@ public class ConnectivityManager { * * {@hide} */ + @UnsupportedAppUsage public int setUsbTethering(boolean enable) { try { String pkgName = mContext.getOpPackageName(); @@ -2426,6 +2472,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public int getLastTetherError(String iface) { try { return mService.getLastTetherError(iface); @@ -2579,6 +2626,7 @@ public class ConnectivityManager { */ @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @UnsupportedAppUsage public boolean isNetworkSupported(int networkType) { try { return mService.isNetworkSupported(networkType); @@ -2680,6 +2728,7 @@ public class ConnectivityManager { * @hide */ @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) + @UnsupportedAppUsage public void setAirplaneMode(boolean enable) { try { mService.setAirplaneMode(enable); @@ -2689,6 +2738,7 @@ public class ConnectivityManager { } /** {@hide} */ + @UnsupportedAppUsage public void registerNetworkFactory(Messenger messenger, String name) { try { mService.registerNetworkFactory(messenger, name); @@ -2698,6 +2748,7 @@ public class ConnectivityManager { } /** {@hide} */ + @UnsupportedAppUsage public void unregisterNetworkFactory(Messenger messenger) { try { mService.unregisterNetworkFactory(messenger); @@ -3786,6 +3837,7 @@ public class ConnectivityManager { * @deprecated This is strictly for legacy usage to support {@link #startUsingNetworkFeature}. */ @Deprecated + @UnsupportedAppUsage public static boolean setProcessDefaultNetworkForHostResolution(Network network) { return NetworkUtils.bindProcessToNetworkForHostResolution( network == null ? NETID_UNSET : network.netId); diff --git a/core/java/android/net/DhcpResults.java b/core/java/android/net/DhcpResults.java index 8c5f60395ca9..b5d822672e70 100644 --- a/core/java/android/net/DhcpResults.java +++ b/core/java/android/net/DhcpResults.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.net.NetworkUtils; import android.os.Parcel; import android.text.TextUtils; @@ -33,25 +34,32 @@ import java.util.Objects; public class DhcpResults extends StaticIpConfiguration { private static final String TAG = "DhcpResults"; + @UnsupportedAppUsage public Inet4Address serverAddress; /** Vendor specific information (from RFC 2132). */ + @UnsupportedAppUsage public String vendorInfo; + @UnsupportedAppUsage public int leaseDuration; /** Link MTU option. 0 means unset. */ + @UnsupportedAppUsage public int mtu; + @UnsupportedAppUsage public DhcpResults() { super(); } + @UnsupportedAppUsage public DhcpResults(StaticIpConfiguration source) { super(source); } /** copy constructor */ + @UnsupportedAppUsage public DhcpResults(DhcpResults source) { super(source); diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java index ecccda588aec..72565024d3a5 100644 --- a/core/java/android/net/EthernetManager.java +++ b/core/java/android/net/EthernetManager.java @@ -17,6 +17,7 @@ package android.net; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.Handler; import android.os.Message; @@ -66,6 +67,7 @@ public class EthernetManager { * @param iface Ethernet interface name * @param isAvailable {@code true} if Ethernet port exists. */ + @UnsupportedAppUsage void onAvailabilityChanged(String iface, boolean isAvailable); } @@ -84,6 +86,7 @@ public class EthernetManager { * Get Ethernet configuration. * @return the Ethernet Configuration, contained in {@link IpConfiguration}. */ + @UnsupportedAppUsage public IpConfiguration getConfiguration(String iface) { try { return mService.getConfiguration(iface); @@ -95,6 +98,7 @@ public class EthernetManager { /** * Set Ethernet configuration. */ + @UnsupportedAppUsage public void setConfiguration(String iface, IpConfiguration config) { try { mService.setConfiguration(iface, config); @@ -106,6 +110,7 @@ public class EthernetManager { /** * Indicates whether the system currently has one or more Ethernet interfaces. */ + @UnsupportedAppUsage public boolean isAvailable() { return getAvailableInterfaces().length > 0; } @@ -115,6 +120,7 @@ public class EthernetManager { * * @param iface Ethernet interface name */ + @UnsupportedAppUsage public boolean isAvailable(String iface) { try { return mService.isAvailable(iface); @@ -128,6 +134,7 @@ public class EthernetManager { * @param listener A {@link Listener} to add. * @throws IllegalArgumentException If the listener is null. */ + @UnsupportedAppUsage public void addListener(Listener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); @@ -145,6 +152,7 @@ public class EthernetManager { /** * Returns an array of available Ethernet interface names. */ + @UnsupportedAppUsage public String[] getAvailableInterfaces() { try { return mService.getAvailableInterfaces(); @@ -158,6 +166,7 @@ public class EthernetManager { * @param listener A {@link Listener} to remove. * @throws IllegalArgumentException If the listener is null. */ + @UnsupportedAppUsage public void removeListener(Listener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); diff --git a/core/java/android/net/InterfaceConfiguration.java b/core/java/android/net/InterfaceConfiguration.java index 34cde089655d..b27415566368 100644 --- a/core/java/android/net/InterfaceConfiguration.java +++ b/core/java/android/net/InterfaceConfiguration.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -45,6 +46,7 @@ public class InterfaceConfiguration implements Parcelable { return builder.toString(); } + @UnsupportedAppUsage public Iterable<String> getFlags() { return mFlags; } @@ -54,11 +56,13 @@ public class InterfaceConfiguration implements Parcelable { return mFlags.contains(flag); } + @UnsupportedAppUsage public void clearFlag(String flag) { validateFlag(flag); mFlags.remove(flag); } + @UnsupportedAppUsage public void setFlag(String flag) { validateFlag(flag); mFlags.add(flag); @@ -67,6 +71,7 @@ public class InterfaceConfiguration implements Parcelable { /** * Set flags to mark interface as up. */ + @UnsupportedAppUsage public void setInterfaceUp() { mFlags.remove(FLAG_DOWN); mFlags.add(FLAG_UP); @@ -75,6 +80,7 @@ public class InterfaceConfiguration implements Parcelable { /** * Set flags to mark interface as down. */ + @UnsupportedAppUsage public void setInterfaceDown() { mFlags.remove(FLAG_UP); mFlags.add(FLAG_DOWN); @@ -92,6 +98,7 @@ public class InterfaceConfiguration implements Parcelable { return mAddr; } + @UnsupportedAppUsage public void setLinkAddress(LinkAddress addr) { mAddr = addr; } diff --git a/core/java/android/net/IpConfiguration.java b/core/java/android/net/IpConfiguration.java index fe69f2966de6..7543920e363f 100644 --- a/core/java/android/net/IpConfiguration.java +++ b/core/java/android/net/IpConfiguration.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.net.StaticIpConfiguration; import android.os.Parcel; import android.os.Parcelable; @@ -32,6 +33,7 @@ public class IpConfiguration implements Parcelable { public enum IpAssignment { /* Use statically configured IP settings. Configuration can be accessed * with staticIpConfiguration */ + @UnsupportedAppUsage STATIC, /* Use dynamically configured IP settigns */ DHCP, @@ -47,6 +49,7 @@ public class IpConfiguration implements Parcelable { public enum ProxySettings { /* No proxy is to be used. Any existing proxy settings * should be cleared. */ + @UnsupportedAppUsage NONE, /* Use statically configured proxy. Configuration can be accessed * with httpProxy. */ @@ -61,6 +64,7 @@ public class IpConfiguration implements Parcelable { public ProxySettings proxySettings; + @UnsupportedAppUsage public ProxyInfo httpProxy; private void init(IpAssignment ipAssignment, @@ -79,6 +83,7 @@ public class IpConfiguration implements Parcelable { init(IpAssignment.UNASSIGNED, ProxySettings.UNASSIGNED, null, null); } + @UnsupportedAppUsage public IpConfiguration(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java index bcfe93882375..1bc0d327abde 100644 --- a/core/java/android/net/LinkAddress.java +++ b/core/java/android/net/LinkAddress.java @@ -25,6 +25,7 @@ import static android.system.OsConstants.RT_SCOPE_LINK; import static android.system.OsConstants.RT_SCOPE_SITE; import static android.system.OsConstants.RT_SCOPE_UNIVERSE; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.Pair; @@ -54,11 +55,13 @@ public class LinkAddress implements Parcelable { /** * IPv4 or IPv6 address. */ + @UnsupportedAppUsage private InetAddress address; /** * Prefix length. */ + @UnsupportedAppUsage private int prefixLength; /** @@ -112,6 +115,7 @@ public class LinkAddress implements Parcelable { * @return true if the address is IPv6. * @hide */ + @UnsupportedAppUsage public boolean isIPv6() { return address instanceof Inet6Address; } @@ -163,6 +167,7 @@ public class LinkAddress implements Parcelable { * @param prefixLength The prefix length. * @hide */ + @UnsupportedAppUsage public LinkAddress(InetAddress address, int prefixLength) { this(address, prefixLength, 0, 0); this.scope = scopeForUnicastAddress(address); @@ -185,6 +190,7 @@ public class LinkAddress implements Parcelable { * @param string The string to parse. * @hide */ + @UnsupportedAppUsage public LinkAddress(String address) { this(address, 0, 0); this.scope = scopeForUnicastAddress(this.address); @@ -255,6 +261,7 @@ public class LinkAddress implements Parcelable { * otherwise. * @hide */ + @UnsupportedAppUsage public boolean isSameAddressAs(LinkAddress other) { return address.equals(other.address) && prefixLength == other.prefixLength; } @@ -278,6 +285,7 @@ public class LinkAddress implements Parcelable { * TODO: Delete all callers and remove in favour of getPrefixLength(). * @hide */ + @UnsupportedAppUsage public int getNetworkPrefixLength() { return getPrefixLength(); } diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index bd2db92b7804..1b9a66cd6ea7 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -18,6 +18,7 @@ package android.net; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -48,6 +49,7 @@ import java.util.StringJoiner; */ public final class LinkProperties implements Parcelable { // The interface described by the network link. + @UnsupportedAppUsage private String mIfaceName; private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>(); private ArrayList<InetAddress> mDnses = new ArrayList<>(); @@ -103,9 +105,13 @@ public final class LinkProperties implements Parcelable { * @hide */ public enum ProvisioningChange { + @UnsupportedAppUsage STILL_NOT_PROVISIONED, + @UnsupportedAppUsage LOST_PROVISIONING, + @UnsupportedAppUsage GAINED_PROVISIONING, + @UnsupportedAppUsage STILL_PROVISIONED, } @@ -114,6 +120,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static ProvisioningChange compareProvisioning( LinkProperties before, LinkProperties after) { if (before.isProvisioned() && after.isProvisioned()) { @@ -154,12 +161,14 @@ public final class LinkProperties implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public LinkProperties() { } /** * @hide */ + @UnsupportedAppUsage public LinkProperties(LinkProperties source) { if (source != null) { mIfaceName = source.mIfaceName; @@ -186,6 +195,7 @@ public final class LinkProperties implements Parcelable { * @param iface The name of the network interface used for this link. * @hide */ + @UnsupportedAppUsage public void setInterfaceName(String iface) { mIfaceName = iface; ArrayList<RouteInfo> newRoutes = new ArrayList<>(mRoutes.size()); @@ -207,6 +217,7 @@ public final class LinkProperties implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public List<String> getAllInterfaceNames() { List<String> interfaceNames = new ArrayList<>(mStackedLinks.size() + 1); if (mIfaceName != null) interfaceNames.add(mIfaceName); @@ -226,6 +237,7 @@ public final class LinkProperties implements Parcelable { * @return An unmodifiable {@link List} of {@link InetAddress} for this link. * @hide */ + @UnsupportedAppUsage public List<InetAddress> getAddresses() { List<InetAddress> addresses = new ArrayList<>(); for (LinkAddress linkAddress : mLinkAddresses) { @@ -238,6 +250,7 @@ public final class LinkProperties implements Parcelable { * Returns all the addresses on this link and all the links stacked above it. * @hide */ + @UnsupportedAppUsage public List<InetAddress> getAllAddresses() { List<InetAddress> addresses = new ArrayList<>(); for (LinkAddress linkAddress : mLinkAddresses) { @@ -265,6 +278,7 @@ public final class LinkProperties implements Parcelable { * @return true if {@code address} was added or updated, false otherwise. * @hide */ + @UnsupportedAppUsage public boolean addLinkAddress(LinkAddress address) { if (address == null) { return false; @@ -315,6 +329,7 @@ public final class LinkProperties implements Parcelable { * Returns all the addresses on this link and all the links stacked above it. * @hide */ + @UnsupportedAppUsage public List<LinkAddress> getAllLinkAddresses() { List<LinkAddress> addresses = new ArrayList<>(mLinkAddresses); for (LinkProperties stacked: mStackedLinks.values()) { @@ -331,6 +346,7 @@ public final class LinkProperties implements Parcelable { * object. * @hide */ + @UnsupportedAppUsage public void setLinkAddresses(Collection<LinkAddress> addresses) { mLinkAddresses.clear(); for (LinkAddress address: addresses) { @@ -345,6 +361,7 @@ public final class LinkProperties implements Parcelable { * @return true if the DNS server was added, false if it was already present. * @hide */ + @UnsupportedAppUsage public boolean addDnsServer(InetAddress dnsServer) { if (dnsServer != null && !mDnses.contains(dnsServer)) { mDnses.add(dnsServer); @@ -360,6 +377,7 @@ public final class LinkProperties implements Parcelable { * @return true if the DNS server was removed, false if it did not exist. * @hide */ + @UnsupportedAppUsage public boolean removeDnsServer(InetAddress dnsServer) { if (dnsServer != null) { return mDnses.remove(dnsServer); @@ -374,6 +392,7 @@ public final class LinkProperties implements Parcelable { * @param dnsServers The {@link Collection} of DNS servers to set in this object. * @hide */ + @UnsupportedAppUsage public void setDnsServers(Collection<InetAddress> dnsServers) { mDnses.clear(); for (InetAddress dnsServer: dnsServers) { @@ -510,6 +529,7 @@ public final class LinkProperties implements Parcelable { * domains to search when resolving host names on this link. * @hide */ + @UnsupportedAppUsage public void setDomains(String domains) { mDomains = domains; } @@ -532,6 +552,7 @@ public final class LinkProperties implements Parcelable { * @param mtu The MTU to use for this link. * @hide */ + @UnsupportedAppUsage public void setMtu(int mtu) { mMtu = mtu; } @@ -543,6 +564,7 @@ public final class LinkProperties implements Parcelable { * @return The mtu value set for this link. * @hide */ + @UnsupportedAppUsage public int getMtu() { return mMtu; } @@ -555,6 +577,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ + @UnsupportedAppUsage public void setTcpBufferSizes(String tcpBufferSizes) { mTcpBufferSizes = tcpBufferSizes; } @@ -566,6 +589,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ + @UnsupportedAppUsage public String getTcpBufferSizes() { return mTcpBufferSizes; } @@ -589,6 +613,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ + @UnsupportedAppUsage public boolean addRoute(RouteInfo route) { if (route != null) { String routeIface = route.getInterface(); @@ -615,6 +640,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ + @UnsupportedAppUsage public boolean removeRoute(RouteInfo route) { return route != null && Objects.equals(mIfaceName, route.getInterface()) && @@ -645,6 +671,7 @@ public final class LinkProperties implements Parcelable { * Returns all the routes on this link and all the links stacked above it. * @hide */ + @UnsupportedAppUsage public List<RouteInfo> getAllRoutes() { List<RouteInfo> routes = new ArrayList<>(mRoutes); for (LinkProperties stacked: mStackedLinks.values()) { @@ -661,6 +688,7 @@ public final class LinkProperties implements Parcelable { * @param proxy A {@link ProxyInfo} defining the HTTP Proxy to use on this link. * @hide */ + @UnsupportedAppUsage public void setHttpProxy(ProxyInfo proxy) { mHttpProxy = proxy; } @@ -685,6 +713,7 @@ public final class LinkProperties implements Parcelable { * @return true if the link was stacked, false otherwise. * @hide */ + @UnsupportedAppUsage public boolean addStackedLink(LinkProperties link) { if (link != null && link.getInterfaceName() != null) { mStackedLinks.put(link.getInterfaceName(), link); @@ -715,6 +744,7 @@ public final class LinkProperties implements Parcelable { * Returns all the links stacked on top of this link. * @hide */ + @UnsupportedAppUsage public @NonNull List<LinkProperties> getStackedLinks() { if (mStackedLinks.isEmpty()) { return Collections.emptyList(); @@ -730,6 +760,7 @@ public final class LinkProperties implements Parcelable { * Clears this object to its initial state. * @hide */ + @UnsupportedAppUsage public void clear() { mIfaceName = null; mLinkAddresses.clear(); @@ -831,6 +862,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is an IPv4 address, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasIPv4Address() { for (LinkAddress address : mLinkAddresses) { if (address.getAddress() instanceof Inet4Address) { @@ -858,6 +890,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is a global preferred IPv6 address, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasGlobalIPv6Address() { for (LinkAddress address : mLinkAddresses) { if (address.getAddress() instanceof Inet6Address && address.isGlobalPreferred()) { @@ -873,6 +906,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is an IPv4 default route, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasIPv4DefaultRoute() { for (RouteInfo r : mRoutes) { if (r.isIPv4Default()) { @@ -888,6 +922,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is an IPv6 default route, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasIPv6DefaultRoute() { for (RouteInfo r : mRoutes) { if (r.isIPv6Default()) { @@ -903,6 +938,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is an IPv4 DNS server, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasIPv4DnsServer() { for (InetAddress ia : mDnses) { if (ia instanceof Inet4Address) { @@ -918,6 +954,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if there is an IPv6 DNS server, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean hasIPv6DnsServer() { for (InetAddress ia : mDnses) { if (ia instanceof Inet6Address) { @@ -947,6 +984,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if the link is provisioned, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIPv6Provisioned() { return (hasGlobalIPv6Address() && hasIPv6DefaultRoute() && @@ -960,6 +998,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if the link is provisioned, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isProvisioned() { return (isIPv4Provisioned() || isIPv6Provisioned()); } @@ -971,6 +1010,7 @@ public final class LinkProperties implements Parcelable { * {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isReachable(InetAddress ip) { final List<RouteInfo> allRoutes = getAllRoutes(); // If we don't have a route to this IP address, it's not reachable. @@ -1008,6 +1048,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalInterfaceName(LinkProperties target) { return TextUtils.equals(getInterfaceName(), target.getInterfaceName()); } @@ -1019,6 +1060,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalAddresses(LinkProperties target) { Collection<InetAddress> targetAddresses = target.getAddresses(); Collection<InetAddress> sourceAddresses = getAddresses(); @@ -1033,6 +1075,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalDnses(LinkProperties target) { Collection<InetAddress> targetDnses = target.getDnsServers(); String targetDomains = target.getDomains(); @@ -1080,6 +1123,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalRoutes(LinkProperties target) { Collection<RouteInfo> targetRoutes = target.getRoutes(); return (mRoutes.size() == targetRoutes.size()) ? @@ -1093,6 +1137,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalHttpProxy(LinkProperties target) { return getHttpProxy() == null ? target.getHttpProxy() == null : getHttpProxy().equals(target.getHttpProxy()); @@ -1105,6 +1150,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isIdenticalStackedLinks(LinkProperties target) { if (!mStackedLinks.keySet().equals(target.mStackedLinks.keySet())) { return false; diff --git a/core/java/android/net/LinkQualityInfo.java b/core/java/android/net/LinkQualityInfo.java index 9c8e61d8fc82..b6f88255c0e2 100644 --- a/core/java/android/net/LinkQualityInfo.java +++ b/core/java/android/net/LinkQualityInfo.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -189,6 +190,7 @@ public class LinkQualityInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setPacketCount(long packetCount) { mPacketCount = packetCount; } @@ -204,6 +206,7 @@ public class LinkQualityInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setPacketErrorCount(long packetErrorCount) { mPacketErrorCount = packetErrorCount; } @@ -265,6 +268,7 @@ public class LinkQualityInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setLastDataSampleTime(long lastDataSampleTime) { mLastDataSampleTime = lastDataSampleTime; } @@ -280,6 +284,7 @@ public class LinkQualityInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setDataSampleDuration(int dataSampleDuration) { mDataSampleDuration = dataSampleDuration; } diff --git a/core/java/android/net/LocalSocket.java b/core/java/android/net/LocalSocket.java index 8afa1ed3e4a5..6a2031b4131d 100644 --- a/core/java/android/net/LocalSocket.java +++ b/core/java/android/net/LocalSocket.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import java.io.Closeable; import java.io.FileDescriptor; import java.io.IOException; @@ -30,6 +31,7 @@ import java.net.SocketOptions; */ public class LocalSocket implements Closeable { + @UnsupportedAppUsage private final LocalSocketImpl impl; /** false if impl.create() needs to be called */ private volatile boolean implCreated; diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java index 6e4a231bcd55..fe7632c25445 100644 --- a/core/java/android/net/LocalSocketImpl.java +++ b/core/java/android/net/LocalSocketImpl.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.system.ErrnoException; import android.system.Int32Ref; import android.system.Os; @@ -47,8 +48,10 @@ class LocalSocketImpl // These fields are accessed by native code; /** file descriptor array received during a previous read */ + @UnsupportedAppUsage FileDescriptor[] inboundFileDescriptors; /** file descriptor array that should be written during next write */ + @UnsupportedAppUsage FileDescriptor[] outboundFileDescriptors; /** @@ -207,6 +210,7 @@ class LocalSocketImpl /** * Create a new instance. */ + @UnsupportedAppUsage /*package*/ LocalSocketImpl() { } diff --git a/core/java/android/net/MacAddress.java b/core/java/android/net/MacAddress.java index 74d64704c8d2..98f356722bf3 100644 --- a/core/java/android/net/MacAddress.java +++ b/core/java/android/net/MacAddress.java @@ -18,6 +18,7 @@ package android.net; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -50,6 +51,7 @@ public final class MacAddress implements Parcelable { * The MacAddress zero MAC address. * @hide */ + @UnsupportedAppUsage public static final MacAddress ALL_ZEROS_ADDRESS = new MacAddress(0); /** @hide */ diff --git a/core/java/android/net/MobileLinkQualityInfo.java b/core/java/android/net/MobileLinkQualityInfo.java index a01fc8006a13..06c739d6cf95 100644 --- a/core/java/android/net/MobileLinkQualityInfo.java +++ b/core/java/android/net/MobileLinkQualityInfo.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; /** @@ -93,6 +94,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { * returns mobile network type as defined by {@link android.telephony.TelephonyManager} * @return network type or {@link android.net.LinkQualityInfo#UNKNOWN_INT} */ + @UnsupportedAppUsage public int getMobileNetworkType() { return mMobileNetworkType; } @@ -100,6 +102,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setMobileNetworkType(int mobileNetworkType) { mMobileNetworkType = mobileNetworkType; } @@ -115,6 +118,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setRssi(int Rssi) { mRssi = Rssi; } @@ -130,6 +134,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setGsmErrorRate(int gsmErrorRate) { mGsmErrorRate = gsmErrorRate; } @@ -145,6 +150,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setCdmaDbm(int cdmaDbm) { mCdmaDbm = cdmaDbm; } @@ -160,6 +166,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setCdmaEcio(int cdmaEcio) { mCdmaEcio = cdmaEcio; } @@ -175,6 +182,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setEvdoDbm(int evdoDbm) { mEvdoDbm = evdoDbm; } @@ -190,6 +198,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setEvdoEcio(int evdoEcio) { mEvdoEcio = evdoEcio; } @@ -205,6 +214,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setEvdoSnr(int evdoSnr) { mEvdoSnr = evdoSnr; } @@ -220,6 +230,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setLteSignalStrength(int lteSignalStrength) { mLteSignalStrength = lteSignalStrength; } @@ -235,6 +246,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setLteRsrp(int lteRsrp) { mLteRsrp = lteRsrp; } @@ -250,6 +262,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setLteRsrq(int lteRsrq) { mLteRsrq = lteRsrq; } @@ -265,6 +278,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setLteRssnr(int lteRssnr) { mLteRssnr = lteRssnr; } @@ -280,6 +294,7 @@ public class MobileLinkQualityInfo extends LinkQualityInfo { /** * @hide */ + @UnsupportedAppUsage public void setLteCqi(int lteCqi) { mLteCqi = lteCqi; } diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java index 512e35e70726..142023d40c0e 100644 --- a/core/java/android/net/Network.java +++ b/core/java/android/net/Network.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.system.ErrnoException; @@ -59,6 +60,7 @@ public class Network implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public final int netId; // Objects used to perform per-network operations such as getSocketFactory @@ -103,6 +105,7 @@ public class Network implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public Network(int netId) { this.netId = netId; } diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java index e6b3fa81777e..114b423c3184 100644 --- a/core/java/android/net/NetworkAgent.java +++ b/core/java/android/net/NetworkAgent.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.net.ConnectivityManager.PacketKeepalive; import android.os.Bundle; @@ -351,6 +352,7 @@ public abstract class NetworkAgent extends Handler { /** * Called by the bearer code when it has new NetworkInfo data. */ + @UnsupportedAppUsage public void sendNetworkInfo(NetworkInfo networkInfo) { queueOrSendMessage(EVENT_NETWORK_INFO_CHANGED, new NetworkInfo(networkInfo)); } diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 72b4bfd57d96..fd1e5f23382b 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -19,6 +19,7 @@ package android.net; import android.annotation.IntDef; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.net.ConnectivityManager.NetworkCallback; import android.os.Parcel; import android.os.Parcelable; @@ -56,6 +57,7 @@ public final class NetworkCapabilities implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public NetworkCapabilities() { clearAll(); mNetworkCapabilities = DEFAULT_CAPABILITIES; @@ -103,6 +105,7 @@ public final class NetworkCapabilities implements Parcelable { * Represents the network's capabilities. If any are specified they will be satisfied * by any Network that matches all of them. */ + @UnsupportedAppUsage private long mNetworkCapabilities; /** @@ -371,6 +374,7 @@ public final class NetworkCapabilities implements Parcelable { * @return This NetworkCapabilities instance, to facilitate chaining. * @hide */ + @UnsupportedAppUsage public NetworkCapabilities addCapability(@NetCapability int capability) { checkValidCapability(capability); mNetworkCapabilities |= 1 << capability; @@ -407,6 +411,7 @@ public final class NetworkCapabilities implements Parcelable { * @return This NetworkCapabilities instance, to facilitate chaining. * @hide */ + @UnsupportedAppUsage public NetworkCapabilities removeCapability(@NetCapability int capability) { checkValidCapability(capability); final long mask = ~(1 << capability); @@ -659,6 +664,7 @@ public final class NetworkCapabilities implements Parcelable { * @return This NetworkCapabilities instance, to facilitate chaining. * @hide */ + @UnsupportedAppUsage public NetworkCapabilities addTransportType(@Transport int transportType) { checkValidTransportType(transportType); mTransportTypes |= 1 << transportType; @@ -898,6 +904,7 @@ public final class NetworkCapabilities implements Parcelable { * specifier. See {@link #setNetworkSpecifier}. * @hide */ + @UnsupportedAppUsage public NetworkSpecifier getNetworkSpecifier() { return mNetworkSpecifier; } @@ -930,6 +937,7 @@ public final class NetworkCapabilities implements Parcelable { * Signal strength. This is a signed integer, and higher values indicate better signal. * The exact units are bearer-dependent. For example, Wi-Fi uses RSSI. */ + @UnsupportedAppUsage private int mSignalStrength = SIGNAL_STRENGTH_UNSPECIFIED; /** @@ -945,6 +953,7 @@ public final class NetworkCapabilities implements Parcelable { * @param signalStrength the bearer-specific signal strength. * @hide */ + @UnsupportedAppUsage public NetworkCapabilities setSignalStrength(int signalStrength) { mSignalStrength = signalStrength; return this; @@ -955,6 +964,7 @@ public final class NetworkCapabilities implements Parcelable { * * @hide */ + @UnsupportedAppUsage public boolean hasSignalStrength() { return mSignalStrength > SIGNAL_STRENGTH_UNSPECIFIED; } @@ -965,6 +975,7 @@ public final class NetworkCapabilities implements Parcelable { * @return The bearer-specific signal strength. * @hide */ + @UnsupportedAppUsage public int getSignalStrength() { return mSignalStrength; } @@ -1544,6 +1555,7 @@ public final class NetworkCapabilities implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public static String transportNamesOf(@Transport int[] types) { StringJoiner joiner = new StringJoiner("|"); if (types != null) { diff --git a/core/java/android/net/NetworkFactory.java b/core/java/android/net/NetworkFactory.java index e2f8d1a3f08b..010d72f3b17a 100644 --- a/core/java/android/net/NetworkFactory.java +++ b/core/java/android/net/NetworkFactory.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.Handler; import android.os.Looper; @@ -106,6 +107,7 @@ public class NetworkFactory extends Handler { private int mRefCount = 0; private Messenger mMessenger = null; + @UnsupportedAppUsage public NetworkFactory(Looper looper, Context context, String logTag, NetworkCapabilities filter) { super(looper); @@ -287,6 +289,7 @@ public class NetworkFactory extends Handler { sendMessage(obtainMessage(CMD_CANCEL_REQUEST, networkRequest)); } + @UnsupportedAppUsage public void setScoreFilter(int score) { sendMessage(obtainMessage(CMD_SET_SCORE, score, 0)); } @@ -304,6 +307,7 @@ public class NetworkFactory extends Handler { Log.d(LOG_TAG, s); } + @UnsupportedAppUsage public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); pw.println(toString()); diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java index 999771a18ec0..d912dd105fe9 100644 --- a/core/java/android/net/NetworkInfo.java +++ b/core/java/android/net/NetworkInfo.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -129,6 +130,7 @@ public class NetworkInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public NetworkInfo(int type, int subtype, String typeName, String subtypeName) { if (!ConnectivityManager.isNetworkTypeValid(type) && type != ConnectivityManager.TYPE_NONE) { @@ -143,6 +145,7 @@ public class NetworkInfo implements Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public NetworkInfo(NetworkInfo source) { if (source != null) { synchronized (source) { @@ -209,6 +212,7 @@ public class NetworkInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public void setSubtype(int subtype, String subtypeName) { synchronized (this) { mSubtype = subtype; @@ -317,6 +321,7 @@ public class NetworkInfo implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public void setIsAvailable(boolean isAvailable) { synchronized (this) { mIsAvailable = isAvailable; @@ -347,6 +352,7 @@ public class NetworkInfo implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public void setFailover(boolean isFailover) { synchronized (this) { mIsFailover = isFailover; @@ -377,6 +383,7 @@ public class NetworkInfo implements Parcelable { */ @VisibleForTesting @Deprecated + @UnsupportedAppUsage public void setRoaming(boolean isRoaming) { synchronized (this) { mIsRoaming = isRoaming; @@ -422,6 +429,7 @@ public class NetworkInfo implements Parcelable { * @hide */ @Deprecated + @UnsupportedAppUsage public void setDetailedState(DetailedState detailedState, String reason, String extraInfo) { synchronized (this) { this.mDetailedState = detailedState; diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java index e84c85ee8edb..f8973ebaa0fc 100644 --- a/core/java/android/net/NetworkPolicy.java +++ b/core/java/android/net/NetworkPolicy.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.BackupUtils; @@ -49,14 +50,19 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { public static final long LIMIT_DISABLED = -1; public static final long SNOOZE_NEVER = -1; + @UnsupportedAppUsage public NetworkTemplate template; public RecurrenceRule cycleRule; + @UnsupportedAppUsage public long warningBytes = WARNING_DISABLED; + @UnsupportedAppUsage public long limitBytes = LIMIT_DISABLED; public long lastWarningSnooze = SNOOZE_NEVER; public long lastLimitSnooze = SNOOZE_NEVER; public long lastRapidSnooze = SNOOZE_NEVER; + @UnsupportedAppUsage @Deprecated public boolean metered = true; + @UnsupportedAppUsage public boolean inferred = false; private static final long DEFAULT_MTU = 1500; @@ -77,6 +83,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { } @Deprecated + @UnsupportedAppUsage public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone, long warningBytes, long limitBytes, long lastWarningSnooze, long lastLimitSnooze, boolean metered, boolean inferred) { @@ -143,6 +150,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { /** * Test if given measurement is over {@link #warningBytes}. */ + @UnsupportedAppUsage public boolean isOverWarning(long totalBytes) { return warningBytes != WARNING_DISABLED && totalBytes >= warningBytes; } @@ -151,6 +159,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { * Test if given measurement is near enough to {@link #limitBytes} to be * considered over-limit. */ + @UnsupportedAppUsage public boolean isOverLimit(long totalBytes) { // over-estimate, since kernel will trigger limit once first packet // trips over limit. @@ -161,6 +170,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { /** * Clear any existing snooze values, setting to {@link #SNOOZE_NEVER}. */ + @UnsupportedAppUsage public void clearSnooze() { lastWarningSnooze = SNOOZE_NEVER; lastLimitSnooze = SNOOZE_NEVER; @@ -175,6 +185,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { } @Override + @UnsupportedAppUsage public int compareTo(NetworkPolicy another) { if (another == null || another.limitBytes == LIMIT_DISABLED) { // other value is missing or disabled; we win @@ -225,6 +236,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { .append("}").toString(); } + @UnsupportedAppUsage public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() { @Override public NetworkPolicy createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 75fd77e70a1b..d5fb2e7d4d69 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -19,6 +19,7 @@ package android.net; import static android.content.pm.PackageManager.GET_SIGNATURES; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; @@ -121,6 +122,7 @@ public class NetworkPolicyManager { public static final int OVERRIDE_CONGESTED = 1 << 1; private final Context mContext; + @UnsupportedAppUsage private INetworkPolicyManager mService; public NetworkPolicyManager(Context context, INetworkPolicyManager service) { @@ -131,6 +133,7 @@ public class NetworkPolicyManager { mService = service; } + @UnsupportedAppUsage public static NetworkPolicyManager from(Context context) { return (NetworkPolicyManager) context.getSystemService(Context.NETWORK_POLICY_SERVICE); } @@ -141,6 +144,7 @@ public class NetworkPolicyManager { * @param policy should be {@link #POLICY_NONE} or any combination of {@code POLICY_} flags, * although it is not validated. */ + @UnsupportedAppUsage public void setUidPolicy(int uid, int policy) { try { mService.setUidPolicy(uid, policy); @@ -181,6 +185,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public int getUidPolicy(int uid) { try { return mService.getUidPolicy(uid); @@ -189,6 +194,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public int[] getUidsWithPolicy(int policy) { try { return mService.getUidsWithPolicy(policy); @@ -197,6 +203,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public void registerListener(INetworkPolicyListener listener) { try { mService.registerListener(listener); @@ -205,6 +212,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public void unregisterListener(INetworkPolicyListener listener) { try { mService.unregisterListener(listener); @@ -221,6 +229,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public NetworkPolicy[] getNetworkPolicies() { try { return mService.getNetworkPolicies(mContext.getOpPackageName()); @@ -229,6 +238,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public void setRestrictBackground(boolean restrictBackground) { try { mService.setRestrictBackground(restrictBackground); @@ -237,6 +247,7 @@ public class NetworkPolicyManager { } } + @UnsupportedAppUsage public boolean getRestrictBackground() { try { return mService.getRestrictBackground(); diff --git a/core/java/android/net/NetworkQuotaInfo.java b/core/java/android/net/NetworkQuotaInfo.java index b95f1d983180..e7182f7694c1 100644 --- a/core/java/android/net/NetworkQuotaInfo.java +++ b/core/java/android/net/NetworkQuotaInfo.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -36,14 +37,17 @@ public class NetworkQuotaInfo implements Parcelable { public NetworkQuotaInfo(Parcel in) { } + @UnsupportedAppUsage public long getEstimatedBytes() { return 0; } + @UnsupportedAppUsage public long getSoftLimitBytes() { return NO_LIMIT; } + @UnsupportedAppUsage public long getHardLimitBytes() { return NO_LIMIT; } @@ -57,6 +61,7 @@ public class NetworkQuotaInfo implements Parcelable { public void writeToParcel(Parcel out, int flags) { } + @UnsupportedAppUsage public static final Creator<NetworkQuotaInfo> CREATOR = new Creator<NetworkQuotaInfo>() { @Override public NetworkQuotaInfo createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java index 16c2342a89b5..04b6b44013b9 100644 --- a/core/java/android/net/NetworkRequest.java +++ b/core/java/android/net/NetworkRequest.java @@ -17,6 +17,7 @@ package android.net; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.net.NetworkCapabilities.NetCapability; import android.net.NetworkCapabilities.Transport; import android.os.Parcel; @@ -38,6 +39,7 @@ public class NetworkRequest implements Parcelable { * The {@link NetworkCapabilities} that define this request. * @hide */ + @UnsupportedAppUsage public final @NonNull NetworkCapabilities networkCapabilities; /** @@ -46,6 +48,7 @@ public class NetworkRequest implements Parcelable { * the request. * @hide */ + @UnsupportedAppUsage public final int requestId; /** @@ -53,6 +56,7 @@ public class NetworkRequest implements Parcelable { * Causes CONNECTIVITY_ACTION broadcasts to be sent. * @hide */ + @UnsupportedAppUsage public final int legacyType; /** @@ -241,6 +245,7 @@ public class NetworkRequest implements Parcelable { * @return The builder to facilitate chaining. * @hide */ + @UnsupportedAppUsage public Builder clearCapabilities() { mNetworkCapabilities.clearAll(); return this; @@ -339,6 +344,7 @@ public class NetworkRequest implements Parcelable { * @param signalStrength the bearer-specific signal strength. * @hide */ + @UnsupportedAppUsage public Builder setSignalStrength(int signalStrength) { mNetworkCapabilities.setSignalStrength(signalStrength); return this; diff --git a/core/java/android/net/NetworkState.java b/core/java/android/net/NetworkState.java index 321f9718ee8e..c545ee205df8 100644 --- a/core/java/android/net/NetworkState.java +++ b/core/java/android/net/NetworkState.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.Slog; @@ -33,6 +34,7 @@ public class NetworkState implements Parcelable { public final NetworkInfo networkInfo; public final LinkProperties linkProperties; public final NetworkCapabilities networkCapabilities; + @UnsupportedAppUsage public final Network network; public final String subscriberId; public final String networkId; @@ -58,6 +60,7 @@ public class NetworkState implements Parcelable { } } + @UnsupportedAppUsage public NetworkState(Parcel in) { networkInfo = in.readParcelable(null); linkProperties = in.readParcelable(null); @@ -82,6 +85,7 @@ public class NetworkState implements Parcelable { out.writeString(networkId); } + @UnsupportedAppUsage public static final Creator<NetworkState> CREATOR = new Creator<NetworkState>() { @Override public NetworkState createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java index edf9bc1c6b39..e270fc2e3923 100644 --- a/core/java/android/net/NetworkStats.java +++ b/core/java/android/net/NetworkStats.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; @@ -110,25 +111,43 @@ public class NetworkStats implements Parcelable { * generated. */ private long elapsedRealtime; + @UnsupportedAppUsage private int size; + @UnsupportedAppUsage private int capacity; + @UnsupportedAppUsage private String[] iface; + @UnsupportedAppUsage private int[] uid; + @UnsupportedAppUsage private int[] set; + @UnsupportedAppUsage private int[] tag; + @UnsupportedAppUsage private int[] metered; + @UnsupportedAppUsage private int[] roaming; + @UnsupportedAppUsage private int[] defaultNetwork; + @UnsupportedAppUsage private long[] rxBytes; + @UnsupportedAppUsage private long[] rxPackets; + @UnsupportedAppUsage private long[] txBytes; + @UnsupportedAppUsage private long[] txPackets; + @UnsupportedAppUsage private long[] operations; public static class Entry { + @UnsupportedAppUsage public String iface; + @UnsupportedAppUsage public int uid; + @UnsupportedAppUsage public int set; + @UnsupportedAppUsage public int tag; /** * Note that this is only populated w/ the default value when read from /proc or written @@ -148,12 +167,17 @@ public class NetworkStats implements Parcelable { * getSummary(). */ public int defaultNetwork; + @UnsupportedAppUsage public long rxBytes; + @UnsupportedAppUsage public long rxPackets; + @UnsupportedAppUsage public long txBytes; + @UnsupportedAppUsage public long txPackets; public long operations; + @UnsupportedAppUsage public Entry() { this(IFACE_ALL, UID_ALL, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0L); } @@ -240,6 +264,7 @@ public class NetworkStats implements Parcelable { } } + @UnsupportedAppUsage public NetworkStats(long elapsedRealtime, int initialSize) { this.elapsedRealtime = elapsedRealtime; this.size = 0; @@ -263,6 +288,7 @@ public class NetworkStats implements Parcelable { } } + @UnsupportedAppUsage public NetworkStats(Parcel parcel) { elapsedRealtime = parcel.readLong(); size = parcel.readInt(); @@ -399,6 +425,7 @@ public class NetworkStats implements Parcelable { /** * Return specific stats entry. */ + @UnsupportedAppUsage public Entry getValues(int i, Entry recycle) { final Entry entry = recycle != null ? recycle : new Entry(); entry.iface = iface[i]; @@ -432,6 +459,7 @@ public class NetworkStats implements Parcelable { return SystemClock.elapsedRealtime() - elapsedRealtime; } + @UnsupportedAppUsage public int size() { return size; } @@ -460,6 +488,7 @@ public class NetworkStats implements Parcelable { * {@link #findIndex(String, int, int, int, int)} is unable to find match. Can * also be used to subtract values from existing rows. */ + @UnsupportedAppUsage public NetworkStats combineValues(Entry entry) { final int i = findIndex(entry.iface, entry.uid, entry.set, entry.tag, entry.metered, entry.roaming, entry.defaultNetwork); @@ -479,6 +508,7 @@ public class NetworkStats implements Parcelable { /** * Combine all values from another {@link NetworkStats} into this object. */ + @UnsupportedAppUsage public void combineAllValues(NetworkStats another) { NetworkStats.Entry entry = null; for (int i = 0; i < another.size; i++) { @@ -564,6 +594,7 @@ public class NetworkStats implements Parcelable { /** * Return list of unique UIDs known by this data structure. */ + @UnsupportedAppUsage public int[] getUniqueUids() { final SparseBooleanArray uids = new SparseBooleanArray(); for (int uid : this.uid) { @@ -582,6 +613,7 @@ public class NetworkStats implements Parcelable { * Return total bytes represented by this snapshot object, usually used when * checking if a {@link #subtract(NetworkStats)} delta passes a threshold. */ + @UnsupportedAppUsage public long getTotalBytes() { final Entry entry = getTotal(null); return entry.rxBytes + entry.txBytes; @@ -590,6 +622,7 @@ public class NetworkStats implements Parcelable { /** * Return total of all fields represented by this snapshot object. */ + @UnsupportedAppUsage public Entry getTotal(Entry recycle) { return getTotal(recycle, null, UID_ALL, false); } @@ -598,6 +631,7 @@ public class NetworkStats implements Parcelable { * Return total of all fields represented by this snapshot object matching * the requested {@link #uid}. */ + @UnsupportedAppUsage public Entry getTotal(Entry recycle, int limitUid) { return getTotal(recycle, null, limitUid, false); } @@ -610,6 +644,7 @@ public class NetworkStats implements Parcelable { return getTotal(recycle, limitIface, UID_ALL, false); } + @UnsupportedAppUsage public Entry getTotalIncludingTags(Entry recycle) { return getTotal(recycle, null, UID_ALL, true); } @@ -1085,6 +1120,7 @@ public class NetworkStats implements Parcelable { return 0; } + @UnsupportedAppUsage public static final Creator<NetworkStats> CREATOR = new Creator<NetworkStats>() { @Override public NetworkStats createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java index a13ad659e767..d53e0326aeb1 100644 --- a/core/java/android/net/NetworkStatsHistory.java +++ b/core/java/android/net/NetworkStatsHistory.java @@ -30,6 +30,7 @@ import static android.text.format.DateUtils.SECOND_IN_MILLIS; import static com.android.internal.util.ArrayUtils.total; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.service.NetworkStatsHistoryBucketProto; @@ -89,16 +90,23 @@ public class NetworkStatsHistory implements Parcelable { public static class Entry { public static final long UNKNOWN = -1; + @UnsupportedAppUsage public long bucketDuration; + @UnsupportedAppUsage public long bucketStart; public long activeTime; + @UnsupportedAppUsage public long rxBytes; + @UnsupportedAppUsage public long rxPackets; + @UnsupportedAppUsage public long txBytes; + @UnsupportedAppUsage public long txPackets; public long operations; } + @UnsupportedAppUsage public NetworkStatsHistory(long bucketDuration) { this(bucketDuration, 10, FIELD_ALL); } @@ -125,6 +133,7 @@ public class NetworkStatsHistory implements Parcelable { recordEntireHistory(existing); } + @UnsupportedAppUsage public NetworkStatsHistory(Parcel in) { bucketDuration = in.readLong(); bucketStart = readLongArray(in); @@ -210,6 +219,7 @@ public class NetworkStatsHistory implements Parcelable { return 0; } + @UnsupportedAppUsage public int size() { return bucketCount; } @@ -218,6 +228,7 @@ public class NetworkStatsHistory implements Parcelable { return bucketDuration; } + @UnsupportedAppUsage public long getStart() { if (bucketCount > 0) { return bucketStart[0]; @@ -226,6 +237,7 @@ public class NetworkStatsHistory implements Parcelable { } } + @UnsupportedAppUsage public long getEnd() { if (bucketCount > 0) { return bucketStart[bucketCount - 1] + bucketDuration; @@ -245,6 +257,7 @@ public class NetworkStatsHistory implements Parcelable { * Return index of bucket that contains or is immediately before the * requested time. */ + @UnsupportedAppUsage public int getIndexBefore(long time) { int index = Arrays.binarySearch(bucketStart, 0, bucketCount, time); if (index < 0) { @@ -272,6 +285,7 @@ public class NetworkStatsHistory implements Parcelable { /** * Return specific stats entry. */ + @UnsupportedAppUsage public Entry getValues(int i, Entry recycle) { final Entry entry = recycle != null ? recycle : new Entry(); entry.bucketStart = bucketStart[i]; @@ -373,6 +387,7 @@ public class NetworkStatsHistory implements Parcelable { * Record an entire {@link NetworkStatsHistory} into this history. Usually * for combining together stats for external reporting. */ + @UnsupportedAppUsage public void recordEntireHistory(NetworkStatsHistory input) { recordHistory(input, Long.MIN_VALUE, Long.MAX_VALUE); } @@ -509,6 +524,7 @@ public class NetworkStatsHistory implements Parcelable { * Return interpolated data usage across the requested range. Interpolates * across buckets, so values may be rounded slightly. */ + @UnsupportedAppUsage public Entry getValues(long start, long end, Entry recycle) { return getValues(start, end, Long.MAX_VALUE, recycle); } @@ -517,6 +533,7 @@ public class NetworkStatsHistory implements Parcelable { * Return interpolated data usage across the requested range. Interpolates * across buckets, so values may be rounded slightly. */ + @UnsupportedAppUsage public Entry getValues(long start, long end, long now, Entry recycle) { final Entry entry = recycle != null ? recycle : new Entry(); entry.bucketDuration = end - start; @@ -701,6 +718,7 @@ public class NetworkStatsHistory implements Parcelable { return writer.toString(); } + @UnsupportedAppUsage public static final Creator<NetworkStatsHistory> CREATOR = new Creator<NetworkStatsHistory>() { @Override public NetworkStatsHistory createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java index 74233fd990dc..bb75c6343659 100644 --- a/core/java/android/net/NetworkTemplate.java +++ b/core/java/android/net/NetworkTemplate.java @@ -34,6 +34,7 @@ import static android.net.NetworkStats.ROAMING_NO; import static android.net.NetworkStats.ROAMING_YES; import static android.net.wifi.WifiInfo.removeDoubleQuotes; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.BackupUtils; @@ -96,6 +97,7 @@ public class NetworkTemplate implements Parcelable { * Template to match {@link ConnectivityManager#TYPE_MOBILE} networks with * the given IMSI. */ + @UnsupportedAppUsage public static NetworkTemplate buildTemplateMobileAll(String subscriberId) { return new NetworkTemplate(MATCH_MOBILE, subscriberId, null); } @@ -104,6 +106,7 @@ public class NetworkTemplate implements Parcelable { * Template to match {@link ConnectivityManager#TYPE_MOBILE} networks, * regardless of IMSI. */ + @UnsupportedAppUsage public static NetworkTemplate buildTemplateMobileWildcard() { return new NetworkTemplate(MATCH_MOBILE_WILDCARD, null, null); } @@ -112,11 +115,13 @@ public class NetworkTemplate implements Parcelable { * Template to match all {@link ConnectivityManager#TYPE_WIFI} networks, * regardless of SSID. */ + @UnsupportedAppUsage public static NetworkTemplate buildTemplateWifiWildcard() { return new NetworkTemplate(MATCH_WIFI_WILDCARD, null, null); } @Deprecated + @UnsupportedAppUsage public static NetworkTemplate buildTemplateWifi() { return buildTemplateWifiWildcard(); } @@ -133,6 +138,7 @@ public class NetworkTemplate implements Parcelable { * Template to combine all {@link ConnectivityManager#TYPE_ETHERNET} style * networks together. */ + @UnsupportedAppUsage public static NetworkTemplate buildTemplateEthernet() { return new NetworkTemplate(MATCH_ETHERNET, null, null); } @@ -173,6 +179,7 @@ public class NetworkTemplate implements Parcelable { private final int mRoaming; private final int mDefaultNetwork; + @UnsupportedAppUsage public NetworkTemplate(int matchRule, String subscriberId, String networkId) { this(matchRule, subscriberId, new String[] { subscriberId }, networkId); } @@ -293,10 +300,12 @@ public class NetworkTemplate implements Parcelable { } } + @UnsupportedAppUsage public int getMatchRule() { return mMatchRule; } + @UnsupportedAppUsage public String getSubscriberId() { return mSubscriberId; } @@ -460,6 +469,7 @@ public class NetworkTemplate implements Parcelable { * active merge set [A,B], we'd return a new template that primarily matches * A, but also matches B. */ + @UnsupportedAppUsage public static NetworkTemplate normalize(NetworkTemplate template, String[] merged) { if (template.isMatchRuleMobile() && ArrayUtils.contains(merged, template.mSubscriberId)) { // Requested template subscriber is part of the merge group; return @@ -471,6 +481,7 @@ public class NetworkTemplate implements Parcelable { } } + @UnsupportedAppUsage public static final Creator<NetworkTemplate> CREATOR = new Creator<NetworkTemplate>() { @Override public NetworkTemplate createFromParcel(Parcel in) { diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index dc1f8054f6a7..599ccb287a26 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.util.Log; import android.util.Pair; @@ -43,6 +44,7 @@ public class NetworkUtils { /** * Attaches a socket filter that accepts DHCP packets to the given socket. */ + @UnsupportedAppUsage public native static void attachDhcpFilter(FileDescriptor fd) throws SocketException; /** @@ -50,6 +52,7 @@ public class NetworkUtils { * @param fd the socket's {@link FileDescriptor}. * @param packetType the hardware address type, one of ARPHRD_*. */ + @UnsupportedAppUsage public native static void attachRaFilter(FileDescriptor fd, int packetType) throws SocketException; /** @@ -60,6 +63,7 @@ public class NetworkUtils { * @param fd the socket's {@link FileDescriptor}. * @param packetType the hardware address type, one of ARPHRD_*. */ + @UnsupportedAppUsage public native static void attachControlPacketFilter(FileDescriptor fd, int packetType) throws SocketException; @@ -108,6 +112,7 @@ public class NetworkUtils { * this socket will go directly to the underlying network, so its traffic will not be * forwarded through the VPN. */ + @UnsupportedAppUsage public static boolean protectFromVpn(FileDescriptor fd) { return protectFromVpn(fd.getInt$()); } @@ -131,6 +136,7 @@ public class NetworkUtils { * or {@link #intToInet4AddressHTL(int)} */ @Deprecated + @UnsupportedAppUsage public static InetAddress intToInetAddress(int hostAddress) { return intToInet4AddressHTL(hostAddress); } @@ -209,6 +215,7 @@ public class NetworkUtils { * or {@link #prefixLengthToV4NetmaskIntHTL(int)} */ @Deprecated + @UnsupportedAppUsage public static int prefixLengthToNetmaskInt(int prefixLength) throws IllegalArgumentException { return prefixLengthToV4NetmaskIntHTL(prefixLength); @@ -255,6 +262,7 @@ public class NetworkUtils { * @throws IllegalArgumentException the specified netmask was not contiguous. * @hide */ + @UnsupportedAppUsage public static int netmaskToPrefixLength(Inet4Address netmask) { // inetAddressToInt returns an int in *network* byte order. int i = Integer.reverseBytes(inetAddressToInt(netmask)); @@ -275,6 +283,7 @@ public class NetworkUtils { * @return the InetAddress * @hide */ + @UnsupportedAppUsage public static InetAddress numericToInetAddress(String addrString) throws IllegalArgumentException { return InetAddress.parseNumericAddress(addrString); @@ -349,6 +358,7 @@ public class NetworkUtils { /** * Returns the implicit netmask of an IPv4 address, as was the custom before 1993. */ + @UnsupportedAppUsage public static int getImplicitNetmask(Inet4Address address) { int firstByte = address.getAddress()[0] & 0xff; // Convert to an unsigned value. if (firstByte < 128) { @@ -439,6 +449,7 @@ public class NetworkUtils { * @param addr a string representing an ip addr * @return a string propertly trimmed */ + @UnsupportedAppUsage public static String trimV4AddrZeros(String addr) { if (addr == null) return null; String[] octets = addr.split("\\."); diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java index e3551b0b2ca1..4600942806a8 100644 --- a/core/java/android/net/Proxy.java +++ b/core/java/android/net/Proxy.java @@ -18,6 +18,7 @@ package android.net; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.text.TextUtils; import android.util.Log; @@ -106,6 +107,7 @@ public final class Proxy { * A null value means that no host is to be used. * {@hide} */ + @UnsupportedAppUsage public static final java.net.Proxy getProxy(Context ctx, String url) { String host = ""; if ((url != null) && !isLocalHost(host)) { @@ -239,6 +241,7 @@ public final class Proxy { } /** @hide */ + @UnsupportedAppUsage public static final void setHttpProxySystemProperty(ProxyInfo p) { String host = null; String port = null; diff --git a/core/java/android/net/ProxyInfo.java b/core/java/android/net/ProxyInfo.java index 5f5e6235eb8b..e926fda336f4 100644 --- a/core/java/android/net/ProxyInfo.java +++ b/core/java/android/net/ProxyInfo.java @@ -17,6 +17,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -91,6 +92,7 @@ public class ProxyInfo implements Parcelable { * Create a ProxyProperties that points at a HTTP Proxy. * @hide */ + @UnsupportedAppUsage public ProxyInfo(String host, int port, String exclList) { mHost = host; mPort = port; diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java index 90a2460ff20c..3e73d3d2d997 100644 --- a/core/java/android/net/RouteInfo.java +++ b/core/java/android/net/RouteInfo.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -55,6 +56,7 @@ public final class RouteInfo implements Parcelable { /** * The gateway address for this route. */ + @UnsupportedAppUsage private final InetAddress mGateway; /** @@ -79,6 +81,7 @@ public final class RouteInfo implements Parcelable { // Derived data members. // TODO: remove these. + @UnsupportedAppUsage private final boolean mIsHost; private final boolean mHasGateway; @@ -160,6 +163,7 @@ public final class RouteInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public RouteInfo(IpPrefix destination, InetAddress gateway, String iface) { this(destination, gateway, iface, RTN_UNICAST); } @@ -167,6 +171,7 @@ public final class RouteInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public RouteInfo(LinkAddress destination, InetAddress gateway, String iface) { this(destination == null ? null : new IpPrefix(destination.getAddress(), destination.getPrefixLength()), @@ -197,6 +202,7 @@ public final class RouteInfo implements Parcelable { * * TODO: Remove this. */ + @UnsupportedAppUsage public RouteInfo(LinkAddress destination, InetAddress gateway) { this(destination, gateway, null); } @@ -208,6 +214,7 @@ public final class RouteInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public RouteInfo(InetAddress gateway) { this((IpPrefix) null, gateway, null); } @@ -258,6 +265,7 @@ public final class RouteInfo implements Parcelable { } } + @UnsupportedAppUsage private boolean isHost() { return (mDestination.getAddress() instanceof Inet4Address && mDestination.getPrefixLength() == 32) || @@ -355,6 +363,7 @@ public final class RouteInfo implements Parcelable { * @return {@code true} if a gateway is specified * @hide */ + @UnsupportedAppUsage public boolean hasGateway() { return mHasGateway; } @@ -379,6 +388,7 @@ public final class RouteInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static RouteInfo selectBestRoute(Collection<RouteInfo> routes, InetAddress dest) { if ((routes == null) || (dest == null)) return null; diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index d7eb477ad83b..31494d99738b 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.SystemProperties; import android.util.Log; @@ -86,8 +87,10 @@ import javax.net.ssl.X509TrustManager; * requires root access. */ public class SSLCertificateSocketFactory extends SSLSocketFactory { + @UnsupportedAppUsage private static final String TAG = "SSLCertificateSocketFactory"; + @UnsupportedAppUsage private static final TrustManager[] INSECURE_TRUST_MANAGER = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } @@ -96,16 +99,26 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { } }; + @UnsupportedAppUsage private SSLSocketFactory mInsecureFactory = null; + @UnsupportedAppUsage private SSLSocketFactory mSecureFactory = null; + @UnsupportedAppUsage private TrustManager[] mTrustManagers = null; + @UnsupportedAppUsage private KeyManager[] mKeyManagers = null; + @UnsupportedAppUsage private byte[] mNpnProtocols = null; + @UnsupportedAppUsage private byte[] mAlpnProtocols = null; + @UnsupportedAppUsage private PrivateKey mChannelIdPrivateKey = null; + @UnsupportedAppUsage private final int mHandshakeTimeoutMillis; + @UnsupportedAppUsage private final SSLClientSessionCache mSessionCache; + @UnsupportedAppUsage private final boolean mSecure; /** @deprecated Use {@link #getDefault(int)} instead. */ @@ -114,6 +127,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { this(handshakeTimeoutMillis, null, true); } + @UnsupportedAppUsage private SSLCertificateSocketFactory( int handshakeTimeoutMillis, SSLSessionCache cache, boolean secure) { mHandshakeTimeoutMillis = handshakeTimeoutMillis; @@ -201,6 +215,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * * @hide */ + @UnsupportedAppUsage public static void verifyHostname(Socket socket, String hostname) throws IOException { if (!(socket instanceof SSLSocket)) { throw new IllegalArgumentException("Attempt to verify non-SSL socket"); @@ -222,6 +237,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { } } + @UnsupportedAppUsage private SSLSocketFactory makeSocketFactory( KeyManager[] keyManagers, TrustManager[] trustManagers) { try { @@ -235,11 +251,13 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { } } + @UnsupportedAppUsage private static boolean isSslCheckRelaxed() { return RoSystemProperties.DEBUGGABLE && SystemProperties.getBoolean("socket.relaxsslcheck", false); } + @UnsupportedAppUsage private synchronized SSLSocketFactory getDelegate() { // Relax the SSL check if instructed (for this factory, or systemwide) if (!mSecure || isSslCheckRelaxed()) { @@ -311,6 +329,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * must be non-empty and of length less than 256. * @hide */ + @UnsupportedAppUsage public void setAlpnProtocols(byte[][] protocols) { this.mAlpnProtocols = toLengthPrefixedList(protocols); } @@ -365,6 +384,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * @throws IllegalArgumentException if the socket was not created by this factory. * @hide */ + @UnsupportedAppUsage public byte[] getAlpnSelectedProtocol(Socket socket) { return castToOpenSSLSocket(socket).getAlpnSelectedProtocol(); } @@ -390,6 +410,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * * @hide */ + @UnsupportedAppUsage public void setChannelIdPrivateKey(PrivateKey privateKey) { mChannelIdPrivateKey = privateKey; } @@ -429,11 +450,13 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * * @hide */ + @UnsupportedAppUsage public void setSoWriteTimeout(Socket socket, int writeTimeoutMilliseconds) throws SocketException { castToOpenSSLSocket(socket).setSoWriteTimeout(writeTimeoutMilliseconds); } + @UnsupportedAppUsage private static OpenSSLSocketImpl castToOpenSSLSocket(Socket socket) { if (!(socket instanceof OpenSSLSocketImpl)) { throw new IllegalArgumentException("Socket not created by this factory: " diff --git a/core/java/android/net/SSLSessionCache.java b/core/java/android/net/SSLSessionCache.java index 65db2c381e1d..9667e82c988c 100644 --- a/core/java/android/net/SSLSessionCache.java +++ b/core/java/android/net/SSLSessionCache.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.util.Log; @@ -39,6 +40,7 @@ import javax.net.ssl.SSLSessionContext; */ public final class SSLSessionCache { private static final String TAG = "SSLSessionCache"; + @UnsupportedAppUsage /* package */ final SSLClientSessionCache mSessionCache; /** diff --git a/core/java/android/net/SntpClient.java b/core/java/android/net/SntpClient.java index ddf63caf06bf..10c0ce25e97b 100644 --- a/core/java/android/net/SntpClient.java +++ b/core/java/android/net/SntpClient.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.SystemClock; import android.util.Log; @@ -175,6 +176,7 @@ public class SntpClient { } @Deprecated + @UnsupportedAppUsage public boolean requestTime(String host, int timeout) { Log.w(TAG, "Shame on you for calling the hidden API requestTime()!"); return false; @@ -185,6 +187,7 @@ public class SntpClient { * * @return time value computed from NTP server response. */ + @UnsupportedAppUsage public long getNtpTime() { return mNtpTime; } @@ -195,6 +198,7 @@ public class SntpClient { * * @return reference clock corresponding to the NTP time. */ + @UnsupportedAppUsage public long getNtpTimeReference() { return mNtpTimeReference; } @@ -204,6 +208,7 @@ public class SntpClient { * * @return round trip time in milliseconds. */ + @UnsupportedAppUsage public long getRoundTripTime() { return mRoundTripTime; } diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java index 58b1b88d8976..3aa56b90251f 100644 --- a/core/java/android/net/StaticIpConfiguration.java +++ b/core/java/android/net/StaticIpConfiguration.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.net.LinkAddress; import android.os.Parcelable; import android.os.Parcel; @@ -46,11 +47,16 @@ import java.util.Objects; * @hide */ public class StaticIpConfiguration implements Parcelable { + @UnsupportedAppUsage public LinkAddress ipAddress; + @UnsupportedAppUsage public InetAddress gateway; + @UnsupportedAppUsage public final ArrayList<InetAddress> dnsServers; + @UnsupportedAppUsage public String domains; + @UnsupportedAppUsage public StaticIpConfiguration() { dnsServers = new ArrayList<InetAddress>(); } @@ -80,6 +86,7 @@ public class StaticIpConfiguration implements Parcelable { * route to the gateway as well. This configuration is arguably invalid, but it used to work * in K and earlier, and other OSes appear to accept it. */ + @UnsupportedAppUsage public List<RouteInfo> getRoutes(String iface) { List<RouteInfo> routes = new ArrayList<RouteInfo>(3); if (ipAddress != null) { diff --git a/core/java/android/net/StringNetworkSpecifier.java b/core/java/android/net/StringNetworkSpecifier.java index cb7f6bfce713..b5d12f9d5b5d 100644 --- a/core/java/android/net/StringNetworkSpecifier.java +++ b/core/java/android/net/StringNetworkSpecifier.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -29,6 +30,7 @@ public final class StringNetworkSpecifier extends NetworkSpecifier implements Pa /** * Arbitrary string used to pass (additional) information to the network factory. */ + @UnsupportedAppUsage public final String specifier; public StringNetworkSpecifier(String specifier) { diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java index f033268698e6..a463afa2e110 100644 --- a/core/java/android/net/TrafficStats.java +++ b/core/java/android/net/TrafficStats.java @@ -19,6 +19,7 @@ package android.net; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.DownloadManager; import android.app.backup.BackupManager; import android.app.usage.NetworkStatsManager; @@ -141,6 +142,7 @@ public class TrafficStats { private static INetworkStatsService sStatsService; + @UnsupportedAppUsage private synchronized static INetworkStatsService getStatsService() { if (sStatsService == null) { sStatsService = INetworkStatsService.Stub.asInterface( @@ -536,6 +538,7 @@ public class TrafficStats { } /** {@hide} */ + @UnsupportedAppUsage public static long getMobileTcpRxPackets() { long total = 0; for (String iface : getMobileIfaces()) { @@ -551,6 +554,7 @@ public class TrafficStats { } /** {@hide} */ + @UnsupportedAppUsage public static long getMobileTcpTxPackets() { long total = 0; for (String iface : getMobileIfaces()) { @@ -584,6 +588,7 @@ public class TrafficStats { } /** {@hide} */ + @UnsupportedAppUsage public static long getTxBytes(String iface) { try { return getStatsService().getIfaceStats(iface, TYPE_TX_BYTES); @@ -593,6 +598,7 @@ public class TrafficStats { } /** {@hide} */ + @UnsupportedAppUsage public static long getRxBytes(String iface) { try { return getStatsService().getIfaceStats(iface, TYPE_RX_BYTES); @@ -948,6 +954,7 @@ public class TrafficStats { * Interfaces are never removed from this list, so counters should always be * monotonic. */ + @UnsupportedAppUsage private static String[] getMobileIfaces() { try { return getStatsService().getMobileIfaces(); diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java index b7f5cdfabc46..9bcc6001615f 100644 --- a/core/java/android/net/Uri.java +++ b/core/java/android/net/Uri.java @@ -17,6 +17,7 @@ package android.net; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Intent; import android.os.Environment; import android.os.Parcel; @@ -133,6 +134,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { /** * Prevents external subclassing. */ + @UnsupportedAppUsage private Uri() {} /** @@ -376,6 +378,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { * to logs and other places where PII should be avoided. * @hide */ + @UnsupportedAppUsage public String toSafeString() { String scheme = getScheme(); String ssp = getSchemeSpecificPart(); @@ -2331,6 +2334,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { * * @hide */ + @UnsupportedAppUsage public Uri getCanonicalUri() { if ("file".equals(getScheme())) { final String canonicalPath; diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 712576f304d9..f0c0462cec18 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -21,6 +21,7 @@ import static android.system.OsConstants.AF_INET6; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.PendingIntent; import android.app.Service; @@ -440,7 +441,9 @@ public class VpnService extends Service { public class Builder { private final VpnConfig mConfig = new VpnConfig(); + @UnsupportedAppUsage private final List<LinkAddress> mAddresses = new ArrayList<LinkAddress>(); + @UnsupportedAppUsage private final List<RouteInfo> mRoutes = new ArrayList<RouteInfo>(); public Builder() { diff --git a/core/java/android/net/WebAddress.java b/core/java/android/net/WebAddress.java index 24d4eb8907fa..8026d765ee0c 100644 --- a/core/java/android/net/WebAddress.java +++ b/core/java/android/net/WebAddress.java @@ -19,6 +19,7 @@ package android.net; import static android.util.Patterns.GOOD_IRI_CHAR; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import java.util.Locale; import java.util.regex.Matcher; @@ -45,9 +46,13 @@ import java.util.regex.Pattern; @SystemApi public class WebAddress { + @UnsupportedAppUsage private String mScheme; + @UnsupportedAppUsage private String mHost; + @UnsupportedAppUsage private int mPort; + @UnsupportedAppUsage private String mPath; private String mAuthInfo; @@ -147,16 +152,19 @@ public class WebAddress { } /** {@hide} */ + @UnsupportedAppUsage public String getScheme() { return mScheme; } /** {@hide} */ + @UnsupportedAppUsage public void setHost(String host) { mHost = host; } /** {@hide} */ + @UnsupportedAppUsage public String getHost() { return mHost; } @@ -167,16 +175,19 @@ public class WebAddress { } /** {@hide} */ + @UnsupportedAppUsage public int getPort() { return mPort; } /** {@hide} */ + @UnsupportedAppUsage public void setPath(String path) { mPath = path; } /** {@hide} */ + @UnsupportedAppUsage public String getPath() { return mPath; } @@ -187,6 +198,7 @@ public class WebAddress { } /** {@hide} */ + @UnsupportedAppUsage public String getAuthInfo() { return mAuthInfo; } diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java index 21ada363b3ea..6fcd6ebe148a 100644 --- a/core/java/android/net/http/SslCertificate.java +++ b/core/java/android/net/http/SslCertificate.java @@ -16,6 +16,7 @@ package android.net.http; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.Bundle; import android.text.format.DateFormat; @@ -77,6 +78,7 @@ public class SslCertificate { * be available, and saveState and restoreState can be simplified * to be unconditional. */ + @UnsupportedAppUsage private final X509Certificate mX509Certificate; /** @@ -257,6 +259,7 @@ public class SslCertificate { /** * Convenience for UI presentation, not intended as public API. */ + @UnsupportedAppUsage private static String getSerialNumber(X509Certificate x509Certificate) { if (x509Certificate == null) { return ""; @@ -271,6 +274,7 @@ public class SslCertificate { /** * Convenience for UI presentation, not intended as public API. */ + @UnsupportedAppUsage private static String getDigest(X509Certificate x509Certificate, String algorithm) { if (x509Certificate == null) { return ""; @@ -454,6 +458,7 @@ public class SslCertificate { * * @hide Used by Browser and Settings */ + @UnsupportedAppUsage public View inflateCertificateView(Context context) { LayoutInflater factory = LayoutInflater.from(context); diff --git a/core/java/android/net/http/SslError.java b/core/java/android/net/http/SslError.java index 1cd73d215d6e..fad6689ed055 100644 --- a/core/java/android/net/http/SslError.java +++ b/core/java/android/net/http/SslError.java @@ -16,6 +16,7 @@ package android.net.http; +import android.annotation.UnsupportedAppUsage; import java.security.cert.X509Certificate; /** @@ -67,16 +68,19 @@ public class SslError { * The SSL error set bitfield (each individual error is a bit index; * multiple individual errors can be OR-ed) */ + @UnsupportedAppUsage int mErrors; /** * The SSL certificate associated with the error set */ + @UnsupportedAppUsage final SslCertificate mCertificate; /** * The URL associated with the error set. */ + @UnsupportedAppUsage final String mUrl; /** diff --git a/core/java/android/net/metrics/ApfProgramEvent.java b/core/java/android/net/metrics/ApfProgramEvent.java index ad4588f139f9..5dabf35c4867 100644 --- a/core/java/android/net/metrics/ApfProgramEvent.java +++ b/core/java/android/net/metrics/ApfProgramEvent.java @@ -17,6 +17,7 @@ package android.net.metrics; import android.annotation.IntDef; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -47,13 +48,20 @@ public final class ApfProgramEvent implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface Flags {} + @UnsupportedAppUsage public long lifetime; // Maximum computed lifetime of the program in seconds + @UnsupportedAppUsage public long actualLifetime; // Effective program lifetime in seconds + @UnsupportedAppUsage public int filteredRas; // Number of RAs filtered by the APF program + @UnsupportedAppUsage public int currentRas; // Total number of current RAs at generation time + @UnsupportedAppUsage public int programLength; // Length of the APF program in bytes + @UnsupportedAppUsage public int flags; // Bitfield compound of FLAG_* constants + @UnsupportedAppUsage public ApfProgramEvent() { } @@ -99,6 +107,7 @@ public final class ApfProgramEvent implements Parcelable { } }; + @UnsupportedAppUsage public static @Flags int flagsFor(boolean hasIPv4, boolean multicastFilterOn) { int bitfield = 0; if (hasIPv4) { diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java index 76a781dd7daf..bb2a35c58667 100644 --- a/core/java/android/net/metrics/ApfStats.java +++ b/core/java/android/net/metrics/ApfStats.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -26,26 +27,37 @@ import android.os.Parcelable; public final class ApfStats implements Parcelable { /** time interval in milliseconds these stastistics covers. */ + @UnsupportedAppUsage public long durationMs; /** number of received RAs. */ + @UnsupportedAppUsage public int receivedRas; /** number of received RAs matching a known RA. */ + @UnsupportedAppUsage public int matchingRas; /** number of received RAs ignored due to the MAX_RAS limit. */ + @UnsupportedAppUsage public int droppedRas; /** number of received RAs with a minimum lifetime of 0. */ + @UnsupportedAppUsage public int zeroLifetimeRas; /** number of received RAs that could not be parsed. */ + @UnsupportedAppUsage public int parseErrors; /** number of APF program updates from receiving RAs.. */ + @UnsupportedAppUsage public int programUpdates; /** total number of APF program updates. */ + @UnsupportedAppUsage public int programUpdatesAll; /** number of APF program updates from allowing multicast traffic. */ + @UnsupportedAppUsage public int programUpdatesAllowingMulticast; /** maximum APF program size advertised by hardware. */ + @UnsupportedAppUsage public int maxProgramSize; + @UnsupportedAppUsage public ApfStats() { } diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java index c5b78a50639d..98a7d7e8de9a 100644 --- a/core/java/android/net/metrics/DhcpClientEvent.java +++ b/core/java/android/net/metrics/DhcpClientEvent.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -34,6 +35,7 @@ public final class DhcpClientEvent implements Parcelable { public final String msg; public final int durationMs; + @UnsupportedAppUsage public DhcpClientEvent(String msg, int durationMs) { this.msg = msg; this.durationMs = durationMs; diff --git a/core/java/android/net/metrics/DhcpErrorEvent.java b/core/java/android/net/metrics/DhcpErrorEvent.java index 8b771979bc24..c6c06f0e59e9 100644 --- a/core/java/android/net/metrics/DhcpErrorEvent.java +++ b/core/java/android/net/metrics/DhcpErrorEvent.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -33,25 +34,41 @@ public final class DhcpErrorEvent implements Parcelable { public static final int DHCP_ERROR = 4; public static final int MISC_ERROR = 5; + @UnsupportedAppUsage public static final int L2_TOO_SHORT = makeErrorCode(L2_ERROR, 1); + @UnsupportedAppUsage public static final int L2_WRONG_ETH_TYPE = makeErrorCode(L2_ERROR, 2); + @UnsupportedAppUsage public static final int L3_TOO_SHORT = makeErrorCode(L3_ERROR, 1); + @UnsupportedAppUsage public static final int L3_NOT_IPV4 = makeErrorCode(L3_ERROR, 2); + @UnsupportedAppUsage public static final int L3_INVALID_IP = makeErrorCode(L3_ERROR, 3); + @UnsupportedAppUsage public static final int L4_NOT_UDP = makeErrorCode(L4_ERROR, 1); + @UnsupportedAppUsage public static final int L4_WRONG_PORT = makeErrorCode(L4_ERROR, 2); + @UnsupportedAppUsage public static final int BOOTP_TOO_SHORT = makeErrorCode(DHCP_ERROR, 1); + @UnsupportedAppUsage public static final int DHCP_BAD_MAGIC_COOKIE = makeErrorCode(DHCP_ERROR, 2); + @UnsupportedAppUsage public static final int DHCP_INVALID_OPTION_LENGTH = makeErrorCode(DHCP_ERROR, 3); + @UnsupportedAppUsage public static final int DHCP_NO_MSG_TYPE = makeErrorCode(DHCP_ERROR, 4); + @UnsupportedAppUsage public static final int DHCP_UNKNOWN_MSG_TYPE = makeErrorCode(DHCP_ERROR, 5); + @UnsupportedAppUsage public static final int DHCP_NO_COOKIE = makeErrorCode(DHCP_ERROR, 6); + @UnsupportedAppUsage public static final int BUFFER_UNDERFLOW = makeErrorCode(MISC_ERROR, 1); + @UnsupportedAppUsage public static final int RECEIVE_ERROR = makeErrorCode(MISC_ERROR, 2); + @UnsupportedAppUsage public static final int PARSING_ERROR = makeErrorCode(MISC_ERROR, 3); // error code byte format (MSB to LSB): @@ -61,6 +78,7 @@ public final class DhcpErrorEvent implements Parcelable { // byte 3: optional code public final int errorCode; + @UnsupportedAppUsage public DhcpErrorEvent(int errorCode) { this.errorCode = errorCode; } @@ -90,6 +108,7 @@ public final class DhcpErrorEvent implements Parcelable { } }; + @UnsupportedAppUsage public static int errorCodeWithOption(int errorCode, int option) { return (0xFFFF0000 & errorCode) | (0xFF & option); } diff --git a/core/java/android/net/metrics/IpConnectivityLog.java b/core/java/android/net/metrics/IpConnectivityLog.java index 4e57efa4d47b..998f4ba40daa 100644 --- a/core/java/android/net/metrics/IpConnectivityLog.java +++ b/core/java/android/net/metrics/IpConnectivityLog.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.net.ConnectivityMetricsEvent; import android.net.IIpConnectivityMetrics; import android.os.Parcelable; @@ -37,6 +38,7 @@ public class IpConnectivityLog { private IIpConnectivityMetrics mService; + @UnsupportedAppUsage public IpConnectivityLog() { } @@ -104,6 +106,7 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ + @UnsupportedAppUsage public boolean log(String ifname, Parcelable data) { ConnectivityMetricsEvent ev = makeEv(data); ev.ifname = ifname; @@ -130,6 +133,7 @@ public class IpConnectivityLog { * @param data is a Parcelable instance representing the event. * @return true if the event was successfully logged. */ + @UnsupportedAppUsage public boolean log(Parcelable data) { return log(makeEv(data)); } diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java index f8a63ce5f1a3..c47650f87544 100644 --- a/core/java/android/net/metrics/IpManagerEvent.java +++ b/core/java/android/net/metrics/IpManagerEvent.java @@ -17,6 +17,7 @@ package android.net.metrics; import android.annotation.IntDef; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -53,6 +54,7 @@ public final class IpManagerEvent implements Parcelable { public final @EventType int eventType; public final long durationMs; + @UnsupportedAppUsage public IpManagerEvent(@EventType int eventType, long duration) { this.eventType = eventType; this.durationMs = duration; diff --git a/core/java/android/net/metrics/IpReachabilityEvent.java b/core/java/android/net/metrics/IpReachabilityEvent.java index 019c2c5a50e4..715c95e7270b 100644 --- a/core/java/android/net/metrics/IpReachabilityEvent.java +++ b/core/java/android/net/metrics/IpReachabilityEvent.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; @@ -48,6 +49,7 @@ public final class IpReachabilityEvent implements Parcelable { // byte 3: when byte 2 == PROBE, errno code from RTNetlink or IpReachabilityMonitor. public final int eventType; + @UnsupportedAppUsage public IpReachabilityEvent(int eventType) { this.eventType = eventType; } @@ -80,6 +82,7 @@ public final class IpReachabilityEvent implements Parcelable { /** * Returns the NUD failure event type code corresponding to the given conditions. */ + @UnsupportedAppUsage public static int nudFailureEventType(boolean isFromProbe, boolean isProvisioningLost) { if (isFromProbe) { return isProvisioningLost ? PROVISIONING_LOST : NUD_FAILED; diff --git a/core/java/android/net/metrics/RaEvent.java b/core/java/android/net/metrics/RaEvent.java index 3249f8001724..c41881ca34fb 100644 --- a/core/java/android/net/metrics/RaEvent.java +++ b/core/java/android/net/metrics/RaEvent.java @@ -16,6 +16,7 @@ package android.net.metrics; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -101,39 +102,47 @@ public final class RaEvent implements Parcelable { long rdnssLifetime = NO_LIFETIME; long dnsslLifetime = NO_LIFETIME; + @UnsupportedAppUsage public Builder() { } + @UnsupportedAppUsage public RaEvent build() { return new RaEvent(routerLifetime, prefixValidLifetime, prefixPreferredLifetime, routeInfoLifetime, rdnssLifetime, dnsslLifetime); } + @UnsupportedAppUsage public Builder updateRouterLifetime(long lifetime) { routerLifetime = updateLifetime(routerLifetime, lifetime); return this; } + @UnsupportedAppUsage public Builder updatePrefixValidLifetime(long lifetime) { prefixValidLifetime = updateLifetime(prefixValidLifetime, lifetime); return this; } + @UnsupportedAppUsage public Builder updatePrefixPreferredLifetime(long lifetime) { prefixPreferredLifetime = updateLifetime(prefixPreferredLifetime, lifetime); return this; } + @UnsupportedAppUsage public Builder updateRouteInfoLifetime(long lifetime) { routeInfoLifetime = updateLifetime(routeInfoLifetime, lifetime); return this; } + @UnsupportedAppUsage public Builder updateRdnssLifetime(long lifetime) { rdnssLifetime = updateLifetime(rdnssLifetime, lifetime); return this; } + @UnsupportedAppUsage public Builder updateDnsslLifetime(long lifetime) { dnsslLifetime = updateLifetime(dnsslLifetime, lifetime); return this; diff --git a/core/java/android/net/nsd/NsdServiceInfo.java b/core/java/android/net/nsd/NsdServiceInfo.java index bccaf60e697c..9ba17edfb91f 100644 --- a/core/java/android/net/nsd/NsdServiceInfo.java +++ b/core/java/android/net/nsd/NsdServiceInfo.java @@ -17,6 +17,7 @@ package android.net.nsd; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; import android.text.TextUtils; @@ -185,6 +186,7 @@ public final class NsdServiceInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setAttribute(String key, byte[] value) { if (TextUtils.isEmpty(key)) { throw new IllegalArgumentException("Key cannot be empty"); diff --git a/core/java/android/os/HwBlob.java b/core/java/android/os/HwBlob.java index 405651e992a3..6a5bb1c0a988 100644 --- a/core/java/android/os/HwBlob.java +++ b/core/java/android/os/HwBlob.java @@ -232,6 +232,14 @@ public class HwBlob { * @throws IndexOutOfBoundsException when [offset, offset + sizeof(jstring)] is out of range */ public native final void putString(long offset, String x); + /** + * Writes a native handle (without duplicating the underlying file descriptors) at an offset. + * + * @param offset location to write value + * @param x a {@link NativeHandle} instance to write + * @throws IndexOutOfBoundsException when [offset, offset + sizeof(jobject)] is out of range + */ + public native final void putNativeHandle(long offset, NativeHandle x); /** * Put a boolean array contiguously at an offset in the blob. diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java index 0eb62c95ed71..7a51db2dc5f9 100644 --- a/core/java/android/os/HwParcel.java +++ b/core/java/android/os/HwParcel.java @@ -115,6 +115,13 @@ public class HwParcel { * @param val to write */ public native final void writeString(String val); + /** + * Writes a native handle (without duplicating the underlying + * file descriptors) to the end of the parcel. + * + * @param val to write + */ + public native final void writeNativeHandle(NativeHandle val); /** * Writes an array of boolean values to the end of the parcel. @@ -159,6 +166,11 @@ public class HwParcel { * @param val to write */ private native final void writeStringVector(String[] val); + /** + * Writes an array of native handles to the end of the parcel. + * @param val array of {@link NativeHandle} objects to write + */ + private native final void writeNativeHandleVector(NativeHandle[] val); /** * Helper method to write a list of Booleans to val. @@ -267,6 +279,14 @@ public class HwParcel { } /** + * Helper method to write a list of native handles to the end of the parcel. + * @param val list of {@link NativeHandle} objects to write + */ + public final void writeNativeHandleVector(ArrayList<NativeHandle> val) { + writeNativeHandleVector(val.toArray(new NativeHandle[val.size()])); + } + + /** * Write a hwbinder object to the end of the parcel. * @param binder value to write */ @@ -328,6 +348,30 @@ public class HwParcel { * @throws IllegalArgumentException if the parcel has no more data */ public native final String readString(); + /** + * Reads a native handle (without duplicating the underlying file + * descriptors) from the parcel. These file descriptors will only + * be open for the duration that the binder window is open. If they + * are needed further, you must call {@link NativeHandle#dup()}. + * + * @return a {@link NativeHandle} instance parsed from the parcel + * @throws IllegalArgumentException if the parcel has no more data + */ + public native final NativeHandle readNativeHandle(); + /** + * Reads an embedded native handle (without duplicating the underlying + * file descriptors) from the parcel. These file descriptors will only + * be open for the duration that the binder window is open. If they + * are needed further, you must call {@link NativeHandle#dup()}. You + * do not need to call close on the NativeHandle returned from this. + * + * @param parentHandle handle from which to read the embedded object + * @param offset offset into parent + * @return a {@link NativeHandle} instance parsed from the parcel + * @throws IllegalArgumentException if the parcel has no more data + */ + public native final NativeHandle readEmbeddedNativeHandle( + long parentHandle, long offset); /** * Reads an array of boolean values from the parcel. @@ -377,6 +421,12 @@ public class HwParcel { * @throws IllegalArgumentException if the parcel has no more data */ private native final String[] readStringVectorAsArray(); + /** + * Reads an array of native handles from the parcel. + * @return array of {@link NativeHandle} objects + * @throws IllegalArgumentException if the parcel has no more data + */ + private native final NativeHandle[] readNativeHandleAsArray(); /** * Convenience method to read a Boolean vector as an ArrayList. @@ -465,6 +515,15 @@ public class HwParcel { } /** + * Convenience method to read a vector of native handles as an ArrayList. + * @return array of {@link NativeHandle} objects. + * @throws IllegalArgumentException if the parcel has no more data + */ + public final ArrayList<NativeHandle> readNativeHandleVector() { + return new ArrayList<NativeHandle>(Arrays.asList(readNativeHandleAsArray())); + } + + /** * Reads a strong binder value from the parcel. * @return binder object read from parcel or null if no binder can be read * @throws IllegalArgumentException if the parcel has no more data diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index 31dbafad62e3..20ca19bc04aa 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -372,11 +372,6 @@ interface INetworkManagementService void stopClatd(String interfaceName); /** - * Determine whether the clatd (464xlat) service has been started on the given interface. - */ - boolean isClatdStarted(String interfaceName); - - /** * Start listening for mobile activity state changes. */ void registerNetworkActivityListener(INetworkActivityListener listener); diff --git a/core/java/android/os/NativeHandle.java b/core/java/android/os/NativeHandle.java new file mode 100644 index 000000000000..fbecc8ec1cd9 --- /dev/null +++ b/core/java/android/os/NativeHandle.java @@ -0,0 +1,194 @@ +/* + * 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.os; + +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.system.ErrnoException; +import android.system.Os; + +import java.io.Closeable; +import java.io.FileDescriptor; + +/** + * Collection representing a set of open file descriptors and an opaque data stream. + * + * @hide + */ +@SystemApi +public final class NativeHandle implements Closeable { + // whether this object owns mFds + private boolean mOwn = false; + private FileDescriptor[] mFds; + private int[] mInts; + + /** + * Constructs a {@link NativeHandle} object containing + * zero file descriptors and an empty data stream. + */ + public NativeHandle() { + this(new FileDescriptor[0], new int[0], false); + } + + /** + * Constructs a {@link NativeHandle} object containing the given + * {@link FileDescriptor} object and an empty data stream. + */ + public NativeHandle(@NonNull FileDescriptor descriptor, boolean own) { + this(new FileDescriptor[] {descriptor}, new int[0], own); + } + + /** + * Convenience method for creating a list of file descriptors. + * + * @hide + */ + private static FileDescriptor[] createFileDescriptorArray(@NonNull int[] fds) { + FileDescriptor[] list = new FileDescriptor[fds.length]; + for (int i = 0; i < fds.length; i++) { + FileDescriptor descriptor = new FileDescriptor(); + descriptor.setInt$(fds[i]); + list[i] = descriptor; + } + return list; + } + + /** + * Convenience method for instantiating a {@link NativeHandle} from JNI. It does + * not take ownership of the int[] params. It does not dupe the FileDescriptors. + * + * @hide + */ + private NativeHandle(@NonNull int[] fds, @NonNull int[] ints, boolean own) { + this(createFileDescriptorArray(fds), ints, own); + } + + /** + * Instantiate an opaque {@link NativeHandle} from fds and integers. + * + * @param own whether the fds are owned by this object and should be closed + */ + public NativeHandle(@NonNull FileDescriptor[] fds, @NonNull int[] ints, boolean own) { + mFds = fds.clone(); + mInts = ints.clone(); + mOwn = own; + } + + /** + * Returns whether this {@link NativeHandle} object contains a single file + * descriptor and nothing else. + * + * @return a boolean value + */ + public boolean hasSingleFileDescriptor() { + return mFds.length == 1 && mInts.length == 0; + } + + /** + * Explicitly duplicate NativeHandle (this dups all file descritptors). + * + * If this method is called, this must also be explicitly closed with + * {@link #close()}. + */ + public NativeHandle dup() throws java.io.IOException { + FileDescriptor[] fds = new FileDescriptor[mFds.length]; + try { + for (int i = 0; i < mFds.length; i++) { + fds[i] = Os.dup(mFds[i]); + } + } catch (ErrnoException e) { + e.rethrowAsIOException(); + } + return new NativeHandle(fds, mInts, true /*own*/); + } + + /** + * Closes the file descriptors if they are owned by this object. + * + * This also invalidates the object. + */ + @Override + public void close() throws java.io.IOException { + if (!mOwn) { + return; + } + + try { + for (FileDescriptor fd : mFds) { + Os.close(fd); + } + } catch (ErrnoException e) { + e.rethrowAsIOException(); + } + + mOwn = false; + mFds = null; + mInts = null; + } + + /** + * Returns the underlying lone file descriptor. + * + * @return a {@link FileDescriptor} object + * @throws IllegalStateException if this object contains either zero or + * more than one file descriptor, or a non-empty data stream. + */ + public FileDescriptor getFileDescriptor() { + if (!hasSingleFileDescriptor()) { + throw new IllegalStateException( + "NativeHandle is not single file descriptor. Contents must" + + " be retreived through getFileDescriptors and getInts."); + } + + return mFds[0]; + } + + /** + * Convenience method for fetching this object's file descriptors from JNI. + * @return a mutable copy of the underlying file descriptors (as an int[]) + * + * @hide + */ + private int[] getFdsAsIntArray() { + int numFds = mFds.length; + int[] fds = new int[numFds]; + + for (int i = 0; i < numFds; i++) { + fds[i] = mFds[i].getInt$(); + } + + return fds; + } + + /** + * Fetch file descriptors. + * + * @return the fds. + */ + public FileDescriptor[] getFileDescriptors() { + return mFds; + } + + /** + * Fetch opaque ints. Note: This object retains ownership of the data. + * + * @return the opaque data stream. + */ + public int[] getInts() { + return mInts; + } +} diff --git a/core/java/android/os/storage/IStorageManager.aidl b/core/java/android/os/storage/IStorageManager.aidl index 55a202fd3a66..5c2d41e1aebc 100644 --- a/core/java/android/os/storage/IStorageManager.aidl +++ b/core/java/android/os/storage/IStorageManager.aidl @@ -187,4 +187,6 @@ interface IStorageManager { void allocateBytes(String volumeUuid, long bytes, int flags, String callingPackage) = 78; void runIdleMaintenance() = 79; void abortIdleMaintenance() = 80; + String translateAppToSystem(String path, String packageName, int userId) = 81; + String translateSystemToApp(String path, String packageName, int userId) = 82; } diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 8b8ae1cbbc14..5a1ea68b65da 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -124,6 +124,8 @@ public class StorageManager { public static final String PROP_SDCARDFS = "persist.sys.sdcardfs"; /** {@hide} */ public static final String PROP_VIRTUAL_DISK = "persist.sys.virtual_disk"; + /** {@hide} */ + public static final String PROP_ISOLATED_STORAGE = "persist.sys.isolated_storage"; /** {@hide} */ public static final String UUID_PRIVATE_INTERNAL = null; @@ -1484,6 +1486,36 @@ public class StorageManager { return path; } + /** + * Translate given shared storage path from a path in an app sandbox + * namespace to a path in the system namespace. + * + * @hide + */ + public File translateAppToSystem(File file, String packageName) { + try { + return new File(mStorageManager.translateAppToSystem(file.getAbsolutePath(), + packageName, mContext.getUserId())); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Translate given shared storage path from a path in the system namespace + * to a path in an app sandbox namespace. + * + * @hide + */ + public File translateSystemToApp(File file, String packageName) { + try { + return new File(mStorageManager.translateSystemToApp(file.getAbsolutePath(), + packageName, mContext.getUserId())); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** {@hide} */ @VisibleForTesting public @NonNull ParcelFileDescriptor openProxyFileDescriptor( diff --git a/core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java b/core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java index 2931627f0ec0..e0bffaeb9d3e 100644 --- a/core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java +++ b/core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java @@ -17,6 +17,7 @@ package android.permissionpresenterservice; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.app.Service; import android.content.Context; import android.content.Intent; @@ -80,6 +81,7 @@ public abstract class RuntimePermissionPresenterService extends Service { * * @hide */ + @UnsupportedAppUsage public abstract void onRevokeRuntimePermission(String packageName, String permissionName); @Override diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java index 7d05522cf5ce..30021b488dc5 100644 --- a/core/java/android/provider/Browser.java +++ b/core/java/android/provider/Browser.java @@ -16,6 +16,7 @@ package android.provider; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; @@ -218,6 +219,7 @@ public class Browser { * the string. * @hide pending API council approval */ + @UnsupportedAppUsage public static final void sendString(Context c, String stringToSend, String chooserDialogTitle) { @@ -323,6 +325,7 @@ public class Browser { * @hide pending API council approval */ @Deprecated + @UnsupportedAppUsage public static final String[] getVisitedHistory(ContentResolver cr) { return new String[0]; } diff --git a/core/java/android/provider/BrowserContract.java b/core/java/android/provider/BrowserContract.java index 118b5ebc182f..57dde6693001 100644 --- a/core/java/android/provider/BrowserContract.java +++ b/core/java/android/provider/BrowserContract.java @@ -17,6 +17,7 @@ package android.provider; import android.accounts.Account; +import android.annotation.UnsupportedAppUsage; import android.content.ContentProviderClient; import android.content.ContentProviderOperation; import android.content.ContentResolver; @@ -46,6 +47,7 @@ public class BrowserContract { public static final String AUTHORITY = "com.android.browser"; /** A content:// style uri to the authority for the browser provider */ + @UnsupportedAppUsage public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY); /** @@ -251,6 +253,7 @@ public class BrowserContract { /** * The content:// style URI for this table */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "bookmarks"); /** @@ -300,6 +303,7 @@ public class BrowserContract { * The content:// style URI for the default folder * @hide */ + @UnsupportedAppUsage public static final Uri CONTENT_URI_DEFAULT_FOLDER = Uri.withAppendedPath(CONTENT_URI, "folder"); @@ -320,6 +324,7 @@ public class BrowserContract { * @param folderId the ID of the folder to point to * @hide */ + @UnsupportedAppUsage public static final Uri buildFolderUri(long folderId) { return ContentUris.withAppendedId(CONTENT_URI_DEFAULT_FOLDER, folderId); } @@ -407,6 +412,7 @@ public class BrowserContract { /** * Directory under {@link Bookmarks#CONTENT_URI} */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = AUTHORITY_URI.buildUpon().appendPath("accounts").build(); @@ -444,6 +450,7 @@ public class BrowserContract { /** * The content:// style URI for this table */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "history"); /** @@ -573,6 +580,7 @@ public class BrowserContract { /** * The content:// style URI for this table */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "images"); /** @@ -673,6 +681,7 @@ public class BrowserContract { /** * The content:// style URI for this table */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "combined"); /** diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java index d9ce57af8c01..a8f3665072ae 100644 --- a/core/java/android/provider/CalendarContract.java +++ b/core/java/android/provider/CalendarContract.java @@ -19,6 +19,7 @@ package android.provider; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; @@ -1664,6 +1665,7 @@ public final class CalendarContract { * * @hide */ + @UnsupportedAppUsage public static String[] PROVIDER_WRITABLE_COLUMNS = new String[] { ACCOUNT_NAME, ACCOUNT_TYPE, @@ -2288,6 +2290,7 @@ public final class CalendarContract { * if no such alarm exists. * @hide */ + @UnsupportedAppUsage public static final long findNextAlarmTime(ContentResolver cr, long millis) { String selection = ALARM_TIME + ">=" + millis; // TODO: construct an explicit SQL query so that we can add @@ -2321,6 +2324,7 @@ public final class CalendarContract { * @param manager the AlarmManager * @hide */ + @UnsupportedAppUsage public static final void rescheduleMissedAlarms(ContentResolver cr, Context context, AlarmManager manager) { // Get all the alerts that have been scheduled but have not fired @@ -2377,6 +2381,7 @@ public final class CalendarContract { * epoch * @hide */ + @UnsupportedAppUsage public static void scheduleAlarm(Context context, AlarmManager manager, long alarmTime) { if (DEBUG) { Time time = new Time(); diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index 70de09ebe85f..bc72c4e38411 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -17,6 +17,7 @@ package android.provider; +import android.annotation.UnsupportedAppUsage; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; @@ -609,6 +610,7 @@ public class CallLog { * as they don't have permissions. * {@hide} */ + @UnsupportedAppUsage public static Uri addCall(CallerInfo ci, Context context, String number, String postDialDigits, String viaNumber, int presentation, int callType, int features, PhoneAccountHandle accountHandle, long start, int duration, diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 14a45093e8cc..112329e48703 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -21,6 +21,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -1519,6 +1520,7 @@ public final class ContactsContract { * * @hide */ + @UnsupportedAppUsage public static final Uri CORP_CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "contacts_corp"); @@ -2013,6 +2015,7 @@ public final class ContactsContract { /** * @hide */ + @UnsupportedAppUsage public static final Builder builder() { return new Builder(); } @@ -6101,6 +6104,7 @@ public final class ContactsContract { * @hide */ @Deprecated + @UnsupportedAppUsage public static final CharSequence getDisplayLabel(Context context, int type, CharSequence label) { return getTypeLabel(context.getResources(), type, label); @@ -8483,6 +8487,7 @@ public final class ContactsContract { * Constructs the QuickContacts intent. * @hide */ + @UnsupportedAppUsage public static Intent composeQuickContactsIntent(Context context, Rect target, Uri lookupUri, int mode, String[] excludeMimes) { // When launching from an Activiy, we don't want to start a new task, but otherwise diff --git a/core/java/android/provider/ContactsInternal.java b/core/java/android/provider/ContactsInternal.java index 362eba93aaba..69c4b9b9abf2 100644 --- a/core/java/android/provider/ContactsInternal.java +++ b/core/java/android/provider/ContactsInternal.java @@ -15,6 +15,7 @@ */ package android.provider; +import android.annotation.UnsupportedAppUsage; import android.app.admin.DevicePolicyManager; import android.content.ActivityNotFoundException; import android.content.ContentUris; @@ -54,6 +55,7 @@ public class ContactsInternal { /** * Called by {@link ContactsContract} to star Quick Contact, possibly on the managed profile. */ + @UnsupportedAppUsage public static void startQuickContactWithErrorToast(Context context, Intent intent) { final Uri uri = intent.getData(); diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index f97c64c96a7a..b12d9cf37485 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -23,6 +23,7 @@ import static com.android.internal.util.Preconditions.checkCollectionElementsNot import static com.android.internal.util.Preconditions.checkCollectionNotEmpty; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.Context; @@ -636,6 +637,7 @@ public final class DocumentsContract { * @see #COLUMN_FLAGS * @hide */ + @UnsupportedAppUsage public static final int FLAG_ADVANCED = 1 << 17; /** @@ -699,6 +701,7 @@ public final class DocumentsContract { public static final String EXTRA_RESULT = "result"; /** {@hide} */ + @UnsupportedAppUsage public static final String METHOD_CREATE_DOCUMENT = "android:createDocument"; /** {@hide} */ public static final String METHOD_RENAME_DOCUMENT = "android:renameDocument"; @@ -734,11 +737,13 @@ public final class DocumentsContract { private static final String PATH_ROOT = "root"; private static final String PATH_RECENT = "recent"; + @UnsupportedAppUsage private static final String PATH_DOCUMENT = "document"; private static final String PATH_CHILDREN = "children"; private static final String PATH_SEARCH = "search"; // TODO(b/72055774): make private again once ScopedAccessProvider is refactored /** {@hide} */ + @UnsupportedAppUsage public static final String PATH_TREE = "tree"; private static final String PARAM_QUERY = "query"; @@ -1022,6 +1027,7 @@ public final class DocumentsContract { } /** {@hide} */ + @UnsupportedAppUsage public static Uri setManageMode(Uri uri) { return uri.buildUpon().appendQueryParameter(PARAM_MANAGE, "true").build(); } @@ -1065,6 +1071,7 @@ public final class DocumentsContract { } /** {@hide} */ + @UnsupportedAppUsage public static Bitmap getDocumentThumbnail( ContentProviderClient client, Uri documentUri, Point size, CancellationSignal signal) throws RemoteException, IOException { @@ -1320,6 +1327,7 @@ public final class DocumentsContract { } /** {@hide} */ + @UnsupportedAppUsage public static Uri moveDocument(ContentProviderClient client, Uri sourceDocumentUri, Uri sourceParentDocumentUri, Uri targetParentDocumentUri) throws RemoteException { final Bundle in = new Bundle(); diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index a2c5a92e52a2..e5fd29cc09b1 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -16,6 +16,7 @@ package android.provider; +import android.annotation.UnsupportedAppUsage; import android.app.DownloadManager; import android.content.Context; import android.net.NetworkPolicyManager; @@ -88,6 +89,7 @@ public final class Downloads { /** * The content:// URI to access downloads owned by the caller's UID. */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.parse("content://downloads/my_downloads"); @@ -95,6 +97,7 @@ public final class Downloads { * The content URI for accessing all downloads across all UIDs (requires the * ACCESS_ALL_DOWNLOADS permission). */ + @UnsupportedAppUsage public static final Uri ALL_DOWNLOADS_CONTENT_URI = Uri.parse("content://downloads/all_downloads"); @@ -105,6 +108,7 @@ public final class Downloads { * The content URI for accessing publicly accessible downloads (i.e., it requires no * permissions to access this downloaded file) */ + @UnsupportedAppUsage public static final Uri PUBLICLY_ACCESSIBLE_DOWNLOADS_URI = Uri.parse("content://downloads/" + PUBLICLY_ACCESSIBLE_DOWNLOADS_URI_SEGMENT); @@ -134,6 +138,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_URI = "uri"; /** @@ -163,6 +168,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init</P> */ + @UnsupportedAppUsage public static final String COLUMN_FILE_NAME_HINT = "hint"; /** @@ -178,6 +184,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_MIME_TYPE = "mimetype"; /** @@ -186,6 +193,7 @@ public final class Downloads { * <P>Type: INTEGER</P> * <P>Owner can Init</P> */ + @UnsupportedAppUsage public static final String COLUMN_DESTINATION = "destination"; /** @@ -195,6 +203,7 @@ public final class Downloads { * <P>Type: INTEGER</P> * <P>Owner can Init/Read/Write</P> */ + @UnsupportedAppUsage public static final String COLUMN_VISIBILITY = "visibility"; /** @@ -231,6 +240,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_NOTIFICATION_PACKAGE = "notificationpackage"; /** @@ -241,6 +251,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_NOTIFICATION_CLASS = "notificationclass"; /** @@ -249,6 +260,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init</P> */ + @UnsupportedAppUsage public static final String COLUMN_NOTIFICATION_EXTRAS = "notificationextras"; /** @@ -258,6 +270,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init</P> */ + @UnsupportedAppUsage public static final String COLUMN_COOKIE_DATA = "cookiedata"; /** @@ -274,6 +287,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init</P> */ + @UnsupportedAppUsage public static final String COLUMN_REFERER = "referer"; /** @@ -311,6 +325,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read/Write</P> */ + @UnsupportedAppUsage public static final String COLUMN_TITLE = "title"; /** @@ -320,6 +335,7 @@ public final class Downloads { * <P>Type: TEXT</P> * <P>Owner can Init/Read/Write</P> */ + @UnsupportedAppUsage public static final String COLUMN_DESCRIPTION = "description"; /** @@ -328,6 +344,7 @@ public final class Downloads { * <P>Type: BOOLEAN</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_IS_PUBLIC_API = "is_public_api"; /** @@ -336,6 +353,7 @@ public final class Downloads { * <P>Type: INTEGER</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_ALLOWED_NETWORK_TYPES = "allowed_network_types"; /** @@ -344,6 +362,7 @@ public final class Downloads { * <P>Type: BOOLEAN</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_ALLOW_ROAMING = "allow_roaming"; /** @@ -360,6 +379,7 @@ public final class Downloads { * <P>Type: INTEGER</P> * <P>Owner can Init/Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI = "is_visible_in_downloads_ui"; /** @@ -376,6 +396,7 @@ public final class Downloads { * <P>Type: BOOLEAN</P> * <P>Owner can Read</P> */ + @UnsupportedAppUsage public static final String COLUMN_DELETED = "deleted"; /** @@ -392,6 +413,7 @@ public final class Downloads { * It can take the values: null or 0(not scanned), 1(scanned), 2 (not scannable). * <P>Type: TEXT</P> */ + @UnsupportedAppUsage public static final String COLUMN_MEDIA_SCANNED = "scanned"; /** @@ -465,6 +487,7 @@ public final class Downloads { * immediately after they are used, and are kept around by the download * manager as long as space is available. */ + @UnsupportedAppUsage public static final int DESTINATION_CACHE_PARTITION_PURGEABLE = 2; /** @@ -478,6 +501,7 @@ public final class Downloads { * This download will be saved to the location given by the file URI in * {@link #COLUMN_FILE_NAME_HINT}. */ + @UnsupportedAppUsage public static final int DESTINATION_FILE_URI = 4; /** @@ -525,6 +549,7 @@ public final class Downloads { /** * Returns whether the status is a success (i.e. 2xx). */ + @UnsupportedAppUsage public static boolean isStatusSuccess(int status) { return (status >= 200 && status < 300); } @@ -532,6 +557,7 @@ public final class Downloads { /** * Returns whether the status is an error (i.e. 4xx or 5xx). */ + @UnsupportedAppUsage public static boolean isStatusError(int status) { return (status >= 400 && status < 600); } @@ -556,6 +582,7 @@ public final class Downloads { * @param visibility the value of {@link #COLUMN_VISIBILITY}. * @return true if the notification should be displayed. false otherwise. */ + @UnsupportedAppUsage public static boolean isNotificationToBeDisplayed(int visibility) { return visibility == DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED || visibility == DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION; @@ -565,6 +592,7 @@ public final class Downloads { * Returns whether the download has completed (either with success or * error). */ + @UnsupportedAppUsage public static boolean isStatusCompleted(int status) { return (status >= 200 && status < 300) || (status >= 400 && status < 600); } @@ -795,6 +823,7 @@ public final class Downloads { * Prefix for ContentValues keys that contain HTTP header lines, to be passed to * DownloadProvider.insert(). */ + @UnsupportedAppUsage public static final String INSERT_KEY_PREFIX = "http_header_"; } } diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 68572dd2a52e..189b7b491dc5 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.content.ClipData; import android.content.ContentProviderClient; import android.content.ContentResolver; @@ -458,6 +459,7 @@ public final class MediaStore { * <P>Type: INTEGER (boolean)</P> * @hide */ + @UnsupportedAppUsage public static final String IS_DRM = "is_drm"; /** @@ -515,6 +517,7 @@ public final class MediaStore { * For use only by the MTP implementation. * @hide */ + @UnsupportedAppUsage public static Uri getMtpObjectsUri(String volumeName) { return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName + "/object"); @@ -524,6 +527,7 @@ public final class MediaStore { * For use only by the MTP implementation. * @hide */ + @UnsupportedAppUsage public static final Uri getMtpObjectsUri(String volumeName, long fileId) { return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName @@ -534,6 +538,7 @@ public final class MediaStore { * Used to implement the MTP GetObjectReferences and SetObjectReferences commands. * @hide */ + @UnsupportedAppUsage public static final Uri getMtpReferencesUri(String volumeName, long fileId) { return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName @@ -558,6 +563,7 @@ public final class MediaStore { * <P>Type: INTEGER</P> * @hide */ + @UnsupportedAppUsage public static final String STORAGE_ID = "storage_id"; /** @@ -565,6 +571,7 @@ public final class MediaStore { * <P>Type: INTEGER</P> * @hide */ + @UnsupportedAppUsage public static final String FORMAT = "format"; /** diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 0b177c70614e..7980af12b821 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -37,6 +37,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.app.ActivityThread; import android.app.AppOpsManager; @@ -374,6 +375,7 @@ public final class Settings { * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + @UnsupportedAppUsage public static final String ACTION_TRUSTED_CREDENTIALS_USER = "com.android.settings.TRUSTED_CREDENTIALS_USER"; @@ -684,6 +686,7 @@ public final class Settings { * @hide */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + @UnsupportedAppUsage public static final String ACTION_USER_DICTIONARY_INSERT = "com.android.settings.USER_DICTIONARY_INSERT"; @@ -1451,7 +1454,9 @@ public final class Settings { public static final String ACTION_APP_NOTIFICATION_REDACTION = "android.settings.ACTION_APP_NOTIFICATION_REDACTION"; - /** @hide */ public static final String EXTRA_APP_UID = "app_uid"; + /** @hide */ + @UnsupportedAppUsage + public static final String EXTRA_APP_UID = "app_uid"; /** * Activity Action: Show a dialog with disabled by policy message. @@ -1951,6 +1956,7 @@ public final class Settings { @GuardedBy("mLock") private final Uri mUri; @GuardedBy("mLock") + @UnsupportedAppUsage private IContentProvider mContentProvider; public ContentProviderHolder(Uri uri) { @@ -1988,6 +1994,7 @@ public final class Settings { private final HashMap<String, String> mValues = new HashMap<>(); private final Uri mUri; + @UnsupportedAppUsage private final ContentProviderHolder mProviderHolder; // The method we'll call (or null, to not use) on the provider @@ -2027,6 +2034,7 @@ public final class Settings { return true; } + @UnsupportedAppUsage public String getStringForUser(ContentResolver cr, String name, final int userHandle) { final boolean isSelf = (userHandle == UserHandle.myUserId()); int currentGeneration = -1; @@ -2244,15 +2252,18 @@ public final class Settings { public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/system"); + @UnsupportedAppUsage private static final ContentProviderHolder sProviderHolder = new ContentProviderHolder(CONTENT_URI); + @UnsupportedAppUsage private static final NameValueCache sNameValueCache = new NameValueCache( CONTENT_URI, CALL_METHOD_GET_SYSTEM, CALL_METHOD_PUT_SYSTEM, sProviderHolder); + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_SECURE; static { MOVED_TO_SECURE = new HashSet<>(30); @@ -2289,7 +2300,9 @@ public final class Settings { MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS); } + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_GLOBAL; + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL; static { MOVED_TO_GLOBAL = new HashSet<>(); @@ -2375,6 +2388,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static String getStringForUser(ContentResolver resolver, String name, int userHandle) { if (MOVED_TO_SECURE.contains(name)) { @@ -2402,6 +2416,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userHandle) { if (MOVED_TO_SECURE.contains(name)) { @@ -2456,6 +2471,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) { String v = getStringForUser(cr, name, userHandle); try { @@ -2489,6 +2505,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static int getIntForUser(ContentResolver cr, String name, int userHandle) throws SettingNotFoundException { String v = getStringForUser(cr, name, userHandle); @@ -2517,6 +2534,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putIntForUser(ContentResolver cr, String name, int value, int userHandle) { return putStringForUser(cr, name, Integer.toString(value), userHandle); @@ -2935,6 +2953,7 @@ public final class Settings { * {@hide} */ @Deprecated + @UnsupportedAppUsage public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS; @@ -3214,6 +3233,7 @@ public final class Settings { * or less (<0.0 >-1.0) bright. * @hide */ + @UnsupportedAppUsage public static final String SCREEN_AUTO_BRIGHTNESS_ADJ = "screen_auto_brightness_adj"; private static final Validator SCREEN_AUTO_BRIGHTNESS_ADJ_VALIDATOR = @@ -3404,6 +3424,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String MASTER_MONO = "master_mono"; private static final Validator MASTER_MONO_VALIDATOR = BOOLEAN_VALIDATOR; @@ -3440,6 +3461,7 @@ public final class Settings { * Kept for use by legacy database upgrade code in DatabaseHelper. * @hide */ + @UnsupportedAppUsage public static final String VIBRATE_IN_SILENT = "vibrate_in_silent"; private static final Validator VIBRATE_IN_SILENT_VALIDATOR = BOOLEAN_VALIDATOR; @@ -3742,6 +3764,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY = "hide_rotation_lock_toggle_for_accessibility"; @@ -3797,6 +3820,7 @@ public final class Settings { * boolean (1 or 0). * @hide */ + @UnsupportedAppUsage public static final String HEARING_AID = "hearing_aid"; /** @hide */ @@ -3811,6 +3835,7 @@ public final class Settings { * 3 = HCO * @hide */ + @UnsupportedAppUsage public static final String TTY_MODE = "tty_mode"; /** @hide */ @@ -3850,6 +3875,7 @@ public final class Settings { * pending. The value is boolean (1 or 0). * @hide */ + @UnsupportedAppUsage public static final String NOTIFICATION_LIGHT_PULSE = "notification_light_pulse"; /** @hide */ @@ -3861,6 +3887,7 @@ public final class Settings { * 1 = yes * @hide */ + @UnsupportedAppUsage public static final String POINTER_LOCATION = "pointer_location"; /** @hide */ @@ -3872,6 +3899,7 @@ public final class Settings { * 1 = yes * @hide */ + @UnsupportedAppUsage public static final String SHOW_TOUCHES = "show_touches"; /** @hide */ @@ -3907,6 +3935,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String DOCK_SOUNDS_ENABLED = Global.DOCK_SOUNDS_ENABLED; private static final Validator DOCK_SOUNDS_ENABLED_VALIDATOR = BOOLEAN_VALIDATOR; @@ -3915,6 +3944,7 @@ public final class Settings { * Whether to play sounds when the keyguard is shown and dismissed. * @hide */ + @UnsupportedAppUsage public static final String LOCKSCREEN_SOUNDS_ENABLED = "lockscreen_sounds_enabled"; /** @hide */ @@ -3943,6 +3973,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String DESK_DOCK_SOUND = Global.DESK_DOCK_SOUND; /** @@ -3951,6 +3982,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String DESK_UNDOCK_SOUND = Global.DESK_UNDOCK_SOUND; /** @@ -3959,6 +3991,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String CAR_DOCK_SOUND = Global.CAR_DOCK_SOUND; /** @@ -3967,6 +4000,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String CAR_UNDOCK_SOUND = Global.CAR_UNDOCK_SOUND; /** @@ -3975,6 +4009,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String LOCK_SOUND = Global.LOCK_SOUND; /** @@ -3983,6 +4018,7 @@ public final class Settings { * @hide */ @Deprecated + @UnsupportedAppUsage public static final String UNLOCK_SOUND = Global.UNLOCK_SOUND; /** @@ -4048,6 +4084,7 @@ public final class Settings { * +7 = fastest * @hide */ + @UnsupportedAppUsage public static final String POINTER_SPEED = "pointer_speed"; /** @hide */ @@ -4112,6 +4149,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String[] SETTINGS_TO_BACKUP = { STAY_ON_WHILE_PLUGGED_IN, // moved to global WIFI_USE_STATIC_IP, @@ -4182,6 +4220,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final Set<String> PUBLIC_SETTINGS = new ArraySet<>(); static { PUBLIC_SETTINGS.add(END_BUTTON_BEHAVIOR); @@ -4236,6 +4275,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final Set<String> PRIVATE_SETTINGS = new ArraySet<>(); static { PRIVATE_SETTINGS.add(WIFI_USE_STATIC_IP); @@ -4287,6 +4327,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final Map<String, Validator> VALIDATORS = new ArrayMap<>(); static { VALIDATORS.put(STAY_ON_WHILE_PLUGGED_IN, STAY_ON_WHILE_PLUGGED_IN_VALIDATOR); @@ -4372,6 +4413,7 @@ public final class Settings { * These entries are considered common between the personal and the managed profile, * since the managed profile doesn't get to change them. */ + @UnsupportedAppUsage private static final Set<String> CLONE_TO_MANAGED_PROFILE = new ArraySet<>(); static { CLONE_TO_MANAGED_PROFILE.add(DATE_FORMAT); @@ -4710,10 +4752,12 @@ public final class Settings { public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/secure"); + @UnsupportedAppUsage private static final ContentProviderHolder sProviderHolder = new ContentProviderHolder(CONTENT_URI); // Populated lazily, guarded by class object: + @UnsupportedAppUsage private static final NameValueCache sNameValueCache = new NameValueCache( CONTENT_URI, CALL_METHOD_GET_SECURE, @@ -4723,7 +4767,9 @@ public final class Settings { private static ILockSettings sLockSettings = null; private static boolean sIsSystemProcess; + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_LOCK_SETTINGS; + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_GLOBAL; static { MOVED_TO_LOCK_SETTINGS = new HashSet<>(3); @@ -4867,6 +4913,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static String getStringForUser(ContentResolver resolver, String name, int userHandle) { if (MOVED_TO_GLOBAL.contains(name)) { @@ -4921,12 +4968,14 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userHandle) { return putStringForUser(resolver, name, value, null, false, userHandle); } /** @hide */ + @UnsupportedAppUsage public static boolean putStringForUser(@NonNull ContentResolver resolver, @NonNull String name, @Nullable String value, @Nullable String tag, boolean makeDefault, @UserIdInt int userHandle) { @@ -5082,6 +5131,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static int getIntForUser(ContentResolver cr, String name, int def, int userHandle) { if (LOCATION_MODE.equals(name)) { // Map from to underlying location provider storage API to location mode @@ -5151,6 +5201,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putIntForUser(ContentResolver cr, String name, int value, int userHandle) { return putStringForUser(cr, name, Integer.toString(value), userHandle); @@ -5175,6 +5226,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static long getLongForUser(ContentResolver cr, String name, long def, int userHandle) { String valString = getStringForUser(cr, name, userHandle); @@ -5238,6 +5290,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putLongForUser(ContentResolver cr, String name, long value, int userHandle) { return putStringForUser(cr, name, Long.toString(value), userHandle); @@ -5791,6 +5844,7 @@ public final class Settings { * subject to current DeviceAdmin policy limits. * @hide */ + @UnsupportedAppUsage public static final String LOCK_SCREEN_LOCK_AFTER_TIMEOUT = "lock_screen_lock_after_timeout"; @@ -5832,6 +5886,7 @@ public final class Settings { * @deprecated */ @Deprecated + @UnsupportedAppUsage public static final String LOCK_SCREEN_OWNER_INFO_ENABLED = "lock_screen_owner_info_enabled"; @@ -5840,6 +5895,7 @@ public final class Settings { * in their full "private" form (same as when the device is unlocked). * @hide */ + @UnsupportedAppUsage public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications"; @@ -6333,6 +6389,7 @@ public final class Settings { * @see android.graphics.Typeface * @hide */ + @UnsupportedAppUsage public static final String ACCESSIBILITY_CAPTIONING_TYPEFACE = "accessibility_captioning_typeface"; @@ -6366,6 +6423,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED = "accessibility_display_daltonizer_enabled"; @@ -6384,6 +6442,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ACCESSIBILITY_DISPLAY_DALTONIZER = "accessibility_display_daltonizer"; @@ -6397,6 +6456,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ACCESSIBILITY_AUTOCLICK_ENABLED = "accessibility_autoclick_enabled"; @@ -6422,6 +6482,7 @@ public final class Settings { * (0 = false, 1 = true) * @hide */ + @UnsupportedAppUsage public static final String ACCESSIBILITY_LARGE_POINTER_ICON = "accessibility_large_pointer_icon"; @@ -6432,6 +6493,7 @@ public final class Settings { * The timeout for considering a press to be a long press in milliseconds. * @hide */ + @UnsupportedAppUsage public static final String LONG_PRESS_TIMEOUT = "long_press_timeout"; private static final Validator LONG_PRESS_TIMEOUT_VALIDATOR = @@ -6452,6 +6514,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ENABLED_PRINT_SERVICES = "enabled_print_services"; @@ -6810,6 +6873,7 @@ public final class Settings { * Type: int ( 0 = disabled, 1 = enabled ) * @hide */ + @UnsupportedAppUsage public static final String BACKUP_ENABLED = "backup_enabled"; /** @@ -6818,6 +6882,7 @@ public final class Settings { * Type: int ( 0 = disabled, 1 = enabled ) * @hide */ + @UnsupportedAppUsage public static final String BACKUP_AUTO_RESTORE = "backup_auto_restore"; /** @@ -6825,12 +6890,14 @@ public final class Settings { * Type: int ( 0 = unprovisioned, 1 = fully provisioned ) * @hide */ + @UnsupportedAppUsage public static final String BACKUP_PROVISIONED = "backup_provisioned"; /** * Component of the transport to use for backup/restore. * @hide */ + @UnsupportedAppUsage public static final String BACKUP_TRANSPORT = "backup_transport"; /** @@ -7008,6 +7075,7 @@ public final class Settings { * Also prevents ANRs and crash dialogs from being suppressed. * @hide */ + @UnsupportedAppUsage public static final String ANR_SHOW_BACKGROUND = "anr_show_background"; /** @@ -7027,6 +7095,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service"; /** @@ -7035,6 +7104,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String PACKAGE_VERIFIER_USER_CONSENT = "package_verifier_user_consent"; @@ -7044,6 +7114,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker"; /** @@ -7053,6 +7124,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String SELECTED_SPELL_CHECKER_SUBTYPE = "selected_spell_checker_subtype"; @@ -7072,6 +7144,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior"; private static final Validator INCALL_POWER_BUTTON_BEHAVIOR_VALIDATOR = @@ -7138,6 +7211,7 @@ public final class Settings { * Whether the device should doze if configured. * @hide */ + @UnsupportedAppUsage public static final String DOZE_ENABLED = "doze_enabled"; private static final Validator DOZE_ENABLED_VALIDATOR = BOOLEAN_VALIDATOR; @@ -7173,6 +7247,14 @@ public final class Settings { private static final Validator DOZE_DOUBLE_TAP_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR; /** + * Whether the device should pulse on reach gesture. + * @hide + */ + public static final String DOZE_REACH_GESTURE = "doze_reach_gesture"; + + private static final Validator DOZE_REACH_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR; + + /** * The current night mode that has been selected by the user. Owned * and controlled by UiModeManagerService. Constants are as per * UiModeManager. @@ -7228,6 +7310,7 @@ public final class Settings { * The default NFC payment component * @hide */ + @UnsupportedAppUsage public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component"; private static final Validator NFC_PAYMENT_DEFAULT_COMPONENT_VALIDATOR = @@ -7243,12 +7326,14 @@ public final class Settings { * Specifies the package name currently configured to be the primary sms application * @hide */ + @UnsupportedAppUsage public static final String SMS_DEFAULT_APPLICATION = "sms_default_application"; /** * Specifies the package name currently configured to be the default dialer application * @hide */ + @UnsupportedAppUsage public static final String DIALER_DEFAULT_APPLICATION = "dialer_default_application"; /** @@ -7350,6 +7435,7 @@ public final class Settings { * {@link NotificationManager#isNotificationListenerAccessGranted(ComponentName)}. */ @Deprecated + @UnsupportedAppUsage public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners"; private static final Validator ENABLED_NOTIFICATION_LISTENERS_VALIDATOR = @@ -7386,6 +7472,7 @@ public final class Settings { private static final Validator SYNC_PARENT_SOUNDS_VALIDATOR = BOOLEAN_VALIDATOR; /** @hide */ + @UnsupportedAppUsage public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations"; /** @@ -7428,6 +7515,7 @@ public final class Settings { * This preference enables notification display on the lockscreen. * @hide */ + @UnsupportedAppUsage public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications"; @@ -7486,6 +7574,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ASSISTANT = "assistant"; /** @@ -7995,6 +8084,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String[] SETTINGS_TO_BACKUP = { BUGREPORT_IN_POWER_MENU, // moved to global ALLOW_MOCK_LOCATION, @@ -8066,6 +8156,7 @@ public final class Settings { DOZE_ALWAYS_ON, DOZE_PICK_UP_GESTURE, DOZE_DOUBLE_TAP_GESTURE, + DOZE_REACH_GESTURE, NFC_PAYMENT_DEFAULT_COMPONENT, AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, FACE_UNLOCK_KEYGUARD_ENABLED, @@ -8209,6 +8300,7 @@ public final class Settings { VALIDATORS.put(DOZE_ALWAYS_ON, DOZE_ALWAYS_ON_VALIDATOR); VALIDATORS.put(DOZE_PICK_UP_GESTURE, DOZE_PICK_UP_GESTURE_VALIDATOR); VALIDATORS.put(DOZE_DOUBLE_TAP_GESTURE, DOZE_DOUBLE_TAP_GESTURE_VALIDATOR); + VALIDATORS.put(DOZE_REACH_GESTURE, DOZE_REACH_GESTURE_VALIDATOR); VALIDATORS.put(NFC_PAYMENT_DEFAULT_COMPONENT, NFC_PAYMENT_DEFAULT_COMPONENT_VALIDATOR); VALIDATORS.put(AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_VALIDATOR); @@ -8510,6 +8602,7 @@ public final class Settings { * @hide * No longer used. Should be removed once all dependencies have been updated. */ + @UnsupportedAppUsage public static final String ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED = "enable_accessibility_global_gesture_enabled"; @@ -9100,6 +9193,7 @@ public final class Settings { * ConnectivityManager for more info. * @hide */ + @UnsupportedAppUsage public static final String MOBILE_DATA = "mobile_data"; /** @@ -9186,6 +9280,7 @@ public final class Settings { * scorer app, external network scores will neither be requested nor accepted. * @hide */ + @UnsupportedAppUsage public static final String NETWORK_SCORER_APP = "network_scorer_app"; /** @@ -9276,6 +9371,7 @@ public final class Settings { * 0 = do not verify apps before installation * @hide */ + @UnsupportedAppUsage public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable"; /** Timeout for package verification. @@ -9521,6 +9617,7 @@ public final class Settings { * by the system). * @hide */ + @UnsupportedAppUsage public static final String WEBVIEW_PROVIDER = "webview_provider"; /** @@ -9910,6 +10007,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String WIFI_SAVED_STATE = "wifi_saved_state"; /** @@ -9950,6 +10048,7 @@ public final class Settings { * the setting needs to be set to 0 to disable it. * @hide */ + @UnsupportedAppUsage public static final String WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED = "wifi_watchdog_poor_network_test_enabled"; @@ -11404,6 +11503,7 @@ public final class Settings { * See RIL_PreferredNetworkType in ril.h * @hide */ + @UnsupportedAppUsage public static final String PREFERRED_NETWORK_MODE = "preferred_network_mode"; @@ -11785,12 +11885,21 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ZEN_MODE = "zen_mode"; - /** @hide */ public static final int ZEN_MODE_OFF = 0; - /** @hide */ public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; - /** @hide */ public static final int ZEN_MODE_NO_INTERRUPTIONS = 2; - /** @hide */ public static final int ZEN_MODE_ALARMS = 3; + /** @hide */ + @UnsupportedAppUsage + public static final int ZEN_MODE_OFF = 0; + /** @hide */ + @UnsupportedAppUsage + public static final int ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; + /** @hide */ + @UnsupportedAppUsage + public static final int ZEN_MODE_NO_INTERRUPTIONS = 2; + /** @hide */ + @UnsupportedAppUsage + public static final int ZEN_MODE_ALARMS = 3; /** @hide */ public static String zenModeToString(int mode) { if (mode == ZEN_MODE_IMPORTANT_INTERRUPTIONS) return "ZEN_MODE_IMPORTANT_INTERRUPTIONS"; @@ -11823,6 +11932,7 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag"; /** @@ -11853,11 +11963,16 @@ public final class Settings { * * @hide */ + @UnsupportedAppUsage public static final String HEADS_UP_NOTIFICATIONS_ENABLED = "heads_up_notifications_enabled"; - /** @hide */ public static final int HEADS_UP_OFF = 0; - /** @hide */ public static final int HEADS_UP_ON = 1; + /** @hide */ + @UnsupportedAppUsage + public static final int HEADS_UP_OFF = 0; + /** @hide */ + @UnsupportedAppUsage + public static final int HEADS_UP_ON = 1; /** * The name of the device @@ -11879,6 +11994,7 @@ public final class Settings { * Type: int (0 for false, 1 for true) * @hide */ + @UnsupportedAppUsage public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt"; /** @@ -12378,10 +12494,12 @@ public final class Settings { public static final String[] LEGACY_RESTORE_SETTINGS = { }; + @UnsupportedAppUsage private static final ContentProviderHolder sProviderHolder = new ContentProviderHolder(CONTENT_URI); // Populated lazily, guarded by class object: + @UnsupportedAppUsage private static final NameValueCache sNameValueCache = new NameValueCache( CONTENT_URI, CALL_METHOD_GET_GLOBAL, @@ -12389,6 +12507,7 @@ public final class Settings { sProviderHolder); // Certain settings have been moved from global to the per-user secure namespace + @UnsupportedAppUsage private static final HashSet<String> MOVED_TO_SECURE; static { MOVED_TO_SECURE = new HashSet<>(8); @@ -12425,6 +12544,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static String getStringForUser(ContentResolver resolver, String name, int userHandle) { if (MOVED_TO_SECURE.contains(name)) { @@ -12551,6 +12671,7 @@ public final class Settings { } /** @hide */ + @UnsupportedAppUsage public static boolean putStringForUser(ContentResolver resolver, String name, String value, int userHandle) { return putStringForUser(resolver, name, value, null, false, userHandle); @@ -12805,6 +12926,7 @@ public final class Settings { * The supported values are 0 = disable or 1 = enable prompt. * @hide */ + @UnsupportedAppUsage public static final String MULTI_SIM_VOICE_PROMPT = "multi_sim_voice_prompt"; /** @@ -12834,6 +12956,7 @@ public final class Settings { * iccId,appType,appId,activationStatus,3gppIndex,3gpp2Index * @hide */ + @UnsupportedAppUsage public static final String[] MULTI_SIM_USER_PREFERRED_SUBS = {"user_preferred_sub1", "user_preferred_sub2","user_preferred_sub3"}; @@ -13188,6 +13311,7 @@ public final class Settings { /** * The content:// style URL for this table */ + @UnsupportedAppUsage public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/bookmarks"); @@ -13296,6 +13420,7 @@ public final class Settings { * cleared (the bookmark is not removed). * @return The unique content URL for the new bookmark entry. */ + @UnsupportedAppUsage public static Uri add(ContentResolver cr, Intent intent, String title, @@ -13394,6 +13519,7 @@ public final class Settings { * callingPackage, a negative result will be returned. * @hide */ + @UnsupportedAppUsage public static boolean isCallingPackageAllowedToWriteSettings(Context context, int uid, String callingPackage, boolean throwException) { return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, @@ -13450,6 +13576,7 @@ public final class Settings { * a negative result will be returned. * @hide */ + @UnsupportedAppUsage public static boolean isCallingPackageAllowedToDrawOverlays(Context context, int uid, String callingPackage, boolean throwException) { return isCallingPackageAllowedToPerformAppOpsProtectedOperation(context, uid, @@ -13480,6 +13607,7 @@ public final class Settings { * OP_WRITE_SETTINGS * @hide */ + @UnsupportedAppUsage public static boolean isCallingPackageAllowedToPerformAppOpsProtectedOperation(Context context, int uid, String callingPackage, boolean throwException, int appOpsOpCode, String[] permissions, boolean makeNote) { diff --git a/core/java/android/security/KeystoreArguments.java b/core/java/android/security/KeystoreArguments.java index 16054e59931a..7d85ca76204f 100644 --- a/core/java/android/security/KeystoreArguments.java +++ b/core/java/android/security/KeystoreArguments.java @@ -16,6 +16,7 @@ package android.security; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -27,6 +28,7 @@ import android.os.Parcelable; public class KeystoreArguments implements Parcelable { public byte[][] args; + @UnsupportedAppUsage public static final Parcelable.Creator<KeystoreArguments> CREATOR = new Parcelable.Creator<KeystoreArguments>() { public KeystoreArguments createFromParcel(Parcel in) { @@ -41,6 +43,7 @@ public class KeystoreArguments implements Parcelable { args = null; } + @UnsupportedAppUsage public KeystoreArguments(byte[][] args) { this.args = args; } diff --git a/core/java/android/security/keymaster/ExportResult.java b/core/java/android/security/keymaster/ExportResult.java index 2b3ccbcb0707..c104671fc129 100644 --- a/core/java/android/security/keymaster/ExportResult.java +++ b/core/java/android/security/keymaster/ExportResult.java @@ -16,6 +16,7 @@ package android.security.keymaster; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -27,6 +28,7 @@ public class ExportResult implements Parcelable { public final int resultCode; public final byte[] exportData; + @UnsupportedAppUsage public static final Parcelable.Creator<ExportResult> CREATOR = new Parcelable.Creator<ExportResult>() { public ExportResult createFromParcel(Parcel in) { diff --git a/core/java/android/security/keymaster/KeyCharacteristics.java b/core/java/android/security/keymaster/KeyCharacteristics.java index 89300d16da2c..555863efec91 100644 --- a/core/java/android/security/keymaster/KeyCharacteristics.java +++ b/core/java/android/security/keymaster/KeyCharacteristics.java @@ -16,6 +16,7 @@ package android.security.keymaster; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -44,6 +45,7 @@ public class KeyCharacteristics implements Parcelable { } }; + @UnsupportedAppUsage public KeyCharacteristics() {} protected KeyCharacteristics(Parcel in) { @@ -61,6 +63,7 @@ public class KeyCharacteristics implements Parcelable { hwEnforced.writeToParcel(out, flags); } + @UnsupportedAppUsage public void readFromParcel(Parcel in) { swEnforced = KeymasterArguments.CREATOR.createFromParcel(in); hwEnforced = KeymasterArguments.CREATOR.createFromParcel(in); diff --git a/core/java/android/security/keymaster/KeymasterArguments.java b/core/java/android/security/keymaster/KeymasterArguments.java index e8622522596d..5aa0f913f7d9 100644 --- a/core/java/android/security/keymaster/KeymasterArguments.java +++ b/core/java/android/security/keymaster/KeymasterArguments.java @@ -16,6 +16,7 @@ package android.security.keymaster; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -40,6 +41,7 @@ public class KeymasterArguments implements Parcelable { private List<KeymasterArgument> mArguments; + @UnsupportedAppUsage public static final Parcelable.Creator<KeymasterArguments> CREATOR = new Parcelable.Creator<KeymasterArguments>() { @Override @@ -53,6 +55,7 @@ public class KeymasterArguments implements Parcelable { } }; + @UnsupportedAppUsage public KeymasterArguments() { mArguments = new ArrayList<KeymasterArgument>(); } @@ -66,6 +69,7 @@ public class KeymasterArguments implements Parcelable { * * @throws IllegalArgumentException if {@code tag} is not an enum tag. */ + @UnsupportedAppUsage public void addEnum(int tag, int value) { int tagType = KeymasterDefs.getTagType(tag); if ((tagType != KeymasterDefs.KM_ENUM) && (tagType != KeymasterDefs.KM_ENUM_REP)) { @@ -137,6 +141,7 @@ public class KeymasterArguments implements Parcelable { * @throws IllegalArgumentException if {@code tag} is not an unsigned 32-bit int tag or if * {@code value} is outside of the permitted range [0; 2^32). */ + @UnsupportedAppUsage public void addUnsignedInt(int tag, long value) { int tagType = KeymasterDefs.getTagType(tag); if ((tagType != KeymasterDefs.KM_UINT) && (tagType != KeymasterDefs.KM_UINT_REP)) { @@ -173,6 +178,7 @@ public class KeymasterArguments implements Parcelable { * @throws IllegalArgumentException if {@code tag} is not an unsigned 64-bit long tag or if * {@code value} is outside of the permitted range [0; 2^64). */ + @UnsupportedAppUsage public void addUnsignedLong(int tag, BigInteger value) { int tagType = KeymasterDefs.getTagType(tag); if ((tagType != KeymasterDefs.KM_ULONG) && (tagType != KeymasterDefs.KM_ULONG_REP)) { @@ -358,6 +364,7 @@ public class KeymasterArguments implements Parcelable { out.writeTypedList(mArguments); } + @UnsupportedAppUsage public void readFromParcel(Parcel in) { in.readTypedList(mArguments, KeymasterArgument.CREATOR); } diff --git a/core/java/android/security/keymaster/KeymasterBlob.java b/core/java/android/security/keymaster/KeymasterBlob.java index cd36870a535e..0659a22dc090 100644 --- a/core/java/android/security/keymaster/KeymasterBlob.java +++ b/core/java/android/security/keymaster/KeymasterBlob.java @@ -16,6 +16,7 @@ package android.security.keymaster; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -28,6 +29,7 @@ public class KeymasterBlob implements Parcelable { public KeymasterBlob(byte[] blob) { this.blob = blob; } + @UnsupportedAppUsage public static final Parcelable.Creator<KeymasterBlob> CREATOR = new Parcelable.Creator<KeymasterBlob>() { public KeymasterBlob createFromParcel(Parcel in) { diff --git a/core/java/android/security/keymaster/OperationResult.java b/core/java/android/security/keymaster/OperationResult.java index 4c962ec7a1e7..2943211a45f5 100644 --- a/core/java/android/security/keymaster/OperationResult.java +++ b/core/java/android/security/keymaster/OperationResult.java @@ -16,6 +16,7 @@ package android.security.keymaster; +import android.annotation.UnsupportedAppUsage; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; @@ -33,6 +34,7 @@ public class OperationResult implements Parcelable { public final byte[] output; public final KeymasterArguments outParams; + @UnsupportedAppUsage public static final Parcelable.Creator<OperationResult> CREATOR = new Parcelable.Creator<OperationResult>() { @Override diff --git a/core/java/android/security/net/config/RootTrustManager.java b/core/java/android/security/net/config/RootTrustManager.java index 2a30f1184a47..d8936d948ead 100644 --- a/core/java/android/security/net/config/RootTrustManager.java +++ b/core/java/android/security/net/config/RootTrustManager.java @@ -21,6 +21,7 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.List; +import android.annotation.UnsupportedAppUsage; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLSession; @@ -121,6 +122,7 @@ public class RootTrustManager extends X509ExtendedTrustManager { * This interface is used by conscrypt and android.net.http.X509TrustManagerExtensions do not * modify without modifying those callers. */ + @UnsupportedAppUsage public List<X509Certificate> checkServerTrusted(X509Certificate[] certs, String authType, String hostname) throws CertificateException { if (hostname == null && mConfig.hasPerDomainConfigs()) { diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index 2b114d568045..15b2aaebd1c0 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.app.AlarmManager; import android.app.Service; import android.content.Intent; @@ -601,6 +602,7 @@ public class DreamService extends Service implements Window.Callback { * * @hide */ + @UnsupportedAppUsage public void setWindowless(boolean windowless) { mWindowless = windowless; } @@ -624,6 +626,7 @@ public class DreamService extends Service implements Window.Callback { * @see #startDozing * @hide For use by system UI components only. */ + @UnsupportedAppUsage public boolean canDoze() { return mCanDoze; } @@ -657,6 +660,7 @@ public class DreamService extends Service implements Window.Callback { * @see #stopDozing * @hide For use by system UI components only. */ + @UnsupportedAppUsage public void startDozing() { if (mCanDoze && !mDozing) { mDozing = true; @@ -690,6 +694,7 @@ public class DreamService extends Service implements Window.Callback { * @see #startDozing * @hide For use by system UI components only. */ + @UnsupportedAppUsage public void stopDozing() { if (mDozing) { mDozing = false; @@ -711,6 +716,7 @@ public class DreamService extends Service implements Window.Callback { * @see #setDozing(boolean) * @hide For use by system UI components only. */ + @UnsupportedAppUsage public boolean isDozing() { return mDozing; } @@ -767,6 +773,7 @@ public class DreamService extends Service implements Window.Callback { * * @hide For use by system UI components only. */ + @UnsupportedAppUsage public void setDozeScreenState(int state) { if (mDozeScreenState != state) { mDozeScreenState = state; @@ -785,6 +792,7 @@ public class DreamService extends Service implements Window.Callback { * @see #setDozeScreenBrightness * @hide For use by system UI components only. */ + @UnsupportedAppUsage public int getDozeScreenBrightness() { return mDozeScreenBrightness; } @@ -816,6 +824,7 @@ public class DreamService extends Service implements Window.Callback { * * @hide For use by system UI components only. */ + @UnsupportedAppUsage public void setDozeScreenBrightness(int brightness) { if (brightness != PowerManager.BRIGHTNESS_DEFAULT) { brightness = clampAbsoluteBrightness(brightness); diff --git a/core/java/android/service/euicc/EuiccProfileInfo.java b/core/java/android/service/euicc/EuiccProfileInfo.java index 4bbee616dca0..4a3978242a11 100644 --- a/core/java/android/service/euicc/EuiccProfileInfo.java +++ b/core/java/android/service/euicc/EuiccProfileInfo.java @@ -18,6 +18,7 @@ package android.service.euicc; import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.service.carrier.CarrierIdentifier; @@ -143,6 +144,7 @@ public final class EuiccProfileInfo implements Parcelable { * @deprecated - Do not use. */ @Deprecated + @UnsupportedAppUsage public EuiccProfileInfo(String iccid, @Nullable UiccAccessRule[] accessRules, @Nullable String nickname) { if (!TextUtils.isDigitsOnly(iccid)) { diff --git a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java index e2171ae6bc76..bd91ca00145d 100644 --- a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java +++ b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java @@ -17,6 +17,7 @@ package android.service.euicc; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.telephony.euicc.DownloadableSubscription; @@ -49,6 +50,7 @@ public final class GetDefaultDownloadableSubscriptionListResult implements Parce * @deprecated - Do no use. Use getResult() instead. */ @Deprecated + @UnsupportedAppUsage public final int result; @Nullable diff --git a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java index 1edb5398add4..71f1d22d603d 100644 --- a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java +++ b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java @@ -17,6 +17,7 @@ package android.service.euicc; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.telephony.euicc.DownloadableSubscription; @@ -46,6 +47,7 @@ public final class GetDownloadableSubscriptionMetadataResult implements Parcelab * @deprecated - Do no use. Use getResult() instead. */ @Deprecated + @UnsupportedAppUsage public final int result; @Nullable diff --git a/core/java/android/service/notification/INotificationListener.aidl b/core/java/android/service/notification/INotificationListener.aidl index c388367649c4..2dff7161a068 100644 --- a/core/java/android/service/notification/INotificationListener.aidl +++ b/core/java/android/service/notification/INotificationListener.aidl @@ -43,6 +43,6 @@ oneway interface INotificationListener void onNotificationChannelGroupModification(String pkgName, in UserHandle user, in NotificationChannelGroup group, int modificationType); // assistants only - void onNotificationEnqueued(in IStatusBarNotificationHolder notificationHolder); + void onNotificationEnqueuedWithChannel(in IStatusBarNotificationHolder notificationHolder, in NotificationChannel channel); void onNotificationSnoozedUntilContext(in IStatusBarNotificationHolder notificationHolder, String snoozeCriterionId); } diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java index 81889c11cc9c..3853fc54773f 100644 --- a/core/java/android/service/notification/NotificationAssistantService.java +++ b/core/java/android/service/notification/NotificationAssistantService.java @@ -19,6 +19,7 @@ package android.service.notification; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.app.NotificationChannel; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; @@ -102,7 +103,22 @@ public abstract class NotificationAssistantService extends NotificationListenerS * @param sbn the new notification * @return an adjustment or null to take no action, within 100ms. */ - abstract public Adjustment onNotificationEnqueued(StatusBarNotification sbn); + public Adjustment onNotificationEnqueued(StatusBarNotification sbn) { + return null; + } + + /** + * A notification was posted by an app. Called before post. + * + * @param sbn the new notification + * @param channel the channel the notification was posted to + * @return an adjustment or null to take no action, within 100ms. + */ + public Adjustment onNotificationEnqueued(StatusBarNotification sbn, + NotificationChannel channel) { + return onNotificationEnqueued(sbn); + } + /** * Implement this method to learn when notifications are removed, how they were interacted with @@ -186,7 +202,8 @@ public abstract class NotificationAssistantService extends NotificationListenerS private class NotificationAssistantServiceWrapper extends NotificationListenerWrapper { @Override - public void onNotificationEnqueued(IStatusBarNotificationHolder sbnHolder) { + public void onNotificationEnqueuedWithChannel(IStatusBarNotificationHolder sbnHolder, + NotificationChannel channel) { StatusBarNotification sbn; try { sbn = sbnHolder.get(); @@ -197,14 +214,14 @@ public abstract class NotificationAssistantService extends NotificationListenerS SomeArgs args = SomeArgs.obtain(); args.arg1 = sbn; + args.arg2 = channel; mHandler.obtainMessage(MyHandler.MSG_ON_NOTIFICATION_ENQUEUED, args).sendToTarget(); } @Override public void onNotificationSnoozedUntilContext( - IStatusBarNotificationHolder sbnHolder, String snoozeCriterionId) - throws RemoteException { + IStatusBarNotificationHolder sbnHolder, String snoozeCriterionId) { StatusBarNotification sbn; try { sbn = sbnHolder.get(); @@ -235,8 +252,9 @@ public abstract class NotificationAssistantService extends NotificationListenerS case MSG_ON_NOTIFICATION_ENQUEUED: { SomeArgs args = (SomeArgs) msg.obj; StatusBarNotification sbn = (StatusBarNotification) args.arg1; + NotificationChannel channel = (NotificationChannel) args.arg2; args.recycle(); - Adjustment adjustment = onNotificationEnqueued(sbn); + Adjustment adjustment = onNotificationEnqueued(sbn, channel); if (adjustment != null) { if (!isBound()) return; try { diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index 09eecd8e2868..98da5694456d 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.INotificationManager; import android.app.Notification; @@ -93,6 +94,7 @@ import java.util.List; */ public abstract class NotificationListenerService extends Service { + @UnsupportedAppUsage private final String TAG = getClass().getSimpleName(); /** @@ -274,9 +276,11 @@ public abstract class NotificationListenerService extends Service { private final Object mLock = new Object(); + @UnsupportedAppUsage private Handler mHandler; /** @hide */ + @UnsupportedAppUsage protected NotificationListenerWrapper mWrapper = null; private boolean isConnected = false; @@ -286,6 +290,7 @@ public abstract class NotificationListenerService extends Service { /** * @hide */ + @UnsupportedAppUsage protected INotificationManager mNoMan; /** @@ -507,6 +512,7 @@ public abstract class NotificationListenerService extends Service { } /** @hide */ + @UnsupportedAppUsage protected final INotificationManager getNotificationInterface() { if (mNoMan == null) { mNoMan = INotificationManager.Stub.asInterface( @@ -1065,6 +1071,7 @@ public abstract class NotificationListenerService extends Service { } /** @hide */ + @UnsupportedAppUsage protected boolean isBound() { if (mWrapper == null) { Log.w(TAG, "Notification listener service not yet bound."); @@ -1318,7 +1325,8 @@ public abstract class NotificationListenerService extends Service { } @Override - public void onNotificationEnqueued(IStatusBarNotificationHolder notificationHolder) + public void onNotificationEnqueuedWithChannel( + IStatusBarNotificationHolder notificationHolder, NotificationChannel channel) throws RemoteException { // no-op in the listener } @@ -1463,6 +1471,7 @@ public abstract class NotificationListenerService extends Service { * no such preference has been expressed. * @hide */ + @UnsupportedAppUsage public int getVisibilityOverride() { return mVisibilityOverride; } @@ -1871,23 +1880,41 @@ public abstract class NotificationListenerService extends Service { Collections.addAll(mIntercepted, dndInterceptedKeys); } + private ArrayMap<String, Integer> buildIntMapFromBundle(Bundle bundle) { + ArrayMap<String, Integer> newMap = new ArrayMap<>(bundle.size()); + for (String key : bundle.keySet()) { + newMap.put(key, bundle.getInt(key)); + } + return newMap; + } + + private ArrayMap<String, String> buildStringMapFromBundle(Bundle bundle) { + ArrayMap<String, String> newMap = new ArrayMap<>(bundle.size()); + for (String key : bundle.keySet()) { + newMap.put(key, bundle.getString(key)); + } + return newMap; + } + + private ArrayMap<String, Boolean> buildBooleanMapFromBundle(Bundle bundle) { + ArrayMap<String, Boolean> newMap = new ArrayMap<>(bundle.size()); + for (String key : bundle.keySet()) { + newMap.put(key, bundle.getBoolean(key)); + } + return newMap; + } + // Locked by 'this' private void buildVisibilityOverridesLocked() { - Bundle visibilityBundle = mRankingUpdate.getVisibilityOverrides(); - mVisibilityOverrides = new ArrayMap<>(visibilityBundle.size()); - for (String key: visibilityBundle.keySet()) { - mVisibilityOverrides.put(key, visibilityBundle.getInt(key)); - } + mVisibilityOverrides = buildIntMapFromBundle(mRankingUpdate.getVisibilityOverrides()); } // Locked by 'this' private void buildSuppressedVisualEffectsLocked() { - Bundle suppressedBundle = mRankingUpdate.getSuppressedVisualEffects(); - mSuppressedVisualEffects = new ArrayMap<>(suppressedBundle.size()); - for (String key: suppressedBundle.keySet()) { - mSuppressedVisualEffects.put(key, suppressedBundle.getInt(key)); - } + mSuppressedVisualEffects = + buildIntMapFromBundle(mRankingUpdate.getSuppressedVisualEffects()); } + // Locked by 'this' private void buildImportanceLocked() { String[] orderedKeys = mRankingUpdate.getOrderedKeys(); @@ -1901,20 +1928,13 @@ public abstract class NotificationListenerService extends Service { // Locked by 'this' private void buildImportanceExplanationLocked() { - Bundle explanationBundle = mRankingUpdate.getImportanceExplanation(); - mImportanceExplanation = new ArrayMap<>(explanationBundle.size()); - for (String key: explanationBundle.keySet()) { - mImportanceExplanation.put(key, explanationBundle.getString(key)); - } + mImportanceExplanation = + buildStringMapFromBundle(mRankingUpdate.getImportanceExplanation()); } // Locked by 'this' private void buildOverrideGroupKeys() { - Bundle overrideGroupKeys = mRankingUpdate.getOverrideGroupKeys(); - mOverrideGroupKeys = new ArrayMap<>(overrideGroupKeys.size()); - for (String key: overrideGroupKeys.keySet()) { - mOverrideGroupKeys.put(key, overrideGroupKeys.getString(key)); - } + mOverrideGroupKeys = buildStringMapFromBundle(mRankingUpdate.getOverrideGroupKeys()); } // Locked by 'this' @@ -1946,29 +1966,17 @@ public abstract class NotificationListenerService extends Service { // Locked by 'this' private void buildShowBadgeLocked() { - Bundle showBadge = mRankingUpdate.getShowBadge(); - mShowBadge = new ArrayMap<>(showBadge.size()); - for (String key : showBadge.keySet()) { - mShowBadge.put(key, showBadge.getBoolean(key)); - } + mShowBadge = buildBooleanMapFromBundle(mRankingUpdate.getShowBadge()); } // Locked by 'this' private void buildUserSentimentLocked() { - Bundle userSentiment = mRankingUpdate.getUserSentiment(); - mUserSentiment = new ArrayMap<>(userSentiment.size()); - for (String key : userSentiment.keySet()) { - mUserSentiment.put(key, userSentiment.getInt(key)); - } + mUserSentiment = buildIntMapFromBundle(mRankingUpdate.getUserSentiment()); } // Locked by 'this' private void buildHiddenLocked() { - Bundle hidden = mRankingUpdate.getHidden(); - mHidden = new ArrayMap<>(hidden.size()); - for (String key : hidden.keySet()) { - mHidden.put(key, hidden.getBoolean(key)); - } + mHidden = buildBooleanMapFromBundle(mRankingUpdate.getHidden()); } // Locked by 'this' diff --git a/core/java/android/service/notification/ScheduleCalendar.java b/core/java/android/service/notification/ScheduleCalendar.java index 8b7946ce7651..6ed966e0bbbd 100644 --- a/core/java/android/service/notification/ScheduleCalendar.java +++ b/core/java/android/service/notification/ScheduleCalendar.java @@ -70,10 +70,10 @@ public class ScheduleCalendar { } // only allow alarms in the future if (nextAlarm > now) { - // store earliest alarm - if (mSchedule.nextAlarm == 0) { + if (mSchedule.nextAlarm == 0 || mSchedule.nextAlarm < now) { mSchedule.nextAlarm = nextAlarm; } else { + // store earliest alarm mSchedule.nextAlarm = Math.min(mSchedule.nextAlarm, nextAlarm); } } else if (mSchedule.nextAlarm < now) { diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java index d1ebc6eca214..dd97d524d829 100644 --- a/core/java/android/service/notification/StatusBarNotification.java +++ b/core/java/android/service/notification/StatusBarNotification.java @@ -16,6 +16,7 @@ package android.service.notification; +import android.annotation.UnsupportedAppUsage; import android.app.Notification; import android.app.NotificationChannel; import android.content.Context; @@ -30,18 +31,26 @@ import android.os.UserHandle; * the status bar and any {@link android.service.notification.NotificationListenerService}s. */ public class StatusBarNotification implements Parcelable { + @UnsupportedAppUsage private final String pkg; + @UnsupportedAppUsage private final int id; + @UnsupportedAppUsage private final String tag; private final String key; private String groupKey; private String overrideGroupKey; + @UnsupportedAppUsage private final int uid; private final String opPkg; + @UnsupportedAppUsage private final int initialPid; + @UnsupportedAppUsage private final Notification notification; + @UnsupportedAppUsage private final UserHandle user; + @UnsupportedAppUsage private final long postTime; private Context mContext; // used for inflation & icon expansion @@ -269,16 +278,19 @@ public class StatusBarNotification implements Parcelable { } /** The notifying app's calling uid. @hide */ + @UnsupportedAppUsage public int getUid() { return uid; } /** The package used for AppOps tracking. @hide */ + @UnsupportedAppUsage public String getOpPkg() { return opPkg; } /** @hide */ + @UnsupportedAppUsage public int getInitialPid() { return initialPid; } @@ -346,6 +358,7 @@ public class StatusBarNotification implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public Context getPackageContext(Context context) { if (mContext == null) { try { diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 5ac36afc6324..f90eb14c796b 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -20,6 +20,7 @@ import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCRE import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.NotificationManager; @@ -145,6 +146,7 @@ public class ZenModeConfig implements Parcelable { private static final String RULE_ATT_CREATION_TIME = "creationTime"; private static final String RULE_ATT_ENABLER = "enabler"; + @UnsupportedAppUsage public boolean allowAlarms = DEFAULT_ALLOW_ALARMS; public boolean allowMedia = DEFAULT_ALLOW_MEDIA; public boolean allowSystem = DEFAULT_ALLOW_SYSTEM; @@ -161,8 +163,10 @@ public class ZenModeConfig implements Parcelable { public int version; public ZenRule manualRule; + @UnsupportedAppUsage public ArrayMap<String, ZenRule> automaticRules = new ArrayMap<>(); + @UnsupportedAppUsage public ZenModeConfig() { } public ZenModeConfig(Parcel source) { @@ -1043,6 +1047,7 @@ public class ZenModeConfig implements Parcelable { return true; } + @UnsupportedAppUsage public static ScheduleInfo tryParseScheduleConditionId(Uri conditionId) { final boolean isSchedule = conditionId != null && Condition.SCHEME.equals(conditionId.getScheme()) @@ -1068,10 +1073,15 @@ public class ZenModeConfig implements Parcelable { } public static class ScheduleInfo { + @UnsupportedAppUsage public int[] days; + @UnsupportedAppUsage public int startHour; + @UnsupportedAppUsage public int startMinute; + @UnsupportedAppUsage public int endHour; + @UnsupportedAppUsage public int endMinute; public boolean exitAtAlarm; public long nextAlarm; @@ -1289,14 +1299,20 @@ public class ZenModeConfig implements Parcelable { } public static class ZenRule implements Parcelable { + @UnsupportedAppUsage public boolean enabled; + @UnsupportedAppUsage public boolean snoozing; // user manually disabled this instance + @UnsupportedAppUsage public String name; // required for automatic + @UnsupportedAppUsage public int zenMode; + @UnsupportedAppUsage public Uri conditionId; // required for automatic public Condition condition; // optional public ComponentName component; // optional public String id; // required for automatic (unique) + @UnsupportedAppUsage public long creationTime; // required for automatic public String enabler; // package name, only used for manual rules. @@ -1456,14 +1472,13 @@ public class ZenModeConfig implements Parcelable { && Objects.equals(other.condition, condition) && Objects.equals(other.component, component) && Objects.equals(other.id, id) - && other.creationTime == creationTime && Objects.equals(other.enabler, enabler); } @Override public int hashCode() { return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, - component, id, creationTime, enabler); + component, id, enabler); } public boolean isAutomaticActive() { diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java index 76d89ef039c8..bd953cad2b75 100644 --- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java +++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java @@ -19,6 +19,7 @@ package android.service.voice; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.content.Intent; import android.hardware.soundtrigger.IRecognitionStatusCallback; @@ -266,6 +267,7 @@ public class AlwaysOnHotwordDetector { * @hide */ @Nullable + @UnsupportedAppUsage public Integer getCaptureSession() { if (mCaptureAvailable) { return mCaptureSession; diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java index 8f79bcffa776..0bbc07e8063e 100644 --- a/core/java/android/service/voice/VoiceInteractionService.java +++ b/core/java/android/service/voice/VoiceInteractionService.java @@ -17,6 +17,7 @@ package android.service.voice; import android.annotation.SdkConstant; +import android.annotation.UnsupportedAppUsage; import android.app.Service; import android.content.ComponentName; import android.content.Context; @@ -294,6 +295,7 @@ public class VoiceInteractionService extends Service { * @return true if the keyphrase and locale combination is supported, false otherwise. * @hide */ + @UnsupportedAppUsage public final boolean isKeyphraseAndLocaleSupportedForHotword(String keyphrase, Locale locale) { if (mKeyphraseEnrollmentInfo == null) { return false; diff --git a/core/java/android/service/vr/VrListenerService.java b/core/java/android/service/vr/VrListenerService.java index fa3d065d28a7..3c384955a578 100644 --- a/core/java/android/service/vr/VrListenerService.java +++ b/core/java/android/service/vr/VrListenerService.java @@ -18,6 +18,7 @@ package android.service.vr; import android.annotation.NonNull; import android.annotation.SdkConstant; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.Service; import android.content.ComponentName; @@ -139,6 +140,7 @@ public abstract class VrListenerService extends Service { * @see android.R.attr#enableVrMode * @hide */ + @UnsupportedAppUsage public void onCurrentVrActivityChanged( ComponentName component, boolean running2dInVr, int pid) { // Override to implement. Default to old behaviour of sending null for 2D. diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 29f73b55bb40..28467303df14 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -19,6 +19,7 @@ package android.service.wallpaper; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.app.Service; import android.app.WallpaperColors; import android.app.WallpaperInfo; @@ -109,6 +110,7 @@ public abstract class WallpaperService extends Service { private static final int MSG_VISIBILITY_CHANGED = 10010; private static final int MSG_WALLPAPER_OFFSETS = 10020; private static final int MSG_WALLPAPER_COMMAND = 10025; + @UnsupportedAppUsage private static final int MSG_WINDOW_RESIZED = 10030; private static final int MSG_WINDOW_MOVED = 10035; private static final int MSG_TOUCH_EVENT = 10040; @@ -191,6 +193,7 @@ public abstract class WallpaperService extends Service { final Object mLock = new Object(); boolean mOffsetMessageEnqueued; + @UnsupportedAppUsage float mPendingXOffset; float mPendingYOffset; float mPendingXOffsetStep; @@ -479,6 +482,7 @@ public abstract class WallpaperService extends Service { } /** {@hide} */ + @UnsupportedAppUsage public void setFixedSizeAllowed(boolean allowed) { mFixedSizeAllowed = allowed; } diff --git a/core/java/android/text/AndroidBidi.java b/core/java/android/text/AndroidBidi.java index 72383cf377e9..bb7fb446d40c 100644 --- a/core/java/android/text/AndroidBidi.java +++ b/core/java/android/text/AndroidBidi.java @@ -16,6 +16,7 @@ package android.text; +import android.annotation.UnsupportedAppUsage; import android.icu.lang.UCharacter; import android.icu.lang.UCharacterDirection; import android.icu.lang.UProperty; @@ -61,6 +62,7 @@ public class AndroidBidi { /** * Runs the bidi algorithm on input text. */ + @UnsupportedAppUsage public static int bidi(int dir, char[] chs, byte[] chInfo) { if (chs == null || chInfo == null) { throw new NullPointerException(); diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java index fc1bfef57227..2b33faea2061 100644 --- a/core/java/android/text/BoringLayout.java +++ b/core/java/android/text/BoringLayout.java @@ -16,6 +16,7 @@ package android.text; +import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; @@ -321,6 +322,7 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback * if boring. * @hide */ + @UnsupportedAppUsage public static Metrics isBoring(CharSequence text, TextPaint paint, TextDirectionHeuristic textDir, Metrics metrics) { final int textLength = text.length(); diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java index febca7ec9de1..c46c831b2f9d 100644 --- a/core/java/android/text/DynamicLayout.java +++ b/core/java/android/text/DynamicLayout.java @@ -20,6 +20,7 @@ import android.annotation.FloatRange; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Paint; import android.graphics.Rect; import android.text.style.ReplacementSpan; @@ -353,6 +354,7 @@ public class DynamicLayout extends Layout { * @deprecated Use {@link Builder} instead. */ @Deprecated + @UnsupportedAppUsage public DynamicLayout(@NonNull CharSequence base, @NonNull CharSequence display, @NonNull TextPaint paint, @IntRange(from = 0) int width, @@ -944,6 +946,7 @@ public class DynamicLayout extends Layout { /** * @hide */ + @UnsupportedAppUsage public int[] getBlockEndLines() { return mBlockEndLines; } @@ -951,6 +954,7 @@ public class DynamicLayout extends Layout { /** * @hide */ + @UnsupportedAppUsage public int[] getBlockIndices() { return mBlockIndices; } @@ -973,6 +977,7 @@ public class DynamicLayout extends Layout { /** * @hide */ + @UnsupportedAppUsage public int getNumberOfBlocks() { return mNumberOfBlocks; } @@ -980,6 +985,7 @@ public class DynamicLayout extends Layout { /** * @hide */ + @UnsupportedAppUsage public int getIndexFirstChangedBlock() { return mIndexFirstChangedBlock; } @@ -987,6 +993,7 @@ public class DynamicLayout extends Layout { /** * @hide */ + @UnsupportedAppUsage public void setIndexFirstChangedBlock(int i) { mIndexFirstChangedBlock = i; } @@ -1169,6 +1176,7 @@ public class DynamicLayout extends Layout { private Rect mTempRect = new Rect(); + @UnsupportedAppUsage private static StaticLayout sStaticLayout = null; private static StaticLayout.Builder sBuilder = null; diff --git a/core/java/android/text/FontConfig.java b/core/java/android/text/FontConfig.java index 7386e3e88561..9e0fee337bc7 100644 --- a/core/java/android/text/FontConfig.java +++ b/core/java/android/text/FontConfig.java @@ -21,6 +21,7 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.fonts.FontVariationAxis; import android.net.Uri; @@ -43,6 +44,7 @@ public final class FontConfig { /** * Returns the ordered list of families included in the system fonts. */ + @UnsupportedAppUsage public @NonNull Family[] getFamilies() { return mFamilies; } @@ -89,6 +91,7 @@ public final class FontConfig { /** * Returns the index to be used to access this font when accessing a TTC file. */ + @UnsupportedAppUsage public int getTtcIndex() { return mTtcIndex; } @@ -96,6 +99,7 @@ public final class FontConfig { /** * Returns the list of axes associated to this font. */ + @UnsupportedAppUsage public @NonNull FontVariationAxis[] getAxes() { return mAxes; } @@ -103,6 +107,7 @@ public final class FontConfig { /** * Returns the weight value for this font. */ + @UnsupportedAppUsage public int getWeight() { return mWeight; } @@ -110,6 +115,7 @@ public final class FontConfig { /** * Returns whether this font is italic. */ + @UnsupportedAppUsage public boolean isItalic() { return mIsItalic; } @@ -224,6 +230,7 @@ public final class FontConfig { /** * Returns the name given by the system to this font family. */ + @UnsupportedAppUsage public @Nullable String getName() { return mName; } @@ -231,6 +238,7 @@ public final class FontConfig { /** * Returns the list of fonts included in this family. */ + @UnsupportedAppUsage public @Nullable Font[] getFonts() { return mFonts; } @@ -245,6 +253,7 @@ public final class FontConfig { /** * Returns the font variant for this family, e.g. "elegant" or "compact". May be null. */ + @UnsupportedAppUsage public @Variant int getVariant() { return mVariant; } diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java index c3aac74d0f32..18f8db23db74 100644 --- a/core/java/android/text/Html.java +++ b/core/java/android/text/Html.java @@ -16,6 +16,7 @@ package android.text; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityThread; import android.app.Application; import android.content.res.Resources; @@ -628,6 +629,7 @@ public class Html { } } + @UnsupportedAppUsage private static void withinStyle(StringBuilder out, CharSequence text, int start, int end) { for (int i = start; i < end; i++) { diff --git a/core/java/android/text/InputFilter.java b/core/java/android/text/InputFilter.java index a507f2b373fc..a9a7b2f2fa7a 100644 --- a/core/java/android/text/InputFilter.java +++ b/core/java/android/text/InputFilter.java @@ -17,6 +17,7 @@ package android.text; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import com.android.internal.util.Preconditions; @@ -164,6 +165,7 @@ public interface InputFilter * greater than the specified length. */ public static class LengthFilter implements InputFilter { + @UnsupportedAppUsage private final int mMax; public LengthFilter(int max) { diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index c6c1e8ae9ac9..ca952da15c72 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -18,6 +18,7 @@ package android.text; import android.annotation.IntDef; import android.annotation.IntRange; +import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; @@ -411,6 +412,7 @@ public abstract class Layout { /** * @hide */ + @UnsupportedAppUsage public void drawText(Canvas canvas, int firstLine, int lastLine) { int previousLineBottom = getLineTop(firstLine); int previousLineEnd = getLineStart(firstLine); @@ -578,6 +580,7 @@ public abstract class Layout { /** * @hide */ + @UnsupportedAppUsage public void drawBackground(Canvas canvas, Path highlight, Paint highlightPaint, int cursorOffsetVertical, int firstLine, int lastLine) { // First, draw LineBackgroundSpans. @@ -658,6 +661,7 @@ public abstract class Layout { * @return The range of lines that need to be drawn, possibly empty. * @hide */ + @UnsupportedAppUsage public long getLineRangeForDraw(Canvas canvas) { int dtop, dbottom; @@ -928,6 +932,7 @@ public abstract class Layout { * @return true if at a level boundary * @hide */ + @UnsupportedAppUsage public boolean isLevelBoundary(int offset) { int line = getLineForOffset(offset); Directions dirs = getLineDirections(line); @@ -1134,6 +1139,7 @@ public abstract class Layout { * optionally clamp it so that it doesn't exceed the width of the layout. * @hide */ + @UnsupportedAppUsage public float getPrimaryHorizontal(int offset, boolean clamped) { boolean trailing = primaryIsTrailingPrevious(offset); return getHorizontal(offset, trailing, clamped); @@ -1153,6 +1159,7 @@ public abstract class Layout { * optionally clamp it so that it doesn't exceed the width of the layout. * @hide */ + @UnsupportedAppUsage public float getSecondaryHorizontal(int offset, boolean clamped) { boolean trailing = primaryIsTrailingPrevious(offset); return getHorizontal(offset, !trailing, clamped); @@ -1594,10 +1601,11 @@ public abstract class Layout { } float get(final int offset) { - if (mHorizontals == null || offset < 0 || offset >= mHorizontals.length) { + final int index = offset - mLineStartOffset; + if (mHorizontals == null || index < 0 || index >= mHorizontals.length) { return getHorizontal(offset, mPrimary); } else { - return mHorizontals[offset - mLineStartOffset]; + return mHorizontals[index]; } } } @@ -1783,6 +1791,7 @@ public abstract class Layout { * only robust for left-aligned displays. * @hide */ + @UnsupportedAppUsage public boolean shouldClampCursor(int line) { // Only clamp cursor position in left-aligned displays. switch (getParagraphAlignment(line)) { @@ -2435,6 +2444,7 @@ public abstract class Layout { } private CharSequence mText; + @UnsupportedAppUsage private TextPaint mPaint; private TextPaint mWorkPaint = new TextPaint(); private int mWidth; @@ -2460,6 +2470,7 @@ public abstract class Layout { /* package */ static final int DIR_REQUEST_LTR = 1; /* package */ static final int DIR_REQUEST_RTL = -1; + @UnsupportedAppUsage /* package */ static final int DIR_REQUEST_DEFAULT_LTR = 2; /* package */ static final int DIR_REQUEST_DEFAULT_RTL = -2; @@ -2473,8 +2484,10 @@ public abstract class Layout { ALIGN_OPPOSITE, ALIGN_CENTER, /** @hide */ + @UnsupportedAppUsage ALIGN_LEFT, /** @hide */ + @UnsupportedAppUsage ALIGN_RIGHT, } @@ -2482,11 +2495,13 @@ public abstract class Layout { /** @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + @UnsupportedAppUsage public static final Directions DIRS_ALL_LEFT_TO_RIGHT = new Directions(new int[] { 0, RUN_LENGTH_MASK }); /** @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + @UnsupportedAppUsage public static final Directions DIRS_ALL_RIGHT_TO_LEFT = new Directions(new int[] { 0, RUN_LENGTH_MASK | RUN_RTL_FLAG }); diff --git a/core/java/android/text/Selection.java b/core/java/android/text/Selection.java index 5256e471e974..68199a4f622e 100644 --- a/core/java/android/text/Selection.java +++ b/core/java/android/text/Selection.java @@ -17,6 +17,7 @@ package android.text; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import java.text.BreakIterator; @@ -448,6 +449,7 @@ public class Selection { } /** {@hide} */ + @UnsupportedAppUsage public static boolean moveToPreceding( Spannable text, PositionIterator iter, boolean extendSelection) { final int offset = iter.preceding(getSelectionEnd(text)); @@ -462,6 +464,7 @@ public class Selection { } /** {@hide} */ + @UnsupportedAppUsage public static boolean moveToFollowing( Spannable text, PositionIterator iter, boolean extendSelection) { final int offset = iter.following(getSelectionEnd(text)); diff --git a/core/java/android/text/SpanSet.java b/core/java/android/text/SpanSet.java index 00f14939a7ad..362825a005e9 100644 --- a/core/java/android/text/SpanSet.java +++ b/core/java/android/text/SpanSet.java @@ -16,6 +16,7 @@ package android.text; +import android.annotation.UnsupportedAppUsage; import java.lang.reflect.Array; import java.util.Arrays; @@ -32,6 +33,7 @@ public class SpanSet<E> { private final Class<? extends E> classType; int numberOfSpans; + @UnsupportedAppUsage E[] spans; int[] spanStarts; int[] spanEnds; diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java index 41a9c45aed57..9d841e86c9fa 100644 --- a/core/java/android/text/SpannableStringBuilder.java +++ b/core/java/android/text/SpannableStringBuilder.java @@ -17,6 +17,7 @@ package android.text; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.BaseCanvas; import android.graphics.Paint; import android.util.Log; @@ -595,6 +596,7 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable return false; } + @UnsupportedAppUsage private void sendToSpanWatchers(int replaceStart, int replaceEnd, int nbNewChars) { for (int i = 0; i < mSpanCount; i++) { int spanFlags = mSpanFlags[i]; @@ -861,6 +863,7 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable * * @hide */ + @UnsupportedAppUsage public <T> T[] getSpans(int queryStart, int queryEnd, @Nullable Class<T> kind, boolean sortByInsertionOrder) { if (kind == null) return (T[]) ArrayUtils.emptyArray(Object.class); @@ -1230,6 +1233,7 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable * [start, end[ range. * @hide */ + @UnsupportedAppUsage public String substring(int start, int end) { char[] buf = new char[end - start]; getChars(start, end, buf, 0); @@ -1765,18 +1769,26 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable private InputFilter[] mFilters = NO_FILTERS; + @UnsupportedAppUsage private char[] mText; + @UnsupportedAppUsage private int mGapStart; + @UnsupportedAppUsage private int mGapLength; + @UnsupportedAppUsage private Object[] mSpans; + @UnsupportedAppUsage private int[] mSpanStarts; + @UnsupportedAppUsage private int[] mSpanEnds; private int[] mSpanMax; // see calcMax() for an explanation of what this array stores + @UnsupportedAppUsage private int[] mSpanFlags; private int[] mSpanOrder; // store the order of span insertion private int mSpanInsertCount; // counter for the span insertion + @UnsupportedAppUsage private int mSpanCount; private IdentityHashMap<Object, Integer> mIndexOfSpan; private int mLowWaterMark; // indices below this have not been touched diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java index bcc2fda86074..7acd5399792c 100644 --- a/core/java/android/text/SpannableStringInternal.java +++ b/core/java/android/text/SpannableStringInternal.java @@ -21,6 +21,7 @@ import com.android.internal.util.GrowingArrayUtils; import libcore.util.EmptyArray; +import android.annotation.UnsupportedAppUsage; import java.lang.reflect.Array; /* package */ abstract class SpannableStringInternal @@ -50,6 +51,7 @@ import java.lang.reflect.Array; * * Due to backward compatibility reasons, we copy even NoCopySpan by default */ + @UnsupportedAppUsage /* package */ SpannableStringInternal(CharSequence source, int start, int end) { this(source, start, end, false /* ignoreNoCopySpan */); } @@ -148,6 +150,7 @@ import java.lang.reflect.Array; * * @return True if excluded, false if included. */ + @UnsupportedAppUsage private final boolean isOutOfCopyRange(int start, int end, int spanStart, int spanEnd) { if (spanStart > end || spanEnd < start) return true; if (spanStart != spanEnd && start != end) { @@ -174,14 +177,17 @@ import java.lang.reflect.Array; mText.getChars(start, end, dest, off); } + @UnsupportedAppUsage /* package */ void setSpan(Object what, int start, int end, int flags) { setSpan(what, start, end, flags, true/*enforceParagraph*/); } + @UnsupportedAppUsage private boolean isIndexFollowsNextLine(int index) { return index != 0 && index != length() && charAt(index - 1) != '\n'; } + @UnsupportedAppUsage private void setSpan(Object what, int start, int end, int flags, boolean enforceParagraph) { int nstart = start; int nend = end; @@ -248,6 +254,7 @@ import java.lang.reflect.Array; sendSpanAdded(what, nstart, nend); } + @UnsupportedAppUsage /* package */ void removeSpan(Object what) { removeSpan(what, 0 /* flags */); } @@ -281,6 +288,7 @@ import java.lang.reflect.Array; } } + @UnsupportedAppUsage public int getSpanStart(Object what) { int count = mSpanCount; Object[] spans = mSpans; @@ -295,6 +303,7 @@ import java.lang.reflect.Array; return -1; } + @UnsupportedAppUsage public int getSpanEnd(Object what) { int count = mSpanCount; Object[] spans = mSpans; @@ -309,6 +318,7 @@ import java.lang.reflect.Array; return -1; } + @UnsupportedAppUsage public int getSpanFlags(Object what) { int count = mSpanCount; Object[] spans = mSpans; @@ -323,6 +333,7 @@ import java.lang.reflect.Array; return 0; } + @UnsupportedAppUsage public <T> T[] getSpans(int queryStart, int queryEnd, Class<T> kind) { int count = 0; @@ -404,6 +415,7 @@ import java.lang.reflect.Array; return (T[]) nret; } + @UnsupportedAppUsage public int nextSpanTransition(int start, int limit, Class kind) { int count = mSpanCount; Object[] spans = mSpans; @@ -426,6 +438,7 @@ import java.lang.reflect.Array; return limit; } + @UnsupportedAppUsage private void sendSpanAdded(Object what, int start, int end) { SpanWatcher[] recip = getSpans(start, end, SpanWatcher.class); int n = recip.length; @@ -435,6 +448,7 @@ import java.lang.reflect.Array; } } + @UnsupportedAppUsage private void sendSpanRemoved(Object what, int start, int end) { SpanWatcher[] recip = getSpans(start, end, SpanWatcher.class); int n = recip.length; @@ -444,6 +458,7 @@ import java.lang.reflect.Array; } } + @UnsupportedAppUsage private void sendSpanChanged(Object what, int s, int e, int st, int en) { SpanWatcher[] recip = getSpans(Math.min(s, st), Math.max(e, en), SpanWatcher.class); @@ -454,10 +469,12 @@ import java.lang.reflect.Array; } } + @UnsupportedAppUsage private static String region(int start, int end) { return "(" + start + " ... " + end + ")"; } + @UnsupportedAppUsage private void checkRange(final String operation, int start, int end) { if (end < start) { throw new IndexOutOfBoundsException(operation + " " + @@ -534,25 +551,36 @@ import java.lang.reflect.Array; * * Due to backward compatibility reasons, we copy even NoCopySpan by default */ + @UnsupportedAppUsage private void copySpans(Spanned src, int start, int end) { copySpans(src, start, end, false); } + @UnsupportedAppUsage private void copySpans(SpannableStringInternal src, int start, int end) { copySpans(src, start, end, false); } + @UnsupportedAppUsage private String mText; + @UnsupportedAppUsage private Object[] mSpans; + @UnsupportedAppUsage private int[] mSpanData; + @UnsupportedAppUsage private int mSpanCount; + @UnsupportedAppUsage /* package */ static final Object[] EMPTY = new Object[0]; + @UnsupportedAppUsage private static final int START = 0; + @UnsupportedAppUsage private static final int END = 1; + @UnsupportedAppUsage private static final int FLAGS = 2; + @UnsupportedAppUsage private static final int COLUMNS = 3; } diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index cc2869f28bbb..dc01178395e2 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -20,6 +20,7 @@ import android.annotation.FloatRange; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Paint; import android.text.style.LeadingMarginSpan; import android.text.style.LeadingMarginSpan.LeadingMarginSpan2; @@ -482,6 +483,7 @@ public class StaticLayout extends Layout { * @deprecated Use {@link Builder} instead. */ @Deprecated + @UnsupportedAppUsage public StaticLayout(CharSequence source, int bufstart, int bufend, TextPaint paint, int outerwidth, Alignment align, TextDirectionHeuristic textDir, @@ -1282,6 +1284,7 @@ public class StaticLayout extends Layout { * * @hide */ + @UnsupportedAppUsage public int getHeight(boolean cap) { if (cap && mLineCount > mMaximumVisibleLineCount && mMaxLineHeight == -1 && Log.isLoggable(TAG, Log.WARN)) { @@ -1294,8 +1297,10 @@ public class StaticLayout extends Layout { ? mMaxLineHeight : super.getHeight(); } + @UnsupportedAppUsage private int mLineCount; private int mTopPadding, mBottomPadding; + @UnsupportedAppUsage private int mColumns; private int mEllipsizedWidth; @@ -1323,11 +1328,15 @@ public class StaticLayout extends Layout { private static final int DESCENT = 2; private static final int EXTRA = 3; private static final int HYPHEN = 4; + @UnsupportedAppUsage private static final int ELLIPSIS_START = 5; private static final int ELLIPSIS_COUNT = 6; + @UnsupportedAppUsage private int[] mLines; + @UnsupportedAppUsage private Directions[] mLineDirections; + @UnsupportedAppUsage private int mMaximumVisibleLineCount = Integer.MAX_VALUE; private static final int START_MASK = 0x1FFFFFFF; @@ -1346,10 +1355,15 @@ public class StaticLayout extends Layout { // Unused, here because of gray list private API accesses. /*package*/ static class LineBreaks { private static final int INITIAL_SIZE = 16; + @UnsupportedAppUsage public int[] breaks = new int[INITIAL_SIZE]; + @UnsupportedAppUsage public float[] widths = new float[INITIAL_SIZE]; + @UnsupportedAppUsage public float[] ascents = new float[INITIAL_SIZE]; + @UnsupportedAppUsage public float[] descents = new float[INITIAL_SIZE]; + @UnsupportedAppUsage public int[] flags = new int[INITIAL_SIZE]; // hasTab // breaks, widths, and flags should all have the same length } diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java index b1a44ae66eb4..9667b10683a8 100644 --- a/core/java/android/text/TextLine.java +++ b/core/java/android/text/TextLine.java @@ -18,6 +18,7 @@ package android.text; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; @@ -50,6 +51,7 @@ public class TextLine { private static final boolean DEBUG = false; private TextPaint mPaint; + @UnsupportedAppUsage private CharSequence mText; private int mStart; private int mLen; @@ -59,6 +61,7 @@ public class TextLine { private TabStops mTabs; private char[] mChars; private boolean mCharsValid; + @UnsupportedAppUsage private Spanned mSpanned; private PrecomputedText mComputed; @@ -73,16 +76,20 @@ public class TextLine { private final TextPaint mWorkPaint = new TextPaint(); private final TextPaint mActivePaint = new TextPaint(); + @UnsupportedAppUsage private final SpanSet<MetricAffectingSpan> mMetricAffectingSpanSpanSet = new SpanSet<MetricAffectingSpan>(MetricAffectingSpan.class); + @UnsupportedAppUsage private final SpanSet<CharacterStyle> mCharacterStyleSpanSet = new SpanSet<CharacterStyle>(CharacterStyle.class); + @UnsupportedAppUsage private final SpanSet<ReplacementSpan> mReplacementSpanSpanSet = new SpanSet<ReplacementSpan>(ReplacementSpan.class); private final DecorationInfo mDecorationInfo = new DecorationInfo(); private final ArrayList<DecorationInfo> mDecorations = new ArrayList<>(); + @UnsupportedAppUsage private static final TextLine[] sCached = new TextLine[3]; /** @@ -91,6 +98,7 @@ public class TextLine { * @return an uninitialized TextLine */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + @UnsupportedAppUsage public static TextLine obtain() { TextLine tl; synchronized (sCached) { diff --git a/core/java/android/text/TextPaint.java b/core/java/android/text/TextPaint.java index 5234fa9a594b..7bcc6859b8fc 100644 --- a/core/java/android/text/TextPaint.java +++ b/core/java/android/text/TextPaint.java @@ -18,6 +18,7 @@ package android.text; import android.annotation.ColorInt; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.graphics.Paint; /** @@ -39,11 +40,13 @@ public class TextPaint extends Paint { * @hide */ @ColorInt + @UnsupportedAppUsage public int underlineColor = 0; /** * Thickness of the underline, in pixels. * @hide */ + @UnsupportedAppUsage public float underlineThickness; public TextPaint() { @@ -98,6 +101,7 @@ public class TextPaint extends Paint { * @param thickness underline thickness * @hide */ + @UnsupportedAppUsage public void setUnderlineText(int color, float thickness) { underlineColor = color; underlineThickness = thickness; diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index dde4c1d2801f..e31e928bb917 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -21,6 +21,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.PluralsRes; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.icu.lang.UCharacter; @@ -1194,6 +1195,7 @@ public class TextUtils { /** * @hide */ + @UnsupportedAppUsage END_SMALL } @@ -1733,6 +1735,7 @@ public class TextUtils { /** * @hide */ + @UnsupportedAppUsage public static boolean isPrintableAsciiOnly(final CharSequence str) { final int len = str.length(); for (int i = 0; i < len; i++) { @@ -1958,6 +1961,7 @@ public class TextUtils { * @see #unpackRangeEndFromLong(long) * @hide */ + @UnsupportedAppUsage public static long packRangeInLong(int start, int end) { return (((long) start) << 32) | end; } @@ -1968,6 +1972,7 @@ public class TextUtils { * @see #packRangeInLong(int, int) * @hide */ + @UnsupportedAppUsage public static int unpackRangeStartFromLong(long range) { return (int) (range >>> 32); } @@ -1978,6 +1983,7 @@ public class TextUtils { * @see #packRangeInLong(int, int) * @hide */ + @UnsupportedAppUsage public static int unpackRangeEndFromLong(long range) { return (int) (range & 0x00000000FFFFFFFFL); } diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index 94025ef96f10..3c8de94c05f2 100755 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -17,6 +17,7 @@ package android.text.format; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.UserHandle; import android.provider.Settings; @@ -178,6 +179,7 @@ public class DateFormat { * * @hide */ + @UnsupportedAppUsage public static boolean is24HourFormat(Context context, int userHandle) { final String value = Settings.System.getStringForUser(context.getContentResolver(), Settings.System.TIME_12_24, userHandle); @@ -270,6 +272,7 @@ public class DateFormat { * @param context the application context * @hide */ + @UnsupportedAppUsage public static String getTimeFormatString(Context context) { return getTimeFormatString(context, context.getUserId()); } @@ -281,6 +284,7 @@ public class DateFormat { * @param userHandle the user handle of the user to query the format for * @hide */ + @UnsupportedAppUsage public static String getTimeFormatString(Context context, int userHandle) { final LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); return is24HourFormat(context, userHandle) ? d.timeFormat_Hm : d.timeFormat_hm; @@ -379,6 +383,7 @@ public class DateFormat { * * @hide */ + @UnsupportedAppUsage public static boolean hasSeconds(CharSequence inFormat) { return hasDesignator(inFormat, SECONDS); } @@ -392,6 +397,7 @@ public class DateFormat { * * @hide */ + @UnsupportedAppUsage public static boolean hasDesignator(CharSequence inFormat, char designator) { if (inFormat == null) return false; diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index e19b2c71b841..e94b8006d24a 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -16,6 +16,7 @@ package android.text.format; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; @@ -361,6 +362,7 @@ public class DateUtils * * @hide */ + @UnsupportedAppUsage public static CharSequence formatDuration(long millis) { return formatDuration(millis, LENGTH_LONG); } @@ -376,6 +378,7 @@ public class DateUtils * the briefest form available (e.g. "2h"). * @hide */ + @UnsupportedAppUsage public static CharSequence formatDuration(long millis, int abbrev) { final FormatWidth width; switch (abbrev) { diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java index de86a66aeb8f..077d12de4d59 100644 --- a/core/java/android/text/format/Formatter.java +++ b/core/java/android/text/format/Formatter.java @@ -18,6 +18,7 @@ package android.text.format; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.Resources; import android.icu.text.MeasureFormat; @@ -114,6 +115,7 @@ public final class Formatter { } /** {@hide} */ + @UnsupportedAppUsage public static BytesResult formatBytes(Resources res, long sizeBytes, int flags) { final int unit = ((flags & FLAG_IEC_UNITS) != 0) ? 1024 : 1000; final boolean isNegative = (sizeBytes < 0); @@ -216,6 +218,7 @@ public final class Formatter { * @return the formatted elapsed time * @hide */ + @UnsupportedAppUsage public static String formatShortElapsedTime(Context context, long millis) { long secondsLong = millis / 1000; @@ -271,6 +274,7 @@ public final class Formatter { * @return the formatted elapsed time * @hide */ + @UnsupportedAppUsage public static String formatShortElapsedTimeRoundingUpToMinutes(Context context, long millis) { long minutesRoundedUp = (millis + MILLIS_PER_MINUTE - 1) / MILLIS_PER_MINUTE; diff --git a/core/java/android/text/method/AllCapsTransformationMethod.java b/core/java/android/text/method/AllCapsTransformationMethod.java index c807e7da4f1b..5a7c98d7ccdf 100644 --- a/core/java/android/text/method/AllCapsTransformationMethod.java +++ b/core/java/android/text/method/AllCapsTransformationMethod.java @@ -17,6 +17,7 @@ package android.text.method; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Rect; import android.text.Spanned; @@ -38,6 +39,7 @@ public class AllCapsTransformationMethod implements TransformationMethod2 { private boolean mEnabled; private Locale mLocale; + @UnsupportedAppUsage public AllCapsTransformationMethod(@NonNull Context context) { mLocale = context.getResources().getConfiguration().getLocales().get(0); } diff --git a/core/java/android/text/method/HideReturnsTransformationMethod.java b/core/java/android/text/method/HideReturnsTransformationMethod.java index c6a90ca9cf5d..e753754a38d4 100644 --- a/core/java/android/text/method/HideReturnsTransformationMethod.java +++ b/core/java/android/text/method/HideReturnsTransformationMethod.java @@ -16,6 +16,8 @@ package android.text.method; +import android.annotation.UnsupportedAppUsage; + /** * This transformation method causes any carriage return characters (\r) * to be hidden by displaying them as zero-width non-breaking space @@ -48,5 +50,6 @@ extends ReplacementTransformationMethod { return sInstance; } + @UnsupportedAppUsage private static HideReturnsTransformationMethod sInstance; } diff --git a/core/java/android/text/method/LinkMovementMethod.java b/core/java/android/text/method/LinkMovementMethod.java index 549f8b3953dd..a0c44a8b6bdc 100644 --- a/core/java/android/text/method/LinkMovementMethod.java +++ b/core/java/android/text/method/LinkMovementMethod.java @@ -16,6 +16,7 @@ package android.text.method; +import android.annotation.UnsupportedAppUsage; import android.os.Build; import android.text.Layout; import android.text.NoCopySpan; @@ -274,6 +275,7 @@ public class LinkMovementMethod extends ScrollingMovementMethod { return sInstance; } + @UnsupportedAppUsage private static LinkMovementMethod sInstance; private static Object FROM_BELOW = new NoCopySpan.Concrete(); } diff --git a/core/java/android/text/method/MetaKeyKeyListener.java b/core/java/android/text/method/MetaKeyKeyListener.java index c3c7302ce090..ec7ed34bb5ba 100644 --- a/core/java/android/text/method/MetaKeyKeyListener.java +++ b/core/java/android/text/method/MetaKeyKeyListener.java @@ -16,6 +16,7 @@ package android.text.method; +import android.annotation.UnsupportedAppUsage; import android.text.Editable; import android.text.NoCopySpan; import android.text.Spannable; @@ -361,6 +362,7 @@ public abstract class MetaKeyKeyListener { * Start selecting text. * @hide pending API review */ + @UnsupportedAppUsage public static void startSelecting(View view, Spannable content) { content.setSpan(SELECTING, 0, 0, PRESSED); } @@ -370,6 +372,7 @@ public abstract class MetaKeyKeyListener { * call {@link android.text.Selection#setSelection} too. * @hide pending API review */ + @UnsupportedAppUsage public static void stopSelecting(View view, Spannable content) { content.removeSpan(SELECTING); } diff --git a/core/java/android/text/method/PasswordTransformationMethod.java b/core/java/android/text/method/PasswordTransformationMethod.java index 4485e3856619..479fdf4cbb23 100644 --- a/core/java/android/text/method/PasswordTransformationMethod.java +++ b/core/java/android/text/method/PasswordTransformationMethod.java @@ -16,6 +16,7 @@ package android.text.method; +import android.annotation.UnsupportedAppUsage; import android.graphics.Rect; import android.os.Handler; import android.os.SystemClock; @@ -261,6 +262,8 @@ implements TransformationMethod, TextWatcher } } + @UnsupportedAppUsage private static PasswordTransformationMethod sInstance; + @UnsupportedAppUsage private static char DOT = '\u2022'; } diff --git a/core/java/android/text/method/TransformationMethod2.java b/core/java/android/text/method/TransformationMethod2.java index ef00ecdb8179..0bf401a84df0 100644 --- a/core/java/android/text/method/TransformationMethod2.java +++ b/core/java/android/text/method/TransformationMethod2.java @@ -15,6 +15,8 @@ */ package android.text.method; +import android.annotation.UnsupportedAppUsage; + /** * TransformationMethod2 extends the TransformationMethod interface * and adds the ability to relax restrictions of TransformationMethod. @@ -29,5 +31,6 @@ public interface TransformationMethod2 extends TransformationMethod { * @param allowLengthChanges true to allow the transformation to change the length * of the input string. */ + @UnsupportedAppUsage public void setLengthChangesAllowed(boolean allowLengthChanges); } diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java index 33e96a8638da..313567acb51f 100644 --- a/core/java/android/text/method/WordIterator.java +++ b/core/java/android/text/method/WordIterator.java @@ -17,6 +17,7 @@ package android.text.method; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.icu.lang.UCharacter; import android.icu.lang.UProperty; import android.icu.text.BreakIterator; @@ -52,10 +53,12 @@ public class WordIterator implements Selection.PositionIterator { * Constructs a new WordIterator for the specified locale. * @param locale The locale to be used for analyzing the text. */ + @UnsupportedAppUsage public WordIterator(Locale locale) { mIterator = BreakIterator.getWordInstance(locale); } + @UnsupportedAppUsage public void setCharSequence(@NonNull CharSequence charSequence, int start, int end) { if (0 <= start && end <= charSequence.length()) { mCharSeq = charSequence; @@ -68,6 +71,7 @@ public class WordIterator implements Selection.PositionIterator { } /** {@inheritDoc} */ + @UnsupportedAppUsage public int preceding(int offset) { checkOffsetIsValid(offset); while (true) { @@ -79,6 +83,7 @@ public class WordIterator implements Selection.PositionIterator { } /** {@inheritDoc} */ + @UnsupportedAppUsage public int following(int offset) { checkOffsetIsValid(offset); while (true) { @@ -90,6 +95,7 @@ public class WordIterator implements Selection.PositionIterator { } /** {@inheritDoc} */ + @UnsupportedAppUsage public boolean isBoundary(int offset) { checkOffsetIsValid(offset); return mIterator.isBoundary(offset); @@ -102,6 +108,7 @@ public class WordIterator implements Selection.PositionIterator { * @param offset the given start position to search from. * @return the position of the last boundary preceding the given offset. */ + @UnsupportedAppUsage public int nextBoundary(int offset) { checkOffsetIsValid(offset); return mIterator.following(offset); @@ -114,6 +121,7 @@ public class WordIterator implements Selection.PositionIterator { * @param offset the given start position to search from. * @return the position of the last boundary preceding the given offset. */ + @UnsupportedAppUsage public int prevBoundary(int offset) { checkOffsetIsValid(offset); return mIterator.preceding(offset); @@ -131,6 +139,7 @@ public class WordIterator implements Selection.PositionIterator { * * @throws IllegalArgumentException is offset is not valid. */ + @UnsupportedAppUsage public int getBeginning(int offset) { // TODO: Check if usage of this can be updated to getBeginning(offset, true) if // so this method can be removed. @@ -150,6 +159,7 @@ public class WordIterator implements Selection.PositionIterator { * * @throws IllegalArgumentException is offset is not valid. */ + @UnsupportedAppUsage public int getEnd(int offset) { // TODO: Check if usage of this can be updated to getEnd(offset, true), if // so this method can be removed. @@ -170,6 +180,7 @@ public class WordIterator implements Selection.PositionIterator { * * @throws IllegalArgumentException is offset is not valid. */ + @UnsupportedAppUsage public int getPrevWordBeginningOnTwoWordsBoundary(int offset) { return getBeginning(offset, true); } @@ -188,6 +199,7 @@ public class WordIterator implements Selection.PositionIterator { * * @throws IllegalArgumentException is offset is not valid. */ + @UnsupportedAppUsage public int getNextWordEndOnTwoWordBoundary(int offset) { return getEnd(offset, true); } @@ -268,6 +280,7 @@ public class WordIterator implements Selection.PositionIterator { * * @param offset the offset to search from. */ + @UnsupportedAppUsage public int getPunctuationBeginning(int offset) { checkOffsetIsValid(offset); while (offset != BreakIterator.DONE && !isPunctuationStartBoundary(offset)) { @@ -284,6 +297,7 @@ public class WordIterator implements Selection.PositionIterator { * * @param offset the offset to search from. */ + @UnsupportedAppUsage public int getPunctuationEnd(int offset) { checkOffsetIsValid(offset); while (offset != BreakIterator.DONE && !isPunctuationEndBoundary(offset)) { @@ -300,6 +314,7 @@ public class WordIterator implements Selection.PositionIterator { * @param offset the offset to check from. * @return Whether the offset is after a punctuation character. */ + @UnsupportedAppUsage public boolean isAfterPunctuation(int offset) { if (mStart < offset && offset <= mEnd) { final int codePoint = Character.codePointBefore(mCharSeq, offset); @@ -315,6 +330,7 @@ public class WordIterator implements Selection.PositionIterator { * @param offset the offset to check from. * @return Whether the offset is at a punctuation character. */ + @UnsupportedAppUsage public boolean isOnPunctuation(int offset) { if (mStart <= offset && offset < mEnd) { final int codePoint = Character.codePointAt(mCharSeq, offset); diff --git a/core/java/android/text/style/BulletSpan.java b/core/java/android/text/style/BulletSpan.java index c0ac70e0477e..679698bbfb55 100644 --- a/core/java/android/text/style/BulletSpan.java +++ b/core/java/android/text/style/BulletSpan.java @@ -21,6 +21,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Px; +import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Parcel; @@ -68,11 +69,14 @@ public class BulletSpan implements LeadingMarginSpan, ParcelableSpan { private static final int STANDARD_COLOR = 0; @Px + @UnsupportedAppUsage private final int mGapWidth; @Px private final int mBulletRadius; @ColorInt + @UnsupportedAppUsage private final int mColor; + @UnsupportedAppUsage private final boolean mWantColor; /** diff --git a/core/java/android/text/style/DynamicDrawableSpan.java b/core/java/android/text/style/DynamicDrawableSpan.java index 1b16f3345bfa..be772af529ef 100644 --- a/core/java/android/text/style/DynamicDrawableSpan.java +++ b/core/java/android/text/style/DynamicDrawableSpan.java @@ -19,6 +19,7 @@ package android.text.style; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; @@ -78,6 +79,7 @@ public abstract class DynamicDrawableSpan extends ReplacementSpan { protected final int mVerticalAlignment; + @UnsupportedAppUsage private WeakReference<Drawable> mDrawableRef; /** diff --git a/core/java/android/text/style/EasyEditSpan.java b/core/java/android/text/style/EasyEditSpan.java index 305b330663b7..bfb2873b5112 100644 --- a/core/java/android/text/style/EasyEditSpan.java +++ b/core/java/android/text/style/EasyEditSpan.java @@ -17,6 +17,7 @@ package android.text.style; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.os.Parcel; import android.text.ParcelableSpan; @@ -115,6 +116,7 @@ public class EasyEditSpan implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public boolean isDeleteEnabled() { return mDeleteEnabled; } @@ -124,6 +126,7 @@ public class EasyEditSpan implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public void setDeleteEnabled(boolean value) { mDeleteEnabled = value; } @@ -133,6 +136,7 @@ public class EasyEditSpan implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public PendingIntent getPendingIntent() { return mPendingIntent; } diff --git a/core/java/android/text/style/ImageSpan.java b/core/java/android/text/style/ImageSpan.java index 95f0b43341a2..d4edde9ec589 100644 --- a/core/java/android/text/style/ImageSpan.java +++ b/core/java/android/text/style/ImageSpan.java @@ -19,6 +19,7 @@ package android.text.style; import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -57,6 +58,7 @@ import java.io.InputStream; public class ImageSpan extends DynamicDrawableSpan { @Nullable + @UnsupportedAppUsage private Drawable mDrawable; @Nullable private Uri mContentUri; diff --git a/core/java/android/text/style/SpellCheckSpan.java b/core/java/android/text/style/SpellCheckSpan.java index 10275c22320d..6ffde38a3b75 100644 --- a/core/java/android/text/style/SpellCheckSpan.java +++ b/core/java/android/text/style/SpellCheckSpan.java @@ -16,6 +16,7 @@ package android.text.style; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.text.ParcelableSpan; import android.text.TextUtils; @@ -31,18 +32,22 @@ public class SpellCheckSpan implements ParcelableSpan { private boolean mSpellCheckInProgress; + @UnsupportedAppUsage public SpellCheckSpan() { mSpellCheckInProgress = false; } + @UnsupportedAppUsage public SpellCheckSpan(Parcel src) { mSpellCheckInProgress = (src.readInt() != 0); } + @UnsupportedAppUsage public void setSpellCheckInProgress(boolean inProgress) { mSpellCheckInProgress = inProgress; } + @UnsupportedAppUsage public boolean isSpellCheckInProgress() { return mSpellCheckInProgress; } diff --git a/core/java/android/text/style/SuggestionRangeSpan.java b/core/java/android/text/style/SuggestionRangeSpan.java index c1943d53407b..d958ddebaf5a 100644 --- a/core/java/android/text/style/SuggestionRangeSpan.java +++ b/core/java/android/text/style/SuggestionRangeSpan.java @@ -16,6 +16,7 @@ package android.text.style; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.text.ParcelableSpan; import android.text.TextPaint; @@ -30,11 +31,13 @@ import android.text.TextUtils; public class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpan { private int mBackgroundColor; + @UnsupportedAppUsage public SuggestionRangeSpan() { // 0 is a fully transparent black. Has to be set using #setBackgroundColor mBackgroundColor = 0; } + @UnsupportedAppUsage public SuggestionRangeSpan(Parcel src) { mBackgroundColor = src.readInt(); } @@ -64,6 +67,7 @@ public class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpa return TextUtils.SUGGESTION_RANGE_SPAN; } + @UnsupportedAppUsage public void setBackgroundColor(int backgroundColor) { mBackgroundColor = backgroundColor; } diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java index 1b00db2e4ad3..521044778257 100644 --- a/core/java/android/text/style/SuggestionSpan.java +++ b/core/java/android/text/style/SuggestionSpan.java @@ -18,6 +18,7 @@ package android.text.style; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; @@ -99,7 +100,9 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { private final String mNotificationTargetPackageName; private final int mHashCode; + @UnsupportedAppUsage private float mEasyCorrectUnderlineThickness; + @UnsupportedAppUsage private int mEasyCorrectUnderlineColor; private float mMisspelledUnderlineThickness; @@ -264,6 +267,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public String getNotificationTargetClassName() { return mNotificationTargetClassName; } @@ -368,6 +372,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public int getUnderlineColor() { // The order here should match what is used in updateDrawState final boolean misspelled = (mFlags & FLAG_MISSPELLED) != 0; @@ -390,6 +395,7 @@ public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { * * @hide */ + @UnsupportedAppUsage public void notifySelection(Context context, String original, int index) { final Intent intent = new Intent(); diff --git a/core/java/android/text/util/Linkify.java b/core/java/android/text/util/Linkify.java index 08cbbe628eeb..f4dad625fbc6 100644 --- a/core/java/android/text/util/Linkify.java +++ b/core/java/android/text/util/Linkify.java @@ -19,6 +19,7 @@ package android.text.util; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; @@ -654,6 +655,7 @@ public class Linkify { } } + @UnsupportedAppUsage private static void gatherTelLinks(ArrayList<LinkSpec> links, Spannable s, @Nullable Context context) { PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java index f1e937e83dc1..5108a796a036 100644 --- a/core/java/android/util/ArrayMap.java +++ b/core/java/android/util/ArrayMap.java @@ -18,6 +18,7 @@ package android.util; import libcore.util.EmptyArray; +import android.annotation.UnsupportedAppUsage; import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.Map; @@ -70,16 +71,19 @@ public final class ArrayMap<K, V> implements Map<K, V> { /** * Maximum number of entries to have in array caches. */ + @UnsupportedAppUsage private static final int CACHE_SIZE = 10; /** * Special hash array value that indicates the container is immutable. */ + @UnsupportedAppUsage static final int[] EMPTY_IMMUTABLE_INTS = new int[0]; /** * @hide Special immutable empty ArrayMap. */ + @UnsupportedAppUsage public static final ArrayMap EMPTY = new ArrayMap<>(-1); /** @@ -88,14 +92,21 @@ public final class ArrayMap<K, V> implements Map<K, V> { * The first entry in the array is a pointer to the next array in the * list; the second entry is a pointer to the int[] hash code array for it. */ + @UnsupportedAppUsage static Object[] mBaseCache; + @UnsupportedAppUsage static int mBaseCacheSize; + @UnsupportedAppUsage static Object[] mTwiceBaseCache; + @UnsupportedAppUsage static int mTwiceBaseCacheSize; final boolean mIdentityHashCode; + @UnsupportedAppUsage int[] mHashes; + @UnsupportedAppUsage Object[] mArray; + @UnsupportedAppUsage int mSize; MapCollections<K, V> mCollections; @@ -111,6 +122,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { } } + @UnsupportedAppUsage int indexOf(Object key, int hash) { final int N = mSize; @@ -149,6 +161,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { return ~end; } + @UnsupportedAppUsage int indexOfNull() { final int N = mSize; @@ -187,6 +200,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { return ~end; } + @UnsupportedAppUsage private void allocArrays(final int size) { if (mHashes == EMPTY_IMMUTABLE_INTS) { throw new UnsupportedOperationException("ArrayMap is immutable"); @@ -225,6 +239,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { mArray = new Object[size<<1]; } + @UnsupportedAppUsage private static void freeArrays(final int[] hashes, final Object[] array, final int size) { if (hashes.length == (BASE_SIZE*2)) { synchronized (ArrayMap.class) { @@ -378,6 +393,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { : indexOf(key, mIdentityHashCode ? System.identityHashCode(key) : key.hashCode()); } + @UnsupportedAppUsage int indexOfValue(Object value) { final int N = mSize*2; final Object[] array = mArray; @@ -535,6 +551,7 @@ public final class ArrayMap<K, V> implements Map<K, V> { * The array must already be large enough to contain the item. * @hide */ + @UnsupportedAppUsage public void append(K key, V value) { int index = mSize; final int hash = key == null ? 0 diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java index 2eea7df4767b..526a950b4820 100644 --- a/core/java/android/util/ArraySet.java +++ b/core/java/android/util/ArraySet.java @@ -18,6 +18,7 @@ package android.util; import libcore.util.EmptyArray; +import android.annotation.UnsupportedAppUsage; import java.lang.reflect.Array; import java.util.Collection; import java.util.Iterator; @@ -70,11 +71,15 @@ public final class ArraySet<E> implements Collection<E>, Set<E> { static int sTwiceBaseCacheSize; final boolean mIdentityHashCode; + @UnsupportedAppUsage int[] mHashes; + @UnsupportedAppUsage Object[] mArray; + @UnsupportedAppUsage int mSize; MapCollections<E, E> mCollections; + @UnsupportedAppUsage private int indexOf(Object key, int hash) { final int N = mSize; @@ -113,6 +118,7 @@ public final class ArraySet<E> implements Collection<E>, Set<E> { return ~end; } + @UnsupportedAppUsage private int indexOfNull() { final int N = mSize; @@ -151,6 +157,7 @@ public final class ArraySet<E> implements Collection<E>, Set<E> { return ~end; } + @UnsupportedAppUsage private void allocArrays(final int size) { if (size == (BASE_SIZE * 2)) { synchronized (ArraySet.class) { @@ -208,6 +215,7 @@ public final class ArraySet<E> implements Collection<E>, Set<E> { mArray = new Object[size]; } + @UnsupportedAppUsage private static void freeArrays(final int[] hashes, final Object[] array, final int size) { if (hashes.length == (BASE_SIZE * 2)) { synchronized (ArraySet.class) { @@ -282,6 +290,7 @@ public final class ArraySet<E> implements Collection<E>, Set<E> { } /** {@hide} */ + @UnsupportedAppUsage public ArraySet(Collection<E> set) { this(); if (set != null) { diff --git a/core/java/android/util/Base64.java b/core/java/android/util/Base64.java index 1f2a5a7ca960..ecc0c9cc9de3 100644 --- a/core/java/android/util/Base64.java +++ b/core/java/android/util/Base64.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.io.UnsupportedEncodingException; /** @@ -737,5 +738,6 @@ public class Base64 { } } + @UnsupportedAppUsage private Base64() { } // don't instantiate } diff --git a/core/java/android/util/Base64OutputStream.java b/core/java/android/util/Base64OutputStream.java index 837870546c19..230a3a58d5b5 100644 --- a/core/java/android/util/Base64OutputStream.java +++ b/core/java/android/util/Base64OutputStream.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -57,6 +58,7 @@ public class Base64OutputStream extends FilterOutputStream { * * @hide */ + @UnsupportedAppUsage public Base64OutputStream(OutputStream out, int flags, boolean encode) { super(out); this.flags = flags; diff --git a/core/java/android/util/DebugUtils.java b/core/java/android/util/DebugUtils.java index 46e316931935..e87fcff3ee4b 100644 --- a/core/java/android/util/DebugUtils.java +++ b/core/java/android/util/DebugUtils.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.io.PrintWriter; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -108,6 +109,7 @@ public class DebugUtils { } /** @hide */ + @UnsupportedAppUsage public static void buildShortClassTag(Object cls, StringBuilder out) { if (cls == null) { out.append("null"); diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java index 13de172c811c..b092fcf4fc50 100644 --- a/core/java/android/util/DisplayMetrics.java +++ b/core/java/android/util/DisplayMetrics.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import android.os.SystemProperties; @@ -172,6 +173,7 @@ public class DisplayMetrics { * density for a specific display. */ @Deprecated + @UnsupportedAppUsage public static int DENSITY_DEVICE = getDeviceDensity(); /** @@ -234,12 +236,14 @@ public class DisplayMetrics { * being applied. * @hide */ + @UnsupportedAppUsage public int noncompatWidthPixels; /** * The reported display height prior to any compatibility mode scaling * being applied. * @hide */ + @UnsupportedAppUsage public int noncompatHeightPixels; /** * The reported display density prior to any compatibility mode scaling @@ -252,6 +256,7 @@ public class DisplayMetrics { * being applied. * @hide */ + @UnsupportedAppUsage public int noncompatDensityDpi; /** * The reported scaled density prior to any compatibility mode scaling diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java index 92f218b4155a..65d825a71d81 100644 --- a/core/java/android/util/EventLog.java +++ b/core/java/android/util/EventLog.java @@ -17,6 +17,7 @@ package android.util; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import java.io.BufferedReader; import java.io.FileReader; @@ -82,6 +83,7 @@ public class EventLog { private static final byte FLOAT_TYPE = 4; /** @param data containing event, read from the system */ + @UnsupportedAppUsage /*package*/ Event(byte[] data) { mBuffer = ByteBuffer.wrap(data); mBuffer.order(ByteOrder.nativeOrder()); diff --git a/core/java/android/util/IconDrawableFactory.java b/core/java/android/util/IconDrawableFactory.java index 6a6c2ce4838e..d90b65e22171 100644 --- a/core/java/android/util/IconDrawableFactory.java +++ b/core/java/android/util/IconDrawableFactory.java @@ -15,6 +15,7 @@ */ package android.util; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.content.Context; import android.content.pm.ApplicationInfo; @@ -52,6 +53,7 @@ public class IconDrawableFactory { return appInfo.isInstantApp() || mUm.isManagedProfile(userId); } + @UnsupportedAppUsage public Drawable getBadgedIcon(ApplicationInfo appInfo) { return getBadgedIcon(appInfo, UserHandle.getUserId(appInfo.uid)); } @@ -60,6 +62,7 @@ public class IconDrawableFactory { return getBadgedIcon(appInfo, appInfo, userId); } + @UnsupportedAppUsage public Drawable getBadgedIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo, @UserIdInt int userId) { Drawable icon = mPm.loadUnbadgedItemIcon(itemInfo, appInfo); @@ -107,6 +110,7 @@ public class IconDrawableFactory { return Resources.getSystem().getColor(resourceId, null); } + @UnsupportedAppUsage public static IconDrawableFactory newInstance(Context context) { return new IconDrawableFactory(context, true); } diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java index eb84479fef69..adfa4fc55567 100644 --- a/core/java/android/util/LocalLog.java +++ b/core/java/android/util/LocalLog.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.io.FileDescriptor; import java.io.PrintWriter; import java.time.LocalDateTime; @@ -31,11 +32,13 @@ public final class LocalLog { private final Deque<String> mLog; private final int mMaxLines; + @UnsupportedAppUsage public LocalLog(int maxLines) { mMaxLines = Math.max(0, maxLines); mLog = new ArrayDeque<>(mMaxLines); } + @UnsupportedAppUsage public void log(String msg) { if (mMaxLines <= 0) { return; @@ -50,6 +53,7 @@ public final class LocalLog { mLog.add(logLine); } + @UnsupportedAppUsage public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { Iterator<String> itr = mLog.iterator(); while (itr.hasNext()) { @@ -69,6 +73,7 @@ public final class LocalLog { ReadOnlyLocalLog(LocalLog log) { mLog = log; } + @UnsupportedAppUsage public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { mLog.dump(fd, pw, args); } @@ -77,6 +82,7 @@ public final class LocalLog { } } + @UnsupportedAppUsage public ReadOnlyLocalLog readOnlyLocalLog() { return new ReadOnlyLocalLog(this); } diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java index 1b063e16ed59..507790313bc2 100644 --- a/core/java/android/util/Log.java +++ b/core/java/android/util/Log.java @@ -19,6 +19,7 @@ package android.util; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.DeadSystemException; import com.android.internal.os.RuntimeInit; @@ -302,6 +303,7 @@ public final class Log { return wtf(LOG_ID_MAIN, tag, msg, tr, false, false); } + @UnsupportedAppUsage static int wtf(int logId, @Nullable String tag, @Nullable String msg, @Nullable Throwable tr, boolean localStack, boolean system) { TerribleFailure what = new TerribleFailure(msg, tr); @@ -381,6 +383,7 @@ public final class Log { /** @hide */ public static final int LOG_ID_CRASH = 4; /** @hide */ + @UnsupportedAppUsage public static native int println_native(int bufID, int priority, String tag, String msg); /** diff --git a/core/java/android/util/LogWriter.java b/core/java/android/util/LogWriter.java index ce30631bac09..b062ace05700 100644 --- a/core/java/android/util/LogWriter.java +++ b/core/java/android/util/LogWriter.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.io.Writer; /** @hide */ @@ -37,6 +38,7 @@ public class LogWriter extends Writer { * {@link android.util.Log#ERROR Log.ERROR}. * @param tag A string tag to associate with each printed log statement. */ + @UnsupportedAppUsage public LogWriter(int priority, String tag) { mPriority = priority; mTag = tag; diff --git a/core/java/android/util/LongArray.java b/core/java/android/util/LongArray.java index 5ed1c8c05cba..6f4aa5211dea 100644 --- a/core/java/android/util/LongArray.java +++ b/core/java/android/util/LongArray.java @@ -17,6 +17,7 @@ package android.util; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; @@ -44,6 +45,7 @@ public class LongArray implements Cloneable { /** * Creates an empty LongArray with the default initial capacity. */ + @UnsupportedAppUsage public LongArray() { this(10); } @@ -102,6 +104,7 @@ public class LongArray implements Cloneable { * * @throws IndexOutOfBoundsException when index < 0 || index > size() */ + @UnsupportedAppUsage public void add(int index, long value) { ensureCapacity(1); int rightSegment = mSize - index; @@ -165,6 +168,7 @@ public class LongArray implements Cloneable { /** * Returns the value at the specified position in this array. */ + @UnsupportedAppUsage public long get(int index) { ArrayUtils.checkBounds(mSize, index); return mValues[index]; @@ -204,6 +208,7 @@ public class LongArray implements Cloneable { /** * Returns the number of values in this array. */ + @UnsupportedAppUsage public int size() { return mSize; } diff --git a/core/java/android/util/LongSparseLongArray.java b/core/java/android/util/LongSparseLongArray.java index a3614572c0f3..d5af92234b31 100644 --- a/core/java/android/util/LongSparseLongArray.java +++ b/core/java/android/util/LongSparseLongArray.java @@ -19,6 +19,7 @@ package android.util; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; +import android.annotation.UnsupportedAppUsage; import libcore.util.EmptyArray; /** @@ -45,8 +46,11 @@ import libcore.util.EmptyArray; * @hide */ public class LongSparseLongArray implements Cloneable { + @UnsupportedAppUsage private long[] mKeys; + @UnsupportedAppUsage private long[] mValues; + @UnsupportedAppUsage private int mSize; /** diff --git a/core/java/android/util/LruCache.java b/core/java/android/util/LruCache.java index 401548800ec8..f04e7cbc9e8f 100644 --- a/core/java/android/util/LruCache.java +++ b/core/java/android/util/LruCache.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import java.util.LinkedHashMap; import java.util.Map; @@ -60,6 +61,7 @@ import java.util.Map; * Support Package</a> for earlier releases. */ public class LruCache<K, V> { + @UnsupportedAppUsage private final LinkedHashMap<K, V> map; /** Size of this cache in units. Not necessarily the number of elements. */ diff --git a/core/java/android/util/MathUtils.java b/core/java/android/util/MathUtils.java index 72865ccdc71a..37bb5971d000 100644 --- a/core/java/android/util/MathUtils.java +++ b/core/java/android/util/MathUtils.java @@ -16,6 +16,8 @@ package android.util; +import android.annotation.UnsupportedAppUsage; + /** * A class that contains utility methods related to numbers. * @@ -28,10 +30,12 @@ public final class MathUtils { private MathUtils() { } + @UnsupportedAppUsage public static float abs(float v) { return v > 0 ? v : -v; } + @UnsupportedAppUsage public static int constrain(int amount, int low, int high) { return amount < low ? low : (amount > high ? high : amount); } @@ -40,6 +44,7 @@ public final class MathUtils { return amount < low ? low : (amount > high ? high : amount); } + @UnsupportedAppUsage public static float constrain(float amount, float low, float high) { return amount < low ? low : (amount > high ? high : amount); } @@ -64,6 +69,7 @@ public final class MathUtils { return a > b ? a : b; } + @UnsupportedAppUsage public static float max(int a, int b) { return a > b ? a : b; } @@ -153,6 +159,7 @@ public final class MathUtils { return (float) Math.tan(angle); } + @UnsupportedAppUsage public static float lerp(float start, float stop, float amount) { return start + (stop - start) * amount; } diff --git a/core/java/android/util/NtpTrustedTime.java b/core/java/android/util/NtpTrustedTime.java index 30d7b6c0786c..da566c934ef7 100644 --- a/core/java/android/util/NtpTrustedTime.java +++ b/core/java/android/util/NtpTrustedTime.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources; @@ -56,6 +57,7 @@ public class NtpTrustedTime implements TrustedTime { mTimeout = timeout; } + @UnsupportedAppUsage public static synchronized NtpTrustedTime getInstance(Context context) { if (sSingleton == null) { final Resources res = context.getResources(); @@ -80,6 +82,7 @@ public class NtpTrustedTime implements TrustedTime { } @Override + @UnsupportedAppUsage public boolean forceRefresh() { // We can't do this at initialization time: ConnectivityService might not be running yet. synchronized (this) { @@ -126,6 +129,7 @@ public class NtpTrustedTime implements TrustedTime { } @Override + @UnsupportedAppUsage public boolean hasCache() { return mHasCache; } @@ -149,6 +153,7 @@ public class NtpTrustedTime implements TrustedTime { } @Override + @UnsupportedAppUsage public long currentTimeMillis() { if (!mHasCache) { throw new IllegalStateException("Missing authoritative time source"); @@ -160,11 +165,13 @@ public class NtpTrustedTime implements TrustedTime { return mCachedNtpTime + getCacheAge(); } + @UnsupportedAppUsage public long getCachedNtpTime() { if (LOGD) Log.d(TAG, "getCachedNtpTime() cache hit"); return mCachedNtpTime; } + @UnsupportedAppUsage public long getCachedNtpTimeReference() { return mCachedNtpElapsedRealtime; } diff --git a/core/java/android/util/PathParser.java b/core/java/android/util/PathParser.java index 6f314d0df535..5342d5dfc81d 100644 --- a/core/java/android/util/PathParser.java +++ b/core/java/android/util/PathParser.java @@ -14,6 +14,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import android.graphics.Path; import dalvik.annotation.optimization.FastNative; @@ -28,6 +29,7 @@ public class PathParser { * @param pathString The string representing a path, the same as "d" string in svg file. * @return the generated Path object. */ + @UnsupportedAppUsage public static Path createPathFromPathData(String pathString) { if (pathString == null) { throw new IllegalArgumentException("Path string can not be null."); diff --git a/core/java/android/util/Pools.java b/core/java/android/util/Pools.java index f0b7e01dae48..e242fe5cfca3 100644 --- a/core/java/android/util/Pools.java +++ b/core/java/android/util/Pools.java @@ -16,6 +16,8 @@ package android.util; +import android.annotation.UnsupportedAppUsage; + /** * Helper class for crating pools of objects. An example use looks like this: * <pre> @@ -52,6 +54,7 @@ public final class Pools { /** * @return An instance from the pool if such, null otherwise. */ + @UnsupportedAppUsage public T acquire(); /** @@ -62,6 +65,7 @@ public final class Pools { * * @throws IllegalStateException If the instance is already in the pool. */ + @UnsupportedAppUsage public boolean release(T instance); } @@ -75,6 +79,7 @@ public final class Pools { * @param <T> The pooled type. */ public static class SimplePool<T> implements Pool<T> { + @UnsupportedAppUsage private final Object[] mPool; private int mPoolSize; @@ -86,6 +91,7 @@ public final class Pools { * * @throws IllegalArgumentException If the max pool size is less than zero. */ + @UnsupportedAppUsage public SimplePool(int maxPoolSize) { if (maxPoolSize <= 0) { throw new IllegalArgumentException("The max pool size must be > 0"); @@ -95,6 +101,7 @@ public final class Pools { @Override @SuppressWarnings("unchecked") + @UnsupportedAppUsage public T acquire() { if (mPoolSize > 0) { final int lastPooledIndex = mPoolSize - 1; @@ -107,6 +114,7 @@ public final class Pools { } @Override + @UnsupportedAppUsage public boolean release(T instance) { if (isInPool(instance)) { throw new IllegalStateException("Already in the pool!"); @@ -151,11 +159,13 @@ public final class Pools { } /** @see #SynchronizedPool(int, Object) */ + @UnsupportedAppUsage public SynchronizedPool(int maxPoolSize) { this(maxPoolSize, new Object()); } @Override + @UnsupportedAppUsage public T acquire() { synchronized (mLock) { return super.acquire(); @@ -163,6 +173,7 @@ public final class Pools { } @Override + @UnsupportedAppUsage public boolean release(T element) { synchronized (mLock) { return super.release(element); diff --git a/core/java/android/util/Rational.java b/core/java/android/util/Rational.java index 80d26d943ed7..39e8b14689da 100644 --- a/core/java/android/util/Rational.java +++ b/core/java/android/util/Rational.java @@ -17,6 +17,7 @@ package android.util; import static com.android.internal.util.Preconditions.*; +import android.annotation.UnsupportedAppUsage; import java.io.IOException; import java.io.InvalidObjectException; @@ -74,7 +75,9 @@ public final class Rational extends Number implements Comparable<Rational> { * Do not change the order of these fields or add new instance fields to maintain the * Serializable compatibility across API revisions. */ + @UnsupportedAppUsage private final int mNumerator; + @UnsupportedAppUsage private final int mDenominator; /** diff --git a/core/java/android/util/RecurrenceRule.java b/core/java/android/util/RecurrenceRule.java index 9c898766dc68..209a5912259b 100644 --- a/core/java/android/util/RecurrenceRule.java +++ b/core/java/android/util/RecurrenceRule.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -49,6 +50,7 @@ public class RecurrenceRule implements Parcelable { @VisibleForTesting public static Clock sClock = Clock.systemDefaultZone(); + @UnsupportedAppUsage public final ZonedDateTime start; public final ZonedDateTime end; public final Period period; @@ -65,6 +67,7 @@ public class RecurrenceRule implements Parcelable { } @Deprecated + @UnsupportedAppUsage public static RecurrenceRule buildRecurringMonthly(int dayOfMonth, ZoneId zone) { // Assume we started last January, since it has all possible days final ZonedDateTime now = ZonedDateTime.now(sClock).withZoneSameInstant(zone); diff --git a/core/java/android/util/Singleton.java b/core/java/android/util/Singleton.java index 8a38bdbfdc62..33135e6fd62c 100644 --- a/core/java/android/util/Singleton.java +++ b/core/java/android/util/Singleton.java @@ -16,6 +16,8 @@ package android.util; +import android.annotation.UnsupportedAppUsage; + /** * Singleton helper class for lazily initialization. * @@ -24,10 +26,12 @@ package android.util; * @hide */ public abstract class Singleton<T> { + @UnsupportedAppUsage private T mInstance; protected abstract T create(); + @UnsupportedAppUsage public final T get() { synchronized (this) { if (mInstance == null) { diff --git a/core/java/android/util/Slog.java b/core/java/android/util/Slog.java index 58a27037e03f..c9fc3f2d1bcc 100644 --- a/core/java/android/util/Slog.java +++ b/core/java/android/util/Slog.java @@ -16,6 +16,8 @@ package android.util; +import android.annotation.UnsupportedAppUsage; + /** * @hide */ @@ -24,6 +26,7 @@ public final class Slog { private Slog() { } + @UnsupportedAppUsage public static int v(String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.VERBOSE, tag, msg); } @@ -33,15 +36,18 @@ public final class Slog { msg + '\n' + Log.getStackTraceString(tr)); } + @UnsupportedAppUsage public static int d(String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.DEBUG, tag, msg); } + @UnsupportedAppUsage public static int d(String tag, String msg, Throwable tr) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.DEBUG, tag, msg + '\n' + Log.getStackTraceString(tr)); } + @UnsupportedAppUsage public static int i(String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.INFO, tag, msg); } @@ -51,10 +57,12 @@ public final class Slog { msg + '\n' + Log.getStackTraceString(tr)); } + @UnsupportedAppUsage public static int w(String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.WARN, tag, msg); } + @UnsupportedAppUsage public static int w(String tag, String msg, Throwable tr) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.WARN, tag, msg + '\n' + Log.getStackTraceString(tr)); @@ -64,10 +72,12 @@ public final class Slog { return Log.println_native(Log.LOG_ID_SYSTEM, Log.WARN, tag, Log.getStackTraceString(tr)); } + @UnsupportedAppUsage public static int e(String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.ERROR, tag, msg); } + @UnsupportedAppUsage public static int e(String tag, String msg, Throwable tr) { return Log.println_native(Log.LOG_ID_SYSTEM, Log.ERROR, tag, msg + '\n' + Log.getStackTraceString(tr)); @@ -78,6 +88,7 @@ public final class Slog { * will always be handled asynchronously. Primarily for use by coding running within * the system process. */ + @UnsupportedAppUsage public static int wtf(String tag, String msg) { return Log.wtf(Log.LOG_ID_SYSTEM, tag, msg, null, false, true); } @@ -94,6 +105,7 @@ public final class Slog { * will always be handled asynchronously. Primarily for use by coding running within * the system process. */ + @UnsupportedAppUsage public static int wtfStack(String tag, String msg) { return Log.wtf(Log.LOG_ID_SYSTEM, tag, msg, null, true, true); } @@ -112,10 +124,12 @@ public final class Slog { * and will always be handled asynchronously. Primarily for use by coding running within * the system process. */ + @UnsupportedAppUsage public static int wtf(String tag, String msg, Throwable tr) { return Log.wtf(Log.LOG_ID_SYSTEM, tag, msg, tr, false, true); } + @UnsupportedAppUsage public static int println(int priority, String tag, String msg) { return Log.println_native(Log.LOG_ID_SYSTEM, priority, tag, msg); } diff --git a/core/java/android/util/SparseArray.java b/core/java/android/util/SparseArray.java index af18caa0e122..aa5ca3530621 100644 --- a/core/java/android/util/SparseArray.java +++ b/core/java/android/util/SparseArray.java @@ -19,6 +19,7 @@ package android.util; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; +import android.annotation.UnsupportedAppUsage; import libcore.util.EmptyArray; /** @@ -55,8 +56,11 @@ public class SparseArray<E> implements Cloneable { private static final Object DELETED = new Object(); private boolean mGarbage = false; + @UnsupportedAppUsage private int[] mKeys; + @UnsupportedAppUsage private Object[] mValues; + @UnsupportedAppUsage private int mSize; /** diff --git a/core/java/android/util/SparseBooleanArray.java b/core/java/android/util/SparseBooleanArray.java index 68d347c912bf..9c6b9698d1ae 100644 --- a/core/java/android/util/SparseBooleanArray.java +++ b/core/java/android/util/SparseBooleanArray.java @@ -19,6 +19,7 @@ package android.util; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; +import android.annotation.UnsupportedAppUsage; import libcore.util.EmptyArray; /** @@ -303,7 +304,10 @@ public class SparseBooleanArray implements Cloneable { return buffer.toString(); } + @UnsupportedAppUsage private int[] mKeys; + @UnsupportedAppUsage private boolean[] mValues; + @UnsupportedAppUsage private int mSize; } diff --git a/core/java/android/util/SparseIntArray.java b/core/java/android/util/SparseIntArray.java index 3b832ddd286c..19547534aef5 100644 --- a/core/java/android/util/SparseIntArray.java +++ b/core/java/android/util/SparseIntArray.java @@ -21,6 +21,7 @@ import com.android.internal.util.GrowingArrayUtils; import java.util.Arrays; +import android.annotation.UnsupportedAppUsage; import libcore.util.EmptyArray; /** @@ -45,8 +46,11 @@ import libcore.util.EmptyArray; * order in the case of <code>valueAt(int)</code>.</p> */ public class SparseIntArray implements Cloneable { + @UnsupportedAppUsage private int[] mKeys; + @UnsupportedAppUsage private int[] mValues; + @UnsupportedAppUsage private int mSize; /** diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 05b613c3c7c7..0e25038bbb38 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.UnsupportedAppUsage; import android.os.SystemClock; import libcore.util.TimeZoneFinder; @@ -248,6 +249,7 @@ public class TimeUtils { } /** @hide Just for debugging; not internationalized. */ + @UnsupportedAppUsage public static void formatDuration(long duration, PrintWriter pw, int fieldLen) { synchronized (sFormatSync) { int len = formatDurationLocked(duration, fieldLen); @@ -264,6 +266,7 @@ public class TimeUtils { } /** @hide Just for debugging; not internationalized. */ + @UnsupportedAppUsage public static void formatDuration(long duration, PrintWriter pw) { formatDuration(duration, pw, 0); } @@ -297,6 +300,7 @@ public class TimeUtils { * @return String representation of the time. * @hide */ + @UnsupportedAppUsage public static String logTimeOfDay(long millis) { Calendar c = Calendar.getInstance(); if (millis >= 0) { diff --git a/core/java/android/util/TrustedTime.java b/core/java/android/util/TrustedTime.java index 263d7821a085..c78665d06e75 100644 --- a/core/java/android/util/TrustedTime.java +++ b/core/java/android/util/TrustedTime.java @@ -16,6 +16,8 @@ package android.util; +import android.annotation.UnsupportedAppUsage; + /** * Interface that provides trusted time information, possibly coming from an NTP * server. Implementations may cache answers until {@link #forceRefresh()}. @@ -27,17 +29,20 @@ public interface TrustedTime { * Force update with an external trusted time source, returning {@code true} * when successful. */ + @UnsupportedAppUsage public boolean forceRefresh(); /** * Check if this instance has cached a response from a trusted time source. */ + @UnsupportedAppUsage public boolean hasCache(); /** * Return time since last trusted time source contact, or * {@link Long#MAX_VALUE} if never contacted. */ + @UnsupportedAppUsage public long getCacheAge(); /** @@ -51,5 +56,6 @@ public interface TrustedTime { * Return current time similar to {@link System#currentTimeMillis()}, * possibly using a cached authoritative time source. */ + @UnsupportedAppUsage public long currentTimeMillis(); } diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 092702ca30cf..0398b8f07f4b 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -223,10 +223,12 @@ interface IWindowManager /** * Determine the preferred edge of the screen to pin the compact options menu against. - * @return a Gravity value for the options menu panel + * + * @param displayId Id of the display where the menu window currently resides. + * @return a Gravity value for the options menu panel. * @hide */ - int getPreferredOptionsPanelGravity(); + int getPreferredOptionsPanelGravity(int displayId); /** * Lock the device orientation to the specified rotation, or to the diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java index 5b2cc81756c1..1c5c630b1cfb 100644 --- a/core/java/android/view/RemoteAnimationTarget.java +++ b/core/java/android/view/RemoteAnimationTarget.java @@ -16,16 +16,16 @@ package android.view; -import static android.app.RemoteAnimationTargetProto.CLIP_RECT; -import static android.app.RemoteAnimationTargetProto.CONTENT_INSETS; -import static android.app.RemoteAnimationTargetProto.IS_TRANSLUCENT; -import static android.app.RemoteAnimationTargetProto.LEASH; -import static android.app.RemoteAnimationTargetProto.MODE; -import static android.app.RemoteAnimationTargetProto.POSITION; -import static android.app.RemoteAnimationTargetProto.PREFIX_ORDER_INDEX; -import static android.app.RemoteAnimationTargetProto.SOURCE_CONTAINER_BOUNDS; -import static android.app.RemoteAnimationTargetProto.TASK_ID; -import static android.app.RemoteAnimationTargetProto.WINDOW_CONFIGURATION; +import static android.view.RemoteAnimationTargetProto.CLIP_RECT; +import static android.view.RemoteAnimationTargetProto.CONTENT_INSETS; +import static android.view.RemoteAnimationTargetProto.IS_TRANSLUCENT; +import static android.view.RemoteAnimationTargetProto.LEASH; +import static android.view.RemoteAnimationTargetProto.MODE; +import static android.view.RemoteAnimationTargetProto.POSITION; +import static android.view.RemoteAnimationTargetProto.PREFIX_ORDER_INDEX; +import static android.view.RemoteAnimationTargetProto.SOURCE_CONTAINER_BOUNDS; +import static android.view.RemoteAnimationTargetProto.TASK_ID; +import static android.view.RemoteAnimationTargetProto.WINDOW_CONFIGURATION; import android.annotation.IntDef; import android.app.WindowConfiguration; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 65ab3ace8c26..f3e2edd514af 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -17871,6 +17871,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ + @TestApi public void resetRtlProperties() { resetResolvedLayoutDirection(); resetResolvedTextDirection(); @@ -18052,6 +18053,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ + @TestApi public void resetResolvedLayoutDirection() { // Reset the current resolved bits mPrivateFlags2 &= ~PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK; @@ -18151,6 +18153,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ + @TestApi public void resetResolvedPadding() { resetResolvedPaddingInternal(); } @@ -21021,6 +21024,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * @hide */ + @TestApi protected void resetResolvedDrawables() { resetResolvedDrawablesInternal(); } @@ -22802,6 +22806,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param isRoot true if the view belongs to the root namespace, false * otherwise */ + @TestApi public void setIsRootNamespace(boolean isRoot) { if (isRoot) { mPrivateFlags |= PFLAG_IS_ROOT_NAMESPACE; @@ -25023,6 +25028,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ + @TestApi public void resetResolvedTextDirection() { // Reset any previous text direction resolution mPrivateFlags2 &= ~(PFLAG2_TEXT_DIRECTION_RESOLVED | PFLAG2_TEXT_DIRECTION_RESOLVED_MASK); @@ -25260,6 +25266,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * * @hide */ + @TestApi public void resetResolvedTextAlignment() { // Reset any previous text alignment resolution mPrivateFlags2 &= ~(PFLAG2_TEXT_ALIGNMENT_RESOLVED | PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK); diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 7a9de45cbbf8..075db8e7de59 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -857,6 +857,7 @@ public class ViewConfiguration { * the global actions dialog. * @hide */ + @TestApi public long getDeviceGlobalActionKeyTimeout() { return mGlobalActionsKeyTimeout; } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index d0539ae30719..9f526ccbd656 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -7345,6 +7345,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * @hide */ + @TestApi @Override public void resetResolvedLayoutDirection() { super.resetResolvedLayoutDirection(); @@ -7361,6 +7362,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * @hide */ + @TestApi @Override public void resetResolvedTextDirection() { super.resetResolvedTextDirection(); @@ -7377,6 +7379,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * @hide */ + @TestApi @Override public void resetResolvedTextAlignment() { super.resetResolvedTextAlignment(); @@ -7393,6 +7396,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * @hide */ + @TestApi @Override public void resetResolvedPadding() { super.resetResolvedPadding(); @@ -7409,6 +7413,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * @hide */ + @TestApi @Override protected void resetResolvedDrawables() { super.resetResolvedDrawables(); diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java index b4d9c53aedb8..5d59e4205579 100644 --- a/core/java/android/view/accessibility/AccessibilityCache.java +++ b/core/java/android/view/accessibility/AccessibilityCache.java @@ -306,6 +306,11 @@ public class AccessibilityCache { final int oldChildCount = oldInfo.getChildCount(); for (int i = 0; i < oldChildCount; i++) { + final long oldChildId = oldInfo.getChildId(i); + // If the child is no longer present, remove the sub-tree. + if (newChildrenIds == null || newChildrenIds.indexOf(oldChildId) < 0) { + clearSubTreeLocked(windowId, oldChildId); + } if (nodes.get(sourceId) == null) { // We've removed (and thus recycled) this node because it was its own // ancestor (the app gave us bad data), we can't continue using it. @@ -313,11 +318,6 @@ public class AccessibilityCache { clearNodesForWindowLocked(windowId); return; } - final long oldChildId = oldInfo.getChildId(i); - // If the child is no longer present, remove the sub-tree. - if (newChildrenIds == null || newChildrenIds.indexOf(oldChildId) < 0) { - clearSubTreeLocked(windowId, oldChildId); - } } // Also be careful if the parent has changed since the new diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 32b2f63f4e59..2cc175f08dc2 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -2307,7 +2307,14 @@ public final class AutofillManager { @Override public AccessibilityEvent onAccessibilityEvent(AccessibilityEvent event, boolean accessibilityEnabled, int relevantEventTypes) { - switch (event.getEventType()) { + final int type = event.getEventType(); + if (sVerbose) { + // NOTE: this is waaay spammy, but that's life. + Log.v(TAG, "onAccessibilityEvent(" + AccessibilityEvent.eventTypeToString(type) + + "): " + + AccessibilityNodeInfo.getVirtualDescendantId(event.getSourceNodeId())); + } + switch (type) { case AccessibilityEvent.TYPE_VIEW_FOCUSED: { synchronized (mLock) { if (mFocusedWindowId == event.getWindowId() diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index ec5fdc93b85e..1475cc9f08b0 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -781,7 +781,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te * @param firstVisibleItem the index of the first visible cell (ignore if * visibleItemCount == 0) * @param visibleItemCount the number of visible cells - * @param totalItemCount the number of items in the list adaptor + * @param totalItemCount the number of items in the list adapter */ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount); diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index bbdf15c871bb..d1de498d71ed 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -1247,7 +1247,10 @@ public class RelativeLayout extends ViewGroup { private int[] mRules = new int[VERB_COUNT]; private int[] mInitialRules = new int[VERB_COUNT]; - private int mLeft, mTop, mRight, mBottom; + private int mLeft; + private int mTop; + private int mRight; + private int mBottom; /** * Whether this view had any relative rules modified following the most diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 5cadbe46163a..3941d6a28b4a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -421,7 +421,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private Editable.Factory mEditableFactory = Editable.Factory.getInstance(); private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance(); - private float mShadowRadius, mShadowDx, mShadowDy; + private float mShadowRadius; + private float mShadowDx; + private float mShadowDy; private int mShadowColor; private boolean mPreDrawRegistered; @@ -717,8 +719,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private Scroller mScroller; private TextPaint mTempTextPaint; - private BoringLayout.Metrics mBoring, mHintBoring; - private BoringLayout mSavedLayout, mSavedHintLayout; + private BoringLayout.Metrics mBoring; + private BoringLayout.Metrics mHintBoring; + private BoringLayout mSavedLayout; + private BoringLayout mSavedHintLayout; private TextDirectionHeuristic mTextDir; diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java index d74a60e483e5..f6071d86b905 100644 --- a/core/java/android/widget/Toast.java +++ b/core/java/android/widget/Toast.java @@ -133,9 +133,10 @@ public class Toast { String pkg = mContext.getOpPackageName(); TN tn = mTN; tn.mNextView = mNextView; + final int displayId = mContext.getDisplay().getDisplayId(); try { - service.enqueueToast(pkg, tn, mDuration); + service.enqueueToast(pkg, tn, mDuration, displayId); } catch (RemoteException e) { // Empty } @@ -354,7 +355,8 @@ public class Toast { final Handler mHandler; int mGravity; - int mX, mY; + int mX; + int mY; float mHorizontalMargin; float mVerticalMargin; diff --git a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java index c21159eebc75..87283675d4b2 100644 --- a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java +++ b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java @@ -66,6 +66,15 @@ public class AmbientDisplayConfiguration { return !TextUtils.isEmpty(doubleTapSensorType()); } + public boolean reachGestureEnabled(int user) { + return boolSettingDefaultOn(Settings.Secure.DOZE_REACH_GESTURE, user) + && reachGestureAvailable(); + } + + public boolean reachGestureAvailable() { + return !TextUtils.isEmpty(reachSensorType()); + } + public String doubleTapSensorType() { return mContext.getResources().getString(R.string.config_dozeDoubleTapSensorType); } @@ -74,6 +83,10 @@ public class AmbientDisplayConfiguration { return mContext.getResources().getString(R.string.config_dozeLongPressSensorType); } + public String reachSensorType() { + return mContext.getResources().getString(R.string.config_dozeReachSensorType); + } + public boolean pulseOnLongPressEnabled(int user) { return pulseOnLongPressAvailable() && boolSettingDefaultOff( Settings.Secure.DOZE_PULSE_ON_LONG_PRESS, user); diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index ac7dc8e29b55..87515173e8de 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -19,15 +19,54 @@ package com.android.internal.policy; import static android.provider.Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; -import static android.view.WindowManager.LayoutParams.*; +import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; +import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; +import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; +import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH; +import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; +import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; +import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND; import android.annotation.NonNull; import android.app.ActivityManager; +import android.app.KeyguardManager; import android.app.SearchManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Configuration; +import android.content.res.Resources.Theme; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.media.session.MediaController; import android.media.session.MediaSessionManager; -import android.os.UserHandle; - +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.provider.Settings; import android.text.TextUtils; +import android.transition.Scene; +import android.transition.Transition; +import android.transition.TransitionInflater; +import android.transition.TransitionManager; +import android.transition.TransitionSet; +import android.util.AndroidRuntimeException; +import android.util.EventLog; +import android.util.Log; +import android.util.SparseArray; +import android.util.TypedValue; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.IRotationWatcher.Stub; @@ -52,6 +91,13 @@ import android.view.ViewRootImpl; import android.view.ViewRootImpl.ActivityConfigCallback; import android.view.Window; import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + import com.android.internal.R; import com.android.internal.view.menu.ContextMenuBuilder; import com.android.internal.view.menu.IconMenuPresenter; @@ -64,43 +110,6 @@ import com.android.internal.view.menu.MenuView; import com.android.internal.widget.DecorContentParent; import com.android.internal.widget.SwipeDismissLayout; -import android.app.ActivityManager; -import android.app.KeyguardManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.content.res.Resources.Theme; -import android.content.res.TypedArray; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.media.AudioManager; -import android.media.session.MediaController; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Parcel; -import android.os.Parcelable; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.provider.Settings; -import android.transition.Scene; -import android.transition.Transition; -import android.transition.TransitionInflater; -import android.transition.TransitionManager; -import android.transition.TransitionSet; -import android.util.AndroidRuntimeException; -import android.util.EventLog; -import android.util.Log; -import android.util.SparseArray; -import android.util.TypedValue; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -1377,7 +1386,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { */ private int getOptionsPanelGravity() { try { - return WindowManagerHolder.sWindowManager.getPreferredOptionsPanelGravity(); + return WindowManagerHolder.sWindowManager.getPreferredOptionsPanelGravity( + getContext().getDisplay().getDisplayId()); } catch (RemoteException ex) { Log.e(TAG, "Couldn't getOptionsPanelGravity; using default", ex); return Gravity.CENTER | Gravity.BOTTOM; diff --git a/core/java/org/apache/http/conn/ssl/AbstractVerifier.java b/core/java/org/apache/http/conn/ssl/AbstractVerifier.java index b9349b39ba94..36d6e22ca847 100644 --- a/core/java/org/apache/http/conn/ssl/AbstractVerifier.java +++ b/core/java/org/apache/http/conn/ssl/AbstractVerifier.java @@ -46,6 +46,7 @@ import java.util.Locale; import java.util.logging.Logger; import java.util.logging.Level; +import android.annotation.UnsupportedAppUsage; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; @@ -76,6 +77,7 @@ public abstract class AbstractVerifier implements X509HostnameVerifier { * Looks like we're the only implementation guarding against this. * Firefox, Curl, Sun Java 1.4, 5, 6 don't bother with this check. */ + @UnsupportedAppUsage private final static String[] BAD_COUNTRY_2LDS = { "ac", "co", "com", "ed", "edu", "go", "gouv", "gov", "info", "lg", "ne", "net", "or", "org" }; diff --git a/core/java/org/apache/http/conn/ssl/SSLSocketFactory.java b/core/java/org/apache/http/conn/ssl/SSLSocketFactory.java index 250932be0f36..65be161bc0f6 100644 --- a/core/java/org/apache/http/conn/ssl/SSLSocketFactory.java +++ b/core/java/org/apache/http/conn/ssl/SSLSocketFactory.java @@ -36,6 +36,7 @@ import org.apache.http.conn.scheme.LayeredSocketFactory; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; +import android.annotation.UnsupportedAppUsage; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; @@ -174,9 +175,13 @@ public class SSLSocketFactory implements LayeredSocketFactory { return NoPreloadHolder.DEFAULT_FACTORY; } + @UnsupportedAppUsage private final SSLContext sslcontext; + @UnsupportedAppUsage private final javax.net.ssl.SSLSocketFactory socketfactory; + @UnsupportedAppUsage private final HostNameResolver nameResolver; + @UnsupportedAppUsage private X509HostnameVerifier hostnameVerifier = BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; public SSLSocketFactory( @@ -233,6 +238,7 @@ public class SSLSocketFactory implements LayeredSocketFactory { * * @hide */ + @UnsupportedAppUsage public SSLSocketFactory(javax.net.ssl.SSLSocketFactory socketfactory) { super(); this.sslcontext = null; @@ -245,6 +251,7 @@ public class SSLSocketFactory implements LayeredSocketFactory { * This constructor is used exclusively to instantiate the factory for * {@link #getSocketFactory getSocketFactory}. */ + @UnsupportedAppUsage private SSLSocketFactory() { super(); this.sslcontext = null; @@ -252,6 +259,7 @@ public class SSLSocketFactory implements LayeredSocketFactory { this.nameResolver = null; } + @UnsupportedAppUsage private static KeyManager[] createKeyManagers(final KeyStore keystore, final String password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { if (keystore == null) { @@ -263,6 +271,7 @@ public class SSLSocketFactory implements LayeredSocketFactory { return kmfactory.getKeyManagers(); } + @UnsupportedAppUsage private static TrustManager[] createTrustManagers(final KeyStore keystore) throws KeyStoreException, NoSuchAlgorithmException { if (keystore == null) { diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 6316da57ec21..bb8ee14e1902 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -93,6 +93,7 @@ cc_library_shared { "android_os_HwBlob.cpp", "android_os_HwParcel.cpp", "android_os_HwRemoteBinder.cpp", + "android_os_NativeHandle.cpp", "android_os_MemoryFile.cpp", "android_os_MessageQueue.cpp", "android_os_Parcel.cpp", diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 7fe095bbc215..6b55ed6d2289 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -168,6 +168,7 @@ extern int register_android_os_HwBinder(JNIEnv *env); extern int register_android_os_HwBlob(JNIEnv *env); extern int register_android_os_HwParcel(JNIEnv *env); extern int register_android_os_HwRemoteBinder(JNIEnv *env); +extern int register_android_os_NativeHandle(JNIEnv *env); extern int register_android_os_MessageQueue(JNIEnv* env); extern int register_android_os_Parcel(JNIEnv* env); extern int register_android_os_SELinux(JNIEnv* env); @@ -1348,6 +1349,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_os_HwBlob), REG_JNI(register_android_os_HwParcel), REG_JNI(register_android_os_HwRemoteBinder), + REG_JNI(register_android_os_NativeHandle), REG_JNI(register_android_os_VintfObject), REG_JNI(register_android_os_VintfRuntimeInfo), REG_JNI(register_android_nio_utils), diff --git a/core/jni/android/graphics/fonts/FontFamily.cpp b/core/jni/android/graphics/fonts/FontFamily.cpp index 4597386084a2..767e068381d9 100644 --- a/core/jni/android/graphics/fonts/FontFamily.cpp +++ b/core/jni/android/graphics/fonts/FontFamily.cpp @@ -17,11 +17,13 @@ #define LOG_TAG "Minikin" #include <nativehelper/JNIHelp.h> +#include <nativehelper/ScopedUtfChars.h> #include <core_jni_helpers.h> #include "FontUtils.h" #include <minikin/FontFamily.h> +#include <minikin/LocaleList.h> #include <memory> @@ -54,10 +56,18 @@ static void FontFamily_Builder_addFont(jlong builderPtr, jlong fontPtr) { } // Regular JNI -static jlong FontFamily_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr) { +static jlong FontFamily_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, + jstring langTags, jint variant) { std::unique_ptr<NativeFamilyBuilder> builder(toBuilder(builderPtr)); - std::shared_ptr<minikin::FontFamily> family = - std::make_shared<minikin::FontFamily>(std::move(builder->fonts)); + uint32_t localeId; + if (langTags == nullptr) { + localeId = minikin::registerLocaleList(""); + } else { + ScopedUtfChars str(env, langTags); + localeId = minikin::registerLocaleList(str.c_str()); + } + std::shared_ptr<minikin::FontFamily> family = std::make_shared<minikin::FontFamily>( + localeId, static_cast<minikin::FamilyVariant>(variant), std::move(builder->fonts)); if (family->getCoverage().length() == 0) { // No coverage means minikin rejected given font for some reasons. jniThrowException(env, "java/lang/IllegalArgumentException", @@ -77,7 +87,7 @@ static jlong FontFamily_Builder_GetReleaseFunc() { static const JNINativeMethod gFontFamilyBuilderMethods[] = { { "nInitBuilder", "()J", (void*) FontFamily_Builder_initBuilder }, { "nAddFont", "(JJ)V", (void*) FontFamily_Builder_addFont }, - { "nBuild", "(J)J", (void*) FontFamily_Builder_build }, + { "nBuild", "(JLjava/lang/String;I)J", (void*) FontFamily_Builder_build }, { "nGetReleaseNativeFamily", "()J", (void*) FontFamily_Builder_GetReleaseFunc }, }; diff --git a/core/jni/android_os_HwBlob.cpp b/core/jni/android_os_HwBlob.cpp index bb916d2431c5..cb55618c685c 100644 --- a/core/jni/android_os_HwBlob.cpp +++ b/core/jni/android_os_HwBlob.cpp @@ -21,6 +21,7 @@ #include "android_os_HwBlob.h" #include "android_os_HwParcel.h" +#include "android_os_NativeHandle.h" #include <nativehelper/JNIHelp.h> #include <android_runtime/AndroidRuntime.h> @@ -31,6 +32,7 @@ #include "core_jni_helpers.h" using android::AndroidRuntime; +using android::hardware::hidl_handle; using android::hardware::hidl_string; #define PACKAGE_PATH "android/os" @@ -82,6 +84,7 @@ sp<JHwBlob> JHwBlob::GetNativeContext(JNIEnv *env, jobject thiz) { JHwBlob::JHwBlob(JNIEnv *env, jobject thiz, size_t size) : mBuffer(nullptr), mSize(size), + mType(BlobType::GENERIC), mOwnsBuffer(true), mHandle(0) { if (size > 0) { @@ -159,6 +162,15 @@ size_t JHwBlob::size() const { return mSize; } +void JHwBlob::specializeBlobTo(BlobType type) { + CHECK_EQ(static_cast<int>(mType), static_cast<int>(BlobType::GENERIC)); + mType = type; +} + +JHwBlob::BlobType JHwBlob::type() const { + return mType; +} + status_t JHwBlob::putBlob(size_t offset, const sp<JHwBlob> &blob) { size_t index = mSubBlobs.add(); BlobInfo *info = &mSubBlobs.editItemAt(index); @@ -172,42 +184,52 @@ status_t JHwBlob::putBlob(size_t offset, const sp<JHwBlob> &blob) { } status_t JHwBlob::writeToParcel(hardware::Parcel *parcel) const { - size_t handle; + CHECK_EQ(static_cast<int>(mType), static_cast<int>(BlobType::GENERIC)); + + size_t handle = 0; status_t err = parcel->writeBuffer(data(), size(), &handle); if (err != OK) { return err; } - for (size_t i = 0; i < mSubBlobs.size(); ++i) { - const BlobInfo &info = mSubBlobs[i]; - - err = info.mBlob->writeEmbeddedToParcel(parcel, handle, info.mOffset); - - if (err != OK) { - return err; - } - } - - return OK; + return writeSubBlobsToParcel(parcel, handle); } status_t JHwBlob::writeEmbeddedToParcel( hardware::Parcel *parcel, size_t parentHandle, size_t parentOffset) const { - size_t handle; - status_t err = parcel->writeEmbeddedBuffer( - data(), size(), &handle, parentHandle, parentOffset); + size_t handle = 0; + status_t err = OK; + + switch (mType) { + case BlobType::GENERIC: { + err = parcel->writeEmbeddedBuffer(data(), size(), &handle, parentHandle, parentOffset); + break; + } + case BlobType::NATIVE_HANDLE: { + err = parcel->writeEmbeddedNativeHandle( + static_cast<const native_handle *>(data()), parentHandle, parentOffset); + + CHECK(mSubBlobs.empty()); + break; + } + default: { err = INVALID_OPERATION; } + } if (err != OK) { return err; } + return writeSubBlobsToParcel(parcel, handle); +} + +status_t JHwBlob::writeSubBlobsToParcel(hardware::Parcel *parcel, + size_t parentHandle) const { for (size_t i = 0; i < mSubBlobs.size(); ++i) { const BlobInfo &info = mSubBlobs[i]; - - err = info.mBlob->writeEmbeddedToParcel(parcel, handle, info.mOffset); + status_t err = info.mBlob->writeEmbeddedToParcel(parcel, parentHandle, info.mOffset); if (err != OK) { return err; @@ -252,7 +274,7 @@ static void releaseNativeContext(void *nativeContext) { } } -static jlong JHwBlob_native_init(JNIEnv *env) { +static jlong JHwBlob_native_init(JNIEnv *env, jclass /*clazz*/) { JHwBlob::InitClass(env); return reinterpret_cast<jlong>(&releaseNativeContext); @@ -456,6 +478,31 @@ static void JHwBlob_native_putString( blob->putBlob(offset + hidl_string::kOffsetOfBuffer, subBlob); } +static void JHwBlob_native_putNativeHandle(JNIEnv *env, jobject thiz, + jlong offset, jobject jHandle) { + std::unique_ptr<native_handle_t, int(*)(native_handle_t*)> nativeHandle( + JNativeHandle::MakeCppNativeHandle(env, jHandle, nullptr /* storage */), + native_handle_delete); + + size_t size = 0; + if (nativeHandle != nullptr) { + size = sizeof(native_handle_t) + nativeHandle->numFds * sizeof(int) + + nativeHandle->numInts * sizeof(int); + } + + ScopedLocalRef<jobject> subBlobObj(env, JHwBlob::NewObject(env, size)); + sp<JHwBlob> subBlob = JHwBlob::GetNativeContext(env, subBlobObj.get()); + subBlob->specializeBlobTo(JHwBlob::BlobType::NATIVE_HANDLE); + subBlob->write(0 /* offset */, nativeHandle.get(), size); + + hidl_handle cppHandle; + cppHandle.setTo(static_cast<native_handle_t *>(subBlob->data()), false /* shouldOwn */); + + sp<JHwBlob> blob = JHwBlob::GetNativeContext(env, thiz); + blob->write(offset, &cppHandle, sizeof(cppHandle)); + blob->putBlob(offset + hidl_handle::kOffsetOfNativeHandle, subBlob); +} + #define DEFINE_BLOB_ARRAY_PUTTER(Suffix,Type,NewType) \ static void JHwBlob_native_put ## Suffix ## Array( \ JNIEnv *env, jobject thiz, jlong offset, Type ## Array array) { \ @@ -563,6 +610,8 @@ static JNINativeMethod gMethods[] = { { "putFloat", "(JF)V", (void *)JHwBlob_native_putFloat }, { "putDouble", "(JD)V", (void *)JHwBlob_native_putDouble }, { "putString", "(JLjava/lang/String;)V", (void *)JHwBlob_native_putString }, + { "putNativeHandle", "(JL" PACKAGE_PATH "/NativeHandle;)V", + (void*)JHwBlob_native_putNativeHandle }, { "putBoolArray", "(J[Z)V", (void *)JHwBlob_native_putBoolArray }, { "putInt8Array", "(J[B)V", (void *)JHwBlob_native_putInt8Array }, diff --git a/core/jni/android_os_HwBlob.h b/core/jni/android_os_HwBlob.h index 6b1db639ac19..69a1b165af9a 100644 --- a/core/jni/android_os_HwBlob.h +++ b/core/jni/android_os_HwBlob.h @@ -27,6 +27,11 @@ namespace android { struct JHwBlob : public RefBase { + enum class BlobType { + GENERIC, + NATIVE_HANDLE, + }; + static void InitClass(JNIEnv *env); static sp<JHwBlob> SetNativeContext( @@ -54,6 +59,9 @@ struct JHwBlob : public RefBase { size_t size() const; + void specializeBlobTo(BlobType type); + BlobType type() const; + status_t putBlob(size_t offset, const sp<JHwBlob> &blob); status_t writeToParcel(hardware::Parcel *parcel) const; @@ -74,12 +82,15 @@ private: void *mBuffer; size_t mSize; + BlobType mType; bool mOwnsBuffer; size_t mHandle; Vector<BlobInfo> mSubBlobs; + status_t writeSubBlobsToParcel(hardware::Parcel *parcel, size_t parentHandle) const; + DISALLOW_COPY_AND_ASSIGN(JHwBlob); }; diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp index 061349aee96f..7221ca11cc00 100644 --- a/core/jni/android_os_HwParcel.cpp +++ b/core/jni/android_os_HwParcel.cpp @@ -22,6 +22,7 @@ #include "android_os_HwBinder.h" #include "android_os_HwBlob.h" +#include "android_os_NativeHandle.h" #include "android_os_HwRemoteBinder.h" #include <nativehelper/JNIHelp.h> @@ -34,6 +35,7 @@ using android::AndroidRuntime; +using ::android::hardware::hidl_handle; using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; @@ -436,6 +438,18 @@ static void JHwParcel_native_writeString( signalExceptionForError(env, err); } +static void JHwParcel_native_writeNativeHandle(JNIEnv *env, jobject thiz, jobject valObj) { + sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz); + + EphemeralStorage *storage = impl->getStorage(); + native_handle_t *handle = JNativeHandle::MakeCppNativeHandle(env, valObj, storage); + + hardware::Parcel *parcel = impl->getParcel(); + status_t err = parcel->writeNativeHandleNoDup(handle); + + signalExceptionForError(env, err); +} + #define DEFINE_PARCEL_VECTOR_WRITER(Suffix,Type) \ static void JHwParcel_native_write ## Suffix ## Vector( \ JNIEnv *env, jobject thiz, Type ## Array valObj) { \ @@ -524,12 +538,96 @@ static void JHwParcel_native_writeBoolVector( signalExceptionForError(env, err); } +template<typename T> +static void WriteHidlVector(JNIEnv *env, jobject thiz, const hidl_vec<T> &vec) { + hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); + + size_t parentHandle; + status_t err = parcel->writeBuffer(&vec, sizeof(vec), &parentHandle); + + if (err == OK) { + size_t childHandle; + err = ::android::hardware::writeEmbeddedToParcel( + vec, + parcel, + parentHandle, + 0 /* parentOffset */, + &childHandle); + + for (size_t i = 0; (err == OK) && (i < vec.size()); ++i) { + err = ::android::hardware::writeEmbeddedToParcel( + vec[i], + parcel, + childHandle, + i * sizeof(T)); + } + } + + signalExceptionForError(env, err); +} + +static void JHwParcel_native_writeStringVector( + JNIEnv *env, jobject thiz, jobjectArray arrayObj) { + if (arrayObj == nullptr) { + jniThrowException(env, "java/lang/NullPointerException", nullptr); + return; + } + + sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz); + EphemeralStorage *storage = impl->getStorage(); + + void *vecPtr = storage->allocTemporaryStorage(sizeof(hidl_vec<hidl_string>)); + hidl_vec<hidl_string> *vec = new (vecPtr) hidl_vec<hidl_string>(); + + jsize len = env->GetArrayLength(arrayObj); + hidl_string *strings = storage->allocStringArray(len); + vec->setToExternal(strings, len, false /* shouldOwn */); + + for (jsize i = 0; i < len; ++i) { + ScopedLocalRef<jstring> stringObj(env, (jstring) env->GetObjectArrayElement(arrayObj, i)); + + const hidl_string *s = storage->allocTemporaryString(env, stringObj.get()); + strings[i].setToExternal(s->c_str(), s->size()); + } + + WriteHidlVector(env, thiz, *vec); +} + +static void JHwParcel_native_writeNativeHandleVector( + JNIEnv *env, jobject thiz, jobjectArray jHandleArray) { + if (jHandleArray == nullptr) { + jniThrowException(env, "java/lang/NullPointerException", nullptr); + return; + } + + sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz); + EphemeralStorage *storage = impl->getStorage(); + + void *vecPtr = storage->allocTemporaryStorage(sizeof(hidl_vec<hidl_handle>)); + hidl_vec<hidl_handle> *vec = new (vecPtr) hidl_vec<hidl_handle>(); + + jsize len = env->GetArrayLength(jHandleArray); + hidl_handle *handles = static_cast<hidl_handle *>( + storage->allocTemporaryStorage(len * sizeof(hidl_handle))); + + vec->setToExternal(handles, len, false /* shouldOwn */); + for (jsize i = 0; i < len; i++) { + ScopedLocalRef<jobject> jHandle(env, env->GetObjectArrayElement(jHandleArray, i)); + + native_handle_t* handle = JNativeHandle::MakeCppNativeHandle(env, jHandle.get(), storage); + + new (&(handles[i])) hidl_handle(); + handles[i].setTo(handle, false /* shouldOwn */); + } + + WriteHidlVector(env, thiz, *vec); +} + static void JHwParcel_native_writeStrongBinder( JNIEnv *env, jobject thiz, jobject binderObj) { sp<hardware::IBinder> binder; if (binderObj != NULL) { - ScopedLocalRef<jclass> hwBinderKlass( - env, FindClassOrDie(env, PACKAGE_PATH "/HwBinder")); + ScopedLocalRef<jclass> hwBinderKlass(env, FindClassOrDie(env, PACKAGE_PATH "/HwBinder")); ScopedLocalRef<jclass> hwRemoteBinderKlass( env, FindClassOrDie(env, PACKAGE_PATH "/HwRemoteBinder")); @@ -587,6 +685,37 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) { return MakeStringObjFromHidlString(env, *s); } +static jobject ReadNativeHandle(JNIEnv *env, jobject thiz, jboolean embedded, + jlong parentHandle, jlong offset) { + hardware::Parcel *parcel = + JHwParcel::GetNativeContext(env, thiz)->getParcel(); + + const native_handle_t *handle = nullptr; + status_t err = OK; + + if (embedded) { + err = parcel->readNullableEmbeddedNativeHandle(parentHandle, offset, &handle); + } else { + err = parcel->readNullableNativeHandleNoDup(&handle); + } + + if (err != OK) { + signalExceptionForError(env, err); + return nullptr; + } + + return JNativeHandle::MakeJavaNativeHandleObj(env, handle); +} + +static jobject JHwParcel_native_readNativeHandle(JNIEnv *env, jobject thiz) { + return ReadNativeHandle(env, thiz, false /*embedded*/, 0L /*parentHandle*/, 0L /*offset*/); +} + +static jobject JHwParcel_native_readEmbeddedNativeHandle( + JNIEnv *env, jobject thiz, jlong parentHandle, jlong offset) { + return ReadNativeHandle(env, thiz, true /*embedded*/, parentHandle, offset); +} + #define DEFINE_PARCEL_VECTOR_READER(Suffix,Type,NewType) \ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \ JNIEnv *env, jobject thiz) { \ @@ -630,10 +759,8 @@ DEFINE_PARCEL_VECTOR_READER(Int64,jlong,Long) DEFINE_PARCEL_VECTOR_READER(Float,jfloat,Float) DEFINE_PARCEL_VECTOR_READER(Double,jdouble,Double) -static jbooleanArray JHwParcel_native_readBoolVector( - JNIEnv *env, jobject thiz) { - hardware::Parcel *parcel = - JHwParcel::GetNativeContext(env, thiz)->getParcel(); +static jbooleanArray JHwParcel_native_readBoolVector(JNIEnv *env, jobject thiz) { + hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); size_t parentHandle; @@ -692,101 +819,62 @@ static jobjectArray MakeStringArray( return arrayObj; } -static jobjectArray JHwParcel_native_readStringVector( - JNIEnv *env, jobject thiz) { - typedef hidl_vec<hidl_string> string_vec; +template<typename T> +static const hidl_vec<T> *ReadHidlVector(JNIEnv *env, jobject thiz) { + const hidl_vec<T> *vec; - hardware::Parcel *parcel = - JHwParcel::GetNativeContext(env, thiz)->getParcel(); + hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); size_t parentHandle; + status_t err = parcel->readBuffer(sizeof(hidl_vec<T>), + &parentHandle, reinterpret_cast<const void **>(&vec)); - const string_vec *vec; - status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, - reinterpret_cast<const void **>(&vec)); - - if (err != OK) { - signalExceptionForError(env, err); - return NULL; - } - - size_t childHandle; - err = ::android::hardware::readEmbeddedFromParcel( - const_cast<string_vec &>(*vec), - *parcel, parentHandle, 0 /* parentOffset */, &childHandle); + if (err == OK) { + size_t childHandle; + err = ::android::hardware::readEmbeddedFromParcel( + const_cast<hidl_vec<T> &>(*vec), + *parcel, parentHandle, + 0 /* parentOffset */, + &childHandle); - for (size_t i = 0; (err == OK) && (i < vec->size()); ++i) { - err = android::hardware::readEmbeddedFromParcel( - const_cast<hidl_string &>((*vec)[i]), + for (size_t i = 0; (err == OK) && (i < vec->size()); i++) { + err = android::hardware::readEmbeddedFromParcel( + const_cast<T &>((*vec)[i]), *parcel, childHandle, - i * sizeof(hidl_string) /* parentOffset */); + i * sizeof(T) /* parentOffset */); + } } if (err != OK) { signalExceptionForError(env, err); - return NULL; + return nullptr; } - return MakeStringArray(env, &(*vec)[0], vec->size()); + return vec; } -static void JHwParcel_native_writeStringVector( - JNIEnv *env, jobject thiz, jobjectArray arrayObj) { - typedef hidl_vec<hidl_string> string_vec; - - if (arrayObj == NULL) { - jniThrowException(env, "java/lang/NullPointerException", NULL); - return; - } - - jsize len = env->GetArrayLength(arrayObj); - - sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz); - - void *vecPtr = - impl->getStorage()->allocTemporaryStorage(sizeof(string_vec)); - - string_vec *vec = new (vecPtr) string_vec; - - hidl_string *strings = impl->getStorage()->allocStringArray(len); - vec->setToExternal(strings, len); - - for (jsize i = 0; i < len; ++i) { - ScopedLocalRef<jstring> stringObj( - env, - (jstring)env->GetObjectArrayElement(arrayObj, i)); - - const hidl_string *s = - impl->getStorage()->allocTemporaryString(env, stringObj.get()); - - strings[i].setToExternal(s->c_str(), s->size()); - } +static jobjectArray JHwParcel_native_readStringVector( + JNIEnv *env, jobject thiz) { + const hidl_vec<hidl_string> *vec = ReadHidlVector<hidl_string>(env, thiz); + return MakeStringArray(env, &(*vec)[0], vec->size()); +} - hardware::Parcel *parcel = impl->getParcel(); +static jobjectArray JHwParcel_native_readNativeHandleVector( + JNIEnv *env, jobject thiz) { + const hidl_vec<hidl_handle> *vec = ReadHidlVector<hidl_handle>(env, thiz); - size_t parentHandle; - status_t err = parcel->writeBuffer(vec, sizeof(*vec), &parentHandle); + jsize length = vec->size(); + jobjectArray objArray = JNativeHandle::AllocJavaNativeHandleObjArray( + env, length); - if (err == OK) { - size_t childHandle; - err = ::android::hardware::writeEmbeddedToParcel( - *vec, - parcel, - parentHandle, - 0 /* parentOffset */, - &childHandle); + for (jsize i = 0; i < length; i++) { + jobject jHandle = JNativeHandle::MakeJavaNativeHandleObj(env, (*vec)[i].getNativeHandle()); - for (size_t i = 0; (err == OK) && (i < vec->size()); ++i) { - err = ::android::hardware::writeEmbeddedToParcel( - (*vec)[i], - parcel, - childHandle, - i * sizeof(hidl_string)); - } + env->SetObjectArrayElement(objArray, i, jHandle); } - signalExceptionForError(env, err); + return objArray; } static jobject JHwParcel_native_readStrongBinder(JNIEnv *env, jobject thiz) { @@ -890,6 +978,9 @@ static JNINativeMethod gMethods[] = { { "writeString", "(Ljava/lang/String;)V", (void *)JHwParcel_native_writeString }, + { "writeNativeHandle", "(L" PACKAGE_PATH "/NativeHandle;)V", + (void *)JHwParcel_native_writeNativeHandle }, + { "writeBoolVector", "([Z)V", (void *)JHwParcel_native_writeBoolVector }, { "writeInt8Vector", "([B)V", (void *)JHwParcel_native_writeInt8Vector }, { "writeInt16Vector", "([S)V", (void *)JHwParcel_native_writeInt16Vector }, @@ -903,6 +994,9 @@ static JNINativeMethod gMethods[] = { { "writeStringVector", "([Ljava/lang/String;)V", (void *)JHwParcel_native_writeStringVector }, + { "writeNativeHandleVector", "([L" PACKAGE_PATH "/NativeHandle;)V", + (void *)JHwParcel_native_writeNativeHandleVector }, + { "writeStrongBinder", "(L" PACKAGE_PATH "/IHwBinder;)V", (void *)JHwParcel_native_writeStrongBinder }, @@ -920,6 +1014,12 @@ static JNINativeMethod gMethods[] = { { "readString", "()Ljava/lang/String;", (void *)JHwParcel_native_readString }, + { "readNativeHandle", "()L" PACKAGE_PATH "/NativeHandle;", + (void *)JHwParcel_native_readNativeHandle }, + + { "readEmbeddedNativeHandle", "(JJ)L" PACKAGE_PATH "/NativeHandle;", + (void *)JHwParcel_native_readEmbeddedNativeHandle }, + { "readBoolVectorAsArray", "()[Z", (void *)JHwParcel_native_readBoolVector }, @@ -944,6 +1044,9 @@ static JNINativeMethod gMethods[] = { { "readStringVectorAsArray", "()[Ljava/lang/String;", (void *)JHwParcel_native_readStringVector }, + { "readNativeHandleAsArray", "()[L" PACKAGE_PATH "/NativeHandle;", + (void *)JHwParcel_native_readNativeHandleVector }, + { "readStrongBinder", "()L" PACKAGE_PATH "/IHwBinder;", (void *)JHwParcel_native_readStrongBinder }, diff --git a/core/jni/android_os_NativeHandle.cpp b/core/jni/android_os_NativeHandle.cpp new file mode 100644 index 000000000000..770fdb0d5d20 --- /dev/null +++ b/core/jni/android_os_NativeHandle.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "android_os_NativeHandle.h" + +#include <nativehelper/JNIHelp.h> +#include <nativehelper/ScopedLocalRef.h> + +#include "core_jni_helpers.h" + +#define PACKAGE_PATH "android/os" +#define CLASS_NAME "NativeHandle" +#define CLASS_PATH PACKAGE_PATH "/" CLASS_NAME + +namespace android { + +static struct { + jclass clazz; + jmethodID constructID; // NativeHandle(int[] fds, int[] ints, boolean owns) + + jmethodID getFdsID; // int[] NativeHandle.getFds() + jmethodID getIntsID; // int[] NativeHandle.getInts() +} gNativeHandleFields; + +jobject JNativeHandle::MakeJavaNativeHandleObj( + JNIEnv *env, const native_handle_t *handle) { + if (handle == nullptr) { return nullptr; } + + const int numFds = handle->numFds; + ScopedLocalRef<jintArray> fds(env, env->NewIntArray(numFds)); + env->SetIntArrayRegion(fds.get(), 0, numFds, &(handle->data[0])); + + const int numInts = handle->numInts; + ScopedLocalRef<jintArray> ints(env, env->NewIntArray(numInts)); + env->SetIntArrayRegion(ints.get(), 0, numInts, &(handle->data[numFds])); + + return env->NewObject(gNativeHandleFields.clazz, + gNativeHandleFields.constructID, fds.get(), ints.get(), false /*own*/); +} + +native_handle_t *JNativeHandle::MakeCppNativeHandle( + JNIEnv *env, jobject jHandle, EphemeralStorage *storage) { + if (jHandle == nullptr) { return nullptr; } + + if (!env->IsInstanceOf(jHandle, gNativeHandleFields.clazz)) { + jniThrowException(env, "java/lang/ClassCastException", + "jHandle must be an instance of NativeHandle."); + return nullptr; + } + + ScopedLocalRef<jintArray> fds(env, (jintArray) env->CallObjectMethod( + jHandle, gNativeHandleFields.getFdsID)); + + ScopedLocalRef<jintArray> ints(env, (jintArray) env->CallObjectMethod( + jHandle, gNativeHandleFields.getIntsID)); + + const int numFds = (int) env->GetArrayLength(fds.get()); + const int numInts = (int) env->GetArrayLength(ints.get()); + + native_handle_t *handle = (storage == nullptr) + ? native_handle_create(numFds, numInts) + : storage->allocTemporaryNativeHandle(numFds, numInts); + + if (handle != nullptr) { + env->GetIntArrayRegion(fds.get(), 0, numFds, &(handle->data[0])); + env->GetIntArrayRegion(ints.get(), 0, numInts, &(handle->data[numFds])); + } else { + jniThrowException(env, "java/lang/OutOfMemoryError", + "Failed to allocate memory for native_handle_t."); + } + + return handle; +} + +jobjectArray JNativeHandle::AllocJavaNativeHandleObjArray(JNIEnv *env, jsize length) { + return env->NewObjectArray(length, gNativeHandleFields.clazz, nullptr); +} + +int register_android_os_NativeHandle(JNIEnv *env) { + jclass clazz = FindClassOrDie(env, CLASS_PATH); + gNativeHandleFields.clazz = MakeGlobalRefOrDie(env, clazz); + + gNativeHandleFields.constructID = GetMethodIDOrDie(env, clazz, "<init>", "([I[IZ)V"); + gNativeHandleFields.getFdsID = GetMethodIDOrDie(env, clazz, "getFdsAsIntArray", "()[I"); + gNativeHandleFields.getIntsID = GetMethodIDOrDie(env, clazz, "getInts", "()[I"); + + return 0; +} + +} diff --git a/core/jni/android_os_NativeHandle.h b/core/jni/android_os_NativeHandle.h new file mode 100644 index 000000000000..bbe3ebc1dbd0 --- /dev/null +++ b/core/jni/android_os_NativeHandle.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_OS_NATIVE_HANDLE_H +#define ANDROID_OS_NATIVE_HANDLE_H + +#include "hwbinder/EphemeralStorage.h" + +#include <cutils/native_handle.h> +#include <jni.h> + +namespace android { + +struct JNativeHandle { + + /** + * Returns a Java NativeHandle object representing the parameterized + * native_handle_t instance. + */ + static jobject MakeJavaNativeHandleObj(JNIEnv *env, const native_handle_t *handle); + + /** + * Returns a heap-allocated native_handle_t instance representing the + * parameterized Java object. Note that if no valid EphemeralStorage* + * parameter is supplied (storage is nullptr), the return value must + * be explicitly deallocated (using native_handle_delete). + */ + static native_handle_t* MakeCppNativeHandle(JNIEnv *env, jobject jHandle, + EphemeralStorage *storage); + + /** + * Returns an (uninitialized) array of Java NativeHandle objects. + */ + static jobjectArray AllocJavaNativeHandleObjArray(JNIEnv *env, jsize length); +}; + +} + +#endif // ANDROID_OS_NATIVE_HANDLE_H diff --git a/core/jni/android_util_MemoryIntArray.cpp b/core/jni/android_util_MemoryIntArray.cpp index 2dfbe3ecfef6..b68f9eca70cd 100644 --- a/core/jni/android_util_MemoryIntArray.cpp +++ b/core/jni/android_util_MemoryIntArray.cpp @@ -142,8 +142,6 @@ static void android_util_MemoryIntArray_close(JNIEnv* env, jobject clazz, jint f jniThrowException(env, "java/io/IOException", "ashmem unpinning failed"); return; } - - close(fd); } static jint android_util_MemoryIntArray_get(JNIEnv* env, jobject clazz, diff --git a/core/jni/hwbinder/EphemeralStorage.cpp b/core/jni/hwbinder/EphemeralStorage.cpp index 3b18f2b36b9e..95bb42ea57c6 100644 --- a/core/jni/hwbinder/EphemeralStorage.cpp +++ b/core/jni/hwbinder/EphemeralStorage.cpp @@ -71,6 +71,17 @@ const hidl_string *EphemeralStorage::allocTemporaryString( return s; } +native_handle_t *EphemeralStorage::allocTemporaryNativeHandle( + int numFds, int numInts) { + Item item; + item.mType = TYPE_NATIVE_HANDLE; + item.mObj = nullptr; + item.mPtr = native_handle_create(numFds, numInts); + mItems.push_back(item); + + return static_cast<native_handle_t*>(item.mPtr); +} + #define DEFINE_ALLOC_VECTOR_METHODS(Suffix,Type,NewType) \ const hidl_vec<Type> *EphemeralStorage::allocTemporary ## Suffix ## Vector( \ JNIEnv *env, Type ## Array arrayObj) { \ @@ -145,6 +156,13 @@ void EphemeralStorage::release(JNIEnv *env) { DEFINE_RELEASE_ARRAY_CASE(Float,jfloat,Float) DEFINE_RELEASE_ARRAY_CASE(Double,jdouble,Double) + case TYPE_NATIVE_HANDLE: + { + int err = native_handle_delete(static_cast<native_handle_t *>(item.mPtr)); + CHECK(err == 0); + break; + } + default: CHECK(!"Should not be here"); } diff --git a/core/jni/hwbinder/EphemeralStorage.h b/core/jni/hwbinder/EphemeralStorage.h index f07c782bfdf7..55ef74169eb1 100644 --- a/core/jni/hwbinder/EphemeralStorage.h +++ b/core/jni/hwbinder/EphemeralStorage.h @@ -43,6 +43,8 @@ struct EphemeralStorage { const ::android::hardware::hidl_string *allocTemporaryString( JNIEnv *env, jstring stringObj); + native_handle_t *allocTemporaryNativeHandle(int numFds, int numInts); + DECLARE_ALLOC_METHODS(Int8,jbyte) DECLARE_ALLOC_METHODS(Int16,jshort) DECLARE_ALLOC_METHODS(Int32,jint) @@ -61,6 +63,7 @@ private: TYPE_Int64_ARRAY, TYPE_Float_ARRAY, TYPE_Double_ARRAY, + TYPE_NATIVE_HANDLE, }; struct Item { diff --git a/core/proto/android/app/alarmmanager.proto b/core/proto/android/app/alarmmanager.proto index 53be1ee7a93a..58df9225bb7e 100644 --- a/core/proto/android/app/alarmmanager.proto +++ b/core/proto/android/app/alarmmanager.proto @@ -53,5 +53,5 @@ message AlarmClockInfoProto { // This value is UTC wall clock time in milliseconds, as returned by // System#currentTimeMillis() for example. optional int64 trigger_time_ms = 1; - optional android.app.PendingIntentProto show_intent = 2; + optional PendingIntentProto show_intent = 2; } diff --git a/core/proto/android/app/notification.proto b/core/proto/android/app/notification.proto index c7e313aa5801..a6f13d76b9f6 100644 --- a/core/proto/android/app/notification.proto +++ b/core/proto/android/app/notification.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.app; diff --git a/core/proto/android/app/notification_channel.proto b/core/proto/android/app/notification_channel.proto index d3808e890025..75cc18bf7a07 100644 --- a/core/proto/android/app/notification_channel.proto +++ b/core/proto/android/app/notification_channel.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.app; @@ -29,8 +28,11 @@ import "frameworks/base/libs/incident/proto/android/privacy.proto"; message NotificationChannelProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; + // Notification Channel ID. Provided by the app. optional string id = 1 [ (android.privacy).dest = DEST_EXPLICIT ]; + // User-visible Notification Channel name. Provided by the app. optional string name = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; + // User-visible Notification Channel description. Provided by the app. optional string description = 3 [ (android.privacy).dest = DEST_EXPLICIT ]; optional int32 importance = 4; optional bool can_bypass_dnd = 5; @@ -49,6 +51,7 @@ message NotificationChannelProto { optional bool show_badge = 13; // Default is false. optional bool is_deleted = 14; + // Provided by the app but will match a NotificationChannelGroup id. optional string group = 15 [ (android.privacy).dest = DEST_EXPLICIT ]; optional android.media.AudioAttributesProto audio_attributes = 16; // If this is a blockable system notification channel. diff --git a/core/proto/android/app/notification_channel_group.proto b/core/proto/android/app/notification_channel_group.proto index 7b270d74f2de..4fb27b0d6e4a 100644 --- a/core/proto/android/app/notification_channel_group.proto +++ b/core/proto/android/app/notification_channel_group.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.app; @@ -29,9 +28,12 @@ import "frameworks/base/libs/incident/proto/android/privacy.proto"; message NotificationChannelGroupProto { option (.android.msg_privacy).dest = DEST_EXPLICIT; + // Notification Channel Group ID. Provided by the app. optional string id = 1; + // User-visible Notification Channel Group name. optional string name = 2; + // User-visible Notification Channel Group description. optional string description = 3; optional bool is_blocked = 4; - repeated android.app.NotificationChannelProto channels = 5; + repeated NotificationChannelProto channels = 5; } diff --git a/core/proto/android/app/notificationmanager.proto b/core/proto/android/app/notificationmanager.proto index 183f9d3c28f5..27204ccae0d9 100644 --- a/core/proto/android/app/notificationmanager.proto +++ b/core/proto/android/app/notificationmanager.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.app; diff --git a/core/proto/android/app/profilerinfo.proto b/core/proto/android/app/profilerinfo.proto index 6b28318f9fb9..20fa3adbf5b9 100644 --- a/core/proto/android/app/profilerinfo.proto +++ b/core/proto/android/app/profilerinfo.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; import "frameworks/base/libs/incident/proto/android/privacy.proto"; @@ -28,10 +27,12 @@ package android.app; message ProfilerInfoProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; + // Name of profile output file. optional string profile_file = 1; optional int32 profile_fd = 2; optional int32 sampling_interval = 3; optional bool auto_stop_profiler = 4; optional bool streaming_output = 5; + // Denotes an agent (and its parameters) to attach for profiling. optional string agent = 6; } diff --git a/core/proto/android/app/window_configuration.proto b/core/proto/android/app/window_configuration.proto index c9f3986b6004..2d1555298ffb 100644 --- a/core/proto/android/app/window_configuration.proto +++ b/core/proto/android/app/window_configuration.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.app; diff --git a/core/proto/android/content/clipdata.proto b/core/proto/android/content/clipdata.proto index cbc00a7970c1..4f1c308f0981 100644 --- a/core/proto/android/content/clipdata.proto +++ b/core/proto/android/content/clipdata.proto @@ -27,7 +27,7 @@ import "frameworks/base/libs/incident/proto/android/privacy.proto"; message ClipDataProto { option (.android.msg_privacy).dest = DEST_LOCAL; - optional android.content.ClipDescriptionProto description = 1; + optional ClipDescriptionProto description = 1; // Custom dump of an android.graphics.Bitmap object. message Icon { @@ -46,8 +46,8 @@ message ClipDataProto { string html_text = 1; string text = 2; string uri = 3; - android.content.IntentProto intent = 4; - bool nothing = 5; + IntentProto intent = 4; + bool nothing = 5 [ (.android.privacy).dest = DEST_AUTOMATIC ]; } } repeated Item items = 3; diff --git a/core/proto/android/content/component_name.proto b/core/proto/android/content/component_name.proto index 4e49cf2bfcd5..232d68584335 100644 --- a/core/proto/android/content/component_name.proto +++ b/core/proto/android/content/component_name.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.content"; option java_multiple_files = true; package android.content; diff --git a/core/proto/android/content/configuration.proto b/core/proto/android/content/configuration.proto index 5755c5974a00..06f9735c3dea 100644 --- a/core/proto/android/content/configuration.proto +++ b/core/proto/android/content/configuration.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.content"; option java_multiple_files = true; package android.content; diff --git a/core/proto/android/content/featureinfo.proto b/core/proto/android/content/featureinfo.proto index 6878f0ecd84c..87bf404c6245 100644 --- a/core/proto/android/content/featureinfo.proto +++ b/core/proto/android/content/featureinfo.proto @@ -18,7 +18,6 @@ syntax = "proto2"; import "frameworks/base/libs/incident/proto/android/privacy.proto"; -option java_package = "android.content.pm"; option java_multiple_files = true; package android.content.pm; diff --git a/core/proto/android/content/intent.proto b/core/proto/android/content/intent.proto index 3b2c4fcb64cd..99ed6875075e 100644 --- a/core/proto/android/content/intent.proto +++ b/core/proto/android/content/intent.proto @@ -17,7 +17,6 @@ syntax = "proto2"; package android.content; -option java_package = "android.content"; option java_multiple_files = true; import "frameworks/base/core/proto/android/content/component_name.proto"; @@ -58,8 +57,9 @@ message IntentProto { optional string package = 6; optional ComponentNameProto component = 7; optional string source_bounds = 8; - optional string clip_data = 9 [ (.android.privacy).dest = DEST_EXPLICIT ]; + optional string clip_data = 9 [ (.android.privacy).dest = DEST_LOCAL ]; optional string extras = 10 [ (.android.privacy).dest = DEST_LOCAL ]; + // UserHandle value (similar to user_id in other protos). optional int32 content_user_hint = 11; optional string selector = 12; } @@ -70,6 +70,13 @@ message IntentFilterProto { repeated string actions = 1; repeated string categories = 2; + // https://developer.android.com/guide/topics/manifest/data-element#scheme: + // The scheme part of a URI. This is the minimal essential attribute for + // specifying a URI; at least one scheme attribute must be set for the filter, + // or none of the other URI attributes are meaningful. A scheme is specified + // without the trailing colon (for example, http, rather than http:). If the + // filter has a data type set (the mimeType attribute) but no scheme, the + // content: and file: schemes are assumed. repeated string data_schemes = 3 [ (.android.privacy).dest = DEST_EXPLICIT ]; repeated android.os.PatternMatcherProto data_scheme_specs = 4; repeated AuthorityEntryProto data_authorities = 5; diff --git a/core/proto/android/content/locale.proto b/core/proto/android/content/locale.proto index 87b555c315b4..86743bf6b91c 100644 --- a/core/proto/android/content/locale.proto +++ b/core/proto/android/content/locale.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.content"; option java_multiple_files = true; import "frameworks/base/libs/incident/proto/android/privacy.proto"; diff --git a/core/proto/android/content/package_item_info.proto b/core/proto/android/content/package_item_info.proto index 6e99bec681a2..ebb2fa62a351 100644 --- a/core/proto/android/content/package_item_info.proto +++ b/core/proto/android/content/package_item_info.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.content.pm"; option java_multiple_files = true; import "frameworks/base/libs/incident/proto/android/privacy.proto"; @@ -72,20 +71,43 @@ message ApplicationInfoProto { optional int32 requires_smallest_width_dp = 3; optional int32 compatible_width_limit_dp = 4; optional int32 largest_width_limit_dp = 5; + // String retrieved from the seinfo tag found in selinux policy. This value + // can be set through the mac_permissions.xml policy construct. This value + // is used for setting an SELinux security context on the process as well as + // its data directory. optional string seinfo = 6; + // The seinfo tag generated per-user. This value may change based upon the + // user's configuration. For example, when an instant app is installed for a + // user. It is an error if this field is ever null when trying to + // start a new process. optional string seinfo_user = 7; + // Full path to the device-protected directory assigned to the package for + // its persistent data. optional string device_protected_data_dir = 8; + // Full path to the credential-protected directory assigned to the package + // for its persistent data. optional string credential_protected_data_dir = 9; + // Paths to all shared libraries this application is linked against. This + // field is only set if the PackageManager.GET_SHARED_LIBRARY_FILES} flag + // was used when retrieving the structure. repeated string shared_library_files = 10; optional string manage_space_activity_name = 11; optional int32 description_res = 12; optional int32 ui_options = 13; optional bool supports_rtl = 14; oneof full_backup_content { + // An optional attribute that indicates the app supports automatic backup + // of app data. 0 is the default and means the app's entire data folder + + // managed external storage will be backed up; Any negative value + // indicates the app does not support full-data backup, though it may + // still want to participate via the traditional key/value backup API; A + // positive number specifies an xml resource in which the application has + // defined its backup include/exclude criteria. The data in this field is + // of the format "@xml/<number>". string content = 15; bool is_full_backup = 16; } - optional int32 networkSecurity_config_res = 17; + optional int32 network_security_config_res = 17; optional int32 category = 18; } optional Detail detail = 17; diff --git a/core/proto/android/media/audioattributes.proto b/core/proto/android/media/audioattributes.proto index ef04720405f5..d679d9c24f73 100644 --- a/core/proto/android/media/audioattributes.proto +++ b/core/proto/android/media/audioattributes.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.media"; option java_multiple_files = true; package android.media; diff --git a/core/proto/android/os/batterystats.proto b/core/proto/android/os/batterystats.proto index 0970bd5e2c27..a4167c187194 100644 --- a/core/proto/android/os/batterystats.proto +++ b/core/proto/android/os/batterystats.proto @@ -788,7 +788,7 @@ message UidProto { message UserActivity { option (android.msg_privacy).dest = DEST_AUTOMATIC; - optional android.os.PowerManagerProto.UserActivityEvent name = 1; + optional PowerManagerProto.UserActivityEvent name = 1; optional int32 count = 2; }; repeated UserActivity user_activity = 23; diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 5f6b6cc49f7e..8f289700aede 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -18,7 +18,6 @@ syntax = "proto2"; option java_multiple_files = true; import "frameworks/base/core/proto/android/os/backtrace.proto"; -import "frameworks/base/core/proto/android/os/batterystats.proto"; import "frameworks/base/core/proto/android/os/batterytype.proto"; import "frameworks/base/core/proto/android/os/cpufreq.proto"; import "frameworks/base/core/proto/android/os/cpuinfo.proto"; diff --git a/core/proto/android/os/looper.proto b/core/proto/android/os/looper.proto index dce65d35e516..b9b8cf584502 100644 --- a/core/proto/android/os/looper.proto +++ b/core/proto/android/os/looper.proto @@ -28,5 +28,5 @@ message LooperProto { // the thread name, usually set by developers. optional string thread_name = 1; optional int64 thread_id = 2; - optional android.os.MessageQueueProto queue = 3; + optional MessageQueueProto queue = 3; } diff --git a/core/proto/android/os/message.proto b/core/proto/android/os/message.proto index 048d031f72e0..8aaec7094f6e 100644 --- a/core/proto/android/os/message.proto +++ b/core/proto/android/os/message.proto @@ -23,15 +23,21 @@ option java_multiple_files = true; message MessageProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; + // Targeted delivery time of the message. optional int64 when = 1; // Name of callback class. optional string callback = 2; - // User-defined message code so that the recipient can identify what this + // App-defined message code so that the recipient can identify what this // message is about. optional int32 what = 3; + // Lower-cost alternative to using setData() if the app only needs to store a few integer values. optional int32 arg1 = 4; + // Lower-cost alternative to using setData() if the app only needs to store a few integer values. optional int32 arg2 = 5; - // String representation of an arbitrary object to send to the recipient. + // String representation of an arbitrary object to send to the Handler. When + // using android.os.Messenger to send the message across processes, this will + // only be populated if it contains a Parcelable of a framework class (not one + // implemented by the application). optional string obj = 6 [ (.android.privacy).dest = DEST_EXPLICIT ]; // Name of target class. optional string target = 7; diff --git a/core/proto/android/os/messagequeue.proto b/core/proto/android/os/messagequeue.proto index 4bfcb81d5996..61bbee709fd8 100644 --- a/core/proto/android/os/messagequeue.proto +++ b/core/proto/android/os/messagequeue.proto @@ -25,7 +25,7 @@ import "frameworks/base/libs/incident/proto/android/privacy.proto"; message MessageQueueProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; - repeated android.os.MessageProto messages = 1; + repeated MessageProto messages = 1; optional bool is_polling_locked = 2; optional bool is_quitting = 3; } diff --git a/core/proto/android/os/pagetypeinfo.proto b/core/proto/android/os/pagetypeinfo.proto index 0b8a5da44b09..65e713900ae7 100644 --- a/core/proto/android/os/pagetypeinfo.proto +++ b/core/proto/android/os/pagetypeinfo.proto @@ -49,8 +49,11 @@ message PageTypeInfoProto { optional int32 node = 1; + // Memory zone. optional string zone = 2; + // Migration type (Unmovable, Reclaimable, Movable, Reserve, CMA, and + // Isolate). optional string type = 3; // order level starts from 0 for 4KB to page_block_order defined above, e.g. 10 for 4096KB @@ -64,6 +67,7 @@ message PageTypeInfoProto { optional int32 node = 1; + // Memory zone. optional string zone = 2; optional int32 unmovable = 3; diff --git a/core/proto/android/os/procrank.proto b/core/proto/android/os/procrank.proto index ff7515e61471..f7edaf4aef20 100644 --- a/core/proto/android/os/procrank.proto +++ b/core/proto/android/os/procrank.proto @@ -15,18 +15,17 @@ */ syntax = "proto2"; +package android.os; + option java_multiple_files = true; import "frameworks/base/libs/incident/proto/android/privacy.proto"; -package android.os; - -//Memory usage of running processes +// Memory usage of running processes message ProcrankProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; // Currently running process - // Next Tag: 11 message Process { option (android.msg_privacy).dest = DEST_AUTOMATIC; @@ -59,11 +58,12 @@ message ProcrankProto { // process command optional string cmdline = 10; + + // Next Tag: 11 } repeated Process processes = 1; // Summary - // Next Tag: 3 message Summary { option (android.msg_privacy).dest = DEST_AUTOMATIC; @@ -83,6 +83,8 @@ message ProcrankProto { optional string raw_text = 1; } optional Ram ram = 3; + + // Next Tag: 4 } optional Summary summary = 2; } diff --git a/core/proto/android/os/ps.proto b/core/proto/android/os/ps.proto index 0ab92d7686c7..e032b574607f 100644 --- a/core/proto/android/os/ps.proto +++ b/core/proto/android/os/ps.proto @@ -52,7 +52,7 @@ message PsProto { // and ps is not displaying threads. optional string wchan = 8; // Memory address of the process. - optional string addr = 9; + optional string addr = 9 [ (android.privacy).dest = DEST_LOCAL ]; enum ProcessStateCode { STATE_UNKNOWN = 0; diff --git a/core/proto/android/os/system_properties.proto b/core/proto/android/os/system_properties.proto index c5f7d0e67f33..a41edf30f913 100644 --- a/core/proto/android/os/system_properties.proto +++ b/core/proto/android/os/system_properties.proto @@ -194,7 +194,7 @@ message SystemPropertiesProto { message Log { option (android.msg_privacy).dest = DEST_AUTOMATIC; - optional string tag_WifiHAL = 1; + optional string tag_wifi_hal = 1; optional string tag_stats_log = 2; // Next Tag: 3 @@ -237,7 +237,7 @@ message SystemPropertiesProto { optional bool adb_secure = 1 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional string arch = 2; optional bool audio_ignore_effects = 3; - optional bool audio_monitorRotation = 4; + optional bool audio_monitor_rotation = 4; optional string baseband = 5; optional string board_platform = 6; @@ -249,9 +249,13 @@ message SystemPropertiesProto { repeated string boottime = 5; optional string console = 6; optional int32 fake_battery = 7; + // The name of the hardware (from the kernel command line or /proc). It + // SHOULD be reasonably human-readable. optional string hardware = 8; optional string hardware_color = 9; optional string hardware_revision = 10; + // SKU is for small variants such as device color, targeted market, + // ram/rom size, etc. optional string hardware_sku = 11; optional string keymaster = 12; optional string mode = 13; @@ -292,27 +296,60 @@ message SystemPropertiesProto { message Build { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Date of the platform build. optional string date = 1; + // UTC timstamp of build data. optional int64 date_utc = 2; optional string description = 3; + // A build ID string meant for displaying to the user. optional string display_id = 4; + // A string that uniquely identifies the host the build was built on, in + // human-readable format. Only makes sense for internal engineering + // builds. optional string host = 5; + // Unique id of this android platform build. An identifier chosen by the + // device implementer to refer to a specific release, in human-readable + // format. This field can be the same as + // android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value + // sufficiently meaningful for end users to distinguish between software + // builds. optional string id = 6; + // Product name. optional string product = 7; optional bool system_root_image = 8; + // Tags of the buid, e.g. dev-keys, release-keys. optional string tags = 9; + // Type of the build, e.g. eng, userdebug, user. optional string type = 10; + // Name of the user (an engineer or a build bot) that built the image. For + // production builds, this is from the build bot but some OEMs might use a + // real username. Only makes sense for internal engineering builds. optional string user = 11; message Version { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // The base OS build the product is based on. A value representing the + // FINGERPRINT parameter of the build that is otherwise identical to + // this build except for the patches provided in the Android Public + // Security Bulletin. optional string base_os = 1; optional string codename = 2; + // A value chosen by the device implementer designating the specific + // build of the currently-executing Android system, in human-readable + // format. This value MUST NOT be reused for different builds made + // available to end users. A typical use of this field is to indicate + // which build number or source-control change identifier was used to + // generate the build. optional string incremental = 3; optional int32 preview_sdk = 4; + // The version of the currently-executing Android system, in + // human-readable format. optional string release = 5; + // The version of the currently-executing Android system, in a format + // accessible to third-party application code. optional int32 sdk = 6; + // A value indicating the security patch level of a build. optional string security_patch = 7; // Next Tag: 8 @@ -324,8 +361,11 @@ message SystemPropertiesProto { optional Build build = 11; optional bool camera_notify_nfc = 12 [ (android.privacy).dest = DEST_AUTOMATIC ]; + // Carrier name on the phone. optional string carrier = 13; + // Is dataroaming enabled. optional bool com_android_dataroaming = 14 [ (android.privacy).dest = DEST_AUTOMATIC ]; + // does it provide mobiledata. optional bool com_android_prov_mobiledata = 15 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional string com_google_clientidbase = 16; @@ -346,6 +386,7 @@ message SystemPropertiesProto { optional string crypto_state = 21; optional string crypto_type = 22; optional string dalvik_vm_native_bridge = 23; + // Is this build debuggable. optional bool debuggable = 24; optional string frp_pst = 25; optional string gfx_driver_0 = 26; @@ -353,8 +394,8 @@ message SystemPropertiesProto { message Hardware { option (android.msg_privacy).dest = DEST_LOCAL; - optional string value = 1; // value of ro.hardware itself - + // value of ro.hardware itself + optional string value = 1; optional string activity_recognition = 2; optional string audio = 3; optional string audio_policy = 4; @@ -403,21 +444,30 @@ message SystemPropertiesProto { optional int32 oem_unlock_supported = 30; optional int32 opengles_version = 31; + // The product of the device. message Product { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Name of the product. optional string board = 1; + // Brand of the product. optional string brand = 2; optional string cpu_abi = 3; repeated string cpu_abilist = 4; repeated string cpu_abilist32 = 5; repeated string cpu_abilist64 = 6; + // Device name. optional string device = 7; + // The first api level when the phone is launched. optional int32 first_api_level = 8; + // Manufacturer of the product. optional string manufacturer = 9; + // Marketing name of the phone. optional string model = 10; + // Name of the product. optional string name = 11; + // Vendor related information about the product. message Vendor { option (android.msg_privacy).dest = DEST_AUTOMATIC; @@ -441,6 +491,7 @@ message SystemPropertiesProto { message Telephony { optional bool call_ring_multiple = 1; + // CDMA subscription number. optional int32 default_cdma_sub = 2; optional int32 default_network = 3; } @@ -456,6 +507,7 @@ message SystemPropertiesProto { } optional Vendor vendor = 41; + // Vendor Native Development Kit version. optional string vndk_version = 42; optional int32 vts_coverage = 43; optional string zygote = 44; @@ -492,7 +544,7 @@ message SystemPropertiesProto { } optional Sys sys = 24; - optional int32 telephony_lteOnCdmaDevice = 25; + optional int32 telephony_lte_on_cdma_device = 25; optional int32 tombstoned_max_tombstone_count = 26; optional string vold_decrypt = 27; optional int32 vold_post_fs_data_done = 28; diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index 040e36ae706c..f9f725a130ed 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -394,6 +394,8 @@ message GlobalSettingsProto { // App allowed to load GPU debug layers. optional SettingProto debug_app = 1; + // Ordered GPU debug layer list + // i.e. <layer1>:<layer2>:...:<layerN> optional SettingProto debug_layers = 2 [ (android.privacy).dest = DEST_AUTOMATIC ]; } optional Gpu gpu = 59; @@ -921,6 +923,12 @@ message GlobalSettingsProto { optional SettingProto connected_mac_randomization_enabled = 25 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto max_dhcp_retry_count = 26 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto mobile_data_transition_wakelock_timeout_ms = 27 [ (android.privacy).dest = DEST_AUTOMATIC ]; + // Controls whether WiFi configurations created by a Device Owner app should + // be locked down (that is, be editable or removable only by the Device + // Owner App, not even by Settings app). This setting takes integer values. + // Non-zero values mean that the Device Owner-created configurations are + // locked down. Value of zero means they are not. Default value in the + // absence of actual value to this setting is 0. optional SettingProto device_owner_configs_lockdown = 28 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto frequency_band = 29 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto p2p_device_name = 30; diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto index f2e8c70a5682..6e661e1ce5b2 100644 --- a/core/proto/android/providers/settings/secure.proto +++ b/core/proto/android/providers/settings/secure.proto @@ -144,6 +144,10 @@ message SecureSettingsProto { optional SettingProto provisioned = 3 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto transport = 4 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto manager_constants = 5; + // Local transport parameters so we can configure it for tests. + // This is encoded as a key=value list, separated by commas. + // The following keys are supported: + // fake_encryption_flag (boolean) optional SettingProto local_transport_parameters = 6; optional SettingProto packages_to_clear_data_before_full_restore = 7; } diff --git a/core/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto index 52c76ccaa639..9d5f0bcc54d9 100644 --- a/core/proto/android/server/activitymanagerservice.proto +++ b/core/proto/android/server/activitymanagerservice.proto @@ -28,6 +28,7 @@ import "frameworks/base/core/proto/android/content/intent.proto"; import "frameworks/base/core/proto/android/content/package_item_info.proto"; import "frameworks/base/core/proto/android/graphics/rect.proto"; import "frameworks/base/core/proto/android/internal/processstats.proto"; +import "frameworks/base/core/proto/android/os/bundle.proto"; import "frameworks/base/core/proto/android/os/looper.proto"; import "frameworks/base/core/proto/android/os/powermanager.proto"; import "frameworks/base/core/proto/android/server/intentresolver.proto"; @@ -163,7 +164,8 @@ message ReceiverListProto { optional BroadcastRecordProto current = 5; optional bool linked_to_death = 6; repeated BroadcastFilterProto filters = 7; - optional string hex_hash = 8; // used to find this ReceiverList object in IntentResolver + // Used to find this ReceiverList object in IntentResolver + optional string hex_hash = 8; } message ProcessRecordProto { @@ -190,7 +192,8 @@ message BroadcastFilterProto { optional .android.content.IntentFilterProto intent_filter = 1; optional string required_permission = 2; - optional string hex_hash = 3; // used to find the BroadcastFilter object in IntentResolver + // Used to find the BroadcastFilter object in IntentResolver + optional string hex_hash = 3; optional int32 owning_user_id = 4; } @@ -411,6 +414,7 @@ message StickyBroadcastProto { message StickyAction { option (.android.msg_privacy).dest = DEST_AUTOMATIC; + // The action of the sticky Intent. optional string name = 1; repeated .android.content.IntentProto intents = 2; } @@ -556,7 +560,7 @@ message ServiceRecordProto { message ConnectionRecordProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; - // used to find same record, e.g. AppBindRecord has the hex_hash + // Used to find same record, e.g. AppBindRecord has the hex_hash optional string hex_hash = 1; // cross reference the object and avoid double logging. optional int32 user_id = 2; @@ -803,7 +807,11 @@ message ActiveInstrumentationProto { optional string profile_file = 6; optional string watcher = 7; optional string ui_automation_connection = 8; - optional string arguments = 9 [ (.android.privacy).dest = DEST_EXPLICIT ]; + // Arguments as given to the ActiveInstrumentation object in Bundle + // toString format. + reserved 9; // arguments (in String format). + // Arguments as given to the ActiveInstrumentation object. + optional .android.os.BundleProto arguments = 10; } // Proto definition of com.android.server.am.UidRecord.java diff --git a/core/proto/android/server/alarmmanagerservice.proto b/core/proto/android/server/alarmmanagerservice.proto index eef78d1aa7de..b74f28d38fa8 100644 --- a/core/proto/android/server/alarmmanagerservice.proto +++ b/core/proto/android/server/alarmmanagerservice.proto @@ -228,6 +228,8 @@ message ConstantsProto { message FilterStatsProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; + // Tag given to AlarmManager by the app or component scheduling the alarm. + // As some of them are app-supplied, some tags may contain PII. optional string tag = 1 [ (.android.privacy).dest = DEST_EXPLICIT ]; // The last time this filter when in flight, in terms of elapsed realtime. optional int64 last_flight_time_realtime = 2; @@ -248,6 +250,8 @@ message IdleDispatchEntryProto { optional int32 uid = 1; optional string pkg = 2; + // Tag given to AlarmManager by the app or component scheduling the alarm. + // As some of them are app-supplied, some tags may contain PII. optional string tag = 3 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional string op = 4; // Time when this entry was created, in terms of elapsed realtime. @@ -263,6 +267,8 @@ message InFlightProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 uid = 1; + // Tag given to AlarmManager by the app or component scheduling the alarm. + // As some of them are app-supplied, some tags may contain PII. optional string tag = 2 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional int64 when_elapsed_ms = 3; optional .android.app.AlarmManagerProto.AlarmType alarm_type = 4; @@ -277,6 +283,8 @@ message WakeupEventProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 uid = 1; + // The operation that caused the wakeup. May be an Intent action or a + // listener tag. optional string action = 2; optional int64 when = 3; } diff --git a/core/proto/android/server/forceappstandbytracker.proto b/core/proto/android/server/forceappstandbytracker.proto index 8c71b0ba27eb..54f30c3b9106 100644 --- a/core/proto/android/server/forceappstandbytracker.proto +++ b/core/proto/android/server/forceappstandbytracker.proto @@ -71,7 +71,7 @@ message ForceAppStandbyTrackerProto { message ExemptedPackage { option (.android.msg_privacy).dest = DEST_AUTOMATIC; - optional int32 userId = 1; + optional int32 user_id = 1; optional string package_name = 2; } diff --git a/core/proto/android/server/statlogger.proto b/core/proto/android/server/statlogger.proto index 46badc47afc4..65b1af79136b 100644 --- a/core/proto/android/server/statlogger.proto +++ b/core/proto/android/server/statlogger.proto @@ -29,7 +29,7 @@ message StatLoggerProto { message Event { option (.android.msg_privacy).dest = DEST_AUTOMATIC; - optional int32 eventId = 1; + optional int32 event_id = 1; // Labels are hard-coded in Android framework code. optional string label = 2; optional int32 count = 3; diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto index 3db7f9d6b555..a8b23dd9e6a4 100644 --- a/core/proto/android/server/windowmanagerservice.proto +++ b/core/proto/android/server/windowmanagerservice.proto @@ -48,12 +48,12 @@ message WindowManagerServiceDumpProto { optional AppTransitionProto app_transition = 9; } -/* represents DisplayContent */ +/* represents RootWindowContainer object */ message RootWindowContainerProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional WindowContainerProto window_container = 1; - repeated DisplayProto displays = 2; + repeated DisplayContentProto displays = 2; /* window references in top down z order */ repeated IdentifierProto windows = 3; } @@ -139,8 +139,8 @@ message AppTransitionProto { optional .android.view.TransitionTypeEnum last_used_app_transition = 2; } -/* represents DisplayContent */ -message DisplayProto { +/* represents DisplayContent object */ +message DisplayContentProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional WindowContainerProto window_container = 1; @@ -261,7 +261,9 @@ message WindowStateProto { optional WindowContainerProto window_container = 1; optional IdentifierProto identifier = 2; + // Unique identifier of a DisplayContent stack. optional int32 display_id = 3; + // Unique identifier for the task stack. optional int32 stack_id = 4; optional .android.view.WindowLayoutParamsProto attributes = 5; optional .android.graphics.RectProto given_content_insets = 6; @@ -306,6 +308,8 @@ message IdentifierProto { optional int32 hash_code = 1; optional int32 user_id = 2; + // Either a component name/string (eg: "com.android.settings/.FallbackHome") + // or a window title ("NavigationBar"). optional string title = 3 [ (.android.privacy).dest = DEST_EXPLICIT ]; } diff --git a/core/proto/android/service/diskstats.proto b/core/proto/android/service/diskstats.proto index f55f0e775d78..1012eb0b17a6 100644 --- a/core/proto/android/service/diskstats.proto +++ b/core/proto/android/service/diskstats.proto @@ -37,7 +37,7 @@ message DiskStatsServiceDumpProto { } // Whether the latency test resulted in an error optional bool has_test_error = 1; - // If the test errored, error message is contained here, it is just IOException. + // If the test encountered an IOException, the error message is logged here. optional string error_message = 2; // 512B write latency in milliseconds, if the test was successful optional int32 write_512b_latency_millis = 3; diff --git a/core/proto/android/service/graphicsstats.proto b/core/proto/android/service/graphicsstats.proto index d75f135be573..bb32495e1d30 100644 --- a/core/proto/android/service/graphicsstats.proto +++ b/core/proto/android/service/graphicsstats.proto @@ -46,10 +46,10 @@ message GraphicsStatsProto { optional int64 stats_start = 3; optional int64 stats_end = 4; - // The aggregated statistics for the package + // The aggregated statistics for the package. optional GraphicsStatsJankSummaryProto summary = 5; - // The frame time histogram for the package + // The frame time histogram for the package. repeated GraphicsStatsHistogramBucketProto histogram = 6; } diff --git a/core/proto/android/service/netstats.proto b/core/proto/android/service/netstats.proto index 29fd1959fea1..02d44838e1bc 100644 --- a/core/proto/android/service/netstats.proto +++ b/core/proto/android/service/netstats.proto @@ -47,6 +47,7 @@ message NetworkStatsServiceDumpProto { message NetworkInterfaceProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Name of the network interface (eg: wlan). optional string interface = 1; optional NetworkIdentitySetProto identities = 2; @@ -63,11 +64,15 @@ message NetworkIdentitySetProto { message NetworkIdentityProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; - // Constats from ConnectivityManager.TYPE_*. + // Constants from ConnectivityManager.TYPE_*. optional int32 type = 1; + // Full subscriber ID on eng builds. The IMSI is scrubbed on user & userdebug + // builds to only include the info about the GSM network operator (the info + // that uniquely identifies the subscriber is removed). optional string subscriber_id = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; + // Name of the network (eg: MyWifi). optional string network_id = 3 [ (android.privacy).dest = DEST_EXPLICIT ]; optional bool roaming = 4; diff --git a/core/proto/android/service/notification.proto b/core/proto/android/service/notification.proto index bcd7f29a2fcf..25059bea8bfd 100644 --- a/core/proto/android/service/notification.proto +++ b/core/proto/android/service/notification.proto @@ -59,7 +59,7 @@ message NotificationRecordProto { } optional State state = 2; optional int32 flags = 3; - optional string channelId = 4 [ (.android.privacy).dest = DEST_EXPLICIT ]; + optional string channel_id = 4 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional string sound = 5 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional .android.media.AudioAttributesProto audio_attributes = 6; optional bool can_vibrate = 7; @@ -88,6 +88,8 @@ message ManagedServiceInfoProto { message ManagedServicesProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Hard-coded string identifying what the service config is for + // (eg: "notification assistant" or "notification listener"). optional string caption = 1; message ServiceProto { @@ -147,8 +149,11 @@ enum ZenMode { message ConditionProto { option (android.msg_privacy).dest = DEST_EXPLICIT; + // The URI representing the rule being updated. optional string id = 1; + // A user visible description of the rule state. optional string summary = 2; + // Android generated strings that detail when ZenMode will end. optional string line_1 = 3; optional string line_2 = 4; optional int32 icon = 5 [ (android.privacy).dest = DEST_AUTOMATIC ]; @@ -189,7 +194,8 @@ message ZenRuleProto { (android.privacy).dest = DEST_AUTOMATIC ]; - // Required for automatic ZenRules. + // Required for automatic ZenRules. The condition's ID, which is the URI + // representing the rule being updated. optional string condition_id = 8; optional ConditionProto condition = 9; optional android.content.ComponentNameProto component = 10; diff --git a/core/proto/android/service/package.proto b/core/proto/android/service/package.proto index 88bb4a6f4295..4ecf52ce5012 100644 --- a/core/proto/android/service/package.proto +++ b/core/proto/android/service/package.proto @@ -48,7 +48,7 @@ message PackageServiceDumpProto { message SharedUserProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; - optional int32 user_id = 1; + optional int32 uid = 1; // Name of the shared UID. eg: android.uid.bluetooth optional string name = 2; } diff --git a/core/proto/android/service/print.proto b/core/proto/android/service/print.proto index 994814b6053b..a44915618b04 100644 --- a/core/proto/android/service/print.proto +++ b/core/proto/android/service/print.proto @@ -27,7 +27,7 @@ message PrintServiceDumpProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; // Each user has a separate printer state - repeated PrintUserStateProto userStates = 1; + repeated PrintUserStateProto user_states = 1; } message PrintUserStateProto { @@ -74,7 +74,8 @@ message PrintSpoolerInternalStateProto { // Print jobs repeated PrintJobInfoProto print_jobs = 1; - // Files used by these print jobs + // Files used by these print jobs. These are auto-generated UUIDs that are + // only valid while the print job is processed. repeated string print_job_files = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; // Approved print services @@ -125,7 +126,7 @@ message PrinterInfoProto { // The status of the printer optional Status status = 3 [ (android.privacy).dest = DEST_AUTOMATIC ]; - // The description of the printer + // The description of the printer, set by the user. optional string description = 4; // The capabilities of the printer @@ -310,7 +311,7 @@ message PrintDocumentInfoProto { // Type of content (see PrintDocumentInfo.ContentType) optional int32 content_type = 3; - // The size of the the document + // The size of the document optional int64 data_size = 4; } diff --git a/core/proto/android/service/procstats.proto b/core/proto/android/service/procstats.proto index 41282da81413..736871f6bd39 100644 --- a/core/proto/android/service/procstats.proto +++ b/core/proto/android/service/procstats.proto @@ -15,14 +15,14 @@ */ syntax = "proto2"; +package android.service.procstats; + option java_multiple_files = true; option java_outer_classname = "ProcessStatsServiceProto"; import "frameworks/base/core/proto/android/util/common.proto"; import "frameworks/base/libs/incident/proto/android/privacy.proto"; -package android.service.procstats; - /** * Data from ProcStatsService Dumpsys * diff --git a/core/proto/android/service/usb.proto b/core/proto/android/service/usb.proto index 9f58611397f9..ed040f43253a 100644 --- a/core/proto/android/service/usb.proto +++ b/core/proto/android/service/usb.proto @@ -78,16 +78,24 @@ message UsbAccessoryProto { optional string manufacturer = 1; optional string model = 2; + // For "classical" USB-accessories the manufacturer bakes this into the + // firmware of the device. If an Android phone is configured as accessory, the + // app that sets up the accessory side of the connection set this. Either way, + // these are part of the detection protocol, and so they cannot be user set or + // unique. optional string description = 3; optional string version = 4; optional string uri = 5 [ (android.privacy).dest = DEST_EXPLICIT ]; - optional string serial = 6 [ (android.privacy).dest = DEST_EXPLICIT ]; + // Non-resettable hardware ID. + optional string serial = 6 [ (android.privacy).dest = DEST_LOCAL ]; } message UsbDebuggingManagerProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional bool connected_to_adb = 1; + // A workstation that connects to the phone for debugging is identified by + // this key. optional string last_key_received = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; optional string user_keys = 3 [ (android.privacy).dest = DEST_LOCAL ]; optional string system_keys = 4 [ (android.privacy).dest = DEST_LOCAL ]; @@ -105,8 +113,12 @@ message UsbHostManagerProto { message UsbDeviceProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Generic USB name, not user-provided. optional string name = 1; + // ID specific to the vendor, not the device. optional int32 vendor_id = 2; + // ID of this product type: Each vendor gives each product a unique ID. E.g. + // all mice of the same model would have the same ID. optional int32 product_id = 3; optional int32 class = 4; optional int32 subclass = 5; @@ -114,14 +126,20 @@ message UsbDeviceProto { optional string manufacturer_name = 7; optional string product_name = 8; optional string version = 9; - optional string serial_number = 10 [ (android.privacy).dest = DEST_EXPLICIT ]; + // Non-resettable hardware ID. + optional string serial_number = 10 [ (android.privacy).dest = DEST_LOCAL ]; repeated UsbConfigurationProto configurations = 11; } message UsbConfigurationProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // A single USB device can have several configurations and the app accessing + // the USB device can switch between them. At any time only one can be active. + // Each configuration can present completely different interfaces end + // endpoints, i.e. a completely different behavior. optional int32 id = 1; + // Hardware-defined name, not set by the user. optional string name = 2; optional uint32 attributes = 3; optional int32 max_power = 4; @@ -131,6 +149,7 @@ message UsbConfigurationProto { message UsbInterfaceProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Hardware defined. This is the id used by the app to identify the interface. optional int32 id = 1; optional int32 alternate_settings = 2; optional string name = 3; @@ -145,6 +164,7 @@ message UsbEndPointProto { optional int32 endpoint_number = 1; optional android.service.UsbEndPointDirection direction = 2; + // The address of the endpoint. Needed to read and write to the endpoint. optional int32 address = 3; optional android.service.UsbEndPointType type = 4; optional uint32 attributes = 5; @@ -201,6 +221,7 @@ message UsbPortProto { MODE_DEBUG_ACCESSORY = 8; } + // ID of the port. A device (eg: Chromebooks) might have multiple ports. optional string id = 1; repeated Mode supported_modes = 2; } @@ -299,6 +320,7 @@ message UsbSettingsAccessoryPermissionProto { message UsbProfileGroupSettingsManagerProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // The user id of the personal profile if the device has a work profile. optional int32 parent_user_id = 1; repeated UsbSettingsDevicePreferenceProto device_preferences = 2; repeated UsbSettingsAccessoryPreferenceProto accessory_preferences = 3; @@ -314,6 +336,7 @@ message UsbSettingsDevicePreferenceProto { message UsbDeviceFilterProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // Mirrors the vendor_id of UsbDeviceProto. optional int32 vendor_id = 1; optional int32 product_id = 2; optional int32 class = 3; diff --git a/core/proto/android/view/display.proto b/core/proto/android/view/display.proto index 30046c3bdd81..fe8fed660dc2 100644 --- a/core/proto/android/view/display.proto +++ b/core/proto/android/view/display.proto @@ -22,6 +22,8 @@ option java_multiple_files = true; message DisplayProto { enum ColorMode { COLOR_MODE_INVALID = -1; + // The default or native gamut of the display. + COLOR_MODE_DEFAULT = 0; COLOR_MODE_BT601_625 = 1; COLOR_MODE_BT601_625_UNADJUSTED = 2; COLOR_MODE_BT601_525 = 3; diff --git a/core/proto/android/view/displayinfo.proto b/core/proto/android/view/displayinfo.proto index 8583955f174f..29757fc073f7 100644 --- a/core/proto/android/view/displayinfo.proto +++ b/core/proto/android/view/displayinfo.proto @@ -21,7 +21,8 @@ import "frameworks/base/libs/incident/proto/android/privacy.proto"; option java_multiple_files = true; -/* represents DisplayInfo */ +// Represents DisplayInfo. Describes the characteristics of a particular +// logical display. message DisplayInfoProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; @@ -29,5 +30,7 @@ message DisplayInfoProto { optional int32 logical_height = 2; optional int32 app_width = 3; optional int32 app_height = 4; - optional string name = 5 [ (.android.privacy).dest = DEST_EXPLICIT ]; + // The human-readable name of the display. + // Eg: "Built-in Screen" + optional string name = 5; } diff --git a/core/proto/android/view/remote_animation_target.proto b/core/proto/android/view/remote_animation_target.proto index 9139f25c1bd3..fb4d5bdd1a7f 100644 --- a/core/proto/android/view/remote_animation_target.proto +++ b/core/proto/android/view/remote_animation_target.proto @@ -15,7 +15,6 @@ */ syntax = "proto2"; -option java_package = "android.app"; option java_multiple_files = true; package android.view; @@ -26,7 +25,7 @@ import "frameworks/base/core/proto/android/graphics/rect.proto"; import "frameworks/base/core/proto/android/view/surfacecontrol.proto"; import "frameworks/base/libs/incident/proto/android/privacy.proto"; -/** Proto representation for RemoteAnimationTarget.java class. */ +/** Proto representation for android.view.RemoteAnimationTarget.java class. */ message RemoteAnimationTargetProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; @@ -35,8 +34,11 @@ message RemoteAnimationTargetProto { optional .android.view.SurfaceControlProto leash = 3; optional bool is_translucent = 4; optional .android.graphics.RectProto clip_rect = 5; - optional .android.graphics.RectProto contentInsets = 6; + optional .android.graphics.RectProto content_insets = 6; optional int32 prefix_order_index = 7; + // The source position of the app, in screen spaces coordinates. If the + // position of the leash is modified from the controlling app, any animation + // transform needs to be offset by this amount. optional .android.graphics.PointProto position = 8; optional .android.graphics.RectProto source_container_bounds = 9; optional .android.app.WindowConfigurationProto window_configuration = 10; diff --git a/core/proto/android/view/windowlayoutparams.proto b/core/proto/android/view/windowlayoutparams.proto index 586321d3fd49..8a011e9067d8 100644 --- a/core/proto/android/view/windowlayoutparams.proto +++ b/core/proto/android/view/windowlayoutparams.proto @@ -63,7 +63,7 @@ message WindowLayoutParamsProto { } optional NeedsMenuState needs_menu_key = 22; - optional .android.view.DisplayProto.ColorMode color_mode = 23; + optional DisplayProto.ColorMode color_mode = 23; optional uint32 flags = 24; optional uint32 private_flags = 26; optional uint32 system_ui_visibility_flags = 27; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index f9d81bad87df..5b36d7c3c64b 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -764,7 +764,8 @@ <!-- ====================================================================== --> <eat-comment /> - <!-- Used for runtime permissions related to the shared external storage. --> + <!-- Used for runtime permissions related to the shared external storage. + @deprecated replaced by new strongly-typed permission groups in Q. --> <permission-group android:name="android.permission-group.STORAGE" android:icon="@drawable/perm_group_storage" android:label="@string/permgrouplab_storage" @@ -792,13 +793,13 @@ grants your app this permission. If you don't need this permission, be sure your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> is 4 or higher. - <p>Protection level: dangerous + @deprecated replaced by new strongly-typed permission groups in Q. --> <permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:permissionGroup="android.permission-group.STORAGE" android:label="@string/permlab_sdcardRead" android:description="@string/permdesc_sdcardRead" - android:protectionLevel="dangerous" /> + android:protectionLevel="normal" /> <!-- Allows an application to write to external storage. <p class="note"><strong>Note:</strong> If <em>both</em> your <a @@ -813,14 +814,87 @@ read/write files in your application-specific directories returned by {@link android.content.Context#getExternalFilesDir} and {@link android.content.Context#getExternalCacheDir}. - <p>Protection level: dangerous + @deprecated replaced by new strongly-typed permission groups in Q. --> <permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:permissionGroup="android.permission-group.STORAGE" android:label="@string/permlab_sdcardWrite" android:description="@string/permdesc_sdcardWrite" + android:protectionLevel="normal" /> + + <!-- Runtime permission controlling access to the user's shared aural media + collection. --> + <permission-group android:name="android.permission-group.MEDIA_AURAL" + android:icon="@drawable/perm_group_aural" + android:label="@string/permgrouplab_aural" + android:description="@string/permgroupdesc_aural" + android:request="@string/permgrouprequest_aural" + android:priority="910" /> + + <!-- Allows an application to read the user's shared audio collection. --> + <permission android:name="android.permission.READ_MEDIA_AUDIO" + android:permissionGroup="android.permission-group.MEDIA_AURAL" + android:label="@string/permlab_audioRead" + android:description="@string/permdesc_audioRead" android:protectionLevel="dangerous" /> + <!-- Allows an application to modify the user's shared audio collection. --> + <permission android:name="android.permission.WRITE_MEDIA_AUDIO" + android:permissionGroup="android.permission-group.MEDIA_AURAL" + android:label="@string/permlab_audioWrite" + android:description="@string/permdesc_audioWrite" + android:protectionLevel="dangerous" /> + + <!-- Runtime permission controlling access to the user's shared visual media + collection, including images and videos. --> + <permission-group android:name="android.permission-group.MEDIA_VISUAL" + android:icon="@drawable/perm_group_visual" + android:label="@string/permgrouplab_visual" + android:description="@string/permgroupdesc_visual" + android:request="@string/permgrouprequest_visual" + android:priority="920" /> + + <!-- Allows an application to read the user's shared images collection. --> + <permission android:name="android.permission.READ_MEDIA_IMAGES" + android:permissionGroup="android.permission-group.MEDIA_VISUAL" + android:label="@string/permlab_imagesRead" + android:description="@string/permdesc_imagesRead" + android:protectionLevel="dangerous" /> + + <!-- Allows an application to modify the user's shared images collection. --> + <permission android:name="android.permission.WRITE_MEDIA_IMAGES" + android:permissionGroup="android.permission-group.MEDIA_VISUAL" + android:label="@string/permlab_imagesWrite" + android:description="@string/permdesc_imagesWrite" + android:protectionLevel="dangerous" /> + + <!-- Allows an application to read the user's shared video collection. --> + <permission android:name="android.permission.READ_MEDIA_VIDEO" + android:permissionGroup="android.permission-group.MEDIA_VISUAL" + android:label="@string/permlab_videoRead" + android:description="@string/permdesc_videoRead" + android:protectionLevel="dangerous" /> + + <!-- Allows an application to modify the user's shared video collection. --> + <permission android:name="android.permission.WRITE_MEDIA_VIDEO" + android:permissionGroup="android.permission-group.MEDIA_VISUAL" + android:label="@string/permlab_videoWrite" + android:description="@string/permdesc_videoWrite" + android:protectionLevel="dangerous" /> + + <!-- Allows an application to access any geographic locations persisted in the + user's shared collection. --> + <permission android:name="android.permission.ACCESS_MEDIA_LOCATION" + android:permissionGroup="android.permission-group.MEDIA_VISUAL" + android:label="@string/permlab_mediaLocation" + android:description="@string/permdesc_mediaLocation" + android:protectionLevel="dangerous" /> + + <!-- @hide @SystemApi + Allows an application to modify OBB files visible to other apps. --> + <permission android:name="android.permission.WRITE_OBB" + android:protectionLevel="signature|privileged" /> + <!-- ====================================================================== --> <!-- Permissions for accessing the device location --> <!-- ====================================================================== --> diff --git a/core/res/res/drawable/perm_group_aural.xml b/core/res/res/drawable/perm_group_aural.xml new file mode 100644 index 000000000000..0465e98c71c0 --- /dev/null +++ b/core/res/res/drawable/perm_group_aural.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M20,2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-2,5h-3v5.5c0,1.38 -1.12,2.5 -2.5,2.5S10,13.88 10,12.5s1.12,-2.5 2.5,-2.5c0.57,0 1.08,0.19 1.5,0.51V5h4v2zM4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6z"/> +</vector> diff --git a/core/res/res/drawable/perm_group_visual.xml b/core/res/res/drawable/perm_group_visual.xml new file mode 100644 index 000000000000..bf9a0b102f05 --- /dev/null +++ b/core/res/res/drawable/perm_group_visual.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z"/> +</vector> diff --git a/core/res/res/layout/resolver_different_item_header.xml b/core/res/res/layout/resolver_different_item_header.xml index 58891363e201..7d9ffd72870d 100644 --- a/core/res/res/layout/resolver_different_item_header.xml +++ b/core/res/res/layout/resolver_different_item_header.xml @@ -29,6 +29,5 @@ android:paddingEnd="16dp" android:paddingTop="8dp" android:paddingBottom="8dp" - android:background="@color/white" android:elevation="8dp" /> diff --git a/core/res/res/layout/resolver_list.xml b/core/res/res/layout/resolver_list.xml index 40c994196137..373354a6cad3 100644 --- a/core/res/res/layout/resolver_list.xml +++ b/core/res/res/layout/resolver_list.xml @@ -30,7 +30,7 @@ android:layout_height="wrap_content" android:layout_alwaysShow="true" android:elevation="8dp" - android:background="@color/white"> + android:background="?attr/colorBackgroundFloating"> <TextView android:id="@+id/profile_button" @@ -69,7 +69,7 @@ android:id="@+id/resolver_list" android:clipToPadding="false" android:scrollbarStyle="outsideOverlay" - android:background="@color/white" + android:background="?attr/colorBackgroundFloating" android:elevation="8dp" android:nestedScrollingEnabled="true" android:scrollIndicators="top|bottom" @@ -78,7 +78,7 @@ <TextView android:id="@+id/empty" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/white" + android:background="?attr/colorBackgroundFloating" android:elevation="8dp" android:layout_alwaysShow="true" android:text="@string/noApplications" @@ -99,7 +99,7 @@ android:orientation="horizontal" android:layoutDirection="locale" android:measureWithLargestChild="true" - android:background="@color/white" + android:background="?attr/colorBackgroundFloating" android:paddingTop="8dp" android:paddingBottom="8dp" android:paddingStart="12dp" diff --git a/core/res/res/layout/resolver_list_with_default.xml b/core/res/res/layout/resolver_list_with_default.xml index 8101183d4e24..740a7eb9374e 100644 --- a/core/res/res/layout/resolver_list_with_default.xml +++ b/core/res/res/layout/resolver_list_with_default.xml @@ -29,7 +29,7 @@ android:layout_height="wrap_content" android:layout_alwaysShow="true" android:orientation="vertical" - android:background="@color/white" + android:background="?attr/colorBackgroundFloating" android:elevation="8dp"> <LinearLayout @@ -111,7 +111,6 @@ android:paddingBottom="8dp" android:paddingStart="12dp" android:paddingEnd="12dp" - android:background="@color/white" android:elevation="8dp"> <Button @@ -151,7 +150,7 @@ android:id="@+id/resolver_list" android:clipToPadding="false" android:scrollbarStyle="outsideOverlay" - android:background="@color/white" + android:background="?attr/colorBackgroundFloating" android:elevation="8dp" android:nestedScrollingEnabled="true" android:divider="@null" /> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 73db3a1e19c9..c93d2668136a 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -133,7 +133,7 @@ <item msgid="4397097370387921767">"%s Wi-Fi-oproep"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Af"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Verkieslik Wi-Fi"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Verkies Wi-Fi"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Verkies mobiel"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Net Wi-Fi"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 14700131ba4e..6d5ee11e4ff1 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -138,7 +138,7 @@ </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"إيقاف"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"شبكة Wi-Fi مفضّلة"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"مفضَّل للجوّال"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"شبكة بيانات الجوال مفضَّلة"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Wi-Fi فقط"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: لم تتم إعادة التوجيه"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 949d20617063..61232e0cdd53 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1110,7 +1110,7 @@ <string name="aerr_restart" msgid="7581308074153624475">"অ্যাপ্লিকেশানটিকে আবার খুলুন"</string> <string name="aerr_report" msgid="5371800241488400617">"মতামত জানান"</string> <string name="aerr_close" msgid="2991640326563991340">"বন্ধ করুন"</string> - <string name="aerr_mute" msgid="1974781923723235953">"ডিভাইসটি পুনরায় আরম্ভ না হওয়া পর্যন্ত নিঃশব্দ করুন"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ডিভাইসটি পুনরায় আরম্ভ না হওয়া পর্যন্ত মিউট করুন"</string> <string name="aerr_wait" msgid="3199956902437040261">"অপেক্ষা করুন"</string> <string name="aerr_close_app" msgid="3269334853724920302">"অ্যাপ্লিকেশান বন্ধ করুন"</string> <string name="anr_title" msgid="4351948481459135709"></string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 6f7990907cf7..da816a1e9f61 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1100,7 +1100,7 @@ <string name="alwaysUse" msgid="4583018368000610438">"Utilitza-ho de manera predeterminada per a aquesta acció."</string> <string name="use_a_different_app" msgid="8134926230585710243">"Fes servir una altra aplicació"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Esborra els paràmetres predeterminats a Configuració del sistema > Aplicacions > Baixades."</string> - <string name="chooseActivity" msgid="7486876147751803333">"Tria una acció"</string> + <string name="chooseActivity" msgid="7486876147751803333">"Selecciona una acció"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Tria una aplicació per al dispositiu USB"</string> <string name="noApplications" msgid="2991814273936504689">"No hi ha cap aplicació que pugui dur a terme aquesta acció."</string> <string name="aerr_application" msgid="250320989337856518">"S\'ha aturat <xliff:g id="APPLICATION">%1$s</xliff:g>"</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index c4b74af171e7..36d0eb73e6f7 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -34,7 +34,7 @@ <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"Se ha producido un problema de conexión o el código MMI no es válido."</string> <string name="mmiFdnError" msgid="5224398216385316471">"La operación solo es válida para números de marcación fija."</string> - <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"No se puede cambiar la configuración de desvío de llamada desde tu teléfono mientras estás en itinerancia."</string> + <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"No se puede cambiar la configuración de desvío de llamadas desde tu teléfono mientras estás en itinerancia."</string> <string name="serviceEnabled" msgid="8147278346414714315">"El servicio se ha habilitado."</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"Se ha habilitado el servicio para:"</string> <string name="serviceDisabled" msgid="1937553226592516411">"El servicio se ha inhabilitado."</string> @@ -60,7 +60,7 @@ <string name="ClirMmi" msgid="7784673673446833091">"ID de emisor de llamada saliente"</string> <string name="ColpMmi" msgid="3065121483740183974">"ID de línea conectada"</string> <string name="ColrMmi" msgid="4996540314421889589">"Restricción de ID de línea conectada"</string> - <string name="CfMmi" msgid="5123218989141573515">"Desvío de llamada"</string> + <string name="CfMmi" msgid="5123218989141573515">"Desvío de llamadas"</string> <string name="CwMmi" msgid="9129678056795016867">"Llamada en espera"</string> <string name="BaMmi" msgid="455193067926770581">"Bloqueo de llamada"</string> <string name="PwdMmi" msgid="7043715687905254199">"Cambio de contraseña"</string> @@ -88,7 +88,7 @@ <string name="EmergencyCallWarningTitle" msgid="813380189532491336">"Servicio de llamadas de emergencia no disponible"</string> <string name="EmergencyCallWarningSummary" msgid="1899692069750260619">"No se pueden hacer llamadas de emergencia por Wi‑Fi"</string> <string name="notification_channel_network_alert" msgid="4427736684338074967">"Alertas"</string> - <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desvío de llamada"</string> + <string name="notification_channel_call_forward" msgid="2419697808481833249">"Desvío de llamadas"</string> <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"Modo de devolución de llamada de emergencia"</string> <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"Estado de los datos móviles"</string> <string name="notification_channel_sms" msgid="3441746047346135073">"Mensajes SMS"</string> @@ -133,7 +133,7 @@ <item msgid="4397097370387921767">"Llamadas Wi-Fi de %s"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivado"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferir Wi-Fi"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Dar preferencia a Wi-Fi"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Preferir datos móviles"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Solo conexión Wi-Fi"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: No desviada"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index e69584b8d829..4e15595e1f45 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -1278,7 +1278,7 @@ <string name="no_permissions" msgid="7283357728219338112">"Aucune autorisation requise"</string> <string name="perm_costs_money" msgid="4902470324142151116">"Cela peut engendrer des frais"</string> <string name="dlg_ok" msgid="7376953167039865701">"OK"</string> - <string name="usb_charging_notification_title" msgid="1595122345358177163">"Rechargement via USB de cet appareil"</string> + <string name="usb_charging_notification_title" msgid="1595122345358177163">"Appareil en charge via USB"</string> <string name="usb_supplying_notification_title" msgid="4631045789893086181">"Rechargement via USB de l\'appareil connecté"</string> <string name="usb_mtp_notification_title" msgid="4238227258391151029">"Transfert de fichiers via USB activé"</string> <string name="usb_ptp_notification_title" msgid="5425857879922006878">"PTP via USB activé"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index a5327f633c15..cf558400afad 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -130,7 +130,7 @@ </string-array> <string-array name="wfcSpnFormats"> <item msgid="6830082633573257149">"%s"</item> - <item msgid="4397097370387921767">"Chamadas wifi de %s"</item> + <item msgid="4397097370387921767">"Chamadas por wifi de %s"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Desactivado"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wifi preferida"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 116106297f75..96a03bfcbd06 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -1097,7 +1097,7 @@ <string name="whichImageCaptureApplication" msgid="3680261417470652882">"Լուսանկարել այս հավելվածի օգնությամբ"</string> <string name="whichImageCaptureApplicationNamed" msgid="8619384150737825003">"Լուսանկարել %1$s հավելվածի օգնությամբ"</string> <string name="whichImageCaptureApplicationLabel" msgid="6390303445371527066">"Լուսանկարել"</string> - <string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել լռելյայն այս գործողության համար:"</string> + <string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել ըստ կանխադրման այս գործողության համար:"</string> <string name="use_a_different_app" msgid="8134926230585710243">"Օգտագործել այլ հավելված"</string> <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Մաքրել լռելյայնը Համակարգի կարգավորումներ > Ծրագրեր >Ներբեռնված էջից:"</string> <string name="chooseActivity" msgid="7486876147751803333">"Ընտրել գործողություն"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 05f6ba15099b..5bc03cdb8e20 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -1305,7 +1305,7 @@ <string name="select_keyboard_layout_notification_message" msgid="8084622969903004900">"Tap untuk memilih bahasa dan tata letak"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> - <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Tampilkan di atas aplikasi lain"</string> + <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Tampilkan di atas apl lain"</string> <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"<xliff:g id="NAME">%s</xliff:g> ditampilkan di atas aplikasi lain"</string> <string name="alert_windows_notification_title" msgid="3697657294867638947">"<xliff:g id="NAME">%s</xliff:g> ditampilkan di atas aplikasi lain"</string> <string name="alert_windows_notification_message" msgid="8917232109522912560">"Jika Anda tidak ingin <xliff:g id="NAME">%s</xliff:g> menggunakan fitur ini, tap untuk membuka setelan dan menonaktifkannya."</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 22bd6c3250ef..d65e8865de9e 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -133,8 +133,8 @@ <item msgid="4397097370387921767">"ការហៅតាមរយៈ Wi-Fi %s"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"បិទ"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"គួរប្រើ Wi-Fi"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"បានជ្រើសរើសប្រើទិន្នន័យចល័ត"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi ជាអាទិភាព"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"ទិន្នន័យទូរសព្ទចល័តជាអាទិភាព"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Wi-Fi តែប៉ុណ្ណោះ"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> ៖ មិនបានបញ្ជូនបន្ត"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 58f8d56be4e2..c28e8e83e8c4 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -133,7 +133,7 @@ <item msgid="4397097370387921767">"%s ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"ಆಫ್"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ವೈ-ಫೈಗೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"ವೈ-ಫೈಗೆ ಆದ್ಯತೆ"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"ಮೊಬೈಲ್ಗೆ ಆದ್ಯತೆ"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"ವೈ-ಫೈ ಮಾತ್ರ"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ಫಾರ್ವರ್ಡ್ ಮಾಡಲಾಗಿಲ್ಲ"</string> diff --git a/core/res/res/values-mcc214-mnc01/config.xml b/core/res/res/values-mcc214-mnc01/config.xml index 24150a782d22..41e24d779362 100644 --- a/core/res/res/values-mcc214-mnc01/config.xml +++ b/core/res/res/values-mcc214-mnc01/config.xml @@ -40,4 +40,7 @@ <item>INTERNET,airtelnet.es,,,vodafone,vodafone,,,,,214,01,1,DUN</item> </string-array> + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">false</bool> + </resources> diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml index c819de2ba43c..0085a1b7e190 100644 --- a/core/res/res/values-mcc222-mnc10/config.xml +++ b/core/res/res/values-mcc222-mnc10/config.xml @@ -28,4 +28,8 @@ <string-array translatable="false" name="config_tether_apndata"> <item>Tethering Internet,web.omnitel.it,,,,,,,,,222,10,,DUN</item> </string-array> + + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">false</bool> + </resources> diff --git a/core/res/res/values-mcc234-mnc15/config.xml b/core/res/res/values-mcc234-mnc15/config.xml new file mode 100644 index 000000000000..84e779d240d1 --- /dev/null +++ b/core/res/res/values-mcc234-mnc15/config.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2018, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">false</bool> + +</resources> diff --git a/core/res/res/values-mcc234-mnc91/config.xml b/core/res/res/values-mcc234-mnc91/config.xml new file mode 100644 index 000000000000..84e779d240d1 --- /dev/null +++ b/core/res/res/values-mcc234-mnc91/config.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2018, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">false</bool> + +</resources> diff --git a/core/res/res/values-mcc262-mnc02/config.xml b/core/res/res/values-mcc262-mnc02/config.xml new file mode 100644 index 000000000000..84e779d240d1 --- /dev/null +++ b/core/res/res/values-mcc262-mnc02/config.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2018, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">false</bool> + +</resources> diff --git a/core/res/res/values-mcc313-mnc100-as/strings.xml b/core/res/res/values-mcc313-mnc100-as/strings.xml new file mode 100644 index 000000000000..350757ca43a4 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-as/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ফ\'নৰ অনুমতি নাই MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-az/strings.xml b/core/res/res/values-mcc313-mnc100-az/strings.xml new file mode 100644 index 000000000000..44796dfc1b95 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-az/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"MM#6 telefonu dəstəklənmir"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-b+sr+Latn/strings.xml b/core/res/res/values-mcc313-mnc100-b+sr+Latn/strings.xml new file mode 100644 index 000000000000..d5bf39e51327 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-b+sr+Latn/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Telefon nije dozvoljen MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-be/strings.xml b/core/res/res/values-mcc313-mnc100-be/strings.xml new file mode 100644 index 000000000000..c9f4633c3ba2 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-be/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Тэлефон не дапускаецца MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-bn/strings.xml b/core/res/res/values-mcc313-mnc100-bn/strings.xml new file mode 100644 index 000000000000..5292241b0745 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-bn/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ফোন অনুমোদিত নয় MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-bs/strings.xml b/core/res/res/values-mcc313-mnc100-bs/strings.xml new file mode 100644 index 000000000000..d5bf39e51327 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-bs/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Telefon nije dozvoljen MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-en-rAU/strings.xml b/core/res/res/values-mcc313-mnc100-en-rAU/strings.xml new file mode 100644 index 000000000000..f1a361146a97 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-en-rAU/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Phone not allowed MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-en-rCA/strings.xml b/core/res/res/values-mcc313-mnc100-en-rCA/strings.xml new file mode 100644 index 000000000000..f1a361146a97 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-en-rCA/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Phone not allowed MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-en-rIN/strings.xml b/core/res/res/values-mcc313-mnc100-en-rIN/strings.xml new file mode 100644 index 000000000000..f1a361146a97 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-en-rIN/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Phone not allowed MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-en-rXC/strings.xml b/core/res/res/values-mcc313-mnc100-en-rXC/strings.xml new file mode 100644 index 000000000000..8a8bf7e02106 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-en-rXC/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Phone not allowed MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-et/strings.xml b/core/res/res/values-mcc313-mnc100-et/strings.xml new file mode 100644 index 000000000000..83cfbafd87cc --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-et/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Telefon pole lubatud MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-eu/strings.xml b/core/res/res/values-mcc313-mnc100-eu/strings.xml new file mode 100644 index 000000000000..028ca37f03ec --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-eu/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Telefonoa ez da onartzen MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-fr-rCA/strings.xml b/core/res/res/values-mcc313-mnc100-fr-rCA/strings.xml new file mode 100644 index 000000000000..89c50ea24f3c --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-fr-rCA/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Téléphone non autorisé MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-gl/strings.xml b/core/res/res/values-mcc313-mnc100-gl/strings.xml new file mode 100644 index 000000000000..04390a0b5f84 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-gl/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Non se admite o teléfono MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-gu/strings.xml b/core/res/res/values-mcc313-mnc100-gu/strings.xml new file mode 100644 index 000000000000..6291d574c7ed --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-gu/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"MM#6 ફોનની મંજૂરી નથી"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-hy/strings.xml b/core/res/res/values-mcc313-mnc100-hy/strings.xml new file mode 100644 index 000000000000..62acde34ced8 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-hy/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Հեռախոսի օգտագործումն արգելված է (MM#6)"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-is/strings.xml b/core/res/res/values-mcc313-mnc100-is/strings.xml new file mode 100644 index 000000000000..3ad7b3c3d11b --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-is/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Sími ekki leyfður MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ka/strings.xml b/core/res/res/values-mcc313-mnc100-ka/strings.xml new file mode 100644 index 000000000000..a063fc4843da --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ka/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ტელეფონი დაუშვებელია MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-kk/strings.xml b/core/res/res/values-mcc313-mnc100-kk/strings.xml new file mode 100644 index 000000000000..0562a2f0024a --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-kk/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Телефон пайдалануға болмайды MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-km/strings.xml b/core/res/res/values-mcc313-mnc100-km/strings.xml new file mode 100644 index 000000000000..74e607b6045f --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-km/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"មិនអនុញ្ញាតចំពោះទូរសព្ទទេ MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-kn/strings.xml b/core/res/res/values-mcc313-mnc100-kn/strings.xml new file mode 100644 index 000000000000..e287270ff7ba --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-kn/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ಫೋನ್ MM#6 ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ky/strings.xml b/core/res/res/values-mcc313-mnc100-ky/strings.xml new file mode 100644 index 000000000000..8c08c4ffb73c --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ky/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Телефонду колдонууга тыюу салынган MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-lo/strings.xml b/core/res/res/values-mcc313-mnc100-lo/strings.xml new file mode 100644 index 000000000000..793b87bee136 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-lo/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ໂທລະສັບ MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-mk/strings.xml b/core/res/res/values-mcc313-mnc100-mk/strings.xml new file mode 100644 index 000000000000..0b403e99491c --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-mk/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Телефонот не е дозволен MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ml/strings.xml b/core/res/res/values-mcc313-mnc100-ml/strings.xml new file mode 100644 index 000000000000..1adc4556562b --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ml/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ഫോൺ അനുവദനീയമല്ല MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-mn/strings.xml b/core/res/res/values-mcc313-mnc100-mn/strings.xml new file mode 100644 index 000000000000..5d5fbff3e9d4 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-mn/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Утсыг зөвшөөрөөгүй MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-mr/strings.xml b/core/res/res/values-mcc313-mnc100-mr/strings.xml new file mode 100644 index 000000000000..32c69463e263 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-mr/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"फोन MM#6 ला अनुमती देत नाही"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-my/strings.xml b/core/res/res/values-mcc313-mnc100-my/strings.xml new file mode 100644 index 000000000000..7de66f763ea1 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-my/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ne/strings.xml b/core/res/res/values-mcc313-mnc100-ne/strings.xml new file mode 100644 index 000000000000..0fb9d648c336 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ne/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"फोनलाई अनुमति छैन MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-or/strings.xml b/core/res/res/values-mcc313-mnc100-or/strings.xml new file mode 100644 index 000000000000..a64ee94d284c --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-or/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ଫୋନ୍ର ଅନୁମତି ନାହିଁ MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-pa/strings.xml b/core/res/res/values-mcc313-mnc100-pa/strings.xml new file mode 100644 index 000000000000..87b2e4742310 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-pa/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ਫ਼ੋਨ ਨੂੰ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-pt-rBR/strings.xml b/core/res/res/values-mcc313-mnc100-pt-rBR/strings.xml new file mode 100644 index 000000000000..f80f618e60af --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-pt-rBR/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Smartphone não permitido MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-si/strings.xml b/core/res/res/values-mcc313-mnc100-si/strings.xml new file mode 100644 index 000000000000..9493af0bcaf0 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-si/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"දුරකථනය MM#6 ඉඩ නොදේ"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-sq/strings.xml b/core/res/res/values-mcc313-mnc100-sq/strings.xml new file mode 100644 index 000000000000..237a4a447d00 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-sq/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Telefoni nuk lejohet MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-sw/strings.xml b/core/res/res/values-mcc313-mnc100-sw/strings.xml new file mode 100644 index 000000000000..a7574fbbfce1 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-sw/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Simu hairuhusiwi MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ta/strings.xml b/core/res/res/values-mcc313-mnc100-ta/strings.xml new file mode 100644 index 000000000000..7ef5ea9cef2d --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ta/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ஃபோன் அனுமதிக்கப்படவில்லை MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-te/strings.xml b/core/res/res/values-mcc313-mnc100-te/strings.xml new file mode 100644 index 000000000000..8908fb72f499 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-te/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"ఫోన్ అనుమతించబడదు MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-ur/strings.xml b/core/res/res/values-mcc313-mnc100-ur/strings.xml new file mode 100644 index 000000000000..d670d0e60858 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-ur/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"فون کی اجازت نہیں ہے MM#6"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-uz/strings.xml b/core/res/res/values-mcc313-mnc100-uz/strings.xml new file mode 100644 index 000000000000..202a30ca7445 --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-uz/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"Chaqiruvlar taqiqlangan (MM#6)"</string> +</resources> diff --git a/core/res/res/values-mcc313-mnc100-zh-rHK/strings.xml b/core/res/res/values-mcc313-mnc100-zh-rHK/strings.xml new file mode 100644 index 000000000000..db85730e3aed --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-zh-rHK/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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 xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="mmcc_illegal_me" msgid="7320955531336937252">"不允許手機 MM#6"</string> +</resources> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index f311ab372b55..f9049f55e81c 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -30,7 +30,7 @@ <string name="untitled" msgid="4638956954852782576">"<ခေါင်းစဉ်မဲ့>"</string> <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ဖုန်းနံပါတ်မရှိပါ)"</string> <string name="unknownName" msgid="6867811765370350269">"မသိရ"</string> - <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"အသံစာပို့စနစ်"</string> + <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"အသံမေးလ်"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"ဆက်သွယ်မှုဆိုင်ရာပြသနာ သို့မဟုတ် မမှန်ကန်သောMMIကုတ်"</string> <string name="mmiFdnError" msgid="5224398216385316471">"သတ်မှတ်ခေါ်ဆိုနိုင်သောနံပါတ်များထံသာ ကန့်သတ်ထားသည်"</string> diff --git a/core/res/res/values-night/colors.xml b/core/res/res/values-night/colors.xml index 688040ba0cc1..351f8ea8643e 100644 --- a/core/res/res/values-night/colors.xml +++ b/core/res/res/values-night/colors.xml @@ -19,12 +19,12 @@ <resources> <!-- The primary text color if the text is on top of a dark background. This is also affects colorized notifications with dark backgrounds. --> - <color name="notification_primary_text_color_dark">#dadada</color> + <color name="notification_primary_text_color_dark">#ddffffff</color> <!-- The secondary text color if the text is on top of a dark background. --> - <color name="notification_secondary_text_color_dark">#dadada</color> + <color name="notification_secondary_text_color_dark">#ddffffff</color> - <color name="notification_default_color_dark">#dadada</color> + <color name="notification_default_color_dark">#ddffffff</color> <!-- The background color of a notification card. --> <color name="notification_material_background_color">@*android:color/material_grey_900</color> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 99ee6d4ab715..0981442ffd0b 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -1166,7 +1166,7 @@ <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Stille beltoon ingesteld"</string> <string name="volume_call" msgid="3941680041282788711">"Volume inkomend gesprek"</string> <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volume tijdens gesprek in Bluetooth-modus"</string> - <string name="volume_alarm" msgid="1985191616042689100">"Alarmvolume"</string> + <string name="volume_alarm" msgid="1985191616042689100">"Wekkervolume"</string> <string name="volume_notification" msgid="2422265656744276715">"Meldingsvolume"</string> <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 188e3e46b5e1..76e5529876bd 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -136,7 +136,7 @@ </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Wył."</string> <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Preferuj Wi-Fi"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Preferowane mobilne"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Preferowane komórkowe"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Tylko Wi-Fi"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: nieprzekierowane"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 6c0391c0276b..1260627f7efa 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -33,7 +33,7 @@ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correio de voz"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"Problema de conexão ou código MMI inválido."</string> - <string name="mmiFdnError" msgid="5224398216385316471">"A operação é limitada somente a números de chamadas fixas."</string> + <string name="mmiFdnError" msgid="5224398216385316471">"A operação é limitada somente a números de discagem fixa."</string> <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"Não é possível alterar as configurações de encaminhamento de chamada do seu smartphone em roaming."</string> <string name="serviceEnabled" msgid="8147278346414714315">"O serviço foi ativado."</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"O serviço foi ativado para:"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 6c0391c0276b..1260627f7efa 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -33,7 +33,7 @@ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Correio de voz"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"Problema de conexão ou código MMI inválido."</string> - <string name="mmiFdnError" msgid="5224398216385316471">"A operação é limitada somente a números de chamadas fixas."</string> + <string name="mmiFdnError" msgid="5224398216385316471">"A operação é limitada somente a números de discagem fixa."</string> <string name="mmiErrorWhileRoaming" msgid="762488890299284230">"Não é possível alterar as configurações de encaminhamento de chamada do seu smartphone em roaming."</string> <string name="serviceEnabled" msgid="8147278346414714315">"O serviço foi ativado."</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"O serviço foi ativado para:"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 0edf58cada67..f39044565c51 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -60,7 +60,7 @@ <string name="ClirMmi" msgid="7784673673446833091">"வெளிசெல்லும் அழைப்பாளர் ஐடி"</string> <string name="ColpMmi" msgid="3065121483740183974">"இணைக்கப்பட்ட லைன் ஐடி"</string> <string name="ColrMmi" msgid="4996540314421889589">"இணைக்கப்பட்ட லைன் ஐடியை வரம்பிடல்"</string> - <string name="CfMmi" msgid="5123218989141573515">"அழைப்புப் பகிர்வு"</string> + <string name="CfMmi" msgid="5123218989141573515">"அழைப்பு திருப்பிவிடுதல்"</string> <string name="CwMmi" msgid="9129678056795016867">"அழைப்பு காத்திருப்பு"</string> <string name="BaMmi" msgid="455193067926770581">"அழைப்புத் தவிர்ப்பு"</string> <string name="PwdMmi" msgid="7043715687905254199">"கடவுச்சொல்லை மாற்று"</string> @@ -88,7 +88,7 @@ <string name="EmergencyCallWarningTitle" msgid="813380189532491336">"அவசர அழைப்பைச் செய்ய முடியாது"</string> <string name="EmergencyCallWarningSummary" msgid="1899692069750260619">"வைஃபை மூலம் அவசர அழைப்புகளைச் செய்ய முடியாது"</string> <string name="notification_channel_network_alert" msgid="4427736684338074967">"விழிப்பூட்டல்கள்"</string> - <string name="notification_channel_call_forward" msgid="2419697808481833249">"அழைப்புப் பகிர்வு"</string> + <string name="notification_channel_call_forward" msgid="2419697808481833249">"அழைப்பு திருப்பிவிடுதல்"</string> <string name="notification_channel_emergency_callback" msgid="6686166232265733921">"அவசரகாலத் திரும்ப அழைக்கும் பயன்முறை"</string> <string name="notification_channel_mobile_data_status" msgid="4575131690860945836">"மொபைல் டேட்டாவின் நிலை"</string> <string name="notification_channel_sms" msgid="3441746047346135073">"SMS செய்திகள்"</string> @@ -272,7 +272,7 @@ <string name="permgrouprequest_contacts" msgid="6032805601881764300">"தொடர்புகளை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> <string name="permgrouplab_location" msgid="7275582855722310164">"இருப்பிடம்"</string> <string name="permgroupdesc_location" msgid="1346617465127855033">"இந்தச் சாதனத்தின் இருப்பிடத்தை அறிந்து கொள்ள"</string> - <string name="permgrouprequest_location" msgid="3788275734953323491">"இந்தச் சாதனத்தின் இருப்பிடத்தை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> + <string name="permgrouprequest_location" msgid="3788275734953323491">"இந்தச் சாதனத்தின் இருப்பிடத்தை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> <string name="permgrouprequestdetail_location" msgid="1113400215566814664">"இந்த ஆப்ஸைப் பயன்படுத்தும் சமயத்தில் மட்டுமே, இது உங்கள் இருப்பிடத்தை அணுகும்."</string> <string name="permgroupbackgroundrequest_location" msgid="8461841153030844390">"இதன் இருப்பிடத்தை எப்போதுமே <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> அணுக அனுமதிக்கவா?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="1715668276378108654">"இந்த ஆப்ஸைப் பயன்படுத்தாத சமயங்களில் கூட, இது உங்கள் இருப்பிடத்தை அணுகும்."</string> @@ -281,7 +281,7 @@ <string name="permgrouprequest_calendar" msgid="289900767793189421">"கேலெண்டரை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string> <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS அனுப்பலாம், வந்த SMSகளைப் பார்க்கலாம்"</string> - <string name="permgrouprequest_sms" msgid="7168124215838204719">"மெசேஜ்களை அனுப்பவும், அவற்றைப் பார்க்கவும் <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> + <string name="permgrouprequest_sms" msgid="7168124215838204719">"மெசேஜ்களை அனுப்பவும், பார்க்கவும் <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> <string name="permgrouplab_storage" msgid="1971118770546336966">"சேமிப்பிடம்"</string> <string name="permgroupdesc_storage" msgid="637758554581589203">"உங்கள் சாதனத்தில் உள்ள படங்கள், மீடியா மற்றும் கோப்புகளை அணுக வேண்டும்"</string> <string name="permgrouprequest_storage" msgid="7885942926944299560">"உங்கள் சாதனத்திலுள்ள படங்கள், மீடியா, ஃபைல்கள் ஆகியவற்றை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> @@ -296,7 +296,7 @@ <string name="permgrouprequest_calllog" msgid="8487355309583773267">"உங்கள் மொபைல் அழைப்புப் பதிவுகளை அணுக, <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"ஃபோன்"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"யாரையும் தொலைபேசியில் அழைக்கலாம்"</string> - <string name="permgrouprequest_phone" msgid="9166979577750581037">"மொபைல் அழைப்புகள் செய்யவும், அவற்றை நிர்வகிக்கவும், <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> + <string name="permgrouprequest_phone" msgid="9166979577750581037">"மொபைல் அழைப்புகள் செய்யவும், அவற்றை நிர்வகிக்கவும், <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ஆப்ஸை அனுமதிக்கவா?"</string> <string name="permgrouplab_sensors" msgid="416037179223226722">"உடல் சென்சார்கள்"</string> <string name="permgroupdesc_sensors" msgid="7147968539346634043">"உங்கள் உடல் இயக்கம் பற்றி உணர்விகள் கூறும் தகவலைப் பார்க்கலாம்"</string> <string name="permgrouprequest_sensors" msgid="6349806962814556786">"உங்கள் உடலியக்கக் குறிகள் பற்றிய சென்சார் தரவை அணுகுவதற்கு <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> பயன்பாட்டை அனுமதிக்கவா?"</string> diff --git a/core/res/res/values-television/themes_device_defaults.xml b/core/res/res/values-television/themes_device_defaults.xml index e380a7bb88a6..293591ac4ab7 100644 --- a/core/res/res/values-television/themes_device_defaults.xml +++ b/core/res/res/values-television/themes_device_defaults.xml @@ -18,4 +18,5 @@ <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Leanback.Light.Dialog.Alert" /> <style name="Theme.DeviceDefault.Autofill" parent="Theme.Material.Autofill" /> <style name="Theme.DeviceDefault.Autofill.Save" parent="Theme.Material.Autofill.Save" /> + <style name="Theme.DeviceDefault.Resolver" parent="Theme.Leanback.Resolver" /> </resources> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index a71bc4a29325..54f92e1a3ea8 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -133,7 +133,7 @@ <item msgid="4397097370387921767">"%s Kablosuz Çağrı"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Kapalı"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Kablosuz bağlantı tercih edildi"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Kablosuz bağlantı tercihli"</string> <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Mobil tercihli"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Yalnızca kablosuz"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönlendirilmedi"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 577e6b9b564b..1d4c07426ccf 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -133,8 +133,8 @@ <item msgid="4397097370387921767">"%s Wi-Fi qo‘ng‘iroqlar"</item> </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"O‘chiq"</string> - <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi afzal ko‘rilsin"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Mobil internet ustivorligi"</string> + <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi afzalligi"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Mobil internet afzalligi"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Faqat Wi-Fi"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yo‘naltirilmadi"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> @@ -1161,7 +1161,7 @@ <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g> jarayoni o‘zi uchun ajratilgan <xliff:g id="SIZE">%2$s</xliff:g> xotira chegarasidan o‘tib ketdi. Ilova dasturchisi bilan ulashishingiz uchun hip-damp ma’lumotlari yig‘ilib qoldi. Ehtiyot bo\'ling: ushbu hip-dampda ilova uchun foydalanishga ruxsat berilgan shaxsiy ma’lumotlaringiz bo‘lishi mumkin."</string> <string name="sendText" msgid="5209874571959469142">"Matn uchun amalni tanlash"</string> <string name="volume_ringtone" msgid="6885421406845734650">"Jiringlaganda tovush balandligi"</string> - <string name="volume_music" msgid="5421651157138628171">"Multimedia ovozi"</string> + <string name="volume_music" msgid="5421651157138628171">"Multimedia tovushi"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth orqali ijro etilmoqda"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Ovozsiz rejim tanlandi"</string> <string name="volume_call" msgid="3941680041282788711">"Suhbat vaqtidagi tovush balandligi"</string> @@ -1172,7 +1172,7 @@ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth tovushi"</string> <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Rington balandligi"</string> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Qo‘ng‘iroq tovushi balandligi"</string> - <string name="volume_icon_description_media" msgid="4217311719665194215">"Multimedia ovozi"</string> + <string name="volume_icon_description_media" msgid="4217311719665194215">"Multimedia tovushi"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Eslatma tovushi"</string> <string name="ringtone_default" msgid="3789758980357696936">"Standart rington"</string> <string name="ringtone_default_with_actual" msgid="1767304850491060581">"Standart (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 7b603fbeea82..a45118f472bd 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -134,7 +134,7 @@ </string-array> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Tắt"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Ưu tiên Wi-Fi"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Được ưu tiên trên thiết bị di động"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Ưu tiên dữ liệu di động"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Chỉ Wi-Fi"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Không được chuyển tiếp"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index c8343e2c5cb1..b15c9c5f5e18 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2105,6 +2105,9 @@ <!-- Type of the long press sensor. Empty if long press is not supported. --> <string name="config_dozeLongPressSensorType" translatable="false"></string> + <!-- Type of the reach sensor. Empty if reach is not supported. --> + <string name="config_dozeReachSensorType" translatable="false"></string> + <!-- Control whether the always on display mode is available. This should only be enabled on devices where the display has been tuned to be power efficient in DOZE and/or DOZE_SUSPEND states. --> @@ -2356,6 +2359,9 @@ <!-- Whether safe headphone volume is enabled or not (country specific). --> <bool name="config_safe_media_volume_enabled">true</bool> + <!-- Whether safe headphone volume warning dialog is disabled on Vol+ (operator specific). --> + <bool name="config_safe_media_disable_on_volume_up">true</bool> + <!-- Set to true if the wifi display supports compositing content stored in gralloc protected buffers. For this to be true, there must exist a protected hardware path for surface flinger to composite and send diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 15331d6475c3..dfd5e8143d53 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -745,6 +745,22 @@ <string name="permgrouprequest_sensors">Allow <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access sensor data about your vital signs?</string> + <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permgrouplab_aural">Music</string> + <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permgroupdesc_aural">access your music</string> + <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] --> + <string name="permgrouprequest_aural">Allow + <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your music?</string> + + <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permgrouplab_visual">Photos & Videos</string> + <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permgroupdesc_visual">access your photos & videos</string> + <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] --> + <string name="permgrouprequest_visual">Allow + <b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g></b> to access your photos & videos?</string> + <!-- Title for the capability of an accessibility service to retrieve window content. --> <string name="capability_title_canRetrieveWindowContent">Retrieve window content</string> <!-- Description for the capability of an accessibility service to retrieve window content. --> @@ -1349,6 +1365,38 @@ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_useFingerprint">Allows the app to use fingerprint hardware for authentication</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_audioRead">read your music collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_audioRead">Allows the app to read your music collection.</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_audioWrite">modify your music collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_audioWrite">Allows the app to modify your music collection.</string> + + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_videoRead">read your video collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_videoRead">Allows the app to read your video collection.</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_videoWrite">modify your video collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_videoWrite">Allows the app to modify your video collection.</string> + + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_imagesRead">read your photo collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_imagesRead">Allows the app to read your photo collection.</string> + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_imagesWrite">modify your photo collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_imagesWrite">Allows the app to modify your photo collection.</string> + + <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_mediaLocation">read locations from your media collection</string> + <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permdesc_mediaLocation">Allows the app to read locations from your media collection.</string> + <!-- Message shown during fingerprint acquisision when the fingerprint cannot be recognized --> <string name="fingerprint_acquired_partial">Partial fingerprint detected. Please try again.</string> <!-- Message shown during fingerprint acquisision when the fingerprint cannot be recognized --> @@ -4936,10 +4984,29 @@ by an autofill service, and the service does knows what the activity represents, and it represents 3 types of data (for example, username, password and credit card info) [CHAR LIMIT=NONE] --> <string name="autofill_save_title_with_3types">Save <xliff:g id="type" example="Username">%1$s</xliff:g>, <xliff:g id="type" example="Password">%2$s</xliff:g>, and <xliff:g id="type" example="Credit Card">%3$s</xliff:g> to <b><xliff:g id="label" example="MyPass">%4$s</xliff:g></b>?</string> + + <!-- Title for the autofill update dialog shown when the the contents of the activity can be updated + by an autofill service, but the service does not know what the activity represents [CHAR LIMIT=NONE] --> + <string name="autofill_update_title">Update to <b><xliff:g id="label" example="MyPass">%1$s</xliff:g></b>?</string> + <!-- Title for the autofill update dialog shown when the the contents of the activity can be updated + by an autofill service, and the service does knows what the activity represents (for example, credit card info) [CHAR LIMIT=NONE] --> + <string name="autofill_update_title_with_type">Update <xliff:g id="type" example="Credit Card">%1$s</xliff:g> to <b><xliff:g id="label" example="MyPass">%2$s</xliff:g></b>?</string> + <!-- Title for the autofill update dialog shown when the the contents of the activity can be updated + by an autofill service, and the service does knows what the activity represents, and it represents 2 types of + data (for example, password and credit card info) [CHAR LIMIT=NONE] --> + <string name="autofill_update_title_with_2types">Update <xliff:g id="type" example="Password">%1$s</xliff:g> and <xliff:g id="type" example="Credit Card">%2$s</xliff:g> to <b><xliff:g id="label" example="MyPass">%3$s</xliff:g></b>?</string> + <!-- Title for the autofill update dialog shown when the the contents of the activity can be updated + by an autofill service, and the service does knows what the activity represents, and it represents 3 types of + data (for example, username, password and credit card info) [CHAR LIMIT=NONE] --> + <string name="autofill_update_title_with_3types">Update <xliff:g id="type" example="Username">%1$s</xliff:g>, <xliff:g id="type" example="Password">%2$s</xliff:g>, and <xliff:g id="type" example="Credit Card">%3$s</xliff:g> to <b><xliff:g id="label" example="MyPass">%4$s</xliff:g></b>?</string> + + <!-- Label for the autofill save button [CHAR LIMIT=NONE] --> <string name="autofill_save_yes">Save</string> <!-- Label for the autofill cancel button [CHAR LIMIT=NONE] --> <string name="autofill_save_no">No thanks</string> + <!-- Label for the autofill update button [CHAR LIMIT=NONE] --> + <string name="autofill_update_yes">Update</string> <!-- Label for the type of data being saved for autofill when it represent user credentials with a password [CHAR LIMIT=NONE] --> <string name="autofill_save_type_password">password</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 2f45cce18ff2..2271baa6b705 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -309,6 +309,7 @@ <java-symbol type="bool" name="config_allowAnimationsInLowPowerMode" /> <java-symbol type="bool" name="config_useDevInputEventForAudioJack" /> <java-symbol type="bool" name="config_safe_media_volume_enabled" /> + <java-symbol type="bool" name="config_safe_media_disable_on_volume_up" /> <java-symbol type="bool" name="config_camera_sound_forced" /> <java-symbol type="bool" name="config_dontPreferApn" /> <java-symbol type="bool" name="config_restartRadioAfterProvisioning" /> @@ -3108,6 +3109,11 @@ <java-symbol type="plurals" name="autofill_picker_some_suggestions" /> <java-symbol type="string" name="autofill" /> <java-symbol type="string" name="autofill_picker_accessibility_title " /> + <java-symbol type="string" name="autofill_update_title" /> + <java-symbol type="string" name="autofill_update_title_with_type" /> + <java-symbol type="string" name="autofill_update_title_with_2types" /> + <java-symbol type="string" name="autofill_update_title_with_3types" /> + <java-symbol type="string" name="autofill_update_yes" /> <java-symbol type="string" name="autofill_save_accessibility_title " /> <java-symbol type="string" name="autofill_save_title" /> <java-symbol type="string" name="autofill_save_title_with_type" /> @@ -3256,6 +3262,7 @@ <java-symbol type="array" name="config_hideWhenDisabled_packageNames" /> <java-symbol type="string" name="config_dozeLongPressSensorType" /> + <java-symbol type="string" name="config_dozeReachSensorType" /> <java-symbol type="array" name="config_allowedGlobalInstantAppSettings" /> <java-symbol type="array" name="config_allowedSystemInstantAppSettings" /> diff --git a/core/res/res/values/themes_leanback.xml b/core/res/res/values/themes_leanback.xml index 82cf288f4629..f71df9fb4807 100644 --- a/core/res/res/values/themes_leanback.xml +++ b/core/res/res/values/themes_leanback.xml @@ -93,4 +93,41 @@ <item name="textColorPrimary">@color/primary_text_leanback_formwizard_dark</item> <item name="windowAnimationStyle">@style/WindowAnimationStyle.Leanback.Setup</item> </style> + + <!-- Theme used for the intent picker activity. --> + <style name="Theme.Leanback.Resolver" parent="Theme.Material"> + <item name="windowEnterTransition">@empty</item> + <item name="windowExitTransition">@empty</item> + <item name="windowIsTranslucent">true</item> + <item name="windowNoTitle">true</item> + <item name="windowBackground">@color/transparent</item> + <item name="backgroundDimEnabled">true</item> + <item name="statusBarColor">@color/transparent</item> + <item name="windowContentOverlay">@null</item> + <item name="colorControlActivated">?attr/colorControlHighlight</item> + <item name="listPreferredItemPaddingStart">?attr/dialogPreferredPadding</item> + <item name="listPreferredItemPaddingEnd">?attr/dialogPreferredPadding</item> + + <!-- Dialog attributes --> + <item name="dialogCornerRadius">@dimen/config_dialogCornerRadius</item> + <item name="alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item> + + <!-- Button styles --> + <item name="buttonCornerRadius">@dimen/config_buttonCornerRadius</item> + <item name="buttonBarButtonStyle">@style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item> + + <!-- Color palette --> + <item name="colorPrimary">@color/primary_device_default_dark</item> + <item name="colorPrimaryDark">@color/primary_dark_device_default_dark</item> + <item name="colorAccent">@color/accent_device_default_dark</item> + <item name="colorError">@color/error_color_device_default_dark</item> + + <!-- Progress bar attributes --> + <item name="colorProgressBackgroundNormal">@color/config_progress_background_tint</item> + <item name="progressBarCornerRadius">@dimen/config_progressBarCornerRadius</item> + + <!-- Toolbar attributes --> + <item name="toolbarStyle">@style/Widget.DeviceDefault.Toolbar</item> + </style> + </resources> diff --git a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java index eaabdc8b815c..dd34f1fdde1f 100644 --- a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java +++ b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java @@ -23,9 +23,12 @@ import static org.junit.Assert.assertTrue; import android.content.Context; import android.content.res.AssetManager; +import android.graphics.fonts.FontFamily; +import android.graphics.fonts.SystemFonts; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import android.text.FontConfig; import android.util.ArrayMap; import org.junit.After; @@ -112,7 +115,9 @@ public class TypefaceSystemFallbackTest { } catch (IOException e) { throw new RuntimeException(e); } - Typeface.buildSystemFallback(TEST_FONTS_XML, TEST_FONT_DIR, fontMap, fallbackMap); + final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(TEST_FONTS_XML, + TEST_FONT_DIR, fallbackMap); + Typeface.initSystemDefaultTypefaces(fontMap, fallbackMap, aliases); } @Test @@ -120,10 +125,14 @@ public class TypefaceSystemFallbackTest { final ArrayMap<String, Typeface> fontMap = new ArrayMap<>(); final ArrayMap<String, FontFamily[]> fallbackMap = new ArrayMap<>(); - Typeface.buildSystemFallback(SYSTEM_FONTS_XML, SYSTEM_FONT_DIR, fontMap, fallbackMap); + final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(SYSTEM_FONTS_XML, + SYSTEM_FONT_DIR, fallbackMap); - assertFalse(fontMap.isEmpty()); + assertNotNull(aliases); assertFalse(fallbackMap.isEmpty()); + + Typeface.initSystemDefaultTypefaces(fontMap, fallbackMap, aliases); + assertFalse(fontMap.isEmpty()); } @Test diff --git a/core/tests/coretests/src/android/text/FontFallbackSetup.java b/core/tests/coretests/src/android/text/FontFallbackSetup.java index ced74eebe47b..6c34043c1995 100644 --- a/core/tests/coretests/src/android/text/FontFallbackSetup.java +++ b/core/tests/coretests/src/android/text/FontFallbackSetup.java @@ -19,8 +19,9 @@ package android.text; import android.annotation.NonNull; import android.content.Context; import android.content.res.AssetManager; -import android.graphics.FontFamily; import android.graphics.Typeface; +import android.graphics.fonts.FontFamily; +import android.graphics.fonts.SystemFonts; import android.support.test.InstrumentationRegistry; import android.util.ArrayMap; @@ -73,7 +74,9 @@ public class FontFallbackSetup implements AutoCloseable { } final ArrayMap<String, FontFamily[]> fallbackMap = new ArrayMap<>(); - Typeface.buildSystemFallback(testFontsXml, mTestFontsDir, mFontMap, fallbackMap); + final FontConfig.Alias[] aliases = SystemFonts.buildSystemFallback(testFontsXml, + mTestFontsDir, fallbackMap); + Typeface.initSystemDefaultTypefaces(mFontMap, fallbackMap, aliases); } @NonNull diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java index ec80d20e3179..7f675ffffee5 100644 --- a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java +++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java @@ -501,7 +501,7 @@ public class AccessibilityCacheTest { } @Test - public void addNode_whenNodeBeingReplacedIsOwnGrandparent_doesntCrash() { + public void addNode_whenNodeBeingReplacedIsOwnGrandparentWithTwoChildren_doesntCrash() { AccessibilityNodeInfo parentNodeInfo = getNodeWithA11yAndWindowId(PARENT_VIEW_ID, WINDOW_ID_1); parentNodeInfo.addChild(getMockViewWithA11yAndWindowIds(CHILD_VIEW_ID, WINDOW_ID_1)); @@ -525,6 +525,29 @@ public class AccessibilityCacheTest { } @Test + public void addNode_whenNodeBeingReplacedIsOwnGrandparentWithOneChild_doesntCrash() { + AccessibilityNodeInfo parentNodeInfo = + getNodeWithA11yAndWindowId(PARENT_VIEW_ID, WINDOW_ID_1); + parentNodeInfo.addChild(getMockViewWithA11yAndWindowIds(CHILD_VIEW_ID, WINDOW_ID_1)); + AccessibilityNodeInfo childNodeInfo = + getNodeWithA11yAndWindowId(CHILD_VIEW_ID, WINDOW_ID_1); + childNodeInfo.setParent(getMockViewWithA11yAndWindowIds(PARENT_VIEW_ID, WINDOW_ID_1)); + childNodeInfo.addChild(getMockViewWithA11yAndWindowIds(PARENT_VIEW_ID, WINDOW_ID_1)); + + AccessibilityNodeInfo replacementParentNodeInfo = + getNodeWithA11yAndWindowId(PARENT_VIEW_ID, WINDOW_ID_1); + try { + mAccessibilityCache.add(parentNodeInfo); + mAccessibilityCache.add(childNodeInfo); + mAccessibilityCache.add(replacementParentNodeInfo); + } finally { + parentNodeInfo.recycle(); + childNodeInfo.recycle(); + replacementParentNodeInfo.recycle(); + } + } + + @Test public void testCacheCriticalEventList_doesntLackEvents() { for (int i = 0; i < 32; i++) { int eventType = 1 << i; diff --git a/data/etc/platform.xml b/data/etc/platform.xml index b3f05dc9fc98..6f52fbd1b4f5 100644 --- a/data/etc/platform.xml +++ b/data/etc/platform.xml @@ -182,11 +182,11 @@ code to link against. --> <library name="android.test.base" - file="/system/framework/android.test.base.jar" /> + file="/system/framework/android.test.base.impl.jar" /> <library name="android.test.mock" - file="/system/framework/android.test.mock.jar" /> + file="/system/framework/android.test.mock.impl.jar" /> <library name="android.test.runner" - file="/system/framework/android.test.runner.jar" /> + file="/system/framework/android.test.runner.impl.jar" /> <!-- These are the standard packages that are white-listed to always have internet access while in power save mode, even if they aren't in the foreground. --> diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index f6587d38d857..616a8d64b5b6 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -126,6 +126,7 @@ applications that come with the platform <privapp-permissions package="com.android.omadm.service"> <permission name="android.permission.CHANGE_CONFIGURATION"/> <permission name="android.permission.CONNECTIVITY_INTERNAL"/> + <permission name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.WRITE_APN_SETTINGS"/> diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 522d7a51e69b..7fa748461c2d 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -28,13 +28,13 @@ import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.content.res.AssetManager; import android.graphics.fonts.FontVariationAxis; +import android.graphics.fonts.SystemFonts; import android.net.Uri; import android.provider.FontRequest; import android.provider.FontsContract; import android.text.FontConfig; import android.util.ArrayMap; import android.util.Base64; -import android.util.Log; import android.util.LongSparseArray; import android.util.LruCache; import android.util.SparseArray; @@ -47,12 +47,9 @@ import dalvik.annotation.optimization.CriticalNative; import libcore.util.NativeAllocationRegistry; -import org.xmlpull.v1.XmlPullParserException; - import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Retention; @@ -121,10 +118,14 @@ public class Typeface { private static final Object sDynamicCacheLock = new Object(); static Typeface sDefaultTypeface; + + // Following two fields are not used but left for hiddenapi private list @UnsupportedAppUsage static final Map<String, Typeface> sSystemFontMap; + + // We cannot support sSystemFallbackMap since we will migrate to public FontFamily API. @UnsupportedAppUsage - static final Map<String, FontFamily[]> sSystemFallbackMap; + static final Map<String, FontFamily[]> sSystemFallbackMap = Collections.emptyMap(); /** * @hide @@ -566,11 +567,7 @@ public class Typeface { return null; } - Typeface base = sSystemFontMap.get(mFallbackFamilyName); - if (base == null) { - base = sDefaultTypeface; - } - + final Typeface base = getSystemDefaultTypeface(mFallbackFamilyName); if (mWeight == RESOLVE_BY_FONT_TABLE && mItalic == RESOLVE_BY_FONT_TABLE) { return base; } @@ -687,7 +684,7 @@ public class Typeface { * @return The best matching typeface. */ public static Typeface create(String familyName, @Style int style) { - return create(sSystemFontMap.get(familyName), style); + return create(getSystemDefaultTypeface(familyName), style); } /** @@ -897,7 +894,9 @@ public class Typeface { * Create a new typeface from an array of font families. * * @param families array of font families + * @deprecated */ + @Deprecated @UnsupportedAppUsage private static Typeface createFromFamilies(FontFamily[] families) { long[] ptrArray = new long[families.length]; @@ -909,6 +908,21 @@ public class Typeface { } /** + * Create a new typeface from an array of android.graphics.fonts.FontFamily. + * + * @param families array of font families + */ + private static Typeface createFromFamilies( + @Nullable android.graphics.fonts.FontFamily[] families) { + final long[] ptrArray = new long[families.length]; + for (int i = 0; i < families.length; ++i) { + ptrArray[i] = families[i].getNativePtr(); + } + return new Typeface(nativeCreateFromArray(ptrArray, + RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); + } + + /** * This method is used by supportlib-v27. * TODO: Remove private API use in supportlib: http://b/72665240 */ @@ -934,16 +948,13 @@ public class Typeface { @UnsupportedAppUsage private static Typeface createFromFamiliesWithDefault(FontFamily[] families, String fallbackName, int weight, int italic) { - FontFamily[] fallback = sSystemFallbackMap.get(fallbackName); - if (fallback == null) { - fallback = sSystemFallbackMap.get(DEFAULT_FAMILY); - } + android.graphics.fonts.FontFamily[] fallback = SystemFonts.getSystemFallback(fallbackName); long[] ptrArray = new long[families.length + fallback.length]; for (int i = 0; i < families.length; i++) { ptrArray[i] = families[i].mNativePtr; } for (int i = 0; i < fallback.length; i++) { - ptrArray[i + families.length] = fallback[i].mNativePtr; + ptrArray[i + families.length] = fallback[i].getNativePtr(); } return new Typeface(nativeCreateFromArray(ptrArray, weight, italic)); } @@ -961,191 +972,41 @@ public class Typeface { mWeight = nativeGetWeight(ni); } - private static @Nullable ByteBuffer mmap(String fullPath) { - try (FileInputStream file = new FileInputStream(fullPath)) { - final FileChannel fileChannel = file.getChannel(); - final long fontSize = fileChannel.size(); - return fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fontSize); - } catch (IOException e) { - Log.e(TAG, "Error mapping font file " + fullPath); - return null; - } - } - - private static @Nullable FontFamily createFontFamily( - String familyName, List<FontConfig.Font> fonts, String[] languageTags, int variant, - Map<String, ByteBuffer> cache, String fontDir) { - final FontFamily family = new FontFamily(languageTags, variant); - for (int i = 0; i < fonts.size(); i++) { - final FontConfig.Font font = fonts.get(i); - final String fullPath = fontDir + font.getFontName(); - ByteBuffer buffer = cache.get(fullPath); - if (buffer == null) { - if (cache.containsKey(fullPath)) { - continue; // Already failed to mmap. Skip it. - } - buffer = mmap(fullPath); - cache.put(fullPath, buffer); - if (buffer == null) { - continue; - } - } - if (!family.addFontFromBuffer(buffer, font.getTtcIndex(), font.getAxes(), - font.getWeight(), font.isItalic() ? STYLE_ITALIC : STYLE_NORMAL)) { - Log.e(TAG, "Error creating font " + fullPath + "#" + font.getTtcIndex()); - } - } - if (!family.freeze()) { - Log.e(TAG, "Unable to load Family: " + familyName + " : " - + Arrays.toString(languageTags)); - return null; - } - return family; + private static Typeface getSystemDefaultTypeface(@NonNull String familyName) { + Typeface tf = sSystemFontMap.get(familyName); + return tf == null ? Typeface.DEFAULT : tf; } - private static void pushFamilyToFallback(FontConfig.Family xmlFamily, - ArrayMap<String, ArrayList<FontFamily>> fallbackMap, - Map<String, ByteBuffer> cache, - String fontDir) { - - final String[] languageTags = xmlFamily.getLanguages(); - final int variant = xmlFamily.getVariant(); - - final ArrayList<FontConfig.Font> defaultFonts = new ArrayList<>(); - final ArrayMap<String, ArrayList<FontConfig.Font>> specificFallbackFonts = new ArrayMap<>(); - - // Collect default fallback and specific fallback fonts. - for (final FontConfig.Font font : xmlFamily.getFonts()) { - final String fallbackName = font.getFallbackFor(); - if (fallbackName == null) { - defaultFonts.add(font); - } else { - ArrayList<FontConfig.Font> fallback = specificFallbackFonts.get(fallbackName); - if (fallback == null) { - fallback = new ArrayList<>(); - specificFallbackFonts.put(fallbackName, fallback); - } - fallback.add(font); - } + /** @hide */ + @VisibleForTesting + public static void initSystemDefaultTypefaces(Map<String, Typeface> systemFontMap, + Map<String, android.graphics.fonts.FontFamily[]> fallbacks, + FontConfig.Alias[] aliases) { + for (Map.Entry<String, android.graphics.fonts.FontFamily[]> entry : fallbacks.entrySet()) { + systemFontMap.put(entry.getKey(), createFromFamilies(entry.getValue())); } - final FontFamily defaultFamily = defaultFonts.isEmpty() ? null : createFontFamily( - xmlFamily.getName(), defaultFonts, languageTags, variant, cache, fontDir); - - // Insert family into fallback map. - for (int i = 0; i < fallbackMap.size(); i++) { - final ArrayList<FontConfig.Font> fallback = - specificFallbackFonts.get(fallbackMap.keyAt(i)); - if (fallback == null) { - if (defaultFamily != null) { - fallbackMap.valueAt(i).add(defaultFamily); - } - } else { - final FontFamily family = createFontFamily( - xmlFamily.getName(), fallback, languageTags, variant, cache, fontDir); - if (family != null) { - fallbackMap.valueAt(i).add(family); - } else if (defaultFamily != null) { - fallbackMap.valueAt(i).add(defaultFamily); - } else { - // There is no valid for for default fallback. Ignore. - } - } + for (FontConfig.Alias alias : aliases) { + final Typeface base = systemFontMap.get(alias.getToName()); + final int weight = alias.getWeight(); + final Typeface newFace = weight == 400 ? base : + new Typeface(nativeCreateWeightAlias(base.native_instance, weight)); + systemFontMap.put(alias.getName(), newFace); } } - /** - * Build the system fallback from xml file. - * - * @param xmlPath A full path string to the fonts.xml file. - * @param fontDir A full path string to the system font directory. This must end with - * slash('/'). - * @param fontMap An output system font map. Caller must pass empty map. - * @param fallbackMap An output system fallback map. Caller must pass empty map. - * @hide - */ - @VisibleForTesting + // Following methods are left for layoutlib + // TODO: Remove once layoutlib stop calling buildSystemFallback + /** @hide */ public static void buildSystemFallback(String xmlPath, String fontDir, ArrayMap<String, Typeface> fontMap, ArrayMap<String, FontFamily[]> fallbackMap) { - try { - final FileInputStream fontsIn = new FileInputStream(xmlPath); - final FontConfig fontConfig = FontListParser.parse(fontsIn); - - final HashMap<String, ByteBuffer> bufferCache = new HashMap<String, ByteBuffer>(); - final FontConfig.Family[] xmlFamilies = fontConfig.getFamilies(); - - final ArrayMap<String, ArrayList<FontFamily>> fallbackListMap = new ArrayMap<>(); - // First traverse families which have a 'name' attribute to create fallback map. - for (final FontConfig.Family xmlFamily : xmlFamilies) { - final String familyName = xmlFamily.getName(); - if (familyName == null) { - continue; - } - final FontFamily family = createFontFamily( - xmlFamily.getName(), Arrays.asList(xmlFamily.getFonts()), - xmlFamily.getLanguages(), xmlFamily.getVariant(), bufferCache, fontDir); - if (family == null) { - continue; - } - final ArrayList<FontFamily> fallback = new ArrayList<>(); - fallback.add(family); - fallbackListMap.put(familyName, fallback); - } - - // Then, add fallback fonts to the each fallback map. - for (int i = 0; i < xmlFamilies.length; i++) { - final FontConfig.Family xmlFamily = xmlFamilies[i]; - // The first family (usually the sans-serif family) is always placed immediately - // after the primary family in the fallback. - if (i == 0 || xmlFamily.getName() == null) { - pushFamilyToFallback(xmlFamily, fallbackListMap, bufferCache, fontDir); - } - } - - // Build the font map and fallback map. - for (int i = 0; i < fallbackListMap.size(); i++) { - final String fallbackName = fallbackListMap.keyAt(i); - final List<FontFamily> familyList = fallbackListMap.valueAt(i); - final FontFamily[] families = familyList.toArray(new FontFamily[familyList.size()]); - - fallbackMap.put(fallbackName, families); - final long[] ptrArray = new long[families.length]; - for (int j = 0; j < families.length; j++) { - ptrArray[j] = families[j].mNativePtr; - } - fontMap.put(fallbackName, new Typeface(nativeCreateFromArray( - ptrArray, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE))); - } - - // Insert alias to font maps. - for (final FontConfig.Alias alias : fontConfig.getAliases()) { - Typeface base = fontMap.get(alias.getToName()); - Typeface newFace = base; - int weight = alias.getWeight(); - if (weight != 400) { - newFace = new Typeface(nativeCreateWeightAlias(base.native_instance, weight)); - } - fontMap.put(alias.getName(), newFace); - } - } catch (RuntimeException e) { - Log.w(TAG, "Didn't create default family (most likely, non-Minikin build)", e); - // TODO: normal in non-Minikin case, remove or make error when Minikin-only - } catch (FileNotFoundException e) { - Log.e(TAG, "Error opening " + xmlPath, e); - } catch (IOException e) { - Log.e(TAG, "Error reading " + xmlPath, e); - } catch (XmlPullParserException e) { - Log.e(TAG, "XML parse exception for " + xmlPath, e); - } } static { - final ArrayMap<String, Typeface> systemFontMap = new ArrayMap<>(); - final ArrayMap<String, FontFamily[]> systemFallbackMap = new ArrayMap<>(); - buildSystemFallback("/system/etc/fonts.xml", "/system/fonts/", systemFontMap, - systemFallbackMap); + final HashMap<String, Typeface> systemFontMap = new HashMap<>(); + initSystemDefaultTypefaces(systemFontMap, SystemFonts.getRawSystemFallbackMap(), + SystemFonts.getAliases()); sSystemFontMap = Collections.unmodifiableMap(systemFontMap); - sSystemFallbackMap = Collections.unmodifiableMap(systemFallbackMap); setDefault(sSystemFontMap.get(DEFAULT_FAMILY)); diff --git a/graphics/java/android/graphics/fonts/FontFamily.java b/graphics/java/android/graphics/fonts/FontFamily.java index 74b58ea76b2f..dc213ea56f99 100644 --- a/graphics/java/android/graphics/fonts/FontFamily.java +++ b/graphics/java/android/graphics/fonts/FontFamily.java @@ -18,6 +18,9 @@ package android.graphics.fonts; import android.annotation.IntRange; import android.annotation.NonNull; +import android.annotation.Nullable; +import android.text.FontConfig; +import android.text.TextUtils; import com.android.internal.util.Preconditions; @@ -107,11 +110,25 @@ public class FontFamily { * @return a font family */ public @NonNull FontFamily build() { + return build(null, FontConfig.Family.VARIANT_DEFAULT); + } + + /** @hide */ + public @NonNull FontFamily build(@Nullable String[] langTags, int variant) { final long builderPtr = nInitBuilder(); for (int i = 0; i < mFonts.size(); ++i) { nAddFont(builderPtr, mFonts.get(i).getNativePtr()); } - final long ptr = nBuild(builderPtr); + final String langString; + if (langTags == null || langTags.length == 0) { + langString = null; + } else if (langTags.length == 1) { + langString = langTags[0]; + } else { + langString = TextUtils.join(",", langTags); + } + + final long ptr = nBuild(builderPtr, langString, variant); final FontFamily family = new FontFamily(mFonts, ptr); sFamilyRegistory.registerNativeAllocation(family, ptr); return family; @@ -124,7 +141,7 @@ public class FontFamily { private static native long nInitBuilder(); @CriticalNative private static native void nAddFont(long builderPtr, long fontPtr); - private static native long nBuild(long builderPtr); + private static native long nBuild(long builderPtr, String langTags, int variant); @CriticalNative private static native long nGetReleaseNativeFamily(); } diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java new file mode 100644 index 000000000000..bd49130c11c6 --- /dev/null +++ b/graphics/java/android/graphics/fonts/SystemFonts.java @@ -0,0 +1,260 @@ +/* + * 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.graphics.fonts; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.graphics.FontListParser; +import android.text.FontConfig; +import android.util.ArrayMap; +import android.util.Log; + +import com.android.internal.annotations.VisibleForTesting; + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Provides the system font configurations. + * @hide + */ +public class SystemFonts { + private static final String TAG = "SystemFonts"; + private static final String DEFAULT_FAMILY = "sans-serif"; + + private SystemFonts() {} // Do not instansiate. + + static final Map<String, FontFamily[]> sSystemFallbackMap; + static final FontConfig.Alias[] sAliases; + + /** + * Returns fallback list for the given family name. + * + * If no fallback found for the given family name, returns fallback for the default family. + * + * @param familyName family name, e.g. "serif" + */ + public static @NonNull FontFamily[] getSystemFallback(@Nullable String familyName) { + final FontFamily[] families = sSystemFallbackMap.get(familyName); + return families == null ? sSystemFallbackMap.get(DEFAULT_FAMILY) : families; + } + + /** + * Returns raw system fallback map. + * + * This method is intended to be used only by Typeface static initializer. + */ + public static @NonNull Map<String, FontFamily[]> getRawSystemFallbackMap() { + return sSystemFallbackMap; + } + + /** + * Returns a list of aliases. + * + * This method is intended to be used only by Typeface static initializer. + */ + public static @NonNull FontConfig.Alias[] getAliases() { + return sAliases; + } + + private static @Nullable ByteBuffer mmap(@NonNull String fullPath) { + try (FileInputStream file = new FileInputStream(fullPath)) { + final FileChannel fileChannel = file.getChannel(); + final long fontSize = fileChannel.size(); + return fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fontSize); + } catch (IOException e) { + Log.e(TAG, "Error mapping font file " + fullPath); + return null; + } + } + + private static void pushFamilyToFallback(@NonNull FontConfig.Family xmlFamily, + @NonNull ArrayMap<String, ArrayList<FontFamily>> fallbackMap, + @NonNull Map<String, ByteBuffer> cache, + @NonNull String fontDir) { + + final String[] languageTags = xmlFamily.getLanguages(); + final int variant = xmlFamily.getVariant(); + + final ArrayList<FontConfig.Font> defaultFonts = new ArrayList<>(); + final ArrayMap<String, ArrayList<FontConfig.Font>> specificFallbackFonts = new ArrayMap<>(); + + // Collect default fallback and specific fallback fonts. + for (final FontConfig.Font font : xmlFamily.getFonts()) { + final String fallbackName = font.getFallbackFor(); + if (fallbackName == null) { + defaultFonts.add(font); + } else { + ArrayList<FontConfig.Font> fallback = specificFallbackFonts.get(fallbackName); + if (fallback == null) { + fallback = new ArrayList<>(); + specificFallbackFonts.put(fallbackName, fallback); + } + fallback.add(font); + } + } + + final FontFamily defaultFamily = defaultFonts.isEmpty() ? null : createFontFamily( + xmlFamily.getName(), defaultFonts, languageTags, variant, cache, fontDir); + + // Insert family into fallback map. + for (int i = 0; i < fallbackMap.size(); i++) { + final ArrayList<FontConfig.Font> fallback = + specificFallbackFonts.get(fallbackMap.keyAt(i)); + if (fallback == null) { + if (defaultFamily != null) { + fallbackMap.valueAt(i).add(defaultFamily); + } + } else { + final FontFamily family = createFontFamily( + xmlFamily.getName(), fallback, languageTags, variant, cache, fontDir); + if (family != null) { + fallbackMap.valueAt(i).add(family); + } else if (defaultFamily != null) { + fallbackMap.valueAt(i).add(defaultFamily); + } else { + // There is no valid for for default fallback. Ignore. + } + } + } + } + + private static @Nullable FontFamily createFontFamily(@NonNull String familyName, + @NonNull List<FontConfig.Font> fonts, + @NonNull String[] languageTags, + @FontConfig.Family.Variant int variant, + @NonNull Map<String, ByteBuffer> cache, + @NonNull String fontDir) { + if (fonts.size() == 0) { + return null; + } + + FontFamily.Builder b = null; + for (int i = 0; i < fonts.size(); i++) { + final FontConfig.Font fontConfig = fonts.get(i); + final String fullPath = fontDir + fontConfig.getFontName(); + ByteBuffer buffer = cache.get(fullPath); + if (buffer == null) { + if (cache.containsKey(fullPath)) { + continue; // Already failed to mmap. Skip it. + } + buffer = mmap(fullPath); + cache.put(fullPath, buffer); + if (buffer == null) { + continue; + } + } + + final Font font = new Font.Builder(buffer) + .setWeight(fontConfig.getWeight()) + .setItalic(fontConfig.isItalic()) + .setTtcIndex(fontConfig.getTtcIndex()) + .setFontVariationSettings(fontConfig.getAxes()) + .build(); + + if (b == null) { + b = new FontFamily.Builder(font); + } else { + b.addFont(font); + } + } + return b == null ? null : b.build(languageTags, variant); + } + + /** + * Build the system fallback from xml file. + * + * @param xmlPath A full path string to the fonts.xml file. + * @param fontDir A full path string to the system font directory. This must end with + * slash('/'). + * @param fallbackMap An output system fallback map. Caller must pass empty map. + * @return a list of aliases + * @hide + */ + @VisibleForTesting + public static FontConfig.Alias[] buildSystemFallback(@NonNull String xmlPath, + @NonNull String fontDir, + @NonNull ArrayMap<String, FontFamily[]> fallbackMap) { + try { + final FileInputStream fontsIn = new FileInputStream(xmlPath); + final FontConfig fontConfig = FontListParser.parse(fontsIn); + + final HashMap<String, ByteBuffer> bufferCache = new HashMap<String, ByteBuffer>(); + final FontConfig.Family[] xmlFamilies = fontConfig.getFamilies(); + + final ArrayMap<String, ArrayList<FontFamily>> fallbackListMap = new ArrayMap<>(); + // First traverse families which have a 'name' attribute to create fallback map. + for (final FontConfig.Family xmlFamily : xmlFamilies) { + final String familyName = xmlFamily.getName(); + if (familyName == null) { + continue; + } + final FontFamily family = createFontFamily( + xmlFamily.getName(), Arrays.asList(xmlFamily.getFonts()), + xmlFamily.getLanguages(), xmlFamily.getVariant(), bufferCache, fontDir); + if (family == null) { + continue; + } + final ArrayList<FontFamily> fallback = new ArrayList<>(); + fallback.add(family); + fallbackListMap.put(familyName, fallback); + } + + // Then, add fallback fonts to the each fallback map. + for (int i = 0; i < xmlFamilies.length; i++) { + final FontConfig.Family xmlFamily = xmlFamilies[i]; + // The first family (usually the sans-serif family) is always placed immediately + // after the primary family in the fallback. + if (i == 0 || xmlFamily.getName() == null) { + pushFamilyToFallback(xmlFamily, fallbackListMap, bufferCache, fontDir); + } + } + + // Build the font map and fallback map. + for (int i = 0; i < fallbackListMap.size(); i++) { + final String fallbackName = fallbackListMap.keyAt(i); + final List<FontFamily> familyList = fallbackListMap.valueAt(i); + final FontFamily[] families = familyList.toArray(new FontFamily[familyList.size()]); + + fallbackMap.put(fallbackName, families); + } + + return fontConfig.getAliases(); + } catch (IOException | XmlPullParserException e) { + Log.e(TAG, "Failed initialize system fallbacks.", e); + return null; + } + } + + static { + final ArrayMap<String, FontFamily[]> systemFallbackMap = new ArrayMap<>(); + sAliases = buildSystemFallback("/system/etc/fonts.xml", "/system/fonts/", + systemFallbackMap); + sSystemFallbackMap = Collections.unmodifiableMap(systemFallbackMap); + } + +} diff --git a/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java index 57db20be1145..7216a2201c88 100644 --- a/keystore/java/android/security/Credentials.java +++ b/keystore/java/android/security/Credentials.java @@ -16,6 +16,7 @@ package android.security; +import android.annotation.UnsupportedAppUsage; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -172,6 +173,7 @@ public class Credentials { private static Credentials singleton; + @UnsupportedAppUsage public static Credentials getInstance() { if (singleton == null) { singleton = new Credentials(); @@ -179,6 +181,7 @@ public class Credentials { return singleton; } + @UnsupportedAppUsage public void unlock(Context context) { try { Intent intent = new Intent(UNLOCK_ACTION); @@ -197,6 +200,7 @@ public class Credentials { } } + @UnsupportedAppUsage public void install(Context context, KeyPair pair) { try { Intent intent = KeyChain.createInstallIntent(); @@ -208,6 +212,7 @@ public class Credentials { } } + @UnsupportedAppUsage public void install(Context context, String type, byte[] value) { try { Intent intent = KeyChain.createInstallIntent(); diff --git a/keystore/java/android/security/GateKeeper.java b/keystore/java/android/security/GateKeeper.java index 03df5de9b484..a50ff7984341 100644 --- a/keystore/java/android/security/GateKeeper.java +++ b/keystore/java/android/security/GateKeeper.java @@ -16,6 +16,7 @@ package android.security; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; @@ -42,6 +43,7 @@ public abstract class GateKeeper { return service; } + @UnsupportedAppUsage public static long getSecureUserId() throws IllegalStateException { try { return getService().getSecureUserId(UserHandle.myUserId()); diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java index 4f4ca3f47009..0a4ac8cc5fec 100644 --- a/keystore/java/android/security/KeyStore.java +++ b/keystore/java/android/security/KeyStore.java @@ -16,6 +16,7 @@ package android.security; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.Application; @@ -57,6 +58,7 @@ public class KeyStore { private static final String TAG = "KeyStore"; // ResponseCodes - see system/security/keystore/include/keystore/keystore.h + @UnsupportedAppUsage public static final int NO_ERROR = 1; public static final int LOCKED = 2; public static final int UNINITIALIZED = 3; @@ -129,7 +131,9 @@ public class KeyStore { // States public enum State { + @UnsupportedAppUsage UNLOCKED, + @UnsupportedAppUsage LOCKED, UNINITIALIZED }; @@ -146,6 +150,7 @@ public class KeyStore { mContext = getApplicationContext(); } + @UnsupportedAppUsage public static Context getApplicationContext() { Application application = ActivityThread.currentApplication(); if (application == null) { @@ -155,6 +160,7 @@ public class KeyStore { return application; } + @UnsupportedAppUsage public static KeyStore getInstance() { IKeystoreService keystore = IKeystoreService.Stub.asInterface(ServiceManager .getService("android.security.keystore")); @@ -168,6 +174,7 @@ public class KeyStore { return mToken; } + @UnsupportedAppUsage public State state(int userId) { final int ret; try { @@ -185,6 +192,7 @@ public class KeyStore { } } + @UnsupportedAppUsage public State state() { return state(UserHandle.myUserId()); } @@ -197,6 +205,7 @@ public class KeyStore { return get(key, uid, false); } + @UnsupportedAppUsage public byte[] get(String key) { return get(key, UID_SELF); } @@ -247,6 +256,7 @@ public class KeyStore { } } + @UnsupportedAppUsage public boolean delete(String key) { return delete(key, UID_SELF); } @@ -283,6 +293,7 @@ public class KeyStore { return list(prefix, UID_SELF); } + @UnsupportedAppUsage public boolean reset() { try { return mBinder.reset() == NO_ERROR; @@ -333,6 +344,7 @@ public class KeyStore { } } + @UnsupportedAppUsage public boolean unlock(String password) { return unlock(UserHandle.getUserId(Process.myUid()), password); } @@ -349,6 +361,7 @@ public class KeyStore { } } + @UnsupportedAppUsage public boolean isEmpty() { return isEmpty(UserHandle.myUserId()); } @@ -818,6 +831,7 @@ public class KeyStore { * Returns a {@link KeyStoreException} corresponding to the provided keystore/keymaster error * code. */ + @UnsupportedAppUsage public static KeyStoreException getKeyStoreException(int errorCode) { if (errorCode > 0) { // KeyStore layer error diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java index 419eb24e1cc1..953cef7d30ff 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java @@ -301,6 +301,9 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { KeyStoreCryptoOperationUtils.getRandomBytesToMixIntoKeystoreRng( mRng, (mKeySizeBits + 7) / 8); int flags = 0; + if (spec.isStrongBoxBacked()) { + flags |= KeyStore.FLAG_STRONGBOX; + } String keyAliasInKeystore = Credentials.USER_PRIVATE_KEY + spec.getKeystoreAlias(); KeyCharacteristics resultingKeyCharacteristics = new KeyCharacteristics(); boolean success = false; @@ -314,8 +317,12 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { flags, resultingKeyCharacteristics); if (errorCode != KeyStore.NO_ERROR) { - throw new ProviderException( - "Keystore operation failed", KeyStore.getKeyStoreException(errorCode)); + if (errorCode == KeyStore.HARDWARE_TYPE_UNAVAILABLE) { + throw new StrongBoxUnavailableException("Failed to generate key"); + } else { + throw new ProviderException( + "Keystore operation failed", KeyStore.getKeyStoreException(errorCode)); + } } @KeyProperties.KeyAlgorithmEnum String keyAlgorithmJCA; try { diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java index c048e82092a1..c7c9ee4a406a 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java @@ -17,6 +17,7 @@ package android.security.keystore; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.security.KeyStore; import android.security.keymaster.ExportResult; import android.security.keymaster.KeyCharacteristics; @@ -156,6 +157,7 @@ public class AndroidKeyStoreProvider extends Provider { * by AndroidKeyStore provider. * @throws IllegalStateException if the provided primitive is not initialized. */ + @UnsupportedAppUsage public static long getKeyStoreOperationHandle(Object cryptoPrimitive) { if (cryptoPrimitive == null) { throw new NullPointerException(); diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java index 89d370f830fa..c4df2744eed9 100644 --- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java +++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java @@ -20,6 +20,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.KeyguardManager; import android.hardware.fingerprint.FingerprintManager; import android.security.GateKeeper; @@ -371,6 +372,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * * @hide */ + @UnsupportedAppUsage public int getUid() { return mUid; } @@ -645,6 +647,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu * * Returns {@code true} if the attestation certificate will contain a unique ID field. */ + @UnsupportedAppUsage public boolean isUniqueIdIncluded() { return mUniqueIdIncluded; } diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 3eaf43b65f69..c1284ec02655 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -189,6 +189,7 @@ void RenderThread::requireGlContext() { LOG_ALWAYS_FATAL_IF(!glInterface.get()); GrContextOptions options; + options.fPreferExternalImagesOverES3 = true; options.fDisableDistanceFieldPaths = true; cacheManager().configureContext(&options); sk_sp<GrContext> grContext(GrContext::MakeGL(std::move(glInterface), options)); diff --git a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java index 3643ca4a02f7..8a02a82194df 100644 --- a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java +++ b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java @@ -18,6 +18,7 @@ package com.android.internal.location.gnssmetrics; import android.os.SystemClock; import android.os.connectivity.GpsBatteryStats; +import android.os.SystemProperties; import android.text.format.DateUtils; import android.util.Base64; @@ -175,6 +176,7 @@ public class GnssMetrics { = topFourAverageCn0Statistics.getStandardDeviation(); } msg.powerMetrics = mGnssPowerMetrics.buildProto(); + msg.hardwareRevision = SystemProperties.get("ro.boot.revision", ""); String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT); reset(); return s; @@ -239,6 +241,7 @@ public class GnssMetrics { s.append(" Energy consumed while on battery (mAh): ").append( stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS)).append("\n"); } + s.append("Hardware Version: " + SystemProperties.get("ro.boot.revision", "")).append("\n"); return s.toString(); } diff --git a/media/java/android/media/EncoderCapabilities.java b/media/java/android/media/EncoderCapabilities.java index 332e3604bd3e..59c9b82b879c 100644 --- a/media/java/android/media/EncoderCapabilities.java +++ b/media/java/android/media/EncoderCapabilities.java @@ -42,11 +42,15 @@ public class EncoderCapabilities */ static public class VideoEncoderCap { // These are not modifiable externally, thus are public accessible - public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder - public final int mMinBitRate, mMaxBitRate; // min and max bit rate (bps) - public final int mMinFrameRate, mMaxFrameRate; // min and max frame rate (fps) - public final int mMinFrameWidth, mMaxFrameWidth; // min and max frame width (pixel) - public final int mMinFrameHeight, mMaxFrameHeight; // minn and max frame height (pixel) + public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder + public final int mMinBitRate; // min bit rate (bps) + public final int mMaxBitRate; // max bit rate (bps) + public final int mMinFrameRate; // min frame rate (fps) + public final int mMaxFrameRate; // max frame rate (fps) + public final int mMinFrameWidth; // min frame width (pixel) + public final int mMaxFrameWidth; // max frame width (pixel) + public final int mMinFrameHeight; // min frame height (pixel) + public final int mMaxFrameHeight; // max frame height (pixel) // Private constructor called by JNI private VideoEncoderCap(int codec, diff --git a/media/java/android/media/MediaHTTPService.java b/media/java/android/media/MediaHTTPService.java index 3a0e58a172fe..98517d1e363d 100644 --- a/media/java/android/media/MediaHTTPService.java +++ b/media/java/android/media/MediaHTTPService.java @@ -16,6 +16,7 @@ package android.media; +import android.annotation.Nullable; import android.os.IBinder; import android.util.Log; @@ -28,10 +29,10 @@ import java.util.List; /** @hide */ public class MediaHTTPService extends IMediaHTTPService.Stub { private static final String TAG = "MediaHTTPService"; - private List<HttpCookie> mCookies; + @Nullable private List<HttpCookie> mCookies; private Boolean mCookieStoreInitialized = new Boolean(false); - public MediaHTTPService(List<HttpCookie> cookies) { + public MediaHTTPService(@Nullable List<HttpCookie> cookies) { mCookies = cookies; Log.v(TAG, "MediaHTTPService(" + this + "): Cookies: " + cookies); } diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 8a757b86a5fa..a746e6aac1d5 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -62,11 +62,10 @@ import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.text.SimpleDateFormat; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.Locale; import java.util.TimeZone; @@ -130,6 +129,7 @@ public class MediaScanner implements AutoCloseable { Files.FileColumns.DATA, // 1 Files.FileColumns.FORMAT, // 2 Files.FileColumns.DATE_MODIFIED, // 3 + Files.FileColumns.MEDIA_TYPE, // 4 }; private static final String[] ID_PROJECTION = new String[] { @@ -140,6 +140,7 @@ public class MediaScanner implements AutoCloseable { private static final int FILES_PRESCAN_PATH_COLUMN_INDEX = 1; private static final int FILES_PRESCAN_FORMAT_COLUMN_INDEX = 2; private static final int FILES_PRESCAN_DATE_MODIFIED_COLUMN_INDEX = 3; + private static final int FILES_PRESCAN_MEDIA_TYPE_COLUMN_INDEX = 4; private static final String[] PLAYLIST_MEMBERS_PROJECTION = new String[] { Audio.Playlists.Members.PLAYLIST_ID, // 0 @@ -366,13 +367,21 @@ public class MediaScanner implements AutoCloseable { String mPath; long mLastModified; int mFormat; + int mMediaType; boolean mLastModifiedChanged; + /** @deprecated kept intact for lame apps using reflection */ + @Deprecated FileEntry(long rowId, String path, long lastModified, int format) { + this(rowId, path, lastModified, format, FileColumns.MEDIA_TYPE_NONE); + } + + FileEntry(long rowId, String path, long lastModified, int format, int mediaType) { mRowId = rowId; mPath = path; mLastModified = lastModified; mFormat = format; + mMediaType = mediaType; mLastModifiedChanged = false; } @@ -541,7 +550,8 @@ public class MediaScanner implements AutoCloseable { entry.mLastModified = lastModified; } else { entry = new FileEntry(0, path, lastModified, - (isDirectory ? MtpConstants.FORMAT_ASSOCIATION : 0)); + (isDirectory ? MtpConstants.FORMAT_ASSOCIATION : 0), + FileColumns.MEDIA_TYPE_NONE); } entry.mLastModifiedChanged = true; } @@ -1009,14 +1019,21 @@ public class MediaScanner implements AutoCloseable { } Uri tableUri = mFilesUri; + int mediaType = FileColumns.MEDIA_TYPE_NONE; MediaInserter inserter = mMediaInserter; if (mScanSuccess && !mNoMedia) { if (MediaFile.isVideoFileType(mFileType)) { tableUri = mVideoUri; + mediaType = FileColumns.MEDIA_TYPE_VIDEO; } else if (MediaFile.isImageFileType(mFileType)) { tableUri = mImagesUri; + mediaType = FileColumns.MEDIA_TYPE_IMAGE; } else if (MediaFile.isAudioFileType(mFileType)) { tableUri = mAudioUri; + mediaType = FileColumns.MEDIA_TYPE_AUDIO; + } else if (MediaFile.isPlayListFileType(mFileType)) { + tableUri = mPlaylistsUri; + mediaType = FileColumns.MEDIA_TYPE_PLAYLIST; } } Uri result = null; @@ -1079,20 +1096,16 @@ public class MediaScanner implements AutoCloseable { // with squashed lower case paths values.remove(MediaStore.MediaColumns.DATA); - int mediaType = 0; - if (mScanSuccess && !MediaScanner.isNoMediaPath(entry.mPath)) { - int fileType = MediaFile.getFileTypeForMimeType(mMimeType); - if (MediaFile.isAudioFileType(fileType)) { - mediaType = FileColumns.MEDIA_TYPE_AUDIO; - } else if (MediaFile.isVideoFileType(fileType)) { - mediaType = FileColumns.MEDIA_TYPE_VIDEO; - } else if (MediaFile.isImageFileType(fileType)) { - mediaType = FileColumns.MEDIA_TYPE_IMAGE; - } else if (MediaFile.isPlayListFileType(fileType)) { - mediaType = FileColumns.MEDIA_TYPE_PLAYLIST; + if (mScanSuccess && !mNoMedia) { + // Changing media type must be done as separate update + if (mediaType != entry.mMediaType) { + final ContentValues mediaTypeValues = new ContentValues(); + mediaTypeValues.put(FileColumns.MEDIA_TYPE, mediaType); + mMediaProvider.update(ContentUris.withAppendedId(mFilesUri, rowId), + mediaTypeValues, null, null); } - values.put(FileColumns.MEDIA_TYPE, mediaType); } + mMediaProvider.update(result, values, null, null); } @@ -1577,9 +1590,10 @@ public class MediaScanner implements AutoCloseable { where, selectionArgs, null, null); if (c.moveToFirst()) { long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX); - int format = c.getInt(FILES_PRESCAN_FORMAT_COLUMN_INDEX); long lastModified = c.getLong(FILES_PRESCAN_DATE_MODIFIED_COLUMN_INDEX); - return new FileEntry(rowId, path, lastModified, format); + int format = c.getInt(FILES_PRESCAN_FORMAT_COLUMN_INDEX); + int mediaType = c.getInt(FILES_PRESCAN_MEDIA_TYPE_COLUMN_INDEX); + return new FileEntry(rowId, path, lastModified, format, mediaType); } } catch (RemoteException e) { } finally { diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java index ca7ab7ec6e64..5a60ac10fd82 100644 --- a/media/java/android/service/media/MediaBrowserService.java +++ b/media/java/android/service/media/MediaBrowserService.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; @@ -89,6 +90,7 @@ public abstract class MediaBrowserService extends Service { * A key for passing the MediaItem to the ResultReceiver in getItem. * @hide */ + @UnsupportedAppUsage public static final String KEY_MEDIA_ITEM = "media_item"; private static final int RESULT_FLAG_OPTION_NOT_HANDLED = 1 << 0; @@ -149,6 +151,7 @@ public abstract class MediaBrowserService extends Service { private Object mDebug; private boolean mDetachCalled; private boolean mSendResultCalled; + @UnsupportedAppUsage private int mFlags; Result(Object debug) { diff --git a/media/jni/Android.bp b/media/jni/Android.bp index bf80c575125c..de9a24b078cb 100644 --- a/media/jni/Android.bp +++ b/media/jni/Android.bp @@ -101,7 +101,6 @@ cc_library_shared { "libandroid_runtime", // ??? "libaudioclient", // for use of AudioTrack, AudioSystem. to be removed "libbinder", - "libdrmframework", // for FileSource, MediaHTTP "libgui", // for VideoFrameScheduler "libhidlallocatorutils", "libhidlbase", // VNDK??? diff --git a/media/lib/remotedisplay/Android.bp b/media/lib/remotedisplay/Android.bp new file mode 100644 index 000000000000..1e9320d1414d --- /dev/null +++ b/media/lib/remotedisplay/Android.bp @@ -0,0 +1,35 @@ +// +// 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. +// + +droiddoc { + name: "com.android.media.remotedisplay.stubs-gen-docs", + srcs: [ + "java/**/*.java", + ], + args: " -hide 111 -hide 113 -hide 125 -hide 126 -hide 127 -hide 128 " + + " -stubpackages com.android.media.remotedisplay " + + " -nodocs ", + custom_template: "droiddoc-templates-sdk", + installable: false, +} + +java_library_static { + name: "com.android.media.remotedisplay.stubs", + srcs: [ + ":com.android.media.remotedisplay.stubs-gen-docs", + ], + sdk_version: "current", +} diff --git a/media/lib/remotedisplay/Android.mk b/media/lib/remotedisplay/Android.mk index 63f9f9197529..e88c0f1a8dc8 100644 --- a/media/lib/remotedisplay/Android.mk +++ b/media/lib/remotedisplay/Android.mk @@ -42,24 +42,3 @@ LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := com.android.media.remotedisplay.stubs-gen -LOCAL_MODULE_CLASS := JAVA_LIBRARIES -LOCAL_SRC_FILES := $(call all-java-files-under,java) -LOCAL_DROIDDOC_STUB_OUT_DIR := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/com.android.media.remotedisplay.stubs_intermediates/src -LOCAL_DROIDDOC_OPTIONS:= \ - -hide 111 -hide 113 -hide 125 -hide 126 -hide 127 -hide 128 \ - -stubpackages com.android.media.remotedisplay \ - -nodocs -LOCAL_UNINSTALLABLE_MODULE := true -include $(BUILD_DROIDDOC) -com_android_media_remotedisplay_gen_stamp := $(full_target) - -include $(CLEAR_VARS) -LOCAL_MODULE := com.android.media.remotedisplay.stubs -LOCAL_SDK_VERSION := current -LOCAL_SOURCE_FILES_ALL_GENERATED := true -LOCAL_ADDITIONAL_DEPENDENCIES := $(com_android_media_remotedisplay_gen_stamp) -com_android_media_remotedisplay_gen_stamp := -include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/packages/CarSystemUI/Android.bp b/packages/CarSystemUI/Android.bp new file mode 100644 index 000000000000..36ef04a2a41f --- /dev/null +++ b/packages/CarSystemUI/Android.bp @@ -0,0 +1,76 @@ +// +// 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. +// +android_app { + name: "CarSystemUI", + + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + ], + + static_libs: [ + "SystemUI-core", + "SystemUIPluginLib", + "SystemUISharedLib", + "SettingsLib", + "androidx.car_car", + "androidx.legacy_legacy-support-v4", + "androidx.recyclerview_recyclerview", + "androidx.preference_preference", + "androidx.appcompat_appcompat", + "androidx.mediarouter_mediarouter", + "androidx.palette_palette", + "androidx.legacy_legacy-preference-v14", + "androidx.leanback_leanback", + "androidx.slice_slice-core", + "androidx.slice_slice-view", + "androidx.slice_slice-builders", + "androidx.arch.core_core-runtime", + "androidx.lifecycle_lifecycle-extensions", + "SystemUI-tags", + "SystemUI-proto", + ], + + libs: [ + "telephony-common", + "android.car", + ], + + manifest: "AndroidManifest.xml", + + owner: "google", + platform_apis: true, + certificate: "platform", + privileged: true, + + optimize: { + proguard_flags_files: [ + "proguard.flags", + ], + }, + resource_dirs: [ + "res", + ], + + + dxflags: ["--multi-dex"], + + aaptflags: [ + "--extra-packages", + "com.android.keyguard", + ], + +} diff --git a/packages/CarSystemUI/Android.mk b/packages/CarSystemUI/Android.mk deleted file mode 100644 index 0d40b7f22c5b..000000000000 --- a/packages/CarSystemUI/Android.mk +++ /dev/null @@ -1,86 +0,0 @@ -# LOCAL_PATH is not the current directory of this file. -# If you need the local path, use CAR_SYSUI_PATH. -# This tweak ensures that the resource overlay that is device-specific still works -# which requires that LOCAL_PATH match the original path (which must be frameworks/base/packages/SystemUI). -# -# For clarity, we also define SYSTEM_UI_AOSP_PATH to frameworks/base/packages/SystemUI and refer to that -SYSTEM_UI_AOSP_PATH := frameworks/base/packages/SystemUI -SYSTEM_UI_CAR_PATH := frameworks/base/packages/CarSystemUI -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_MODULE_TAGS := optional - -# The same as SYSTEM_UI_AOSP_PATH but based on the value of LOCAL_PATH which is -# frameworks/base/packages/CarSystemUI. -RELATIVE_SYSTEM_UI_AOSP_PATH := ../../../../$(SYSTEM_UI_AOSP_PATH) - - -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) \ - $(call all-Iaidl-files-under, src) \ - $(call all-java-files-under, $(RELATIVE_SYSTEM_UI_AOSP_PATH)/src) \ - $(call all-Iaidl-files-under, $(RELATIVE_SYSTEM_UI_AOSP_PATH)/src) - -LOCAL_STATIC_ANDROID_LIBRARIES := \ - SystemUIPluginLib \ - SystemUISharedLib \ - androidx.car_car \ - androidx.legacy_legacy-support-v4 \ - androidx.recyclerview_recyclerview \ - androidx.preference_preference \ - androidx.appcompat_appcompat \ - androidx.mediarouter_mediarouter \ - androidx.palette_palette \ - androidx.legacy_legacy-preference-v14 \ - androidx.leanback_leanback \ - androidx.slice_slice-core \ - androidx.slice_slice-view \ - androidx.slice_slice-builders \ - androidx.arch.core_core-runtime \ - androidx.lifecycle_lifecycle-extensions \ - -LOCAL_STATIC_JAVA_LIBRARIES := \ - SystemUI-tags \ - SystemUI-proto - -LOCAL_JAVA_LIBRARIES := telephony-common \ - android.car - -LOCAL_FULL_LIBS_MANIFEST_FILES := $(SYSTEM_UI_AOSP_PATH)/AndroidManifest.xml -LOCAL_MANIFEST_FILE := AndroidManifest.xml - -LOCAL_MODULE_OWNER := google -LOCAL_PACKAGE_NAME := CarSystemUI -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -LOCAL_PROGUARD_FLAG_FILES := $(RELATIVE_SYSTEM_UI_AOSP_PATH)/proguard.flags \ - proguard.flags - -LOCAL_RESOURCE_DIR := \ - $(LOCAL_PATH)/res \ - $(SYSTEM_UI_AOSP_PATH)/res-keyguard \ - $(SYSTEM_UI_AOSP_PATH)/res - -ifneq ($(INCREMENTAL_BUILDS),) - LOCAL_PROGUARD_ENABLED := disabled - LOCAL_JACK_ENABLED := incremental -endif - -LOCAL_DX_FLAGS := --multi-dex -LOCAL_JACK_FLAGS := --multi-dex native - -include frameworks/base/packages/SettingsLib/common.mk - -LOCAL_OVERRIDES_PACKAGES := SystemUI - -LOCAL_AAPT_FLAGS := --extra-packages com.android.keyguard - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under, $(SYSTEM_UI_CAR_PATH)) diff --git a/packages/CarSystemUI/proguard.flags b/packages/CarSystemUI/proguard.flags index ceb037cdb70f..a81c7e08e357 100644 --- a/packages/CarSystemUI/proguard.flags +++ b/packages/CarSystemUI/proguard.flags @@ -1 +1,3 @@ -keep class com.android.systemui.CarSystemUIFactory + +-include ../SystemUI/proguard.flags diff --git a/packages/ExtServices/src/android/ext/services/notification/Assistant.java b/packages/ExtServices/src/android/ext/services/notification/Assistant.java index 4b4350fa1c95..a8ecec3db213 100644 --- a/packages/ExtServices/src/android/ext/services/notification/Assistant.java +++ b/packages/ExtServices/src/android/ext/services/notification/Assistant.java @@ -23,8 +23,10 @@ import static android.service.notification.NotificationListenerService.Ranking import android.annotation.NonNull; import android.annotation.Nullable; +import android.app.ActivityThread; import android.app.INotificationManager; import android.app.Notification; +import android.app.NotificationChannel; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; @@ -45,6 +47,7 @@ import android.util.Log; import android.util.Slog; import android.util.Xml; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; @@ -85,6 +88,7 @@ public class Assistant extends NotificationAssistantService { private float mDismissToViewRatioLimit; private int mStreakLimit; private SmartActionsHelper mSmartActionsHelper; + private NotificationCategorizer mNotificationCategorizer; // key : impressions tracker // TODO: prune deleted channels and apps @@ -94,6 +98,7 @@ public class Assistant extends NotificationAssistantService { private Ranking mFakeRanking = null; private AtomicFile mFile = null; + protected SettingsObserver mSettingsObserver; public Assistant() { } @@ -103,8 +108,9 @@ 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. - new SettingsObserver(mHandler); + mSettingsObserver = new SettingsObserver(mHandler); mSmartActionsHelper = new SmartActionsHelper(); + mNotificationCategorizer = new NotificationCategorizer(); } private void loadFile() { @@ -191,18 +197,21 @@ public class Assistant extends NotificationAssistantService { } @Override - public Adjustment onNotificationEnqueued(StatusBarNotification sbn) { - if (DEBUG) Log.i(TAG, "ENQUEUED " + sbn.getKey()); + public Adjustment onNotificationEnqueued(StatusBarNotification sbn, + NotificationChannel channel) { + if (DEBUG) Log.i(TAG, "ENQUEUED " + sbn.getKey() + " on " + channel.getId()); + NotificationEntry entry = new NotificationEntry( + ActivityThread.getPackageManager(), sbn, channel); ArrayList<Notification.Action> actions = - mSmartActionsHelper.suggestActions(this, sbn); - ArrayList<CharSequence> replies = mSmartActionsHelper.suggestReplies(this, sbn); - return createEnqueuedNotificationAdjustment(sbn, actions, replies); + mSmartActionsHelper.suggestActions(this, entry); + ArrayList<CharSequence> replies = mSmartActionsHelper.suggestReplies(this, entry); + return createEnqueuedNotificationAdjustment(entry, actions, replies); } /** A convenience helper for creating an adjustment for an SBN. */ @Nullable private Adjustment createEnqueuedNotificationAdjustment( - @NonNull StatusBarNotification statusBarNotification, + @NonNull NotificationEntry entry, @NonNull ArrayList<Notification.Action> smartActions, @NonNull ArrayList<CharSequence> smartReplies) { Bundle signals = new Bundle(); @@ -212,16 +221,16 @@ public class Assistant extends NotificationAssistantService { if (!smartReplies.isEmpty()) { signals.putCharSequenceArrayList(Adjustment.KEY_SMART_REPLIES, smartReplies); } - - // TODO: Apply rules to what gets silenced - signals.putInt(Adjustment.KEY_IMPORTANCE, IMPORTANCE_LOW); + if (mNotificationCategorizer.shouldSilence(entry)) { + signals.putInt(Adjustment.KEY_IMPORTANCE, IMPORTANCE_LOW); + } return new Adjustment( - statusBarNotification.getPackageName(), - statusBarNotification.getKey(), + entry.getSbn().getPackageName(), + entry.getSbn().getKey(), signals, "", - statusBarNotification.getUserId()); + entry.getSbn().getUserId()); } @Override @@ -331,29 +340,35 @@ public class Assistant extends NotificationAssistantService { // for testing - protected void setFile(AtomicFile file) { + @VisibleForTesting + public void setFile(AtomicFile file) { mFile = file; } - protected void setFakeRanking(Ranking ranking) { + @VisibleForTesting + public void setFakeRanking(Ranking ranking) { mFakeRanking = ranking; } - protected void setNoMan(INotificationManager noMan) { + @VisibleForTesting + public void setNoMan(INotificationManager noMan) { mNoMan = noMan; } - protected void setContext(Context context) { + @VisibleForTesting + public void setContext(Context context) { mSystemContext = context; } - protected ChannelImpressions getImpressions(String key) { + @VisibleForTesting + public ChannelImpressions getImpressions(String key) { synchronized (mkeyToImpressions) { return mkeyToImpressions.get(key); } } - protected void insertImpressions(String key, ChannelImpressions ci) { + @VisibleForTesting + public void insertImpressions(String key, ChannelImpressions ci) { synchronized (mkeyToImpressions) { mkeyToImpressions.put(key, ci); } @@ -368,7 +383,7 @@ public class Assistant extends NotificationAssistantService { /** * Observer for updates on blocking helper threshold values. */ - private final class SettingsObserver extends ContentObserver { + protected final class SettingsObserver extends ContentObserver { private final Uri STREAK_LIMIT_URI = Settings.Global.getUriFor(Settings.Global.BLOCKING_HELPER_STREAK_LIMIT); private final Uri DISMISS_TO_VIEW_RATIO_LIMIT_URI = diff --git a/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java new file mode 100644 index 000000000000..1f4ba0150dc1 --- /dev/null +++ b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.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.ext.services.notification; + +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_MIN; + +import android.annotation.IntDef; +import android.app.Notification; +import android.media.AudioAttributes; +import android.os.Process; + +import com.android.internal.annotations.VisibleForTesting; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Default categorizer for incoming notifications; used to determine what notifications + * should be silenced. + */ +// TODO: stop using @hide methods +public class NotificationCategorizer { + + protected static final int CATEGORY_MIN = -3; + protected static final int CATEGORY_EVERYTHING_ELSE = -2; + protected static final int CATEGORY_ONGOING = -1; + protected static final int CATEGORY_SYSTEM_LOW = 0; + protected static final int CATEGORY_EVENT = 1; + protected static final int CATEGORY_REMINDER = 2; + protected static final int CATEGORY_SYSTEM = 3; + protected static final int CATEGORY_PEOPLE = 4; + protected static final int CATEGORY_ALARM = 5; + protected static final int CATEGORY_CALL = 6; + + /** @hide */ + @IntDef(prefix = { "CATEGORY_" }, value = { + CATEGORY_MIN, CATEGORY_EVERYTHING_ELSE, CATEGORY_ONGOING, CATEGORY_CALL, + CATEGORY_SYSTEM_LOW, CATEGORY_EVENT, CATEGORY_REMINDER, CATEGORY_SYSTEM, + CATEGORY_PEOPLE, CATEGORY_ALARM + }) + @Retention(RetentionPolicy.SOURCE) + public @interface Category {} + + public boolean shouldSilence(NotificationEntry entry) { + return shouldSilence(getCategory(entry)); + } + + @VisibleForTesting + boolean shouldSilence(int category) { + return category < CATEGORY_EVENT; + } + + public int getCategory(NotificationEntry entry) { + if (entry.getChannel() == null) { + return CATEGORY_EVERYTHING_ELSE; + } + if (entry.getChannel().getImportance() == IMPORTANCE_MIN) { + return CATEGORY_MIN; + } + if (entry.isCategory(Notification.CATEGORY_REMINDER)) { + return CATEGORY_REMINDER; + } + if (entry.isCategory(Notification.CATEGORY_EVENT)) { + return CATEGORY_EVENT; + } + if (entry.isCategory(Notification.CATEGORY_ALARM) + || entry.isAudioAttributesUsage(AudioAttributes.USAGE_ALARM)) { + return CATEGORY_ALARM; + } + // TODO: check for default phone app + if (entry.isCategory(Notification.CATEGORY_CALL)) { + return CATEGORY_CALL; + } + if (entry.involvesPeople()) { + return CATEGORY_PEOPLE; + } + // TODO: is from signature app + if (entry.getSbn().getUid() < Process.FIRST_APPLICATION_UID) { + if (entry.getImportance() >= IMPORTANCE_HIGH) { + return CATEGORY_SYSTEM; + } else { + return CATEGORY_SYSTEM_LOW; + } + } + if (entry.isOngoing()) { + return CATEGORY_ONGOING; + } + return CATEGORY_EVERYTHING_ELSE; + } +} diff --git a/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java b/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java new file mode 100644 index 000000000000..cdc09906cb82 --- /dev/null +++ b/packages/ExtServices/src/android/ext/services/notification/NotificationEntry.java @@ -0,0 +1,220 @@ +/* + * 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.NotificationChannel.USER_LOCKED_IMPORTANCE; +import static android.app.NotificationManager.IMPORTANCE_DEFAULT; +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_LOW; +import static android.app.NotificationManager.IMPORTANCE_MIN; +import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.Person; +import android.app.RemoteInput; +import android.content.pm.IPackageManager; +import android.media.AudioAttributes; +import android.media.AudioSystem; +import android.os.Build; +import android.os.RemoteException; +import android.service.notification.StatusBarNotification; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Objects; + +/** + * Holds data about notifications. + */ +public class NotificationEntry { + static final String TAG = "NotificationEntry"; + + private StatusBarNotification mSbn; + private final IPackageManager mPackageManager; + private int mTargetSdkVersion = Build.VERSION_CODES.N_MR1; + private boolean mPreChannelsNotification = true; + private AudioAttributes mAttributes; + private NotificationChannel mChannel; + private int mImportance; + + public NotificationEntry(IPackageManager packageManager, StatusBarNotification sbn, + NotificationChannel channel) { + mSbn = sbn; + mChannel = channel; + mPackageManager = packageManager; + mPreChannelsNotification = isPreChannelsNotification(); + mAttributes = calculateAudioAttributes(); + mImportance = calculateInitialImportance(); + } + + private boolean isPreChannelsNotification() { + try { + mTargetSdkVersion = mPackageManager.getApplicationInfo( + mSbn.getPackageName(), 0, mSbn.getUserId()).targetSdkVersion; + } catch (RemoteException e) { + Log.w(TAG, "Couldn't look up " + mSbn.getPackageName()); + } + if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(getChannel().getId())) { + if (mTargetSdkVersion < Build.VERSION_CODES.O) { + return true; + } + } + return false; + } + + private AudioAttributes calculateAudioAttributes() { + final Notification n = getNotification(); + AudioAttributes attributes = getChannel().getAudioAttributes(); + if (attributes == null) { + attributes = Notification.AUDIO_ATTRIBUTES_DEFAULT; + } + + if (mPreChannelsNotification + && (getChannel().getUserLockedFields() + & NotificationChannel.USER_LOCKED_SOUND) == 0) { + if (n.audioAttributes != null) { + // prefer audio attributes to stream type + attributes = n.audioAttributes; + } else if (n.audioStreamType >= 0 + && n.audioStreamType < AudioSystem.getNumStreamTypes()) { + // the stream type is valid, use it + attributes = new AudioAttributes.Builder() + .setInternalLegacyStreamType(n.audioStreamType) + .build(); + } else if (n.audioStreamType != AudioSystem.STREAM_DEFAULT) { + Log.w(TAG, String.format("Invalid stream type: %d", n.audioStreamType)); + } + } + return attributes; + } + + private int calculateInitialImportance() { + final Notification n = getNotification(); + int importance = getChannel().getImportance(); + int requestedImportance = IMPORTANCE_DEFAULT; + + // Migrate notification flags to scores + if ((n.flags & Notification.FLAG_HIGH_PRIORITY) != 0) { + n.priority = Notification.PRIORITY_MAX; + } + + n.priority = clamp(n.priority, Notification.PRIORITY_MIN, + Notification.PRIORITY_MAX); + switch (n.priority) { + case Notification.PRIORITY_MIN: + requestedImportance = IMPORTANCE_MIN; + break; + case Notification.PRIORITY_LOW: + requestedImportance = IMPORTANCE_LOW; + break; + case Notification.PRIORITY_DEFAULT: + requestedImportance = IMPORTANCE_DEFAULT; + break; + case Notification.PRIORITY_HIGH: + case Notification.PRIORITY_MAX: + requestedImportance = IMPORTANCE_HIGH; + break; + } + + if (mPreChannelsNotification + && (importance == IMPORTANCE_UNSPECIFIED + || (getChannel().getUserLockedFields() + & USER_LOCKED_IMPORTANCE) == 0)) { + if (n.fullScreenIntent != null) { + requestedImportance = IMPORTANCE_HIGH; + } + importance = requestedImportance; + } + + return importance; + } + + public boolean isCategory(String category) { + return Objects.equals(getNotification().category, category); + } + + public boolean isAudioAttributesUsage(int usage) { + return mAttributes != null && mAttributes.getUsage() == usage; + } + + private boolean hasPerson() { + // TODO: cache favorite and recent contacts to check contact affinity + ArrayList<Person> people = getNotification().extras.getParcelableArrayList( + Notification.EXTRA_PEOPLE_LIST); + return people != null && !people.isEmpty(); + } + + protected boolean hasStyle(Class targetStyle) { + Class<? extends Notification.Style> style = getNotification().getNotificationStyle(); + return targetStyle.equals(style); + } + + protected boolean isOngoing() { + return (getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE) != 0; + } + + protected boolean involvesPeople() { + return isMessaging() + || hasStyle(Notification.InboxStyle.class) + || hasPerson(); + } + + protected boolean isMessaging() { + return isCategory(Notification.CATEGORY_MESSAGE) + || hasStyle(Notification.MessagingStyle.class) + || hasInlineReply(); + } + + public boolean hasInlineReply() { + Notification.Action[] actions = getNotification().actions; + if (actions == null) { + return false; + } + for (Notification.Action action : actions) { + RemoteInput[] remoteInputs = action.getRemoteInputs(); + if (remoteInputs == null) { + continue; + } + for (RemoteInput remoteInput : remoteInputs) { + if (remoteInput.getAllowFreeFormInput()) { + return true; + } + } + } + return false; + } + + public StatusBarNotification getSbn() { + return mSbn; + } + + public Notification getNotification() { + return getSbn().getNotification(); + } + + public NotificationChannel getChannel() { + return mChannel; + } + + public int getImportance() { + return mImportance; + } + + private int clamp(int x, int low, int high) { + return (x < low) ? low : ((x > high) ? high : x); + } +} diff --git a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java index 9d33bd9972f1..37a98fd1dd6c 100644 --- a/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java +++ b/packages/ExtServices/src/android/ext/services/notification/SmartActionsHelper.java @@ -65,8 +65,8 @@ public class SmartActionsHelper { */ @NonNull ArrayList<Notification.Action> suggestActions( - @Nullable Context context, @NonNull StatusBarNotification sbn) { - if (!isEligibleForActionAdjustment(sbn)) { + @Nullable Context context, @NonNull NotificationEntry entry) { + if (!isEligibleForActionAdjustment(entry)) { return EMPTY_ACTION_LIST; } if (context == null) { @@ -76,17 +76,17 @@ public class SmartActionsHelper { if (tcm == null) { return EMPTY_ACTION_LIST; } - Notification.Action[] actions = sbn.getNotification().actions; + Notification.Action[] actions = entry.getNotification().actions; int numOfExistingActions = actions == null ? 0: actions.length; int maxSmartActions = MAX_SMART_ACTIONS - numOfExistingActions; return suggestActionsFromText( tcm, - getMostSalientActionText(sbn.getNotification()), maxSmartActions); + getMostSalientActionText(entry.getNotification()), maxSmartActions); } ArrayList<CharSequence> suggestReplies( - @Nullable Context context, @NonNull StatusBarNotification sbn) { - if (!isEligibleForReplyAdjustment(sbn)) { + @Nullable Context context, @NonNull NotificationEntry entry) { + if (!isEligibleForReplyAdjustment(entry)) { return EMPTY_REPLY_LIST; } if (context == null) { @@ -103,56 +103,35 @@ public class SmartActionsHelper { * to fundamental phone functionality where any error would result in a very negative user * experience. */ - private boolean isEligibleForActionAdjustment(@NonNull StatusBarNotification sbn) { - Notification notification = sbn.getNotification(); - String pkg = sbn.getPackageName(); - if (!Process.myUserHandle().equals(sbn.getUser())) { + private boolean isEligibleForActionAdjustment(@NonNull NotificationEntry entry) { + Notification notification = entry.getNotification(); + String pkg = entry.getSbn().getPackageName(); + if (!Process.myUserHandle().equals(entry.getSbn().getUser())) { return false; } if (notification.actions != null && notification.actions.length >= Notification.MAX_ACTION_BUTTONS) { return false; } - if (0 != (notification.flags & FLAG_MASK_INELGIBILE_FOR_ACTIONS)) { + if ((notification.flags & FLAG_MASK_INELGIBILE_FOR_ACTIONS) != 0) { return false; } if (TextUtils.isEmpty(pkg) || pkg.equals("android")) { return false; } // For now, we are only interested in messages. - return Notification.CATEGORY_MESSAGE.equals(notification.category) - || Notification.MessagingStyle.class.equals(notification.getNotificationStyle()) - || hasInlineReply(notification); + return entry.isMessaging(); } - private boolean isEligibleForReplyAdjustment(@NonNull StatusBarNotification sbn) { + private boolean isEligibleForReplyAdjustment(@NonNull NotificationEntry entry) { if (!SystemProperties.getBoolean(SYS_PROP_SMART_REPLIES_EXPERIMENT, false)) { return false; } - Notification notification = sbn.getNotification(); + Notification notification = entry.getNotification(); if (notification.actions == null) { return false; } - return hasInlineReply(sbn.getNotification()); - } - - private boolean hasInlineReply(Notification notification) { - Notification.Action[] actions = notification.actions; - if (actions == null) { - return false; - } - for (Notification.Action action : actions) { - RemoteInput[] remoteInputs = action.getRemoteInputs(); - if (remoteInputs == null) { - continue; - } - for (RemoteInput remoteInput : remoteInputs) { - if (remoteInput.getAllowFreeFormInput()) { - return true; - } - } - } - return false; + return entry.hasInlineReply(); } /** Returns the text most salient for action extraction in a notification. */ 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 a6b6a6b61581..bb68bc2b875e 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java @@ -20,7 +20,6 @@ import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_MIN; -import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -33,7 +32,6 @@ import android.app.INotificationManager; import android.app.Notification; import android.app.NotificationChannel; import android.content.ContentResolver; -import android.content.IContentProvider; import android.content.Intent; import android.os.UserHandle; import android.provider.Settings; @@ -47,7 +45,6 @@ import android.support.test.InstrumentationRegistry; import android.test.ServiceTestCase; import android.testing.TestableContext; import android.util.AtomicFile; -import android.util.Xml; import com.android.internal.util.FastXmlSerializer; @@ -57,7 +54,6 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import java.io.BufferedInputStream; @@ -435,12 +431,10 @@ public class AssistantTest extends ServiceTestCase<Assistant> { Settings.Global.BLOCKING_HELPER_STREAK_LIMIT, newStreakLimit); // Notify for the settings values we updated. - resolver.notifyChange( - Settings.Global.getUriFor(Settings.Global.BLOCKING_HELPER_STREAK_LIMIT), null); - resolver.notifyChange( - Settings.Global.getUriFor( - Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT), - null); + mAssistant.mSettingsObserver.onChange(false, Settings.Global.getUriFor( + Settings.Global.BLOCKING_HELPER_STREAK_LIMIT)); + mAssistant.mSettingsObserver.onChange(false, Settings.Global.getUriFor( + Settings.Global.BLOCKING_HELPER_DISMISS_TO_VIEW_RATIO_LIMIT)); // With the new threshold, the blocking helper should be triggered. assertEquals(true, ci.shouldTriggerBlock()); diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java new file mode 100644 index 000000000000..c37392f03260 --- /dev/null +++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java @@ -0,0 +1,190 @@ +/** + * 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_DEFAULT; +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_MIN; +import static android.os.Process.FIRST_APPLICATION_UID; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.os.Process; +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 NotificationCategorizerTest { + @Mock + private NotificationEntry mEntry; + @Mock + private StatusBarNotification mSbn; + + @Rule + public final TestableContext mContext = + new TestableContext(InstrumentationRegistry.getContext(), null); + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + when(mEntry.getSbn()).thenReturn(mSbn); + when(mSbn.getUid()).thenReturn(Process.myUid()); + when(mSbn.getPackageName()).thenReturn(mContext.getPackageName()); + } + + @Test + public void testPeopleCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.involvesPeople()).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_PEOPLE, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_PEOPLE)); + } + + @Test + public void testMin() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_MIN)); + when(mEntry.involvesPeople()).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_MIN, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_MIN)); + } + + @Test + public void testOngoingCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.isOngoing()).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_ONGOING, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_ONGOING)); + + when(mEntry.isOngoing()).thenReturn(false); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE)); + } + + @Test + public void testAlarmCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.isCategory(Notification.CATEGORY_ALARM)).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_ALARM, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_ALARM)); + + when(mEntry.isCategory(Notification.CATEGORY_ALARM)).thenReturn(false); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE)); + } + + @Test + public void testCallCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.isCategory(Notification.CATEGORY_CALL)).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_CALL, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_CALL)); + + when(mEntry.isCategory(Notification.CATEGORY_CALL)).thenReturn(false); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE)); + } + + @Test + public void testReminderCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.isCategory(Notification.CATEGORY_REMINDER)).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_REMINDER, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_REMINDER)); + + when(mEntry.isCategory(Notification.CATEGORY_REMINDER)).thenReturn(false); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE)); + } + + @Test + public void testEventCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.isCategory(Notification.CATEGORY_EVENT)).thenReturn(true); + + assertEquals(NotificationCategorizer.CATEGORY_EVENT, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_EVENT)); + + when(mEntry.isCategory(Notification.CATEGORY_EVENT)).thenReturn(false); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + } + + @Test + public void testSystemCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_HIGH)); + when(mEntry.getImportance()).thenReturn(IMPORTANCE_HIGH); + when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1); + + assertEquals(NotificationCategorizer.CATEGORY_SYSTEM, nc.getCategory(mEntry)); + assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_SYSTEM)); + + when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + } + + @Test + public void testSystemLowCategory() { + NotificationCategorizer nc = new NotificationCategorizer(); + + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.getImportance()).thenReturn(IMPORTANCE_DEFAULT); + when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1); + + assertEquals(NotificationCategorizer.CATEGORY_SYSTEM_LOW, nc.getCategory(mEntry)); + assertTrue(nc.shouldSilence(NotificationCategorizer.CATEGORY_SYSTEM_LOW)); + + when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); + } +} diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java new file mode 100644 index 000000000000..9223c3dfe2bc --- /dev/null +++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationEntryTest.java @@ -0,0 +1,201 @@ +/** + * 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.Notification.FLAG_CAN_COLORIZE; +import static android.app.Notification.FLAG_FOREGROUND_SERVICE; +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.media.AudioAttributes.USAGE_ALARM; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.Person; +import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; +import android.media.AudioAttributes; +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; + +import java.util.ArrayList; + +@RunWith(AndroidJUnit4.class) +public class NotificationEntryTest { + private String mPkg = "pkg"; + private int mUid = 2018; + @Mock + private IPackageManager mPackageManager; + @Mock + private ApplicationInfo mAppInfo; + + @Rule + public final TestableContext mContext = + new TestableContext(InstrumentationRegistry.getContext(), null); + + 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); + } + + private StatusBarNotification generateSbn(Notification n) { + 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(); + when(mPackageManager.getApplicationInfo(anyString(), anyInt(), anyInt())) + .thenReturn(mAppInfo); + mAppInfo.targetSdkVersion = Build.VERSION_CODES.P; + } + + @Test + public void testHasPerson() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + StatusBarNotification sbn = generateSbn(channel.getId()); + ArrayList<Person> people = new ArrayList<>(); + people.add(new Person.Builder().setKey("mailto:testing@android.com").build()); + sbn.getNotification().extras.putParcelableArrayList(Notification.EXTRA_PEOPLE_LIST, people); + + NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel); + assertTrue(entry.involvesPeople()); + } + + @Test + public void testNotPerson() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + StatusBarNotification sbn = generateSbn(channel.getId()); + NotificationEntry entry = new NotificationEntry(mPackageManager, sbn, channel); + assertFalse(entry.involvesPeople()); + } + + @Test + public void testIsInboxStyle() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setStyle(new Notification.InboxStyle()) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + assertTrue(entry.hasStyle(Notification.InboxStyle.class)); + } + + @Test + public void testIsMessagingStyle() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setStyle(new Notification.MessagingStyle("")) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + assertTrue(entry.hasStyle(Notification.MessagingStyle.class)); + } + + @Test + public void testIsNotPersonStyle() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setStyle(new Notification.BigPictureStyle()) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + assertFalse(entry.hasStyle(Notification.InboxStyle.class)); + assertFalse(entry.hasStyle(Notification.MessagingStyle.class)); + } + + @Test + public void testIsAudioAttributes() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + channel.setSound(null, new AudioAttributes.Builder().setUsage(USAGE_ALARM).build()); + + NotificationEntry entry = new NotificationEntry( + mPackageManager, generateSbn(channel.getId()), channel); + + assertTrue(entry.isAudioAttributesUsage(USAGE_ALARM)); + } + + @Test + public void testIsNotAudioAttributes() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + NotificationEntry entry = new NotificationEntry( + mPackageManager, generateSbn(channel.getId()), channel); + + assertFalse(entry.isAudioAttributesUsage(USAGE_ALARM)); + } + + @Test + public void testIsCategory() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setCategory(Notification.CATEGORY_EMAIL) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + + assertTrue(entry.isCategory(Notification.CATEGORY_EMAIL)); + assertFalse(entry.isCategory(Notification.CATEGORY_MESSAGE)); + } + + @Test + public void testIsOngoing() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setFlag(FLAG_FOREGROUND_SERVICE, true) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + + assertTrue(entry.isOngoing()); + } + + @Test + public void testIsNotOngoing() { + NotificationChannel channel = new NotificationChannel("", "", IMPORTANCE_HIGH); + + Notification n = new Notification.Builder(mContext, channel.getId()) + .setFlag(FLAG_CAN_COLORIZE, true) + .build(); + NotificationEntry entry = new NotificationEntry(mPackageManager, generateSbn(n), channel); + + assertFalse(entry.isOngoing()); + } +} diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp new file mode 100644 index 000000000000..4791517d9273 --- /dev/null +++ b/packages/SettingsLib/Android.bp @@ -0,0 +1,25 @@ +android_library { + + name: "SettingsLib", + + libs: [ + "androidx.annotation_annotation", + "androidx.legacy_legacy-support-v4", + "androidx.recyclerview_recyclerview", + "androidx.preference_preference", + "androidx.appcompat_appcompat", + "androidx.lifecycle_lifecycle-runtime", + ], + + // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_SHARED_JAVA_LIBRARIES + // LOCAL_SHARED_JAVA_LIBRARIES := androidx.lifecycle_lifecycle-common + + resource_dirs: ["res"], + + srcs: ["src/**/*.java"], + + min_sdk_version: "21", + +} + +// For the test package. diff --git a/packages/SettingsLib/Android.mk b/packages/SettingsLib/Android.mk deleted file mode 100644 index 96012c1f2a34..000000000000 --- a/packages/SettingsLib/Android.mk +++ /dev/null @@ -1,34 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_AAPT2_ONLY := true - -LOCAL_MODULE := SettingsLib - -LOCAL_JAVA_LIBRARIES := \ - androidx.annotation_annotation - -LOCAL_SHARED_ANDROID_LIBRARIES := \ - androidx.legacy_legacy-support-v4 \ - androidx.recyclerview_recyclerview \ - androidx.preference_preference \ - androidx.appcompat_appcompat \ - androidx.lifecycle_lifecycle-runtime - -LOCAL_SHARED_JAVA_LIBRARIES := \ - androidx.lifecycle_lifecycle-common - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_JAR_EXCLUDE_FILES := none - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_MIN_SDK_VERSION := 21 - -include $(BUILD_STATIC_JAVA_LIBRARY) - -# For the test package. -include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 0887010bd3b5..296a135a9d8a 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tydsduur"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vra elke keer"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Totdat jy dit afskakel"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sopas"</string> </resources> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index b69618d00b67..ab52bcb0cf76 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"በ<xliff:g id="WHEN">%1$s</xliff:g> ላይ"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"የቆይታ ጊዜ"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ሁልጊዜ ጠይቅ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"እስኪያጠፉት ድረስ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ልክ አሁን"</string> </resources> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 37e8346d4166..e8811eb6c724 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -453,7 +453,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"يوم <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"المدة"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"الطلب في كل مرة"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"إلى أن توقف الوضع يدويًا"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"للتو"</string> </resources> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index 787d4d5687e5..0adac28fc7b8 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> বজাত"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"সময়সীমা"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"প্ৰতিবাৰতে সোধক"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"আপুনি অফ নকৰা পর্যন্ত"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"এই মাত্ৰ"</string> </resources> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index e3211265c236..8f974fef7edd 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> olduqda"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Müddət"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Hər dəfə soruşun"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Deaktiv edənə qədər"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"İndicə"</string> </resources> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index b4ea7b90b1ff..1e3eba631a19 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uvek pitaj"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo sada"</string> </resources> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 630d697a3427..42fda63e9b4d 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"у <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Працягласць"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Заўсёды пытацца"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Пакуль не выключыце"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Зараз"</string> </resources> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index aa42e0a2ac63..a309449dd744 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"в/ъв <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Времетраене"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Да се пита винаги"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"До изключване"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Току-що"</string> </resources> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index c11b58ef5fc8..ad4ef2f94e09 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"তারিখ ও সময় <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"সময়কাল"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"প্রতিবার জিজ্ঞেস করা হবে"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"যতক্ষণ না আপনি বন্ধ করছেন"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"এখনই"</string> </resources> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 887a74bf6597..43326823ee68 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo"</string> </resources> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 7d350956722e..7750ef290de9 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"Data: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durada"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pregunta sempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Fins que no ho desactivi"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ara mateix"</string> </resources> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index 1057ae014a5c..72b3389dd64c 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"v <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trvání"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pokaždé se zeptat"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dokud tuto funkci nevypnete"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Právě teď"</string> </resources> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 6cd185558e2c..0b7ce0d4790e 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"på <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varighed"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spørg hver gang"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Indtil du deaktiverer"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Lige nu"</string> </resources> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index aaacc29f1022..9db490b6f5c1 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"am <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Dauer"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Jedes Mal fragen"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Bis zur Deaktivierung"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Gerade eben"</string> </resources> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index eb8346dffc3c..2ba543e45955 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"το/τη(ν) <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Διάρκεια"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Να ερωτώμαι κάθε φορά"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Μέχρι την απενεργοποίηση"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Μόλις τώρα"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index a00f018f0d3c..747fdc77cab8 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index a00f018f0d3c..747fdc77cab8 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index a00f018f0d3c..747fdc77cab8 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index a00f018f0d3c..747fdc77cab8 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index 0b70def9a93c..33b9f1db3d59 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> </resources> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 9085adbf103b..f665b77b836c 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"el <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Hasta que lo desactives"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Recién"</string> </resources> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 038dfd4b309a..9cdde92ee564 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"Fecha: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Hasta que se desactive"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Justo ahora"</string> </resources> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index d9a93c980e82..2b4432120ee5 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"– <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kestus"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Küsi iga kord"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Kuni välja lülitate"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Äsja"</string> </resources> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index 739eaf0ff028..4ad60b320e65 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"data: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Iraupena"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Galdetu beti"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Desaktibatu arte"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Oraintxe"</string> </resources> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 18fb3e2d3170..1d0882145c83 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"روز <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"مدت"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"هربار پرسیده شود"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"تا زمانیکه آن را خاموش کنید"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"هماکنون"</string> </resources> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 38584862cfd7..7c253fc2a886 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kesto"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Kysy aina"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Kunnes poistat sen käytöstä"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Äsken"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 36efa53d418e..99906ca3c1ad 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"le <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durée"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Jusqu\'à la désactivation"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"À l\'instant"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 9cadd3c26bdf..7a51faa87236 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"le <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durée"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Jusqu\'à la désactivation"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"À l\'instant"</string> </resources> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 82a56e69db6f..5bc61631abb1 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"na seguinte data: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duración"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar sempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Ata a desactivación"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora mesmo"</string> </resources> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 2af406de54a5..b523ae274380 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> વાગ્યે"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"અવધિ"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"દર વખતે પૂછો"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"તમે બંધ ન કરો ત્યાં સુધી"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"હમણાં જ"</string> </resources> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 8eb41b5a51f6..9c83640b2fd4 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo sad"</string> </resources> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 5fee9339c9d0..25d11aa97b5e 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"ezen a napon: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Időtartam"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Mindig kérdezzen rá"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Kikapcsolásig"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Az imént"</string> </resources> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 8f68ac7b8206..f811312c22f6 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ին"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Տևողություն"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Հարցնել ամեն անգամ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Մինչև չանջատեք"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Հենց նոր"</string> </resources> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 7c18a83220c4..39a88e5e5b71 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"pada <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durasi"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Selalu tanya"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Sampai Anda menonaktifkannya"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Baru saja"</string> </resources> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 0f2d55ea8b74..afb10a9b16ba 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"á/í <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Lengd"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spyrja í hvert skipti"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Þar til þú slekkur"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Rétt í þessu"</string> </resources> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index f44fbb3e817c..24eef7af6b13 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"il giorno <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durata"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Chiedi ogni volta"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Fino alla disattivazione"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Adesso"</string> </resources> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index c1d858cf0546..e9c44c957f7f 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"ב-<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"משך"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"שאל בכל פעם"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"עד הכיבוי"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"הרגע"</string> </resources> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index d59c611a417b..0cc2d17d4c22 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"期間"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"毎回確認"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"OFF にするまで"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"たった今"</string> </resources> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index 4418bef9bd8d..daca5b9c8322 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ზე"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ხანგრძლივობა"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ყოველთვის მკითხეთ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"გამორთვამდე"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ახლახან"</string> </resources> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 88669a7bb28f..b95d6e9e19d1 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"Уақыты: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ұзақтығы"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Әрдайым сұрау"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Өшірілгенге дейін"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Дәл қазір"</string> </resources> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 509dafa1c046..5bf38c0e64ea 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"នៅថ្ងៃ <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"រយៈពេល"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"សួរគ្រប់ពេល"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"រហូតទាល់តែអ្នកបិទ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"អម្បាញ់មិញ"</string> </resources> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index f01fac786edc..923547f821bc 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ಕ್ಕೆ"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ಅವಧಿ"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ಪ್ರತಿ ಬಾರಿ ಕೇಳಿ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ನೀವು ಆಫ್ ಮಾಡುವವರೆಗೆ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ಇದೀಗ"</string> </resources> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index 34fa2ae1827d..9bac29d97844 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"일시: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"지속 시간"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"항상 확인"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"사용 중지할 때까지"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"조금 전"</string> </resources> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index 0a3bd80fc9f2..523fabea585d 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Узактыгы"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ар дайым суралсын"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Бул функция өчүрүлгөнгө чейин"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Азыр эле"</string> </resources> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index 2853fee84462..f85a69150a58 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"ເວລາ <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ໄລຍະເວລາ"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ຖາມທຸກເທື່ອ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ຈົນກວ່າທ່ານຈະປິດ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ຕອນນີ້"</string> </resources> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 3866922877e8..fc2924f66812 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trukmė"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Klausti kaskart"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Kol išjungsite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ką tik"</string> </resources> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 6133f7f62a66..6ce5e8e86310 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ilgums"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vaicāt katru reizi"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Līdz brīdim, kad izslēgsiet"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Tikko"</string> </resources> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 0a27a06098ab..c6c508e2c12c 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"во <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Времетраење"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Секогаш прашувај"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Додека не го исклучите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Неодамнешни"</string> </resources> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 8601d97c940e..6b6462c083b3 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-ന്"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ദൈർഘ്യം"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"എപ്പോഴും ചോദിക്കുക"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"നിങ്ങൾ ഓഫാക്കുന്നത് വരെ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ഇപ്പോൾ"</string> </resources> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 62dd1e946d47..56f1cc0bc569 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>-д"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Хугацаа"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Тухай бүрт асуух"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Таныг унтраах хүртэл"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Дөнгөж сая"</string> </resources> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 9428338c527b..7485886673bf 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> रोजी"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"कालावधी"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक वेळी विचारा"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"तुम्ही बंद करेपर्यंत"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"आत्ताच"</string> </resources> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 47d4cbc1b36d..fdb8702a91e5 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"pada <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tempoh"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Tanya setiap kali"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Sehingga anda matikan"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sebentar tadi"</string> </resources> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 40e351adbc09..dc5d924a13c4 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> တွင်"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ကြာချိန်"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"အမြဲမေးပါ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"သင်ပိတ်လိုက်သည် အထိ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ယခုလေးတင်"</string> </resources> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index a9637c15416a..460eb5781cb1 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varighet"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spør hver gang"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Til du slår av"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Nå nettopp"</string> </resources> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index 6ae6a22bf5f2..763b60c539a9 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> मा"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"अवधि"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक पटक सोध्नुहोस्"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"तपाईंले निष्क्रिय नपार्दासम्म"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"अहिले भर्खरै"</string> </resources> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index e6a7e0a0d9b6..fa30827fca4d 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duur"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Altijd vragen"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Totdat je uitschakelt"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Zojuist"</string> </resources> diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index 3532e897f7fd..ecdc49e7d418 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ବେଳେ"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ଅବଧି"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ପ୍ରତ୍ୟେକ ଥର ପଚାରନ୍ତୁ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ଆପଣ ବନ୍ଦ ନକରିବା ପର୍ଯ୍ୟନ୍ତ DND ଅନ୍ ରହିବ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ଏହିକ୍ଷଣି"</string> </resources> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index ff1f4f334aed..63c88cd23147 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> ਵਜੇ"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ਮਿਆਦ"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ਹਰ ਵਾਰ ਪੁੱਛੋ"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਬੰਦ ਨਹੀਂ ਕਰਦੇ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ਹੁਣੇ ਹੀ"</string> </resources> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 7ff80c9308f8..7c3da214e7bb 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"w: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Czas"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Zawsze pytaj"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dopóki nie wyłączysz"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Przed chwilą"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 585aee6e3a0d..192e532489bb 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Até você desativar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index e41acde71a1e..01bc0fcf8443 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"no(a) <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Até ser desativado"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora mesmo"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 585aee6e3a0d..192e532489bb 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duração"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Até você desativar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora"</string> </resources> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 8024047e1b6e..cc74bd3d7ea6 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Durată"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Întreabă de fiecare dată"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Până când dezactivați"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Chiar acum"</string> </resources> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 494d107cf373..5e1869ff5a01 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Длительность"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Всегда спрашивать"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Пока вы не отключите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Только что"</string> </resources> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 21c96f1b4ff1..1be890b0da3e 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>හිදී"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"කාල සීමාව"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"සෑම විටම ඉල්ලන්න"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ඔබ ක්රියාවිරහිත කරන තුරු"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"මේ දැන්"</string> </resources> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 4a92357518e6..d1ec450118b2 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"o <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trvanie"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vždy sa opýtať"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dokiaľ túto funkciu nevypnete"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Teraz"</string> </resources> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index fb17c17900b9..46325509f8db 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"v <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vedno vprašaj"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Dokler ne izklopite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Pravkar"</string> </resources> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index a8e9a76e9c38..24cdcb1e54ab 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"ditën <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Kohëzgjatja"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pyet çdo herë"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Deri sa ta çaktivizosh"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Pikërisht tani"</string> </resources> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index fe158a0645f7..ebefc65483bf 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -450,7 +450,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Трајање"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Увек питај"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Док не искључите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Управо сада"</string> </resources> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 99e915a0ca8b..c83438b8ece7 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"på <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Varaktighet"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Fråga varje gång"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Tills du inaktiverar funktionen"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Nyss"</string> </resources> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index ce06a62ac28a..8be74eacf53a 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"siku ya <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Muda"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uliza kila wakati"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Hadi utakapoizima"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sasa hivi"</string> </resources> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 9c8a2f19ba7a..225005dc2336 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"அலாரம்: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"கால அளவு"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ஒவ்வொரு முறையும் கேள்"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"ஆஃப் செய்யும் வரை"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"சற்றுமுன்"</string> </resources> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index cb2403c1a1ae..531001ccc481 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"వ్యవధి"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ప్రతిసారి అడుగు"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"మీరు ఆఫ్ చేసే వరకు"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ఇప్పుడే"</string> </resources> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index e89a4d027e13..cf214e1878d8 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"วัน<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"ระยะเวลา"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ถามทุกครั้ง"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"จนกว่าคุณจะปิด"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"เมื่อสักครู่"</string> </resources> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index e527eec87ba0..aee95eaa8505 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"sa <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Tagal"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Magtanong palagi"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Hanggang sa i-off mo"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ngayon lang"</string> </resources> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 2f7f2f638b27..e4b23f96e455 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"zaman: <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Süre"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Her zaman sor"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Siz kapatana kadar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Az önce"</string> </resources> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index cb99b5d56b5e..958a3d28a8d2 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -451,7 +451,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Тривалість"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Запитувати щоразу"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Доки ви не вимкнете"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Щойно"</string> </resources> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index af5e83c36fd3..31f0a33b3e64 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g> بجے"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"مدت"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ہر بار پوچھیں"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"یہاں تک کہ آپ آف کر دیں"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ابھی ابھی"</string> </resources> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 0072db826e08..7ff458864b8c 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Davomiyligi"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Har safar so‘ralsin"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Bekor qilinmaguncha"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Hozir"</string> </resources> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index b3b5a458f213..daa9335a3630 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"vào <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Thời lượng"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Luôn hỏi"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Cho đến khi bạn tắt"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Vừa xong"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index cdd069b1c81e..6cb27e990a3b 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"时间:<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"持续时间"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都询问"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"直到您将其关闭"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"刚刚"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index f7b6fc17877f..16039c1c1a58 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"持續時間"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"直至您關閉為止"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"剛剛"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 6dc0720a5062..ed6863889dd7 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"時間長度"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"直到你關閉為止"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"剛剛"</string> </resources> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index ae552fc4727f..957584adb73c 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -449,7 +449,6 @@ <string name="alarm_template_far" msgid="3779172822607461675">"nge-<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Ubude besikhathi"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Buza njalo"</string> - <!-- no translation found for zen_mode_forever (2704305038191592967) --> - <skip /> + <string name="zen_mode_forever" msgid="2704305038191592967">"Uze uvale isikrini"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Khona manje"</string> </resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java index 1ce4484b8a41..a71041045df2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java @@ -42,7 +42,6 @@ public class A2dpProfile implements LocalBluetoothProfile { private BluetoothA2dp mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; static final ParcelUuid[] SINK_UUIDS = { @@ -71,7 +70,7 @@ public class A2dpProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "A2dpProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(A2dpProfile.this, BluetoothProfile.STATE_CONNECTED); device.refresh(); @@ -94,14 +93,12 @@ public class A2dpProfile implements LocalBluetoothProfile { return BluetoothProfile.A2DP; } - A2dpProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + A2dpProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { mContext = context; - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new A2dpServiceListener(), + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new A2dpServiceListener(), BluetoothProfile.A2DP); } @@ -123,20 +120,6 @@ public class A2dpProfile implements LocalBluetoothProfile { public boolean connect(BluetoothDevice device) { if (mService == null) return false; - int max_connected_devices = mLocalAdapter.getMaxConnectedAudioDevices(); - if (max_connected_devices == 1) { - // Original behavior: disconnect currently connected device - List<BluetoothDevice> sinks = getConnectedDevices(); - if (sinks != null) { - for (BluetoothDevice sink : sinks) { - if (sink.equals(device)) { - Log.w(TAG, "Connecting to device " + device + " : disconnect skipped"); - continue; - } - mService.disconnect(sink); - } - } - } return mService.connect(device); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpSinkProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpSinkProfile.java index 6a4aa0abfd20..0c4e02b59bec 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpSinkProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpSinkProfile.java @@ -38,7 +38,6 @@ final class A2dpSinkProfile implements LocalBluetoothProfile { private BluetoothA2dpSink mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; static final ParcelUuid[] SRC_UUIDS = { @@ -67,7 +66,7 @@ final class A2dpSinkProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "A2dpSinkProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(A2dpSinkProfile.this, BluetoothProfile.STATE_CONNECTED); device.refresh(); @@ -90,13 +89,11 @@ final class A2dpSinkProfile implements LocalBluetoothProfile { return BluetoothProfile.A2DP_SINK; } - A2dpSinkProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + A2dpSinkProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new A2dpSinkServiceListener(), + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new A2dpSinkServiceListener(), BluetoothProfile.A2DP_SINK); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index a3f3b59da895..466d02bd3bcf 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -150,7 +150,7 @@ public class BluetoothEventManager { for (BluetoothDevice device : bondedDevices) { CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); if (cachedDevice == null) { - cachedDevice = mDeviceManager.addDevice(mLocalAdapter, device); + cachedDevice = mDeviceManager.addDevice(device); dispatchDeviceAdded(cachedDevice); deviceAdded = true; } @@ -282,7 +282,7 @@ public class BluetoothEventManager { // Skip for now, there's a bluez problem and we are not getting uuids even for 2.1. CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); if (cachedDevice == null) { - cachedDevice = mDeviceManager.addDevice(mLocalAdapter, device); + cachedDevice = mDeviceManager.addDevice(device); Log.d(TAG, "DeviceFoundHandler created new CachedBluetoothDevice: " + cachedDevice); } @@ -348,8 +348,7 @@ public class BluetoothEventManager { if (cachedDevice == null) { Log.w(TAG, "Got bonding state changed for " + device + ", but we have no record of that device."); - - cachedDevice = mDeviceManager.addDevice(mLocalAdapter, device); + cachedDevice = mDeviceManager.addDevice(device); dispatchDeviceAdded(cachedDevice); } } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index b0ff9e3faac3..5ecbe80b9645 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -48,7 +48,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private static final String TAG = "CachedBluetoothDevice"; private final Context mContext; - private final LocalBluetoothAdapter mLocalAdapter; + private final BluetoothAdapter mLocalAdapter; private final LocalBluetoothProfileManager mProfileManager; private final BluetoothDevice mDevice; //TODO: consider remove, BluetoothDevice.getName() is already cached @@ -143,7 +143,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> Log.d(TAG, "onProfileStateChanged: profile " + profile + " newProfileState " + newProfileState); } - if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_TURNING_OFF) + if (mLocalAdapter.getState() == BluetoothAdapter.STATE_TURNING_OFF) { if (BluetoothUtils.D) { Log.d(TAG, " BT Turninig Off...Profile conn state change ignored..."); @@ -179,11 +179,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } CachedBluetoothDevice(Context context, - LocalBluetoothAdapter adapter, LocalBluetoothProfileManager profileManager, BluetoothDevice device) { mContext = context; - mLocalAdapter = adapter; + mLocalAdapter = BluetoothAdapter.getDefaultAdapter(); mProfileManager = profileManager; mDevice = device; mProfileConnectionState = new HashMap<LocalBluetoothProfile, Integer>(); diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java index 475ece853291..f8543fc150e1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java @@ -107,10 +107,10 @@ public class CachedBluetoothDeviceManager { * @param device the address of the new Bluetooth device * @return the newly created CachedBluetoothDevice object */ - public CachedBluetoothDevice addDevice(LocalBluetoothAdapter adapter, BluetoothDevice device) { + public CachedBluetoothDevice addDevice(BluetoothDevice device) { LocalBluetoothProfileManager profileManager = mBtManager.getProfileManager(); - CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, adapter, - profileManager, device); + CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, profileManager, + device); if (profileManager.getHearingAidProfile() != null && profileManager.getHearingAidProfile().getHiSyncId(newDevice.getDevice()) != BluetoothHearingAid.HI_SYNC_ID_INVALID) { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java index e28438208995..99f550b9f6da 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java @@ -41,7 +41,6 @@ public class HeadsetProfile implements LocalBluetoothProfile { private BluetoothHeadset mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final LocalBluetoothProfileManager mProfileManager; @@ -70,7 +69,7 @@ public class HeadsetProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "HeadsetProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(HeadsetProfile.this, BluetoothProfile.STATE_CONNECTED); @@ -97,13 +96,11 @@ public class HeadsetProfile implements LocalBluetoothProfile { return BluetoothProfile.HEADSET; } - HeadsetProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + HeadsetProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new HeadsetServiceListener(), + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new HeadsetServiceListener(), BluetoothProfile.HEADSET); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java index a0cf105bcfbe..6eaa62049e4c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidProfile.java @@ -38,7 +38,6 @@ public class HearingAidProfile implements LocalBluetoothProfile { private BluetoothHearingAid mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; static final String NAME = "HearingAid"; @@ -64,7 +63,7 @@ public class HearingAidProfile implements LocalBluetoothProfile { if (V) { Log.d(TAG, "HearingAidProfile found new device: " + nextDevice); } - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(HearingAidProfile.this, BluetoothProfile.STATE_CONNECTED); @@ -92,15 +91,13 @@ public class HearingAidProfile implements LocalBluetoothProfile { return BluetoothProfile.HEARING_AID; } - HearingAidProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + HearingAidProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { mContext = context; - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new HearingAidServiceListener(), - BluetoothProfile.HEARING_AID); + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, + new HearingAidServiceListener(), BluetoothProfile.HEARING_AID); } public boolean isConnectable() { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HfpClientProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HfpClientProfile.java index b8c72fba27cc..4b4db753aba9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HfpClientProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HfpClientProfile.java @@ -41,7 +41,6 @@ final class HfpClientProfile implements LocalBluetoothProfile { private BluetoothHeadsetClient mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; static final ParcelUuid[] SRC_UUIDS = { @@ -71,7 +70,7 @@ final class HfpClientProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "HfpClient profile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged( HfpClientProfile.this, BluetoothProfile.STATE_CONNECTED); @@ -97,14 +96,12 @@ final class HfpClientProfile implements LocalBluetoothProfile { return BluetoothProfile.HEADSET_CLIENT; } - HfpClientProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + HfpClientProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new HfpClientServiceListener(), - BluetoothProfile.HEADSET_CLIENT); + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, + new HfpClientServiceListener(), BluetoothProfile.HEADSET_CLIENT); } @Override diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidDeviceProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidDeviceProfile.java index f9da1094e488..8c4bff5bc4ff 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidDeviceProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidDeviceProfile.java @@ -39,7 +39,6 @@ public class HidDeviceProfile implements LocalBluetoothProfile { private static final int PREFERRED_VALUE = -1; private static final boolean DEBUG = true; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final LocalBluetoothProfileManager mProfileManager; static final String NAME = "HID DEVICE"; @@ -47,14 +46,12 @@ public class HidDeviceProfile implements LocalBluetoothProfile { private BluetoothHidDevice mService; private boolean mIsProfileReady; - HidDeviceProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + HidDeviceProfile(Context context,CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - adapter.getProfileProxy(context, new HidDeviceServiceListener(), - BluetoothProfile.HID_DEVICE); + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, + new HidDeviceServiceListener(), BluetoothProfile.HID_DEVICE); } // These callbacks run on the main thread. @@ -73,7 +70,7 @@ public class HidDeviceProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "HidProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } Log.d(TAG, "Connection status changed: " + device); device.onProfileStateChanged(HidDeviceProfile.this, diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java index c5ba58cbe959..701ef001e5a6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java @@ -38,7 +38,6 @@ public class HidProfile implements LocalBluetoothProfile { private BluetoothHidHost mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final LocalBluetoothProfileManager mProfileManager; @@ -62,7 +61,7 @@ public class HidProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "HidProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(HidProfile.this, BluetoothProfile.STATE_CONNECTED); device.refresh(); @@ -85,13 +84,12 @@ public class HidProfile implements LocalBluetoothProfile { return BluetoothProfile.HID_HOST; } - HidProfile(Context context, LocalBluetoothAdapter adapter, + HidProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - adapter.getProfileProxy(context, new HidHostServiceListener(), + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new HidHostServiceListener(), BluetoothProfile.HID_HOST); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java index 5e7f6d42574c..8f40ab47fe1b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java @@ -249,10 +249,6 @@ public class LocalBluetoothAdapter { return mAdapter.getRemoteDevice(address); } - public int getMaxConnectedAudioDevices() { - return mAdapter.getMaxConnectedAudioDevices(); - } - public List<Integer> getSupportedProfiles() { return mAdapter.getSupportedProfiles(); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java index 3ebbf7e57f72..8bb8210631ed 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -18,6 +18,7 @@ package com.android.settingslib.bluetooth; import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothA2dpSink; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHeadsetClient; @@ -79,7 +80,6 @@ public class LocalBluetoothProfileManager { } private final Context mContext; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final BluetoothEventManager mEventManager; @@ -111,14 +111,13 @@ public class LocalBluetoothProfileManager { BluetoothEventManager eventManager) { mContext = context; - mLocalAdapter = adapter; mDeviceManager = deviceManager; mEventManager = eventManager; mUsePbapPce = mContext.getResources().getBoolean(R.bool.enable_pbap_pce_profile); // MAP Client is typically used in the same situations as PBAP Client mUseMapClient = mContext.getResources().getBoolean(R.bool.enable_pbap_pce_profile); // pass this reference to adapter and event manager (circular dependency) - mLocalAdapter.setProfileManager(this); + adapter.setProfileManager(this); updateLocalProfiles(); if (DEBUG) Log.d(TAG, "LocalBluetoothProfileManager construction complete"); @@ -128,26 +127,26 @@ public class LocalBluetoothProfileManager { * create profile instance according to bluetooth supported profile list */ void updateLocalProfiles() { - List<Integer> supportedList = mLocalAdapter.getSupportedProfiles(); + List<Integer> supportedList = BluetoothAdapter.getDefaultAdapter().getSupportedProfiles(); if (CollectionUtils.isEmpty(supportedList)) { if(DEBUG) Log.d(TAG, "supportedList is null"); return; } if (mA2dpProfile == null && supportedList.contains(BluetoothProfile.A2DP)) { if(DEBUG) Log.d(TAG, "Adding local A2DP profile"); - mA2dpProfile = new A2dpProfile(mContext, mLocalAdapter, mDeviceManager, this); + mA2dpProfile = new A2dpProfile(mContext, mDeviceManager, this); addProfile(mA2dpProfile, A2dpProfile.NAME, BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); } if (mA2dpSinkProfile == null && supportedList.contains(BluetoothProfile.A2DP_SINK)) { if(DEBUG) Log.d(TAG, "Adding local A2DP SINK profile"); - mA2dpSinkProfile = new A2dpSinkProfile(mContext, mLocalAdapter, mDeviceManager, this); + mA2dpSinkProfile = new A2dpSinkProfile(mContext, mDeviceManager, this); addProfile(mA2dpSinkProfile, A2dpSinkProfile.NAME, BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED); } if (mHeadsetProfile == null && supportedList.contains(BluetoothProfile.HEADSET)) { if (DEBUG) Log.d(TAG, "Adding local HEADSET profile"); - mHeadsetProfile = new HeadsetProfile(mContext, mLocalAdapter, mDeviceManager, this); + mHeadsetProfile = new HeadsetProfile(mContext, mDeviceManager, this); addHeadsetProfile(mHeadsetProfile, HeadsetProfile.NAME, BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED, BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED, @@ -155,7 +154,7 @@ public class LocalBluetoothProfileManager { } if (mHfpClientProfile == null && supportedList.contains(BluetoothProfile.HEADSET_CLIENT)) { if(DEBUG) Log.d(TAG, "Adding local HfpClient profile"); - mHfpClientProfile = new HfpClientProfile(mContext, mLocalAdapter, mDeviceManager, this); + mHfpClientProfile = new HfpClientProfile(mContext, mDeviceManager, this); addHeadsetProfile(mHfpClientProfile, HfpClientProfile.NAME, BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED, BluetoothHeadsetClient.ACTION_AUDIO_STATE_CHANGED, @@ -165,13 +164,13 @@ public class LocalBluetoothProfileManager { if (mMapClientProfile == null && supportedList.contains(BluetoothProfile.MAP_CLIENT)) { if(DEBUG) Log.d(TAG, "Adding local MAP CLIENT profile"); mMapClientProfile = - new MapClientProfile(mContext, mLocalAdapter, mDeviceManager,this); + new MapClientProfile(mContext, mDeviceManager,this); addProfile(mMapClientProfile, MapClientProfile.NAME, BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED); } } else if (mMapProfile == null && supportedList.contains(BluetoothProfile.MAP)) { if(DEBUG) Log.d(TAG, "Adding local MAP profile"); - mMapProfile = new MapProfile(mContext, mLocalAdapter, mDeviceManager, this); + mMapProfile = new MapProfile(mContext, mDeviceManager, this); addProfile(mMapProfile, MapProfile.NAME, BluetoothMap.ACTION_CONNECTION_STATE_CHANGED); } if (mOppProfile == null && supportedList.contains(BluetoothProfile.OPP)) { @@ -182,26 +181,26 @@ public class LocalBluetoothProfileManager { } if (mHearingAidProfile == null && supportedList.contains(BluetoothProfile.HEARING_AID)) { if(DEBUG) Log.d(TAG, "Adding local Hearing Aid profile"); - mHearingAidProfile = new HearingAidProfile(mContext, mLocalAdapter, mDeviceManager, + mHearingAidProfile = new HearingAidProfile(mContext, mDeviceManager, this); addProfile(mHearingAidProfile, HearingAidProfile.NAME, BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED); } if (mHidProfile == null && supportedList.contains(BluetoothProfile.HID_HOST)) { if(DEBUG) Log.d(TAG, "Adding local HID_HOST profile"); - mHidProfile = new HidProfile(mContext, mLocalAdapter, mDeviceManager, this); + mHidProfile = new HidProfile(mContext, mDeviceManager, this); addProfile(mHidProfile, HidProfile.NAME, BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED); } if (mHidDeviceProfile == null && supportedList.contains(BluetoothProfile.HID_DEVICE)) { if(DEBUG) Log.d(TAG, "Adding local HID_DEVICE profile"); - mHidDeviceProfile = new HidDeviceProfile(mContext, mLocalAdapter, mDeviceManager, this); + mHidDeviceProfile = new HidDeviceProfile(mContext, mDeviceManager, this); addProfile(mHidDeviceProfile, HidDeviceProfile.NAME, BluetoothHidDevice.ACTION_CONNECTION_STATE_CHANGED); } if (mPanProfile == null && supportedList.contains(BluetoothProfile.PAN)) { if(DEBUG) Log.d(TAG, "Adding local PAN profile"); - mPanProfile = new PanProfile(mContext, mLocalAdapter); + mPanProfile = new PanProfile(mContext); addPanProfile(mPanProfile, PanProfile.NAME, BluetoothPan.ACTION_CONNECTION_STATE_CHANGED); } @@ -214,8 +213,7 @@ public class LocalBluetoothProfileManager { if (mUsePbapPce && mPbapClientProfile == null && supportedList.contains( BluetoothProfile.PBAP_CLIENT)) { if(DEBUG) Log.d(TAG, "Adding local PBAP Client profile"); - mPbapClientProfile = new PbapClientProfile(mContext, mLocalAdapter, mDeviceManager, - this); + mPbapClientProfile = new PbapClientProfile(mContext, mDeviceManager,this); addProfile(mPbapClientProfile, PbapClientProfile.NAME, BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED); } @@ -271,7 +269,7 @@ public class LocalBluetoothProfileManager { CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); if (cachedDevice == null) { Log.w(TAG, "StateChangedHandler found new device: " + device); - cachedDevice = mDeviceManager.addDevice(mLocalAdapter, device); + cachedDevice = mDeviceManager.addDevice(device); } onReceiveInternal(intent, cachedDevice); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java index 63af24c30f4a..7d334eb31a19 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java @@ -41,7 +41,6 @@ public final class MapClientProfile implements LocalBluetoothProfile { private BluetoothMapClient mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final LocalBluetoothProfileManager mProfileManager; @@ -71,7 +70,7 @@ public final class MapClientProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "MapProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(MapClientProfile.this, BluetoothProfile.STATE_CONNECTED); @@ -99,14 +98,12 @@ public final class MapClientProfile implements LocalBluetoothProfile { return BluetoothProfile.MAP_CLIENT; } - MapClientProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + MapClientProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new MapClientServiceListener(), - BluetoothProfile.MAP_CLIENT); + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, + new MapClientServiceListener(), BluetoothProfile.MAP_CLIENT); } public boolean isConnectable() { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java index 2c63d500b68f..689669faf60d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java @@ -41,7 +41,6 @@ public class MapProfile implements LocalBluetoothProfile { private BluetoothMap mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; private final LocalBluetoothProfileManager mProfileManager; @@ -70,7 +69,7 @@ public class MapProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "MapProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(MapProfile.this, BluetoothProfile.STATE_CONNECTED); @@ -98,13 +97,11 @@ public class MapProfile implements LocalBluetoothProfile { return BluetoothProfile.MAP; } - MapProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + MapProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new MapServiceListener(), + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new MapServiceListener(), BluetoothProfile.MAP); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java index e204d03cb327..02afe8db7201 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java @@ -38,7 +38,6 @@ public class PanProfile implements LocalBluetoothProfile { private BluetoothPan mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; // Tethering direction for each device private final HashMap<BluetoothDevice, Integer> mDeviceRoleMap = @@ -74,9 +73,8 @@ public class PanProfile implements LocalBluetoothProfile { return BluetoothProfile.PAN; } - PanProfile(Context context, LocalBluetoothAdapter adapter) { - mLocalAdapter = adapter; - mLocalAdapter.getProfileProxy(context, new PanServiceListener(), + PanProfile(Context context) { + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new PanServiceListener(), BluetoothProfile.PAN); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapClientProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapClientProfile.java index d34ad30c2628..ad3506fc2611 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapClientProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapClientProfile.java @@ -39,7 +39,6 @@ public final class PbapClientProfile implements LocalBluetoothProfile { private BluetoothPbapClient mService; private boolean mIsProfileReady; - private final LocalBluetoothAdapter mLocalAdapter; private final CachedBluetoothDeviceManager mDeviceManager; static final ParcelUuid[] SRC_UUIDS = { @@ -69,7 +68,7 @@ public final class PbapClientProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "PbapClientProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(PbapClientProfile.this, BluetoothProfile.STATE_CONNECTED); device.refresh(); @@ -105,14 +104,12 @@ public final class PbapClientProfile implements LocalBluetoothProfile { return BluetoothProfile.PBAP_CLIENT; } - PbapClientProfile(Context context, LocalBluetoothAdapter adapter, - CachedBluetoothDeviceManager deviceManager, + PbapClientProfile(Context context, CachedBluetoothDeviceManager deviceManager, LocalBluetoothProfileManager profileManager) { - mLocalAdapter = adapter; mDeviceManager = deviceManager; mProfileManager = profileManager; - mLocalAdapter.getProfileProxy(context, new PbapClientServiceListener(), - BluetoothProfile.PBAP_CLIENT); + BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, + new PbapClientServiceListener(), BluetoothProfile.PBAP_CLIENT); } public boolean isConnectable() { diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java index f1d73ed26390..f0e259e86456 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/SapProfile.java @@ -69,7 +69,7 @@ final class SapProfile implements LocalBluetoothProfile { // we may add a new device here, but generally this should not happen if (device == null) { Log.w(TAG, "SapProfile found new device: " + nextDevice); - device = mDeviceManager.addDevice(mLocalAdapter, nextDevice); + device = mDeviceManager.addDevice(nextDevice); } device.onProfileStateChanged(SapProfile.this, BluetoothProfile.STATE_CONNECTED); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java index b2ab45ce9dc5..29831a89027a 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java @@ -19,11 +19,11 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.bluetooth.BluetoothA2dp; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothCodecConfig; import android.bluetooth.BluetoothCodecStatus; import android.bluetooth.BluetoothDevice; @@ -33,21 +33,23 @@ import android.content.res.Resources; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; +import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; @RunWith(SettingsLibRobolectricTestRunner.class) +@Config(shadows = {ShadowBluetoothAdapter.class}) public class A2dpProfileTest { @Mock Context mContext; @Mock - LocalBluetoothAdapter mAdapter; - @Mock CachedBluetoothDeviceManager mDeviceManager; @Mock LocalBluetoothProfileManager mProfileManager; @@ -58,20 +60,14 @@ public class A2dpProfileTest { BluetoothProfile.ServiceListener mServiceListener; A2dpProfile mProfile; + private ShadowBluetoothAdapter mShadowBluetoothAdapter; @Before public void setUp() { MockitoAnnotations.initMocks(this); - - // Capture the A2dpServiceListener our A2dpProfile will pass during its constructor, so that - // we can call its onServiceConnected method and get it to use our mock BluetoothA2dp - // object. - doAnswer((invocation) -> { - mServiceListener = (BluetoothProfile.ServiceListener) invocation.getArguments()[1]; - return null; - }).when(mAdapter).getProfileProxy(any(Context.class), any(), eq(BluetoothProfile.A2DP)); - - mProfile = new A2dpProfile(mContext, mAdapter, mDeviceManager, mProfileManager); + mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); + mProfile = new A2dpProfile(mContext, mDeviceManager, mProfileManager); + mServiceListener = mShadowBluetoothAdapter.getServiceListener(); mServiceListener.onServiceConnected(BluetoothProfile.A2DP, mBluetoothA2dp); } 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 b33e9c3dd482..2d34f237a555 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 @@ -21,7 +21,6 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; @@ -59,8 +58,6 @@ public class CachedBluetoothDeviceManagerTest { private final BluetoothClass DEVICE_CLASS_2 = new BluetoothClass(BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE); @Mock - private LocalBluetoothAdapter mLocalAdapter; - @Mock private LocalBluetoothProfileManager mLocalProfileManager; @Mock private LocalBluetoothManager mLocalBluetoothManager; @@ -110,18 +107,17 @@ public class CachedBluetoothDeviceManagerTest { when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager); when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager); - when(mLocalAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); when(mHfpProfile.isProfileReady()).thenReturn(true); when(mA2dpProfile.isProfileReady()).thenReturn(true); when(mPanProfile.isProfileReady()).thenReturn(true); when(mHearingAidProfile.isProfileReady()).thenReturn(true); mCachedDeviceManager = new CachedBluetoothDeviceManager(mContext, mLocalBluetoothManager); mCachedDevice1 = spy( - new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice1)); + new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice1)); mCachedDevice2 = spy( - new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice2)); + new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice2)); mCachedDevice3 = spy( - new CachedBluetoothDevice(mContext, mLocalAdapter, mLocalProfileManager, mDevice3)); + new CachedBluetoothDevice(mContext, mLocalProfileManager, mDevice3)); } /** @@ -129,11 +125,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testAddDevice_validCachedDevices_devicesAdded() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); Collection<CachedBluetoothDevice> devices = mCachedDeviceManager.getCachedDevicesCopy(); @@ -149,8 +143,7 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testGetName_validCachedDevice_nameFound() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); assertThat(mCachedDeviceManager.getName(mDevice1)).isEqualTo(DEVICE_ALIAS_1); } @@ -160,8 +153,7 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnDeviceNameUpdated_validName_nameUpdated() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); assertThat(cachedDevice1.getName()).isEqualTo(DEVICE_ALIAS_1); @@ -176,11 +168,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testClearNonBondedDevices_bondedAndNonBondedDevices_nonBondedDevicesCleared() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); @@ -231,11 +221,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnHiSyncIdChanged_sameHiSyncId_populateInDifferentLists() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); // Since both devices do not have hiSyncId, they should be added in mCachedDevices. @@ -266,11 +254,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnHiSyncIdChanged_sameHiSyncIdAndOneConnected_chooseConnectedDevice() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); cachedDevice1.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); cachedDevice2.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); @@ -303,11 +289,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnHiSyncIdChanged_differentHiSyncId_populateInSameList() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); // Since both devices do not have hiSyncId, they should be added in mCachedDevices. @@ -339,8 +323,7 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnProfileConnectionStateChanged_singleDeviceConnected_visible() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); cachedDevice1.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); @@ -377,11 +360,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnProfileConnectionStateChanged_twoDevicesConnected_oneDeviceVisible() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); cachedDevice1.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); cachedDevice2.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); @@ -431,11 +412,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnProfileConnectionStateChanged_twoDevicesDisconnected_oneDeviceVisible() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); cachedDevice1.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); cachedDevice2.onProfileStateChanged(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED); @@ -486,11 +465,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnDeviceUnpaired_bothHearingAidsPaired_removesItsPairFromList() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); cachedDevice1.setHiSyncId(HISYNCID1); @@ -518,14 +495,11 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnDeviceUnpaired_bothHearingAidsNotPaired_doesNotRemoveAnyDeviceFromList() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); - CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice3); + CachedBluetoothDevice cachedDevice3 = mCachedDeviceManager.addDevice(mDevice3); assertThat(cachedDevice2).isNotNull(); cachedDevice1.setHiSyncId(HISYNCID1); @@ -570,8 +544,7 @@ public class CachedBluetoothDeviceManagerTest { doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1); doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice2); - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); // The first hearing aid device should be populated in mCachedDevice and // mCachedDevicesMapForHearingAids. @@ -581,8 +554,7 @@ public class CachedBluetoothDeviceManagerTest { assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values()) .contains(cachedDevice1); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); // The second hearing aid device should be populated in mHearingAidDevicesNotAddedInCache. assertThat(mCachedDeviceManager.getCachedDevicesCopy()).hasSize(1); @@ -599,8 +571,7 @@ public class CachedBluetoothDeviceManagerTest { .getHearingAidProfile(); doAnswer((invocation) -> HISYNCID1).when(mHearingAidProfile).getHiSyncId(mDevice1); doAnswer((invocation) -> HISYNCID2).when(mHearingAidProfile).getHiSyncId(mDevice2); - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); // The first hearing aid device should be populated in mCachedDevice and // mCachedDevicesMapForHearingAids. @@ -610,8 +581,7 @@ public class CachedBluetoothDeviceManagerTest { assertThat(mCachedDeviceManager.mCachedDevicesMapForHearingAids.values()) .contains(cachedDevice1); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); // The second hearing aid device should also be populated in mCachedDevice // and mCachedDevicesMapForHearingAids as its not a pair of the first one. @@ -680,8 +650,7 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnBtClassChanged_validBtClass_classChanged() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); assertThat(cachedDevice1.getBtClass()).isEqualTo(DEVICE_CLASS_1); @@ -696,8 +665,7 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnDeviceDisappeared_deviceBondedUnbonded_unbondedDeviceDisappeared() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); @@ -712,11 +680,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnActiveDeviceChanged_connectedDevices_activeDeviceChanged() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); @@ -777,11 +743,9 @@ public class CachedBluetoothDeviceManagerTest { */ @Test public void testOnActiveDeviceChanged_withA2dpAndHearingAid() { - CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice1); + CachedBluetoothDevice cachedDevice1 = mCachedDeviceManager.addDevice(mDevice1); assertThat(cachedDevice1).isNotNull(); - CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mLocalAdapter, - mDevice2); + CachedBluetoothDevice cachedDevice2 = mCachedDeviceManager.addDevice(mDevice2); assertThat(cachedDevice2).isNotNull(); when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED); 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 c39fb85428fa..034574faf6db 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 @@ -26,7 +26,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; -import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; @@ -49,8 +48,6 @@ public class CachedBluetoothDeviceTest { private final static String DEVICE_ADDRESS = "AA:BB:CC:DD:EE:FF"; private final static String DEVICE_ALIAS_NEW = "TestAliasNew"; @Mock - private LocalBluetoothAdapter mAdapter; - @Mock private LocalBluetoothProfileManager mProfileManager; @Mock private HeadsetProfile mHfpProfile; @@ -73,13 +70,11 @@ public class CachedBluetoothDeviceTest { mContext = RuntimeEnvironment.application; mShadowAudioManager = shadowOf(mContext.getSystemService(AudioManager.class)); when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS); - when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); when(mHfpProfile.isProfileReady()).thenReturn(true); when(mA2dpProfile.isProfileReady()).thenReturn(true); when(mPanProfile.isProfileReady()).thenReturn(true); when(mHearingAidProfile.isProfileReady()).thenReturn(true); - mCachedDevice = spy( - new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice)); + mCachedDevice = spy(new CachedBluetoothDevice(mContext, mProfileManager, mDevice)); doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel(); } @@ -477,7 +472,7 @@ public class CachedBluetoothDeviceTest { when(mDevice.getAliasName()).thenReturn(DEVICE_ALIAS); when(mDevice.getName()).thenReturn(DEVICE_NAME); CachedBluetoothDevice cachedBluetoothDevice = - new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); + new CachedBluetoothDevice(mContext, mProfileManager, mDevice); // Verify alias is returned on getName assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); // Verify device is visible @@ -487,7 +482,7 @@ public class CachedBluetoothDeviceTest { @Test public void testDeviceName_testNameNotAvailable() { CachedBluetoothDevice cachedBluetoothDevice = - new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); + new CachedBluetoothDevice(mContext, mProfileManager, mDevice); // Verify device address is returned on getName assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ADDRESS); // Verify device is not visible @@ -504,7 +499,7 @@ public class CachedBluetoothDeviceTest { }).when(mDevice).setAlias(anyString()); when(mDevice.getName()).thenReturn(DEVICE_NAME); CachedBluetoothDevice cachedBluetoothDevice = - new CachedBluetoothDevice(mContext, mAdapter, mProfileManager, mDevice); + new CachedBluetoothDevice(mContext, mProfileManager, mDevice); // Verify alias is returned on getName assertThat(cachedBluetoothDevice.getName()).isEqualTo(DEVICE_ALIAS); // Verify null name does not get set diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java index bc8be4d5c3dd..c0a1f0cda3ee 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java @@ -2,18 +2,17 @@ package com.android.settingslib.bluetooth; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothProfile; import android.content.Context; import com.android.settingslib.SettingsLibRobolectricTestRunner; +import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter; import org.junit.Before; import org.junit.Test; @@ -21,13 +20,14 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; @RunWith(SettingsLibRobolectricTestRunner.class) +@Config(shadows = {ShadowBluetoothAdapter.class}) public class HeadsetProfileTest { @Mock - private LocalBluetoothAdapter mAdapter; - @Mock private CachedBluetoothDeviceManager mDeviceManager; @Mock private LocalBluetoothProfileManager mProfileManager; @@ -39,19 +39,18 @@ public class HeadsetProfileTest { private BluetoothDevice mBluetoothDevice; private BluetoothProfile.ServiceListener mServiceListener; private HeadsetProfile mProfile; + private ShadowBluetoothAdapter mShadowBluetoothAdapter; @Before public void setUp() { MockitoAnnotations.initMocks(this); Context context = spy(RuntimeEnvironment.application); + mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); - doAnswer((invocation) -> { - mServiceListener = (BluetoothProfile.ServiceListener) invocation.getArguments()[1]; - return null; - }).when(mAdapter).getProfileProxy(any(Context.class), any(), eq(BluetoothProfile.HEADSET)); when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice); - mProfile = new HeadsetProfile(context, mAdapter, mDeviceManager, mProfileManager); + mProfile = new HeadsetProfile(context, mDeviceManager, mProfileManager); + mServiceListener = mShadowBluetoothAdapter.getServiceListener(); mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, mService); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManagerTest.java index af66f7a62146..f223176795b8 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManagerTest.java @@ -38,6 +38,7 @@ import android.content.Intent; import android.os.ParcelUuid; import com.android.settingslib.SettingsLibRobolectricTestRunner; +import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter; import org.junit.Before; import org.junit.Test; @@ -45,34 +46,38 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; import java.util.ArrayList; import java.util.List; @RunWith(SettingsLibRobolectricTestRunner.class) +@Config(shadows = {ShadowBluetoothAdapter.class}) public class LocalBluetoothProfileManagerTest { @Mock private CachedBluetoothDeviceManager mDeviceManager; @Mock private BluetoothEventManager mEventManager; @Mock - private LocalBluetoothAdapter mAdapter; - @Mock private BluetoothDevice mDevice; @Mock private CachedBluetoothDevice mCachedBluetoothDevice; private Context mContext; - private LocalBluetoothProfileManager mProfileManager; private Intent mIntent; + private LocalBluetoothAdapter mLocalBluetoothAdapter; + private LocalBluetoothProfileManager mProfileManager; + private ShadowBluetoothAdapter mShadowBluetoothAdapter; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - mEventManager = spy(new BluetoothEventManager(mAdapter, - mDeviceManager, mContext)); - when(mAdapter.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON); + mLocalBluetoothAdapter = LocalBluetoothAdapter.getInstance(); + mEventManager = spy(new BluetoothEventManager(mLocalBluetoothAdapter, mDeviceManager, + mContext)); + mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); when(mDeviceManager.findDevice(mDevice)).thenReturn(mCachedBluetoothDevice); } @@ -81,12 +86,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void constructor_initiateHidAndHidDeviceProfile() { - when(mAdapter.getSupportedProfiles()).thenReturn( - generateList(new int[] {BluetoothProfile.HID_HOST})); - when(mAdapter.getSupportedProfiles()).thenReturn( - generateList(new int[] {BluetoothProfile.HID_HOST, BluetoothProfile.HID_DEVICE})); - mProfileManager = - new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, mEventManager); + mShadowBluetoothAdapter.setSupportedProfiles(generateList( + new int[] {BluetoothProfile.HID_HOST, BluetoothProfile.HID_DEVICE})); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); assertThat(mProfileManager.getHidProfile()).isNotNull(); assertThat(mProfileManager.getHidDeviceProfile()).isNotNull(); @@ -97,12 +100,12 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void updateLocalProfiles_addA2dpToLocalProfiles() { - mProfileManager = - new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, mEventManager); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); assertThat(mProfileManager.getA2dpProfile()).isNull(); assertThat(mProfileManager.getHeadsetProfile()).isNull(); - when(mAdapter.getSupportedProfiles()).thenReturn(generateList( + mShadowBluetoothAdapter.setSupportedProfiles(generateList( new int[] {BluetoothProfile.A2DP})); mProfileManager.updateLocalProfiles(); @@ -115,10 +118,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void updateProfiles_addHidProfileForRemoteDevice() { - when(mAdapter.getSupportedProfiles()).thenReturn(generateList( + mShadowBluetoothAdapter.setSupportedProfiles(generateList( new int[] {BluetoothProfile.HID_HOST})); - mProfileManager = - new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, mEventManager); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); ParcelUuid[] uuids = new ParcelUuid[]{BluetoothUuid.Hid}; ParcelUuid[] localUuids = new ParcelUuid[]{}; List<LocalBluetoothProfile> profiles = new ArrayList<>(); @@ -138,10 +141,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void stateChangedHandler_receiveA2dpConnectionStateChanged_shouldDispatchCallback() { - when(mAdapter.getSupportedProfiles()).thenReturn(generateList( + mShadowBluetoothAdapter.setSupportedProfiles(generateList( new int[] {BluetoothProfile.A2DP})); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); @@ -162,10 +165,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void stateChangedHandler_receiveHeadsetConnectionStateChanged_shouldDispatchCallback() { - when(mAdapter.getSupportedProfiles()).thenReturn(generateList( + mShadowBluetoothAdapter.setSupportedProfiles(generateList( new int[] {BluetoothProfile.HEADSET})); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); @@ -186,12 +189,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void stateChangedHandler_receiveHAPConnectionStateChanged_shouldDispatchCallback() { - ArrayList<Integer> supportProfiles = new ArrayList<>(); - supportProfiles.add(BluetoothProfile.HEARING_AID); - when(mAdapter.getSupportedProfiles()).thenReturn(supportProfiles); - when(mAdapter.getUuids()).thenReturn(new ParcelUuid[]{BluetoothUuid.HearingAid}); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mShadowBluetoothAdapter.setSupportedProfiles(generateList( + new int[] {BluetoothProfile.HEARING_AID})); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); @@ -212,10 +213,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void stateChangedHandler_receivePanConnectionStateChanged_shouldNotDispatchCallback() { - when(mAdapter.getSupportedProfiles()).thenReturn( - generateList(new int[] {BluetoothProfile.PAN})); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mShadowBluetoothAdapter.setSupportedProfiles(generateList( + new int[] {BluetoothProfile.PAN})); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); @@ -237,9 +238,9 @@ public class LocalBluetoothProfileManagerTest { @Test public void stateChangedHandler_receivePanConnectionStateChangedWithoutProfile_shouldNotRefresh () { - when(mAdapter.getSupportedProfiles()).thenReturn(null); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mShadowBluetoothAdapter.setSupportedProfiles(null); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); @@ -259,10 +260,10 @@ public class LocalBluetoothProfileManagerTest { */ @Test public void stateChangedHandler_receivePanConnectionStateChangedWithProfile_shouldRefresh() { - when(mAdapter.getSupportedProfiles()).thenReturn(generateList( + mShadowBluetoothAdapter.setSupportedProfiles(generateList( new int[] {BluetoothProfile.PAN})); - mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager, - mEventManager); + mProfileManager = new LocalBluetoothProfileManager(mContext, mLocalBluetoothAdapter, + mDeviceManager, mEventManager); // Refer to BluetoothControllerImpl, it will call setReceiverHandler after // LocalBluetoothProfileManager created. mEventManager.setReceiverHandler(null); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java new file mode 100644 index 000000000000..9b8c230dded4 --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowBluetoothAdapter.java @@ -0,0 +1,53 @@ +/* + * 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.settingslib.testutils.shadow; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothProfile; +import android.content.Context; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +import java.util.List; + +@Implements(value = BluetoothAdapter.class, inheritImplementationMethods = true) +public class ShadowBluetoothAdapter extends org.robolectric.shadows.ShadowBluetoothAdapter { + + private List<Integer> mSupportedProfiles; + private BluetoothProfile.ServiceListener mServiceListener; + + @Implementation + public boolean getProfileProxy(Context context, BluetoothProfile.ServiceListener listener, + int profile) { + mServiceListener = listener; + return true; + } + + public BluetoothProfile.ServiceListener getServiceListener() { + return mServiceListener; + } + + @Implementation + public List<Integer> getSupportedProfiles() { + return mSupportedProfiles; + } + + public void setSupportedProfiles(List<Integer> supportedProfiles) { + mSupportedProfiles = supportedProfiles; + } +} diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp new file mode 100644 index 000000000000..c9ba26804e89 --- /dev/null +++ b/packages/SystemUI/Android.bp @@ -0,0 +1,101 @@ +// +// 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. +// + +java_library { + name: "SystemUI-proto", + + srcs: ["src/**/*.proto"], + + proto: { + type: "nano", + }, +} + +java_library { + name: "SystemUI-tags", + srcs: ["src/com/android/systemui/EventLogTags.logtags"], +} + +android_library { + name: "SystemUI-core", + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + ], + resource_dirs: [ + "res-keyguard", + "res", + ], + static_libs: [ + "SystemUIPluginLib", + "SystemUISharedLib", + "SettingsLib", + "androidx.car_car", + "androidx.legacy_legacy-support-v4", + "androidx.recyclerview_recyclerview", + "androidx.preference_preference", + "androidx.appcompat_appcompat", + "androidx.mediarouter_mediarouter", + "androidx.palette_palette", + "androidx.legacy_legacy-preference-v14", + "androidx.leanback_leanback", + "androidx.slice_slice-core", + "androidx.slice_slice-view", + "androidx.slice_slice-builders", + "androidx.arch.core_core-runtime", + "androidx.lifecycle_lifecycle-extensions", + "SystemUI-tags", + "SystemUI-proto", + ], + manifest: "AndroidManifest.xml", + + libs: [ + "telephony-common", + "android.car", + ], + + aaptflags: [ + "--extra-packages", + "com.android.keyguard", + ], +} + +android_app { + name: "SystemUI", + static_libs: [ + "SystemUI-core", + ], + + platform_apis: true, + certificate: "platform", + privileged: true, + + optimize: { + proguard_flags_files: ["proguard.flags"], + }, + + libs: [ + "telephony-common", + "android.car", + ], + + dxflags: ["--multi-dex"], + aaptflags: [ + "--extra-packages", + "com.android.keyguard", + ], + +} diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk deleted file mode 100644 index 920e3b6a3343..000000000000 --- a/packages/SystemUI/Android.mk +++ /dev/null @@ -1,82 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := SystemUI-proto - -LOCAL_SRC_FILES := $(call all-proto-files-under,src) - -LOCAL_PROTOC_OPTIMIZE_TYPE := nano - -include $(BUILD_STATIC_JAVA_LIBRARY) - -include $(CLEAR_VARS) - -LOCAL_MODULE := SystemUI-tags - -LOCAL_SRC_FILES := src/com/android/systemui/EventLogTags.logtags - -include $(BUILD_STATIC_JAVA_LIBRARY) - -# ------------------ - -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_MODULE_TAGS := optional - -RELATIVE_FINGERPRINT_PATH := ../../core/java/android/hardware/fingerprint - -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) \ - $(call all-Iaidl-files-under, src) \ - $(call all-Iaidl-files-under, $(RELATIVE_FINGERPRINT_PATH)) - -LOCAL_STATIC_ANDROID_LIBRARIES := \ - SystemUIPluginLib \ - SystemUISharedLib \ - androidx.car_car \ - androidx.legacy_legacy-support-v4 \ - androidx.recyclerview_recyclerview \ - androidx.preference_preference \ - androidx.appcompat_appcompat \ - androidx.mediarouter_mediarouter \ - androidx.palette_palette \ - androidx.legacy_legacy-preference-v14 \ - androidx.leanback_leanback \ - androidx.slice_slice-core \ - androidx.slice_slice-view \ - androidx.slice_slice-builders \ - androidx.arch.core_core-runtime \ - androidx.lifecycle_lifecycle-extensions \ - -LOCAL_STATIC_JAVA_LIBRARIES := \ - SystemUI-tags \ - SystemUI-proto - -LOCAL_JAVA_LIBRARIES := telephony-common \ - android.car - -LOCAL_PACKAGE_NAME := SystemUI -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res-keyguard $(LOCAL_PATH)/res - -ifneq ($(INCREMENTAL_BUILDS),) - LOCAL_PROGUARD_ENABLED := disabled - LOCAL_JACK_ENABLED := incremental - LOCAL_DX_FLAGS := --multi-dex - LOCAL_JACK_FLAGS := --multi-dex native -endif - -include frameworks/base/packages/SettingsLib/common.mk - -LOCAL_AAPT_FLAGS := --extra-packages com.android.keyguard - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/SystemUI/plugin/Android.bp b/packages/SystemUI/plugin/Android.bp new file mode 100644 index 000000000000..b38059de0f8d --- /dev/null +++ b/packages/SystemUI/plugin/Android.bp @@ -0,0 +1,37 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +java_library { + + name: "SystemUIPluginLib", + + srcs: ["src/**/*.java"], + + +} + +android_app { + + // Dummy to generate .toc files. + name: "PluginDummyLib", + platform_apis: true, + srcs: ["src/**/*.java"], + + libs: ["SystemUIPluginLib"], + + optimize: { + enabled: false, + }, + +} diff --git a/packages/SystemUI/plugin/Android.mk b/packages/SystemUI/plugin/Android.mk deleted file mode 100644 index 8634684087e2..000000000000 --- a/packages/SystemUI/plugin/Android.mk +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_MODULE_TAGS := optional - -LOCAL_MODULE := SystemUIPluginLib - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res -LOCAL_JAR_EXCLUDE_FILES := none - -include $(BUILD_STATIC_JAVA_LIBRARY) - -include $(CLEAR_VARS) - -# Dummy to generate .toc files. -LOCAL_PACKAGE_NAME := PluginDummyLib -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_JAVA_LIBRARIES := SystemUIPluginLib - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) diff --git a/packages/SystemUI/plugin/ExamplePlugin/Android.bp b/packages/SystemUI/plugin/ExamplePlugin/Android.bp new file mode 100644 index 000000000000..a0eaf14f4a06 --- /dev/null +++ b/packages/SystemUI/plugin/ExamplePlugin/Android.bp @@ -0,0 +1,14 @@ +android_app { + + name: "ExamplePlugin", + + libs: ["SystemUIPluginLib"], + + certificate: "platform", + optimize: { + enabled: false, + }, + + srcs: ["src/**/*.java"], + +} diff --git a/packages/SystemUI/plugin/ExamplePlugin/Android.mk b/packages/SystemUI/plugin/ExamplePlugin/Android.mk deleted file mode 100644 index 4c82c7505ad3..000000000000 --- a/packages/SystemUI/plugin/ExamplePlugin/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_PACKAGE_NAME := ExamplePlugin - -LOCAL_JAVA_LIBRARIES := SystemUIPluginLib - -LOCAL_CERTIFICATE := platform -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -include $(BUILD_PACKAGE) diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java index 61f7fe8dc019..bf4374acf6e6 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTile.java @@ -43,7 +43,7 @@ public interface QSTile { boolean isAvailable(); void setTileSpec(String tileSpec); - void clearState(); + @Deprecated default void clearState() {} void refreshState(); void addCallback(Callback callback); diff --git a/packages/SystemUI/res-keyguard/values/alias.xml b/packages/SystemUI/res-keyguard/values/alias.xml index f06b450c7dbe..1c63c7933faf 100644 --- a/packages/SystemUI/res-keyguard/values/alias.xml +++ b/packages/SystemUI/res-keyguard/values/alias.xml @@ -25,9 +25,6 @@ <!-- Alias used to reference framework "OK" string in keyguard. --> <item type="string" name="ok">@*android:string/ok</item> - <!-- Alias used to reference framework "OK" string in keyguard. --> - <item type="string" name="system_ui_date_pattern">@*android:string/system_ui_date_pattern</item> - <!-- Alias used to reference framework configuration for screen rotation. --> <item type="bool" name="config_enableLockScreenRotation">@*android:bool/config_enableLockScreenRotation</item> diff --git a/packages/SystemUI/res/drawable/ic_sysbar_home.xml b/packages/SystemUI/res/drawable/ic_sysbar_home.xml index a960af7ca856..da239372791f 100644 --- a/packages/SystemUI/res/drawable/ic_sysbar_home.xml +++ b/packages/SystemUI/res/drawable/ic_sysbar_home.xml @@ -14,13 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. --> -<shape xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="oval" - android:useLevel="false"> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="28dp" + android:height="28dp" + android:viewportWidth="28" + android:viewportHeight="28"> - <solid android:color="?attr/singleToneColor" /> - - <size - android:height="14dp" - android:width="14dp" /> -</shape> + <path + android:fillColor="?attr/singleToneColor" + android:pathData="M 14 7 C 17.8659932488 7 21 10.1340067512 21 14 C 21 17.8659932488 17.8659932488 21 14 21 C 10.1340067512 21 7 17.8659932488 7 14 C 7 10.1340067512 10.1340067512 7 14 7 Z" /> +</vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/values-af/strings_car.xml b/packages/SystemUI/res/values-af/strings_car.xml index 3f470625dc3d..0127af81c131 100644 --- a/packages/SystemUI/res/values-af/strings_car.xml +++ b/packages/SystemUI/res/values-af/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gas"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gas"</string> <string name="car_add_user" msgid="5245196248349230898">"Voeg gebruiker by"</string> <string name="car_new_user" msgid="8142927244990323906">"Nuwe gebruiker"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Wanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul spasie opstel."</string> diff --git a/packages/SystemUI/res/values-am/strings_car.xml b/packages/SystemUI/res/values-am/strings_car.xml index 769cb5b66af6..cc709de1729c 100644 --- a/packages/SystemUI/res/values-am/strings_car.xml +++ b/packages/SystemUI/res/values-am/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"እንግዳ"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"እንግዳ"</string> <string name="car_add_user" msgid="5245196248349230898">"ተጠቃሚ አክል"</string> <string name="car_new_user" msgid="8142927244990323906">"አዲስ ተጠቃሚ"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"አዲስ ተጠቃሚ ሲያክሉ ያ ሰው የራሳቸውን ቦታ ማቀናበር አለባቸው።"</string> diff --git a/packages/SystemUI/res/values-ar/strings_car.xml b/packages/SystemUI/res/values-ar/strings_car.xml index deadaae3de3a..54b7e1d57c7b 100644 --- a/packages/SystemUI/res/values-ar/strings_car.xml +++ b/packages/SystemUI/res/values-ar/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ضيف"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ضيف"</string> <string name="car_add_user" msgid="5245196248349230898">"إضافة المستخدم"</string> <string name="car_new_user" msgid="8142927244990323906">"مستخدم جديد"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"عند إضافة مستخدم جديد، عليه إعداد مساحته."</string> diff --git a/packages/SystemUI/res/values-as/strings_car.xml b/packages/SystemUI/res/values-as/strings_car.xml index ce19a03d19f9..b8031a5dcb77 100644 --- a/packages/SystemUI/res/values-as/strings_car.xml +++ b/packages/SystemUI/res/values-as/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"অতিথি"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"অতিথি"</string> <string name="car_add_user" msgid="5245196248349230898">"ব্যৱহাৰকাৰী যোগ কৰক"</string> <string name="car_new_user" msgid="8142927244990323906">"নতুন ব্যৱহাৰকাৰী"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"আপুনি কোনো নতুন ব্য়ৱহাৰকাৰীক যোগ কৰিলে তেখেতে নিজৰ বাবে খালী ঠাই ছেট আপ কৰিব লাগে।"</string> diff --git a/packages/SystemUI/res/values-az/strings_car.xml b/packages/SystemUI/res/values-az/strings_car.xml index 02ee1771b476..d64f4c2df80c 100644 --- a/packages/SystemUI/res/values-az/strings_car.xml +++ b/packages/SystemUI/res/values-az/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Qonaq"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Qonaq"</string> <string name="car_add_user" msgid="5245196248349230898">"İstifadəçi əlavə edin"</string> <string name="car_new_user" msgid="8142927244990323906">"Yeni İstifadəçi"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Yeni istifadəçi əlavə etdiyinizdə həmin şəxs öz yerini təyin etməlidir."</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 47eb26623d5e..da236a854cf9 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -375,7 +375,7 @@ <string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Uključi/isključi pregled"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjena je"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> - <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> dok se ne napuni"</string> + <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do kraja punjenja"</string> <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Ne puni se"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mreža se možda\nnadgleda"</string> <string name="description_target_search" msgid="3091587249776033139">"Pretraga"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml b/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml index 7a2032b1e0c5..3cf7e2ed5085 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gost"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gost"</string> <string name="car_add_user" msgid="5245196248349230898">"Dodaj korisnika"</string> <string name="car_new_user" msgid="8142927244990323906">"Novi korisnik"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kada dodate novog korisnika, ta osoba treba da podesi svoj prostor."</string> diff --git a/packages/SystemUI/res/values-be/strings_car.xml b/packages/SystemUI/res/values-be/strings_car.xml index 357aeeb97164..d665bf1fbd1d 100644 --- a/packages/SystemUI/res/values-be/strings_car.xml +++ b/packages/SystemUI/res/values-be/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Госць"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Госць"</string> <string name="car_add_user" msgid="5245196248349230898">"Дадаць карыстальніка"</string> <string name="car_new_user" msgid="8142927244990323906">"Новы карыстальнік"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Калі вы дадаяце новага карыстальніка, яму трэба наладзіць свой профіль."</string> diff --git a/packages/SystemUI/res/values-bg/strings_car.xml b/packages/SystemUI/res/values-bg/strings_car.xml index c117ab4efb2e..39e19b539b95 100644 --- a/packages/SystemUI/res/values-bg/strings_car.xml +++ b/packages/SystemUI/res/values-bg/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Гост"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Гост"</string> <string name="car_add_user" msgid="5245196248349230898">"Добавяне на потребител"</string> <string name="car_new_user" msgid="8142927244990323906">"Нов потребител"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Когато добавите нов потребител, той трябва да настрои работното си пространство."</string> diff --git a/packages/SystemUI/res/values-bn/strings_car.xml b/packages/SystemUI/res/values-bn/strings_car.xml index 2c6857d2c2ab..b40ccdd078fa 100644 --- a/packages/SystemUI/res/values-bn/strings_car.xml +++ b/packages/SystemUI/res/values-bn/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"অতিথি"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"অতিথি"</string> <string name="car_add_user" msgid="5245196248349230898">"ব্যবহারকারীকে যুক্ত করুন"</string> <string name="car_new_user" msgid="8142927244990323906">"নতুন ব্যবহারকারী"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"আপনি কোনও নতুন ব্যবহারকারীকে যোগ করলে তাকে তার স্পেস সেট-আপ করে নিতে হবে।"</string> diff --git a/packages/SystemUI/res/values-bs/strings_car.xml b/packages/SystemUI/res/values-bs/strings_car.xml index 4d334c565cd9..cb2f4275368e 100644 --- a/packages/SystemUI/res/values-bs/strings_car.xml +++ b/packages/SystemUI/res/values-bs/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gost"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gost"</string> <string name="car_add_user" msgid="5245196248349230898">"Dodaj korisnika"</string> <string name="car_new_user" msgid="8142927244990323906">"Novi korisnik"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kada dodate novog korisnika, ta osoba treba postaviti svoj prostor."</string> diff --git a/packages/SystemUI/res/values-ca/strings_car.xml b/packages/SystemUI/res/values-ca/strings_car.xml index 8cd7d3852ff1..80df88215d4a 100644 --- a/packages/SystemUI/res/values-ca/strings_car.xml +++ b/packages/SystemUI/res/values-ca/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Convidat"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Convidat"</string> <string name="car_add_user" msgid="5245196248349230898">"Afegeix un usuari"</string> <string name="car_new_user" msgid="8142927244990323906">"Usuari nou"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar el seu espai."</string> diff --git a/packages/SystemUI/res/values-cs/strings_car.xml b/packages/SystemUI/res/values-cs/strings_car.xml index 7356fd977244..0f09aca4c1b2 100644 --- a/packages/SystemUI/res/values-cs/strings_car.xml +++ b/packages/SystemUI/res/values-cs/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Host"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Host"</string> <string name="car_add_user" msgid="5245196248349230898">"Přidat uživatele"</string> <string name="car_new_user" msgid="8142927244990323906">"Nový uživatel"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Každý nově přidaný uživatel si musí nastavit vlastní prostor."</string> diff --git a/packages/SystemUI/res/values-da/strings_car.xml b/packages/SystemUI/res/values-da/strings_car.xml index 4112ad9b678b..f0d14a0b8161 100644 --- a/packages/SystemUI/res/values-da/strings_car.xml +++ b/packages/SystemUI/res/values-da/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gæst"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gæst"</string> <string name="car_add_user" msgid="5245196248349230898">"Tilføj bruger"</string> <string name="car_new_user" msgid="8142927244990323906">"Ny bruger"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Når du tilføjer en ny bruger, skal vedkommende konfigurere sit område."</string> diff --git a/packages/SystemUI/res/values-de/strings_car.xml b/packages/SystemUI/res/values-de/strings_car.xml index 7dcf6be1b66f..b55a2e552be2 100644 --- a/packages/SystemUI/res/values-de/strings_car.xml +++ b/packages/SystemUI/res/values-de/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gast"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gast"</string> <string name="car_add_user" msgid="5245196248349230898">"Nutzer hinzufügen"</string> <string name="car_new_user" msgid="8142927244990323906">"Neuer Nutzer"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Wenn du einen neuen Nutzer hinzufügst, muss dieser seinen Bereich einrichten."</string> diff --git a/packages/SystemUI/res/values-el/strings_car.xml b/packages/SystemUI/res/values-el/strings_car.xml index b4157e72a361..7b67ed5bed3c 100644 --- a/packages/SystemUI/res/values-el/strings_car.xml +++ b/packages/SystemUI/res/values-el/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Επισκέπτης"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Επισκέπτης"</string> <string name="car_add_user" msgid="5245196248349230898">"Προσθήκη χρήστη"</string> <string name="car_new_user" msgid="8142927244990323906">"Νέος χρήστης"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Όταν προσθέτετε έναν νέο χρήστη, αυτός ο χρήστης θα πρέπει να ρυθμίσει τον χώρο του."</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings_car.xml b/packages/SystemUI/res/values-en-rAU/strings_car.xml index 4bb06c7a358e..5ff5a52d0ab5 100644 --- a/packages/SystemUI/res/values-en-rAU/strings_car.xml +++ b/packages/SystemUI/res/values-en-rAU/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Guest"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Guest"</string> <string name="car_add_user" msgid="5245196248349230898">"Add User"</string> <string name="car_new_user" msgid="8142927244990323906">"New User"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"When you add a new user, that person needs to set up their space."</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings_car.xml b/packages/SystemUI/res/values-en-rCA/strings_car.xml index 4bb06c7a358e..5ff5a52d0ab5 100644 --- a/packages/SystemUI/res/values-en-rCA/strings_car.xml +++ b/packages/SystemUI/res/values-en-rCA/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Guest"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Guest"</string> <string name="car_add_user" msgid="5245196248349230898">"Add User"</string> <string name="car_new_user" msgid="8142927244990323906">"New User"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"When you add a new user, that person needs to set up their space."</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings_car.xml b/packages/SystemUI/res/values-en-rGB/strings_car.xml index 4bb06c7a358e..5ff5a52d0ab5 100644 --- a/packages/SystemUI/res/values-en-rGB/strings_car.xml +++ b/packages/SystemUI/res/values-en-rGB/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Guest"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Guest"</string> <string name="car_add_user" msgid="5245196248349230898">"Add User"</string> <string name="car_new_user" msgid="8142927244990323906">"New User"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"When you add a new user, that person needs to set up their space."</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings_car.xml b/packages/SystemUI/res/values-en-rIN/strings_car.xml index 4bb06c7a358e..5ff5a52d0ab5 100644 --- a/packages/SystemUI/res/values-en-rIN/strings_car.xml +++ b/packages/SystemUI/res/values-en-rIN/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Guest"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Guest"</string> <string name="car_add_user" msgid="5245196248349230898">"Add User"</string> <string name="car_new_user" msgid="8142927244990323906">"New User"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"When you add a new user, that person needs to set up their space."</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings_car.xml b/packages/SystemUI/res/values-es-rUS/strings_car.xml index db6c93e1ce0b..7187beffc6d3 100644 --- a/packages/SystemUI/res/values-es-rUS/strings_car.xml +++ b/packages/SystemUI/res/values-es-rUS/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Invitado"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Invitado"</string> <string name="car_add_user" msgid="5245196248349230898">"Agregar usuario"</string> <string name="car_new_user" msgid="8142927244990323906">"Nuevo usuario"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Cuando agregues un usuario nuevo, esa persona deberá configurar su espacio."</string> diff --git a/packages/SystemUI/res/values-es/strings_car.xml b/packages/SystemUI/res/values-es/strings_car.xml index 503788c726d8..775811369f8c 100644 --- a/packages/SystemUI/res/values-es/strings_car.xml +++ b/packages/SystemUI/res/values-es/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Invitado"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Invitado"</string> <string name="car_add_user" msgid="5245196248349230898">"Añadir usuario"</string> <string name="car_new_user" msgid="8142927244990323906">"Nuevo usuario"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Al añadir un nuevo usuario, este debe configurar su espacio."</string> diff --git a/packages/SystemUI/res/values-et/strings_car.xml b/packages/SystemUI/res/values-et/strings_car.xml index ac010fe50673..fd93f94ba9ac 100644 --- a/packages/SystemUI/res/values-et/strings_car.xml +++ b/packages/SystemUI/res/values-et/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Külaline"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Külaline"</string> <string name="car_add_user" msgid="5245196248349230898">"Kasutaja lisamine"</string> <string name="car_new_user" msgid="8142927244990323906">"Uus kasutaja"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kui lisate uue kasutaja, siis peab ta seadistama oma ruumi."</string> diff --git a/packages/SystemUI/res/values-eu/strings_car.xml b/packages/SystemUI/res/values-eu/strings_car.xml index 6375ce0d6e14..3e645cea3993 100644 --- a/packages/SystemUI/res/values-eu/strings_car.xml +++ b/packages/SystemUI/res/values-eu/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gonbidatua"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gonbidatua"</string> <string name="car_add_user" msgid="5245196248349230898">"Gehitu erabiltzaile bat"</string> <string name="car_new_user" msgid="8142927244990323906">"Erabiltzaile berria"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Erabiltzaile bat gehitzen duzunean, bere eremua konfiguratu beharko du."</string> diff --git a/packages/SystemUI/res/values-fa/strings_car.xml b/packages/SystemUI/res/values-fa/strings_car.xml index f74c33cfc987..97657b95ad0a 100644 --- a/packages/SystemUI/res/values-fa/strings_car.xml +++ b/packages/SystemUI/res/values-fa/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"مهمان"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"مهمان"</string> <string name="car_add_user" msgid="5245196248349230898">"افزودن کاربر"</string> <string name="car_new_user" msgid="8142927244990323906">"کاربر جدید"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"وقتی کاربر جدیدی اضافه میکنید، آن فرد باید فضای خود را تنظیم کند."</string> diff --git a/packages/SystemUI/res/values-fi/strings_car.xml b/packages/SystemUI/res/values-fi/strings_car.xml index b2501ee2eace..d062d6780430 100644 --- a/packages/SystemUI/res/values-fi/strings_car.xml +++ b/packages/SystemUI/res/values-fi/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Vieras"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Vieras"</string> <string name="car_add_user" msgid="5245196248349230898">"Lisää käyttäjä"</string> <string name="car_new_user" msgid="8142927244990323906">"Uusi käyttäjä"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kun lisäät uuden käyttäjän, hänen on määritettävä oman tilansa asetukset."</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings_car.xml b/packages/SystemUI/res/values-fr-rCA/strings_car.xml index 8041e7ec9c54..c100828c824a 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings_car.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Invité"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Invité"</string> <string name="car_add_user" msgid="5245196248349230898">"Ajouter un utilisateur"</string> <string name="car_new_user" msgid="8142927244990323906">"Nouvel utilisateur"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace."</string> diff --git a/packages/SystemUI/res/values-fr/strings_car.xml b/packages/SystemUI/res/values-fr/strings_car.xml index 4a6bd70f75a3..0b65fa64362e 100644 --- a/packages/SystemUI/res/values-fr/strings_car.xml +++ b/packages/SystemUI/res/values-fr/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Invité"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Invité"</string> <string name="car_add_user" msgid="5245196248349230898">"Ajouter un utilisateur"</string> <string name="car_new_user" msgid="8142927244990323906">"Nouvel utilisateur"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace."</string> diff --git a/packages/SystemUI/res/values-gl/strings_car.xml b/packages/SystemUI/res/values-gl/strings_car.xml index d897b344d173..24304dc66dbe 100644 --- a/packages/SystemUI/res/values-gl/strings_car.xml +++ b/packages/SystemUI/res/values-gl/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Convidado"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Convidado"</string> <string name="car_add_user" msgid="5245196248349230898">"Engadir usuario"</string> <string name="car_new_user" msgid="8142927244990323906">"Novo usuario"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Cando engadas un usuario novo, este deberá configurar o seu espazo."</string> diff --git a/packages/SystemUI/res/values-hr/strings_car.xml b/packages/SystemUI/res/values-hr/strings_car.xml index a94f2357f865..44f4a093101f 100644 --- a/packages/SystemUI/res/values-hr/strings_car.xml +++ b/packages/SystemUI/res/values-hr/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gost"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gost"</string> <string name="car_add_user" msgid="5245196248349230898">"Dodajte korisnika"</string> <string name="car_new_user" msgid="8142927244990323906">"Novi korisnik"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kada dodate novog korisnika, ta osoba mora postaviti vlastiti prostor."</string> diff --git a/packages/SystemUI/res/values-hu/strings_car.xml b/packages/SystemUI/res/values-hu/strings_car.xml index 223b3549cefc..d0f00ba29995 100644 --- a/packages/SystemUI/res/values-hu/strings_car.xml +++ b/packages/SystemUI/res/values-hu/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Vendég"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Vendég"</string> <string name="car_add_user" msgid="5245196248349230898">"Felhasználó hozzáadása"</string> <string name="car_new_user" msgid="8142927244990323906">"Új felhasználó"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Ha új felhasználót ad hozzá, az illetőnek be kell állítania saját felületét."</string> diff --git a/packages/SystemUI/res/values-hy/strings_car.xml b/packages/SystemUI/res/values-hy/strings_car.xml index dd734f0c13dd..85af3c891911 100644 --- a/packages/SystemUI/res/values-hy/strings_car.xml +++ b/packages/SystemUI/res/values-hy/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Հյուր"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Հյուր"</string> <string name="car_add_user" msgid="5245196248349230898">"Ավելացնել օգտատեր"</string> <string name="car_new_user" msgid="8142927244990323906">"Նոր օգտատեր"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Երբ դուք նոր օգտատեր եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:"</string> diff --git a/packages/SystemUI/res/values-in/strings_car.xml b/packages/SystemUI/res/values-in/strings_car.xml index de0a1a8ef368..7423a1c17440 100644 --- a/packages/SystemUI/res/values-in/strings_car.xml +++ b/packages/SystemUI/res/values-in/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Tamu"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Tamu"</string> <string name="car_add_user" msgid="5245196248349230898">"Tambahkan Pengguna"</string> <string name="car_new_user" msgid="8142927244990323906">"Pengguna Baru"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Saat Anda menambahkan pengguna baru, orang tersebut perlu menyiapkan ruangnya sendiri."</string> diff --git a/packages/SystemUI/res/values-is/strings_car.xml b/packages/SystemUI/res/values-is/strings_car.xml index f962765d94f0..9300e368a4d6 100644 --- a/packages/SystemUI/res/values-is/strings_car.xml +++ b/packages/SystemUI/res/values-is/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gestur"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gestur"</string> <string name="car_add_user" msgid="5245196248349230898">"Bæta notanda við"</string> <string name="car_new_user" msgid="8142927244990323906">"Nýr notandi"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Þegar þú bætir nýjum notanda við þarf viðkomandi að setja upp sitt eigið svæði."</string> diff --git a/packages/SystemUI/res/values-it/strings_car.xml b/packages/SystemUI/res/values-it/strings_car.xml index 5121eb709bb5..e79addab1797 100644 --- a/packages/SystemUI/res/values-it/strings_car.xml +++ b/packages/SystemUI/res/values-it/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Ospite"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Ospite"</string> <string name="car_add_user" msgid="5245196248349230898">"Aggiungi utente"</string> <string name="car_new_user" msgid="8142927244990323906">"Nuovo utente"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Il nuovo utente, una volta aggiunto, dovrà configurare il proprio spazio."</string> diff --git a/packages/SystemUI/res/values-iw/strings_car.xml b/packages/SystemUI/res/values-iw/strings_car.xml index 8b77940b675f..19bd19dbc943 100644 --- a/packages/SystemUI/res/values-iw/strings_car.xml +++ b/packages/SystemUI/res/values-iw/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"אורח"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"אורח"</string> <string name="car_add_user" msgid="5245196248349230898">"הוספת משתמש"</string> <string name="car_new_user" msgid="8142927244990323906">"משתמש חדש"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"בעת הוספת משתמש חדש, על משתמש זה להגדיר את המרחב שלו."</string> diff --git a/packages/SystemUI/res/values-ja/strings_car.xml b/packages/SystemUI/res/values-ja/strings_car.xml index fddd512183aa..7aa438910377 100644 --- a/packages/SystemUI/res/values-ja/strings_car.xml +++ b/packages/SystemUI/res/values-ja/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ゲスト"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ゲスト"</string> <string name="car_add_user" msgid="5245196248349230898">"ユーザーを追加"</string> <string name="car_new_user" msgid="8142927244990323906">"新しいユーザー"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"新しいユーザーを追加したら、そのユーザーは自分のスペースをセットアップする必要があります。"</string> diff --git a/packages/SystemUI/res/values-ka/strings_car.xml b/packages/SystemUI/res/values-ka/strings_car.xml index b7292555a7d0..4a6dfbd795b8 100644 --- a/packages/SystemUI/res/values-ka/strings_car.xml +++ b/packages/SystemUI/res/values-ka/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"სტუმარი"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"სტუმარი"</string> <string name="car_add_user" msgid="5245196248349230898">"მომხმარებლის დამატება"</string> <string name="car_new_user" msgid="8142927244990323906">"ახალი მომხმარებელი"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"ახალი მომხმარებლის დამატებისას, ამ მომხმარებელს საკუთარი სივრცის შექმნა მოუწევს."</string> diff --git a/packages/SystemUI/res/values-kk/strings_car.xml b/packages/SystemUI/res/values-kk/strings_car.xml index 4d1f9cf9f898..9915d98e3aa4 100644 --- a/packages/SystemUI/res/values-kk/strings_car.xml +++ b/packages/SystemUI/res/values-kk/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Қонақ"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Қонақ"</string> <string name="car_add_user" msgid="5245196248349230898">"Пайдаланушыны енгізу"</string> <string name="car_new_user" msgid="8142927244990323906">"Жаңа пайдаланушы"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Енгізілген жаңа пайдаланушы өз профилін реттеуі керек."</string> diff --git a/packages/SystemUI/res/values-km/strings_car.xml b/packages/SystemUI/res/values-km/strings_car.xml index a897dba08634..cae300d61e53 100644 --- a/packages/SystemUI/res/values-km/strings_car.xml +++ b/packages/SystemUI/res/values-km/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ភ្ញៀវ"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ភ្ញៀវ"</string> <string name="car_add_user" msgid="5245196248349230898">"បញ្ចូលអ្នកប្រើប្រាស់"</string> <string name="car_new_user" msgid="8142927244990323906">"អ្នកប្រើប្រាស់ថ្មី"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"នៅពេលដែលអ្នកបញ្ចូលអ្នកប្រើប្រាស់ថ្មី បុគ្គលនោះត្រូវតែរៀបចំទំហំផ្ទុករបស់គេ។"</string> diff --git a/packages/SystemUI/res/values-kn/strings_car.xml b/packages/SystemUI/res/values-kn/strings_car.xml index 53cdc32cf69b..2b07ac28f661 100644 --- a/packages/SystemUI/res/values-kn/strings_car.xml +++ b/packages/SystemUI/res/values-kn/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ಅತಿಥಿ"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ಅತಿಥಿ"</string> <string name="car_add_user" msgid="5245196248349230898">"ಬಳಕೆದಾರ ಸೇರಿಸು"</string> <string name="car_new_user" msgid="8142927244990323906">"ಹೊಸ ಬಳಕೆದಾರ"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"ನೀವು ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಸೆಟಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string> diff --git a/packages/SystemUI/res/values-ko/strings_car.xml b/packages/SystemUI/res/values-ko/strings_car.xml index 9cfaa7f5bfc2..31cb38f11e4f 100644 --- a/packages/SystemUI/res/values-ko/strings_car.xml +++ b/packages/SystemUI/res/values-ko/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"게스트"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"게스트"</string> <string name="car_add_user" msgid="5245196248349230898">"사용자 추가"</string> <string name="car_new_user" msgid="8142927244990323906">"신규 사용자"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"추가된 새로운 사용자는 자신의 공간을 설정해야 합니다."</string> diff --git a/packages/SystemUI/res/values-ky/strings_car.xml b/packages/SystemUI/res/values-ky/strings_car.xml index 67ffdbe4ee94..237e6385d214 100644 --- a/packages/SystemUI/res/values-ky/strings_car.xml +++ b/packages/SystemUI/res/values-ky/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Конок"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Конок"</string> <string name="car_add_user" msgid="5245196248349230898">"Колдонуучу кошуу"</string> <string name="car_new_user" msgid="8142927244990323906">"Жаңы колдонуучу"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Жаңы колдонуучу кошулганда, ал өзүнүн профилин жөндөп алышы керек."</string> diff --git a/packages/SystemUI/res/values-lo/strings_car.xml b/packages/SystemUI/res/values-lo/strings_car.xml index a41700985c64..43067f5c1093 100644 --- a/packages/SystemUI/res/values-lo/strings_car.xml +++ b/packages/SystemUI/res/values-lo/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ແຂກ"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ແຂກ"</string> <string name="car_add_user" msgid="5245196248349230898">"ເພີ່ມຜູ້ໃຊ້"</string> <string name="car_new_user" msgid="8142927244990323906">"ຜູ້ໃຊ້ໃໝ່"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"ເມື່ອທ່ານເພີ່ມຜູ້ໃຊ້ໃໝ່, ບຸກຄົນນັ້ນຈຳເປັນຕ້ອງຕັ້ງຄ່າພື້ນທີ່ຂອງເຂົາເຈົ້າ."</string> diff --git a/packages/SystemUI/res/values-lt/strings_car.xml b/packages/SystemUI/res/values-lt/strings_car.xml index 704184c9057b..ae9f24ab3388 100644 --- a/packages/SystemUI/res/values-lt/strings_car.xml +++ b/packages/SystemUI/res/values-lt/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Svečias"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Svečias"</string> <string name="car_add_user" msgid="5245196248349230898">"Pridėti naudotoją"</string> <string name="car_new_user" msgid="8142927244990323906">"Naujas naudotojas"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kai pridedate naują naudotoją, šis asmuo turi nustatyti savo vietą."</string> diff --git a/packages/SystemUI/res/values-lv/strings_car.xml b/packages/SystemUI/res/values-lv/strings_car.xml index 8f5c28316269..b8846142013e 100644 --- a/packages/SystemUI/res/values-lv/strings_car.xml +++ b/packages/SystemUI/res/values-lv/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Viesis"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Viesis"</string> <string name="car_add_user" msgid="5245196248349230898">"Lietotāja pievienošana"</string> <string name="car_new_user" msgid="8142927244990323906">"Jauns lietotājs"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kad pievienosiet jaunu lietotāju, viņam būs jāizveido savs profils."</string> diff --git a/packages/SystemUI/res/values-mk/strings_car.xml b/packages/SystemUI/res/values-mk/strings_car.xml index 772f8cfd8190..8372fb50cb48 100644 --- a/packages/SystemUI/res/values-mk/strings_car.xml +++ b/packages/SystemUI/res/values-mk/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Гостин"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Гостин"</string> <string name="car_add_user" msgid="5245196248349230898">"Додај корисник"</string> <string name="car_new_user" msgid="8142927244990323906">"Нов корисник"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Кога додавате нов корисник, тоа лице треба да го постави својот простор."</string> diff --git a/packages/SystemUI/res/values-ml/strings_car.xml b/packages/SystemUI/res/values-ml/strings_car.xml index 10e28ab56d9a..26afb0d591dc 100644 --- a/packages/SystemUI/res/values-ml/strings_car.xml +++ b/packages/SystemUI/res/values-ml/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"അതിഥി"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"അതിഥി"</string> <string name="car_add_user" msgid="5245196248349230898">"ഉപയോക്താവിനെ ചേര്ക്കുക"</string> <string name="car_new_user" msgid="8142927244990323906">"പുതിയ ഉപയോക്താവ്"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"നിങ്ങളൊരു പുതിയ ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ, ആ വ്യക്തി സ്വന്തം ഇടം സജ്ജീകരിക്കേണ്ടതുണ്ട്."</string> diff --git a/packages/SystemUI/res/values-mn/strings_car.xml b/packages/SystemUI/res/values-mn/strings_car.xml index 0b46d3f3f7ae..5bc1f57d3af9 100644 --- a/packages/SystemUI/res/values-mn/strings_car.xml +++ b/packages/SystemUI/res/values-mn/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Зочин"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Зочин"</string> <string name="car_add_user" msgid="5245196248349230898">"Хэрэглэгч нэмэх"</string> <string name="car_new_user" msgid="8142927244990323906">"Шинэ хэрэглэгч"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Таныг шинэ хэрэглэгч нэмэх үед тухайн хэрэглэгч хувийн орон зайгаа тохируулах шаардлагатай."</string> diff --git a/packages/SystemUI/res/values-mr/strings_car.xml b/packages/SystemUI/res/values-mr/strings_car.xml index 5e2328727f8b..f8b9627f44fd 100644 --- a/packages/SystemUI/res/values-mr/strings_car.xml +++ b/packages/SystemUI/res/values-mr/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"अतिथी"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"अतिथी"</string> <string name="car_add_user" msgid="5245196248349230898">"वापरकर्ता जोडा"</string> <string name="car_new_user" msgid="8142927244990323906">"नवीन वापरकर्ता"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"तुम्ही नवीन वापरकर्त्याला जोडल्यावर, त्या व्यक्तीने त्यांचे स्थान सेट करणे आवश्यक असते."</string> diff --git a/packages/SystemUI/res/values-ms/strings_car.xml b/packages/SystemUI/res/values-ms/strings_car.xml index 8c002c8ef426..a41eacf608db 100644 --- a/packages/SystemUI/res/values-ms/strings_car.xml +++ b/packages/SystemUI/res/values-ms/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Tetamu"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Tetamu"</string> <string name="car_add_user" msgid="5245196248349230898">"Tambah Pengguna"</string> <string name="car_new_user" msgid="8142927244990323906">"Pengguna Baharu"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Apabila anda menambahkan pengguna baharu, orang itu perlu menyediakan ruang mereka."</string> diff --git a/packages/SystemUI/res/values-my/strings_car.xml b/packages/SystemUI/res/values-my/strings_car.xml index 778a82e36fff..fdb499872cde 100644 --- a/packages/SystemUI/res/values-my/strings_car.xml +++ b/packages/SystemUI/res/values-my/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ဧည့်သည်"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ဧည့်သည်"</string> <string name="car_add_user" msgid="5245196248349230898">"အသုံးပြုသူ ထည့်ရန်"</string> <string name="car_new_user" msgid="8142927244990323906">"အသုံးပြုသူ အသစ်"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"အသုံးပြုသူအသစ် ထည့်သည့်အခါ ထိုသူသည် မိမိ၏ နေရာကို စီစဉ်သတ်မှတ်ရပါမည်။"</string> diff --git a/packages/SystemUI/res/values-nb/strings_car.xml b/packages/SystemUI/res/values-nb/strings_car.xml index 9db879d263c0..09593f10f9cd 100644 --- a/packages/SystemUI/res/values-nb/strings_car.xml +++ b/packages/SystemUI/res/values-nb/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gjest"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gjest"</string> <string name="car_add_user" msgid="5245196248349230898">"Legg til bruker"</string> <string name="car_new_user" msgid="8142927244990323906">"Ny bruker"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Når du legger til en ny bruker, må vedkommende konfigurere sitt eget område."</string> diff --git a/packages/SystemUI/res/values-ne/strings_car.xml b/packages/SystemUI/res/values-ne/strings_car.xml index a435c2f7657e..40d6f7d5e8a2 100644 --- a/packages/SystemUI/res/values-ne/strings_car.xml +++ b/packages/SystemUI/res/values-ne/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"अतिथि"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"अतिथि"</string> <string name="car_add_user" msgid="5245196248349230898">"प्रयोगकर्ता थप्नुहोस्"</string> <string name="car_new_user" msgid="8142927244990323906">"नयाँ प्रयोगकर्ता"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"तपाईंले नयाँ प्रयोगकर्ता थप्दा ती व्यक्तिले आफ्नो स्थान सेटअप गर्नु पर्छ।"</string> diff --git a/packages/SystemUI/res/values-nl/strings_car.xml b/packages/SystemUI/res/values-nl/strings_car.xml index a3fc561641c5..86da41365755 100644 --- a/packages/SystemUI/res/values-nl/strings_car.xml +++ b/packages/SystemUI/res/values-nl/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gast"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gast"</string> <string name="car_add_user" msgid="5245196248349230898">"Gebruiker toevoegen"</string> <string name="car_new_user" msgid="8142927244990323906">"Nieuwe gebruiker"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Wanneer je een nieuwe gebruiker toevoegt, moet die persoon zijn eigen profiel instellen."</string> diff --git a/packages/SystemUI/res/values-or/strings_car.xml b/packages/SystemUI/res/values-or/strings_car.xml index aedec96d3f22..a9be075818aa 100644 --- a/packages/SystemUI/res/values-or/strings_car.xml +++ b/packages/SystemUI/res/values-or/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ଅତିଥି"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ଅତିଥି"</string> <string name="car_add_user" msgid="5245196248349230898">"ୟୁଜର୍ଙ୍କୁ ଯୋଡ଼ନ୍ତୁ"</string> <string name="car_new_user" msgid="8142927244990323906">"ନୂଆ ୟୁଜର୍"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"ଯେତେବେଳେ ଆପଣ ଜଣେ ନୂଆ ୟୁଜର୍ଙ୍କୁ ଯୋଡ଼ିବେ, ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ନିଜ ପାଇଁ ସ୍ପେସ୍ ସେଟଅପ୍ କରିବାକୁ ପଡ଼ିବ।"</string> diff --git a/packages/SystemUI/res/values-pl/strings_car.xml b/packages/SystemUI/res/values-pl/strings_car.xml index c6f4c4df9c49..92c5f05c2476 100644 --- a/packages/SystemUI/res/values-pl/strings_car.xml +++ b/packages/SystemUI/res/values-pl/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gość"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gość"</string> <string name="car_add_user" msgid="5245196248349230898">"Dodaj użytkownika"</string> <string name="car_new_user" msgid="8142927244990323906">"Nowy użytkownik"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Gdy dodasz nowego użytkownika, musi on skonfigurować swój profil."</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings_car.xml b/packages/SystemUI/res/values-pt-rBR/strings_car.xml index 5e6bab747341..e252e8d80c7f 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings_car.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Visitante"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Visitante"</string> <string name="car_add_user" msgid="5245196248349230898">"Adicionar usuário"</string> <string name="car_new_user" msgid="8142927244990323906">"Novo usuário"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Quando você adiciona um usuário novo, essa pessoa precisa configurar o espaço dela."</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings_car.xml b/packages/SystemUI/res/values-pt-rPT/strings_car.xml index 5850c50980dc..386496debc9c 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings_car.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Convidado"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Convidado"</string> <string name="car_add_user" msgid="5245196248349230898">"Adicionar utilizador"</string> <string name="car_new_user" msgid="8142927244990323906">"Novo utilizador"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço."</string> diff --git a/packages/SystemUI/res/values-pt/strings_car.xml b/packages/SystemUI/res/values-pt/strings_car.xml index 5e6bab747341..e252e8d80c7f 100644 --- a/packages/SystemUI/res/values-pt/strings_car.xml +++ b/packages/SystemUI/res/values-pt/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Visitante"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Visitante"</string> <string name="car_add_user" msgid="5245196248349230898">"Adicionar usuário"</string> <string name="car_new_user" msgid="8142927244990323906">"Novo usuário"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Quando você adiciona um usuário novo, essa pessoa precisa configurar o espaço dela."</string> diff --git a/packages/SystemUI/res/values-ro/strings_car.xml b/packages/SystemUI/res/values-ro/strings_car.xml index 41713d1edb71..ba23df633771 100644 --- a/packages/SystemUI/res/values-ro/strings_car.xml +++ b/packages/SystemUI/res/values-ro/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Invitat"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Invitat"</string> <string name="car_add_user" msgid="5245196248349230898">"Adăugați un utilizator"</string> <string name="car_new_user" msgid="8142927244990323906">"Utilizator nou"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Când adăugați un utilizator nou, acesta trebuie să-și configureze spațiul."</string> diff --git a/packages/SystemUI/res/values-ru/strings_car.xml b/packages/SystemUI/res/values-ru/strings_car.xml index f8418ac9eaca..0ccf16eabca3 100644 --- a/packages/SystemUI/res/values-ru/strings_car.xml +++ b/packages/SystemUI/res/values-ru/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Гость"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Гость"</string> <string name="car_add_user" msgid="5245196248349230898">"Добавить пользователя"</string> <string name="car_new_user" msgid="8142927244990323906">"Новый пользователь"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Когда вы добавите пользователя, ему потребуется настроить профиль."</string> diff --git a/packages/SystemUI/res/values-si/strings_car.xml b/packages/SystemUI/res/values-si/strings_car.xml index 656696cda96b..0796d27f6318 100644 --- a/packages/SystemUI/res/values-si/strings_car.xml +++ b/packages/SystemUI/res/values-si/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"අමුත්තා"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"අමුත්තා"</string> <string name="car_add_user" msgid="5245196248349230898">"පරිශීලක එක් කරන්න"</string> <string name="car_new_user" msgid="8142927244990323906">"නව පරිශීලක"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"ඔබ අලුත් පරිශීලකයෙක් එක් කරන විට, එම පුද්ගලයාට තමන්ගේ ඉඩ සකසා ගැනීමට අවශ්ය වේ."</string> diff --git a/packages/SystemUI/res/values-sk/strings_car.xml b/packages/SystemUI/res/values-sk/strings_car.xml index 2d5c2ba17a57..408c55c35dd6 100644 --- a/packages/SystemUI/res/values-sk/strings_car.xml +++ b/packages/SystemUI/res/values-sk/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Hosť"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Hosť"</string> <string name="car_add_user" msgid="5245196248349230898">"Pridať používateľa"</string> <string name="car_new_user" msgid="8142927244990323906">"Nový používateľ"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Keď pridáte nového používateľa, musí si nastaviť vlastný priestor."</string> diff --git a/packages/SystemUI/res/values-sl/strings_car.xml b/packages/SystemUI/res/values-sl/strings_car.xml index bb122b43b966..1efe69fa2b8a 100644 --- a/packages/SystemUI/res/values-sl/strings_car.xml +++ b/packages/SystemUI/res/values-sl/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gost"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gost"</string> <string name="car_add_user" msgid="5245196248349230898">"Dodaj uporabnika"</string> <string name="car_new_user" msgid="8142927244990323906">"Nov uporabnik"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Ko dodate novega uporabnika, mora ta nastaviti svoj prostor."</string> diff --git a/packages/SystemUI/res/values-sq/strings_car.xml b/packages/SystemUI/res/values-sq/strings_car.xml index 7dc7dd56a9c2..e2bfc00c471f 100644 --- a/packages/SystemUI/res/values-sq/strings_car.xml +++ b/packages/SystemUI/res/values-sq/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"I ftuar"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"I ftuar"</string> <string name="car_add_user" msgid="5245196248349230898">"Shto përdorues"</string> <string name="car_new_user" msgid="8142927244990323906">"Përdorues i ri"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kur shton një përdorues të ri, ai person duhet të konfigurojë hapësirën e vet."</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index da303921b881..2ecac356e6e1 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -375,7 +375,7 @@ <string name="quick_step_accessibility_toggle_overview" msgid="7171470775439860480">"Укључи/искључи преглед"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуњење"</string> - <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> док се не напуни"</string> + <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до краја пуњења"</string> <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Не пуни се"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежа се можда\nнадгледа"</string> <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string> diff --git a/packages/SystemUI/res/values-sr/strings_car.xml b/packages/SystemUI/res/values-sr/strings_car.xml index 801114dd5ac9..2ee8b0125adf 100644 --- a/packages/SystemUI/res/values-sr/strings_car.xml +++ b/packages/SystemUI/res/values-sr/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Гост"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Гост"</string> <string name="car_add_user" msgid="5245196248349230898">"Додај корисника"</string> <string name="car_new_user" msgid="8142927244990323906">"Нови корисник"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Када додате новог корисника, та особа треба да подеси свој простор."</string> diff --git a/packages/SystemUI/res/values-sv/strings_car.xml b/packages/SystemUI/res/values-sv/strings_car.xml index fb801ad24abd..754d62866839 100644 --- a/packages/SystemUI/res/values-sv/strings_car.xml +++ b/packages/SystemUI/res/values-sv/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Gäst"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Gäst"</string> <string name="car_add_user" msgid="5245196248349230898">"Lägg till användare"</string> <string name="car_new_user" msgid="8142927244990323906">"Ny användare"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"När du lägger till en ny användare måste den personen konfigurera sitt utrymme."</string> diff --git a/packages/SystemUI/res/values-sw/strings_car.xml b/packages/SystemUI/res/values-sw/strings_car.xml index bf7fb5b99b0f..0c664acf127e 100644 --- a/packages/SystemUI/res/values-sw/strings_car.xml +++ b/packages/SystemUI/res/values-sw/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Mgeni"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Mgeni"</string> <string name="car_add_user" msgid="5245196248349230898">"Ongeza Mtumiaji"</string> <string name="car_new_user" msgid="8142927244990323906">"Mtumiaji Mpya"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Ukiongeza mtumiaji mpya, ni lazima aweke kikundi chake."</string> diff --git a/packages/SystemUI/res/values-ta/strings_car.xml b/packages/SystemUI/res/values-ta/strings_car.xml index 731c275591f7..226e3d950b46 100644 --- a/packages/SystemUI/res/values-ta/strings_car.xml +++ b/packages/SystemUI/res/values-ta/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"விருந்தினர்"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"விருந்தினர்"</string> <string name="car_add_user" msgid="5245196248349230898">"பயனரைச் சேர்க்கவும்"</string> <string name="car_new_user" msgid="8142927244990323906">"புதிய பயனர்"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"புதிய பயனரைச் சேர்க்கும்போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்."</string> diff --git a/packages/SystemUI/res/values-te/strings_car.xml b/packages/SystemUI/res/values-te/strings_car.xml index ec7a779fedae..0fc29bc10321 100644 --- a/packages/SystemUI/res/values-te/strings_car.xml +++ b/packages/SystemUI/res/values-te/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"అతిథి"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"అతిథి"</string> <string name="car_add_user" msgid="5245196248349230898">"వినియోగదారును జోడించండి"</string> <string name="car_new_user" msgid="8142927244990323906">"కొత్త వినియోగదారు"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"మీరు కొత్త వినియోగదారును జోడించినప్పుడు, ఆ వ్యక్తి తన స్థలాన్ని సెటప్ చేసుకోవాలి."</string> diff --git a/packages/SystemUI/res/values-th/strings_car.xml b/packages/SystemUI/res/values-th/strings_car.xml index 17f9b8f8e725..44b2e622e886 100644 --- a/packages/SystemUI/res/values-th/strings_car.xml +++ b/packages/SystemUI/res/values-th/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"ผู้มาเยือน"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"ผู้มาเยือน"</string> <string name="car_add_user" msgid="5245196248349230898">"เพิ่มผู้ใช้"</string> <string name="car_new_user" msgid="8142927244990323906">"ผู้ใช้ใหม่"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"เมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตนเอง"</string> diff --git a/packages/SystemUI/res/values-tl/strings_car.xml b/packages/SystemUI/res/values-tl/strings_car.xml index 0707b2c5d6ab..7458f28492ac 100644 --- a/packages/SystemUI/res/values-tl/strings_car.xml +++ b/packages/SystemUI/res/values-tl/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Bisita"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Bisita"</string> <string name="car_add_user" msgid="5245196248349230898">"Magdagdag ng User"</string> <string name="car_new_user" msgid="8142927244990323906">"Bagong User"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Kapag nagdagdag ka ng bagong user, kailangang i-set up ng taong iyon ang kanyang espasyo."</string> diff --git a/packages/SystemUI/res/values-tr/strings_car.xml b/packages/SystemUI/res/values-tr/strings_car.xml index 6dc7e5d17778..1ccb206cbe8c 100644 --- a/packages/SystemUI/res/values-tr/strings_car.xml +++ b/packages/SystemUI/res/values-tr/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Misafir"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Misafir"</string> <string name="car_add_user" msgid="5245196248349230898">"Kullanıcı Ekle"</string> <string name="car_new_user" msgid="8142927244990323906">"Yeni Kullanıcı"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Yeni kullanıcı eklediğinizde, bu kişinin kendi alanını ayarlaması gerekir."</string> diff --git a/packages/SystemUI/res/values-uk/strings_car.xml b/packages/SystemUI/res/values-uk/strings_car.xml index 2d36a4b1ddb4..d0f99549602c 100644 --- a/packages/SystemUI/res/values-uk/strings_car.xml +++ b/packages/SystemUI/res/values-uk/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Гість"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Гість"</string> <string name="car_add_user" msgid="5245196248349230898">"Додати користувача"</string> <string name="car_new_user" msgid="8142927244990323906">"Новий користувач"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Коли ви додаєте нового користувача, він має налаштувати свій профіль."</string> diff --git a/packages/SystemUI/res/values-ur/strings_car.xml b/packages/SystemUI/res/values-ur/strings_car.xml index 6a85f5612e6a..557c2322932d 100644 --- a/packages/SystemUI/res/values-ur/strings_car.xml +++ b/packages/SystemUI/res/values-ur/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"مہمان"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"مہمان"</string> <string name="car_add_user" msgid="5245196248349230898">"صارف شامل کریں"</string> <string name="car_new_user" msgid="8142927244990323906">"نیا صارف"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے۔"</string> diff --git a/packages/SystemUI/res/values-uz/strings_car.xml b/packages/SystemUI/res/values-uz/strings_car.xml index ad4faf66c71b..2916a00456ae 100644 --- a/packages/SystemUI/res/values-uz/strings_car.xml +++ b/packages/SystemUI/res/values-uz/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Mehmon"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Mehmon"</string> <string name="car_add_user" msgid="5245196248349230898">"Foydalanuvchi qo‘shish"</string> <string name="car_new_user" msgid="8142927244990323906">"Yangi foydalanuvchi"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Yangi profil qo‘shilgach, uni sozlash lozim."</string> diff --git a/packages/SystemUI/res/values-vi/strings_car.xml b/packages/SystemUI/res/values-vi/strings_car.xml index ad9bc9e085cc..f3f8d5f2211a 100644 --- a/packages/SystemUI/res/values-vi/strings_car.xml +++ b/packages/SystemUI/res/values-vi/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Khách"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Khách"</string> <string name="car_add_user" msgid="5245196248349230898">"Thêm người dùng"</string> <string name="car_new_user" msgid="8142927244990323906">"Người dùng mới"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Khi bạn thêm một người dùng mới, người đó cần thiết lập không gian của họ."</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings_car.xml b/packages/SystemUI/res/values-zh-rCN/strings_car.xml index 8dbb846a5acb..a600429d8403 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings_car.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"访客"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"访客"</string> <string name="car_add_user" msgid="5245196248349230898">"添加用户"</string> <string name="car_new_user" msgid="8142927244990323906">"新用户"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"当您添加新用户时,该用户必须设置自己的空间。"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings_car.xml b/packages/SystemUI/res/values-zh-rHK/strings_car.xml index ea8836f213fa..7c4bf30d3cd1 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings_car.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"訪客"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"訪客"</string> <string name="car_add_user" msgid="5245196248349230898">"新增使用者"</string> <string name="car_new_user" msgid="8142927244990323906">"新使用者"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"新增的使用者需要自行設定個人空間。"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings_car.xml b/packages/SystemUI/res/values-zh-rTW/strings_car.xml index 2779c7b16f98..41b72224a688 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings_car.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"訪客"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"訪客"</string> <string name="car_add_user" msgid="5245196248349230898">"新增使用者"</string> <string name="car_new_user" msgid="8142927244990323906">"新使用者"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"新增的使用者需要自行設定個人空間。"</string> diff --git a/packages/SystemUI/res/values-zu/strings_car.xml b/packages/SystemUI/res/values-zu/strings_car.xml index dc0fec2366fb..c82c3b8488ca 100644 --- a/packages/SystemUI/res/values-zu/strings_car.xml +++ b/packages/SystemUI/res/values-zu/strings_car.xml @@ -20,8 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_guest" msgid="3738772168718508650">"Isivakashi"</string> - <!-- no translation found for start_guest_session (7055742120180595689) --> - <skip /> + <string name="start_guest_session" msgid="7055742120180595689">"Isivakashi"</string> <string name="car_add_user" msgid="5245196248349230898">"Engeza umsebenzisi"</string> <string name="car_new_user" msgid="8142927244990323906">"Umsebenzisi omusha"</string> <string name="user_add_user_message_setup" msgid="1791011504259527329">"Uma ungeza umsebenzisi omusha, loyo muntu udinga ukusetha izikhala zakhe."</string> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 915fc6e37770..9a64c604ad0c 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1929,23 +1929,17 @@ <!-- Accessibility description of a QS tile while editing positions [CHAR LIMIT=NONE] --> <string name="accessibility_qs_edit_add_tile_label"><xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g>. Double tap to add.</string> - <!-- Accessibility description of a place to drop a tile while editing positions [CHAR LIMIT=NONE] --> - <string name="accessibility_qs_edit_position_label">Position <xliff:g id="position" example="2">%1$d</xliff:g>. Double tap to select.</string> - <!-- Accessibility description of option to move QS tile [CHAR LIMIT=NONE] --> <string name="accessibility_qs_edit_move_tile">Move <xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g></string> <!-- Accessibility description of option to remove QS tile [CHAR LIMIT=NONE] --> <string name="accessibility_qs_edit_remove_tile">Remove <xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g></string> - <!-- Accessibility action when QS tile is added [CHAR LIMIT=NONE] --> - <string name="accessibility_qs_edit_tile_added"><xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g> is added to position <xliff:g id="position" example="5">%2$d</xliff:g></string> - - <!-- Accessibility action when QS tile is removed [CHAR LIMIT=NONE] --> - <string name="accessibility_qs_edit_tile_removed"><xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g> is removed</string> + <!-- Accessibility action when QS tile is to be added [CHAR LIMIT=NONE] --> + <string name="accessibility_qs_edit_tile_add">Add <xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g> to position <xliff:g id="position" example="5">%2$d</xliff:g></string> - <!-- Accessibility action when QS tile is moved [CHAR LIMIT=NONE] --> - <string name="accessibility_qs_edit_tile_moved"><xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g> moved to position <xliff:g id="position" example="5">%2$d</xliff:g></string> + <!-- Accessibility action when QS tile is to be moved [CHAR LIMIT=NONE] --> + <string name="accessibility_qs_edit_tile_move">Move <xliff:g id="tile_name" example="Wi-Fi">%1$s</xliff:g> to position <xliff:g id="position" example="5">%2$d</xliff:g></string> <!-- Accessibility label for window when QS editing is happening [CHAR LIMIT=NONE] --> <string name="accessibility_desc_quick_settings_edit">Quick settings editor.</string> diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp new file mode 100644 index 000000000000..0fb12009e2cb --- /dev/null +++ b/packages/SystemUI/shared/Android.bp @@ -0,0 +1,40 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_library { + + name: "SystemUISharedLib", + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + ], + +} + +android_app { + + name: "SysUISharedLib", + platform_apis: true, + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + ], + + static_libs: ["SystemUISharedLib"], + + optimize: { + enabled: false, + }, + +} diff --git a/packages/SystemUI/shared/Android.mk b/packages/SystemUI/shared/Android.mk deleted file mode 100644 index f20df0cebc8d..000000000000 --- a/packages/SystemUI/shared/Android.mk +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true - -LOCAL_MODULE_TAGS := optional - -LOCAL_MODULE := SystemUISharedLib - -LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res -LOCAL_JAR_EXCLUDE_FILES := none - -include $(BUILD_STATIC_JAVA_LIBRARY) - -include $(CLEAR_VARS) - -LOCAL_PACKAGE_NAME := SysUISharedLib -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_JAVA_LIBRARIES := SystemUISharedLib - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/SystemUI/shared/tests/Android.mk b/packages/SystemUI/shared/tests/Android.mk index 4e7cbbfede2b..02774c946596 100644 --- a/packages/SystemUI/shared/tests/Android.mk +++ b/packages/SystemUI/shared/tests/Android.mk @@ -30,10 +30,10 @@ LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_COMPATIBILITY_SUITE := device-tests # Add local path sources as well as shared lib sources -LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - $(call all-java-files-under, ../src) +LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_STATIC_JAVA_LIBRARIES := \ + SystemUISharedLib \ metrics-helper-lib \ android-support-test \ mockito-target-inline-minus-junit4 \ diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index f4acc0cdde13..b159b393862a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -15,7 +15,6 @@ */ package com.android.keyguard; -import android.R.style; import android.app.Activity; import android.app.AlertDialog; import android.app.admin.DevicePolicyManager; @@ -27,7 +26,6 @@ import android.util.AttributeSet; import android.util.Log; import android.util.Slog; import android.util.StatsLog; -import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; @@ -212,7 +210,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe if (messageId != 0) { final String message = mContext.getString(messageId, - KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts(userId), + mLockPatternUtils.getCurrentFailedPasswordAttempts(userId), timeoutInSeconds); showDialog(null, message); } @@ -257,8 +255,8 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe } private void reportFailedUnlockAttempt(int userId, int timeoutMs) { - final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); - final int failedAttempts = monitor.getFailedUnlockAttempts(userId) + 1; // +1 for this time + // +1 for this time + final int failedAttempts = mLockPatternUtils.getCurrentFailedPasswordAttempts(userId) + 1; if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts); @@ -292,7 +290,6 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe showWipeDialog(failedAttempts, userType); } } - monitor.reportFailedStrongAuthUnlockAttempt(userId); mLockPatternUtils.reportFailedPasswordAttempt(userId); if (timeoutMs > 0) { mLockPatternUtils.reportPasswordLockout(timeoutMs, userId); @@ -436,7 +433,6 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe if (success) { StatsLog.write(StatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED, StatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED__RESULT__SUCCESS); - monitor.clearFailedUnlockAttempts(); mLockPatternUtils.reportSuccessfulPasswordAttempt(userId); } else { StatsLog.write(StatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED, diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java index 6517a9dd4f71..9603562c0d4a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java @@ -27,6 +27,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Trace; import android.provider.Settings; import android.text.Layout; import android.text.TextUtils; @@ -148,6 +149,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } private void showSlice() { + Trace.beginSection("KeyguardSliceView#showSlice"); if (mPulsing || mSlice == null) { mTitle.setVisibility(GONE); mRow.setVisibility(GONE); @@ -236,6 +238,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe if (mContentChangeListener != null) { mContentChangeListener.run(); } + Trace.endSection(); } public void setPulsing(boolean pulsing, boolean animate) { @@ -383,8 +386,23 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } public void refresh() { - Slice slice = SliceViewManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri); + Slice slice; + Trace.beginSection("KeyguardSliceView#refresh"); + // We can optimize performance and avoid binder calls when we know that we're bound + // to a Slice on the same process. + if (KeyguardSliceProvider.KEYGUARD_SLICE_URI.equals(mKeyguardSliceUri.toString())) { + KeyguardSliceProvider instance = KeyguardSliceProvider.getAttachedInstance(); + if (instance != null) { + slice = instance.onBindSlice(mKeyguardSliceUri); + } else { + Log.w(TAG, "Keyguard slice not bound yet?"); + slice = null; + } + } else { + slice = SliceViewManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri); + } onChanged(slice); + Trace.endSection(); } public static class Row extends LinearLayout { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index dfd6a18c517b..3e534d11e56e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -215,9 +215,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { // Battery status private BatteryStatus mBatteryStatus; - // Password attempts - private SparseIntArray mFailedAttempts = new SparseIntArray(); - private final StrongAuthTracker mStrongAuthTracker; private final ArrayList<WeakReference<KeyguardUpdateMonitorCallback>> @@ -2141,22 +2138,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { return mDeviceProvisioned; } - public void clearFailedUnlockAttempts() { - mFailedAttempts.delete(sCurrentUser); - } - public ServiceState getServiceState(int subId) { return mServiceStates.get(subId); } - public int getFailedUnlockAttempts(int userId) { - return mFailedAttempts.get(userId, 0); - } - - public void reportFailedStrongAuthUnlockAttempt(int userId) { - mFailedAttempts.put(userId, getFailedUnlockAttempts(userId) + 1); - } - public void clearBiometricRecognized() { mUserFingerprintAuthenticated.clear(); mUserFaceAuthenticated.clear(); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 1cacdb595be1..51cc4a11a8d0 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -35,7 +35,7 @@ public class DozeLog { private static final int SIZE = Build.IS_DEBUGGABLE ? 400 : 50; static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); - private static final int PULSE_REASONS = 6; + private static final int PULSE_REASONS = 7; public static final int PULSE_REASON_NONE = -1; public static final int PULSE_REASON_INTENT = 0; @@ -44,6 +44,7 @@ public class DozeLog { public static final int PULSE_REASON_SENSOR_PICKUP = 3; public static final int PULSE_REASON_SENSOR_DOUBLE_TAP = 4; public static final int PULSE_REASON_SENSOR_LONG_PRESS = 5; + public static final int PULSE_REASON_SENSOR_REACH = 6; private static boolean sRegisterKeyguardCallback = true; @@ -169,6 +170,11 @@ public class DozeLog { log("state " + state); } + public static void traceReachWakeUp() { + if (!ENABLED) return; + log("reachWakeUp"); + } + public static void traceProximityResult(Context context, boolean near, long millis, int pulseReason) { if (!ENABLED) return; @@ -186,6 +192,7 @@ public class DozeLog { case PULSE_REASON_SENSOR_PICKUP: return "pickup"; case PULSE_REASON_SENSOR_DOUBLE_TAP: return "doubletap"; case PULSE_REASON_SENSOR_LONG_PRESS: return "longpress"; + case PULSE_REASON_SENSOR_REACH: return "reach"; default: throw new IllegalArgumentException("bad reason: " + pulseReason); } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 18dffa705f2c..045a98c51a77 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -110,6 +110,13 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, true /* reports touch coordinates */, true /* touchscreen */), + new TriggerSensor( + findSensorWithType(config.reachSensorType()), + Settings.Secure.DOZE_REACH_GESTURE, + true /* configured */, + DozeLog.PULSE_REASON_SENSOR_REACH, + false /* reports touch coordinates */, + false /* touchscreen */), }; mProxSensor = new ProxSensor(policy); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 4391a44f9904..73cbd7d96d28 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -128,6 +128,7 @@ public class DozeTriggers implements DozeMachine.Part { boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP; boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP; boolean isLongPress = pulseReason == DozeLog.PULSE_REASON_SENSOR_LONG_PRESS; + boolean isReach = pulseReason == DozeLog.PULSE_REASON_SENSOR_REACH; if (isLongPress) { requestPulse(pulseReason, sensorPerformedProxCheck); @@ -140,7 +141,7 @@ public class DozeTriggers implements DozeMachine.Part { if (isDoubleTap) { mDozeHost.onDoubleTap(screenX, screenY); mMachine.wakeUp(); - } else if (isPickup) { + } else if (isPickup || isReach) { mMachine.wakeUp(); } else { mDozeHost.extendPulse(); @@ -155,6 +156,8 @@ public class DozeTriggers implements DozeMachine.Part { final boolean withinVibrationThreshold = timeSinceNotification < mDozeParameters.getPickupVibrationThreshold(); DozeLog.tracePickupWakeUp(mContext, withinVibrationThreshold); + } else if (isReach) { + DozeLog.traceReachWakeUp(); } } diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java index a42191cce487..76a1accb56f7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java +++ b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java @@ -318,7 +318,7 @@ public class KeyboardUI extends SystemUI implements InputManager.OnTabletModeCha private CachedBluetoothDevice getCachedBluetoothDevice(BluetoothDevice d) { CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(d); if (cachedDevice == null) { - cachedDevice = mCachedDeviceManager.addDevice(mLocalBluetoothAdapter, d); + cachedDevice = mCachedDeviceManager.addDevice(d); } return cachedDevice; } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java index c96aa7303236..82b79accaac4 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java @@ -30,6 +30,7 @@ import android.icu.text.DateFormat; import android.icu.text.DisplayContext; import android.net.Uri; import android.os.Handler; +import android.os.Trace; import android.provider.Settings; import android.service.notification.ZenModeConfig; import android.text.TextUtils; @@ -72,6 +73,8 @@ public class KeyguardSliceProvider extends SliceProvider implements @VisibleForTesting static final int ALARM_VISIBILITY_HOURS = 12; + private static KeyguardSliceProvider sInstance; + protected final Uri mSliceUri; protected final Uri mDateUri; protected final Uri mAlarmUri; @@ -89,6 +92,7 @@ public class KeyguardSliceProvider extends SliceProvider implements protected AlarmManager mAlarmManager; protected ContentResolver mContentResolver; private AlarmManager.AlarmClockInfo mNextAlarmInfo; + private PendingIntent mPendingIntent; /** * Receiver responsible for time ticking and updating the date format. @@ -117,6 +121,10 @@ public class KeyguardSliceProvider extends SliceProvider implements this(new Handler()); } + public static KeyguardSliceProvider getAttachedInstance() { + return KeyguardSliceProvider.sInstance; + } + @VisibleForTesting KeyguardSliceProvider(Handler handler) { mHandler = handler; @@ -128,23 +136,24 @@ public class KeyguardSliceProvider extends SliceProvider implements @Override public Slice onBindSlice(Uri sliceUri) { + Trace.beginSection("KeyguardSliceProvider#onBindSlice"); ListBuilder builder = new ListBuilder(getContext(), mSliceUri, ListBuilder.INFINITY); builder.addRow(new RowBuilder(mDateUri).setTitle(mLastText)); addNextAlarm(builder); addZenMode(builder); addPrimaryAction(builder); - return builder.build(); + Slice slice = builder.build(); + Trace.endSection(); + return slice; } protected void addPrimaryAction(ListBuilder builder) { // Add simple action because API requires it; Keyguard handles presenting // its own slices so this action + icon are actually never used. - PendingIntent pi = PendingIntent.getActivity(getContext(), 0, new Intent(), 0); IconCompat icon = IconCompat.createWithResource(getContext(), R.drawable.ic_access_alarms_big); - SliceAction action = SliceAction.createDeeplink(pi, icon, + SliceAction action = SliceAction.createDeeplink(mPendingIntent, icon, ListBuilder.ICON_IMAGE, mLastText); - RowBuilder primaryActionRow = new RowBuilder(Uri.parse(KEYGUARD_ACTION_URI)) .setPrimaryAction(action); builder.addRow(primaryActionRow); @@ -154,7 +163,6 @@ public class KeyguardSliceProvider extends SliceProvider implements if (TextUtils.isEmpty(mNextAlarm)) { return; } - IconCompat alarmIcon = IconCompat.createWithResource(getContext(), R.drawable.ic_access_alarms_big); RowBuilder alarmRowBuilder = new RowBuilder(mAlarmUri) @@ -198,6 +206,8 @@ public class KeyguardSliceProvider extends SliceProvider implements mZenModeController = new ZenModeControllerImpl(getContext(), mHandler); mZenModeController.addCallback(this); mDatePattern = getContext().getString(R.string.system_ui_aod_date_pattern); + mPendingIntent = PendingIntent.getActivity(getContext(), 0, new Intent(), 0); + KeyguardSliceProvider.sInstance = this; registerClockUpdate(); updateClock(); return true; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 4763fa9f426a..4977ff7d16b7 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1655,7 +1655,6 @@ public class KeyguardViewMediator extends SystemUI { resetKeyguardDonePendingLocked(); } - mUpdateMonitor.clearFailedUnlockAttempts(); mUpdateMonitor.clearBiometricRecognized(); if (mGoingToSleep) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index 80b6c73f0ddf..feff5d4a3cc1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -70,7 +70,6 @@ public class QSContainerImpl extends FrameLayout { mBackgroundGradient = findViewById(R.id.quick_settings_gradient_view); mSideMargins = getResources().getDimensionPixelSize(R.dimen.notification_side_paddings); - setClickable(true); setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); setMargins(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 0876a5d3f456..3fc258b1e8e9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -285,9 +285,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne updatePageIndicator(); - for (TileRecord r : mRecords) { - r.tile.clearState(); - } if (mListening) { refreshAllTiles(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index 78e9f36d69aa..10b92f78336f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -88,6 +88,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private Holder mCurrentDrag; private int mAccessibilityAction = ACTION_NONE; private int mAccessibilityFromIndex; + private CharSequence mAccessibilityFromLabel; private QSTileHost mHost; public TileAdapter(Context context) { @@ -241,7 +242,8 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta holder.mTileView.setVisibility(View.VISIBLE); holder.mTileView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); holder.mTileView.setContentDescription(mContext.getString( - R.string.accessibility_qs_edit_position_label, position + 1)); + R.string.accessibility_qs_edit_tile_add, mAccessibilityFromLabel, + position + 1)); holder.mTileView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -270,9 +272,12 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta if (position > mEditIndex) { info.state.contentDescription = mContext.getString( R.string.accessibility_qs_edit_add_tile_label, info.state.label); - } else if (mAccessibilityAction != ACTION_NONE) { + } else if (mAccessibilityAction == ACTION_ADD) { info.state.contentDescription = mContext.getString( - R.string.accessibility_qs_edit_position_label, position + 1); + R.string.accessibility_qs_edit_tile_add, mAccessibilityFromLabel, position + 1); + } else if (mAccessibilityAction == ACTION_MOVE) { + info.state.contentDescription = mContext.getString( + R.string.accessibility_qs_edit_tile_move, mAccessibilityFromLabel, position + 1); } else { info.state.contentDescription = mContext.getString( R.string.accessibility_qs_edit_tile_label, position + 1, info.state.label); @@ -351,6 +356,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private void startAccessibleAdd(int position) { mAccessibilityFromIndex = position; + mAccessibilityFromLabel = mTiles.get(position).state.label; mAccessibilityAction = ACTION_ADD; // Add placeholder for last slot. mTiles.add(mEditIndex++, null); @@ -360,6 +366,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private void startAccessibleMove(int position) { mAccessibilityFromIndex = position; + mAccessibilityFromLabel = mTiles.get(position).state.label; mAccessibilityAction = ACTION_MOVE; notifyDataSetChanged(); } @@ -385,15 +392,11 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta strip(mTiles.get(to))); MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_ADD, to); - v.announceForAccessibility(mContext.getString(R.string.accessibility_qs_edit_tile_added, - fromLabel, (to + 1))); } else { MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_MOVE_SPEC, strip(mTiles.get(to))); MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_QS_EDIT_MOVE, to); - v.announceForAccessibility(mContext.getString(R.string.accessibility_qs_edit_tile_moved, - fromLabel, (to + 1))); } saveSpecs(mHost); return true; diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java index 53a576d3519d..591e9e015897 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java @@ -95,7 +95,6 @@ public class TileQueryHelper { continue; } tile.setListening(this, true); - tile.clearState(); tile.refreshState(); tile.setListening(this, false); tile.setTileSpec(spec); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java index 6bc3bee636d0..b6a776fe77b4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java @@ -211,10 +211,6 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { mHandler.obtainMessage(H.REFRESH_STATE, arg).sendToTarget(); } - public void clearState() { - mHandler.sendEmptyMessage(H.CLEAR_STATE); - } - public void userSwitch(int newUserId) { mHandler.obtainMessage(H.USER_SWITCH, newUserId, 0).sendToTarget(); } @@ -266,11 +262,6 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { public abstract Intent getLongClickIntent(); - protected void handleClearState() { - mTmpState = newTileState(); - mState = newTileState(); - } - protected void handleRefreshState(Object arg) { handleUpdateState(mTmpState, arg); final boolean changed = mTmpState.copyTo(mState); @@ -409,11 +400,10 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { private static final int TOGGLE_STATE_CHANGED = 8; private static final int SCAN_STATE_CHANGED = 9; private static final int DESTROY = 10; - private static final int CLEAR_STATE = 11; - private static final int REMOVE_CALLBACKS = 12; - private static final int REMOVE_CALLBACK = 13; - private static final int SET_LISTENING = 14; - private static final int STALE = 15; + private static final int REMOVE_CALLBACKS = 11; + private static final int REMOVE_CALLBACK = 12; + private static final int SET_LISTENING = 13; + private static final int STALE = 14; @VisibleForTesting protected H(Looper looper) { @@ -467,9 +457,6 @@ public abstract class QSTileImpl<TState extends State> implements QSTile { } else if (msg.what == DESTROY) { name = "handleDestroy"; handleDestroy(); - } else if (msg.what == CLEAR_STATE) { - name = "handleClearState"; - handleClearState(); } else if (msg.what == SET_LISTENING) { name = "handleSetListeningInternal"; handleSetListeningInternal(msg.obj, msg.arg1 != 0); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java new file mode 100644 index 000000000000..c0171048e974 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Handler; +import android.os.Looper; +import android.os.SystemClock; +import android.util.ArrayMap; +import android.util.ArraySet; +import android.util.Log; +import android.view.accessibility.AccessibilityEvent; + +import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.statusbar.notification.NotificationData; + +import java.util.stream.Stream; + +/** + * A manager which contains notification alerting functionality, providing methods to add and + * remove notifications that appear on screen for a period of time and dismiss themselves at the + * appropriate time. These include heads up notifications and ambient pulses. + */ +public abstract class AlertingNotificationManager { + private static final String TAG = "AlertNotifManager"; + protected final Clock mClock = new Clock(); + protected final ArrayMap<String, AlertEntry> mAlertEntries = new ArrayMap<>(); + protected int mMinimumDisplayTime; + protected int mAutoDismissNotificationDecay; + @VisibleForTesting + public Handler mHandler = new Handler(Looper.getMainLooper()); + + /** + * Called when posting a new notification that should alert the user and appear on screen. + * Adds the notification to be managed. + * @param entry entry to show + */ + public void showNotification(@NonNull NotificationData.Entry entry) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "showNotification"); + } + addAlertEntry(entry); + updateNotification(entry.key, true /* alert */); + entry.setInterruption(); + } + + /** + * Try to remove the notification. May not succeed if the notification has not been shown long + * enough and needs to be kept around. + * @param key the key of the notification to remove + * @param releaseImmediately force a remove regardless of earliest removal time + * @return true if notification is removed, false otherwise + */ + public boolean removeNotification(@NonNull String key, boolean releaseImmediately) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "removeNotification"); + } + AlertEntry alertEntry = mAlertEntries.get(key); + if (alertEntry == null) { + return true; + } + if (releaseImmediately || alertEntry.wasShownLongEnough()) { + removeAlertEntry(key); + } else { + alertEntry.removeAsSoonAsPossible(); + return false; + } + return true; + } + + /** + * Called when the notification state has been updated. + * @param key the key of the entry that was updated + * @param alert whether the notification should alert again and force reevaluation of + * removal time + */ + public void updateNotification(@NonNull String key, boolean alert) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "updateNotification"); + } + + AlertEntry alertEntry = mAlertEntries.get(key); + if (alertEntry == null) { + // the entry was released before this update (i.e by a listener) This can happen + // with the groupmanager + return; + } + + alertEntry.mEntry.row.sendAccessibilityEvent( + AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + if (alert) { + alertEntry.updateEntry(true /* updatePostTime */); + } + } + + /** + * Clears all managed notifications. + */ + public void releaseAllImmediately() { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "releaseAllImmediately"); + } + // A copy is necessary here as we are changing the underlying map. This would cause + // undefined behavior if we iterated over the key set directly. + ArraySet<String> keysToRemove = new ArraySet<>(mAlertEntries.keySet()); + for (String key : keysToRemove) { + removeAlertEntry(key); + } + } + + /** + * Returns the entry if it is managed by this manager. + * @param key key of notification + * @return the entry + */ + @Nullable + public NotificationData.Entry getEntry(@NonNull String key) { + AlertEntry entry = mAlertEntries.get(key); + return entry != null ? entry.mEntry : null; + } + + /** + * Returns the stream of all current notifications managed by this manager. + * @return all entries + */ + @NonNull + public Stream<NotificationData.Entry> getAllEntries() { + return mAlertEntries.values().stream().map(headsUpEntry -> headsUpEntry.mEntry); + } + + /** + * Whether or not there are any active alerting notifications. + * @return true if there is an alert, false otherwise + */ + public boolean hasNotifications() { + return !mAlertEntries.isEmpty(); + } + + /** + * Whether or not the given notification is alerting and managed by this manager. + * @return true if the notification is alerting + */ + public boolean contains(@NonNull String key) { + return mAlertEntries.containsKey(key); + } + + /** + * Add a new entry and begin managing it. + * @param entry the entry to add + */ + protected final void addAlertEntry(@NonNull NotificationData.Entry entry) { + AlertEntry alertEntry = createAlertEntry(); + alertEntry.setEntry(entry); + mAlertEntries.put(entry.key, alertEntry); + onAlertEntryAdded(alertEntry); + entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + } + + /** + * Manager-specific logic that should occur when an entry is added. + * @param alertEntry alert entry added + */ + protected abstract void onAlertEntryAdded(@NonNull AlertEntry alertEntry); + + /** + * Remove a notification and reset the alert entry. + * @param key key of notification to remove + */ + protected final void removeAlertEntry(@NonNull String key) { + AlertEntry alertEntry = mAlertEntries.get(key); + if (alertEntry == null) { + return; + } + NotificationData.Entry entry = alertEntry.mEntry; + mAlertEntries.remove(key); + onAlertEntryRemoved(alertEntry); + entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + alertEntry.reset(); + } + + /** + * Manager-specific logic that should occur when an alert entry is removed. + * @param alertEntry alert entry removed + */ + protected abstract void onAlertEntryRemoved(@NonNull AlertEntry alertEntry); + + /** + * Returns a new alert entry instance. + * @return a new AlertEntry + */ + protected AlertEntry createAlertEntry() { + return new AlertEntry(); + } + + protected class AlertEntry implements Comparable<AlertEntry> { + @Nullable public NotificationData.Entry mEntry; + public long mPostTime; + public long mEarliestRemovaltime; + + @Nullable protected Runnable mRemoveAlertRunnable; + + public void setEntry(@Nullable final NotificationData.Entry entry) { + setEntry(entry, () -> removeAlertEntry(entry.key)); + } + + public void setEntry(@Nullable final NotificationData.Entry entry, + @Nullable Runnable removeAlertRunnable) { + mEntry = entry; + mRemoveAlertRunnable = removeAlertRunnable; + + mPostTime = calculatePostTime(); + updateEntry(true /* updatePostTime */); + } + + /** + * Updates an entry's removal time. + * @param updatePostTime whether or not to refresh the post time + */ + public void updateEntry(boolean updatePostTime) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "updateEntry"); + } + + long currentTime = mClock.currentTimeMillis(); + mEarliestRemovaltime = currentTime + mMinimumDisplayTime; + if (updatePostTime) { + mPostTime = Math.max(mPostTime, currentTime); + } + removeAutoRemovalCallbacks(); + + if (!isSticky()) { + long finishTime = mPostTime + mAutoDismissNotificationDecay; + long removeDelay = Math.max(finishTime - currentTime, mMinimumDisplayTime); + mHandler.postDelayed(mRemoveAlertRunnable, removeDelay); + } + } + + /** + * Whether or not the notification is "sticky" i.e. should stay on screen regardless + * of the timer and should be removed externally. + * @return true if the notification is sticky + */ + protected boolean isSticky() { + return false; + } + + /** + * Whether the notification has been on screen long enough and can be removed. + * @return true if the notification has been on screen long enough + */ + public boolean wasShownLongEnough() { + return mEarliestRemovaltime < mClock.currentTimeMillis(); + } + + @Override + public int compareTo(@NonNull AlertEntry alertEntry) { + return (mPostTime < alertEntry.mPostTime) + ? 1 : ((mPostTime == alertEntry.mPostTime) + ? mEntry.key.compareTo(alertEntry.mEntry.key) : -1); + } + + public void reset() { + mEntry = null; + removeAutoRemovalCallbacks(); + mRemoveAlertRunnable = null; + } + + /** + * Clear any pending removal runnables. + */ + public void removeAutoRemovalCallbacks() { + if (mRemoveAlertRunnable != null) { + mHandler.removeCallbacks(mRemoveAlertRunnable); + } + } + + /** + * Remove the alert at the earliest allowed removal time. + */ + public void removeAsSoonAsPossible() { + if (mRemoveAlertRunnable != null) { + removeAutoRemovalCallbacks(); + mHandler.postDelayed(mRemoveAlertRunnable, + mEarliestRemovaltime - mClock.currentTimeMillis()); + } + } + + /** + * Calculate what the post time of a notification is at some current time. + * @return the post time + */ + protected long calculatePostTime() { + return mClock.currentTimeMillis(); + } + } + + protected final static class Clock { + public long currentTimeMillis() { + return SystemClock.elapsedRealtime(); + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java index 23724c29be9b..ee10d34b7d34 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/UserGridRecyclerView.java @@ -155,7 +155,7 @@ public class UserGridRecyclerView extends PagedListView implements * Adapter to populate the grid layout with the available user profiles */ public final class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserAdapterViewHolder> - implements Dialog.OnClickListener { + implements Dialog.OnClickListener, Dialog.OnCancelListener { private final Context mContext; private List<UserRecord> mUsers; @@ -231,6 +231,7 @@ public class UserGridRecyclerView extends PagedListView implements .setMessage(message) .setNegativeButton(android.R.string.cancel, this) .setPositiveButton(android.R.string.ok, this) + .setOnCancelListener(this) .create(); // Sets window flags for the SysUI dialog SystemUIDialog.applyFlags(mDialog); @@ -277,6 +278,14 @@ public class UserGridRecyclerView extends PagedListView implements } } + @Override + public void onCancel(DialogInterface dialog) { + // Enable the add button again if user cancels dialog by clicking outside the dialog + if (mAddUserView != null) { + mAddUserView.setEnabled(true); + } + } + private class AddNewUserTask extends AsyncTask<String, Void, UserInfo> { @Override 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 dc58cabede20..0ab713829bf4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java @@ -487,7 +487,7 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. public void removeNotification(String key, NotificationListenerService.RankingMap ranking) { boolean deferRemoval = false; abortExistingInflation(key); - if (mHeadsUpManager.isHeadsUp(key)) { + if (mHeadsUpManager.contains(key)) { // A cancel() in response to a remote input shouldn't be delayed, as it makes the // sending look longer than it takes. // Also we should not defer the removal if reordering isn't allowed since otherwise @@ -1060,7 +1060,7 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. // We don't want this to be interrupting anymore, lets remove it mHeadsUpManager.removeNotification(key, false /* ignoreEarliestRemovalTime */); } else { - mHeadsUpManager.updateNotification(entry, alertAgain); + mHeadsUpManager.updateNotification(entry.key, alertAgain); } } else if (shouldPeek && alertAgain) { // This notification was updated to be a heads-up, show it! @@ -1069,7 +1069,7 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. } protected boolean isHeadsUp(String key) { - return mHeadsUpManager.isHeadsUp(key); + return mHeadsUpManager.contains(key); } public boolean isNotificationKeptForRemoteInput(String key) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java index 89107bbeca81..81066f3e3610 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java @@ -31,7 +31,6 @@ import android.view.Gravity; import android.view.View; import android.view.ViewTreeObserver; -import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.ScreenDecorations; @@ -55,7 +54,6 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, ViewTreeObserver.OnComputeInternalInsetsListener, VisualStabilityManager.Callback, OnHeadsUpChangedListener, ConfigurationController.ConfigurationListener { private static final String TAG = "HeadsUpManagerPhone"; - private static final boolean DEBUG = false; private final View mStatusBarWindowView; private final NotificationGroupManager mGroupManager; @@ -114,7 +112,9 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, addListener(new OnHeadsUpChangedListener() { @Override public void onHeadsUpPinnedModeChanged(boolean hasPinnedNotification) { - if (DEBUG) Log.w(TAG, "onHeadsUpPinnedModeChanged"); + if (Log.isLoggable(TAG, Log.WARN)) { + Log.w(TAG, "onHeadsUpPinnedModeChanged"); + } updateTouchableRegionListener(); } }); @@ -153,7 +153,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, */ public boolean shouldSwallowClick(@NonNull String key) { HeadsUpManager.HeadsUpEntry entry = getHeadsUpEntry(key); - return entry != null && mClock.currentTimeMillis() < entry.postTime; + return entry != null && mClock.currentTimeMillis() < entry.mPostTime; } public void onExpandingFinished() { @@ -162,9 +162,9 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, mReleaseOnExpandFinish = false; } else { for (NotificationData.Entry entry : mEntriesToRemoveAfterExpand) { - if (isHeadsUp(entry.key)) { + if (contains(entry.key)) { // Maybe the heads-up was removed already - removeHeadsUpEntry(entry); + removeAlertEntry(entry.key); } } } @@ -235,13 +235,6 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, } } - @VisibleForTesting - public void removeMinimumDisplayTimeForTesting() { - mMinimumDisplayTime = 0; - mHeadsUpNotificationDecay = 0; - mTouchAcceptanceDelay = 0; - } - /////////////////////////////////////////////////////////////////////////////////////////////// // HeadsUpManager public methods overrides: @@ -250,12 +243,6 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, return mTrackingHeadsUp; } - @Override - public void snooze() { - super.snooze(); - mReleaseOnExpandFinish = true; - } - /** * React to the removal of the notification in the heads up. * @@ -263,14 +250,15 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, * for a bit since it wasn't shown long enough */ @Override - public boolean removeNotification(@NonNull String key, boolean ignoreEarliestRemovalTime) { - if (wasShownLongEnough(key) || ignoreEarliestRemovalTime) { - return super.removeNotification(key, ignoreEarliestRemovalTime); - } else { - HeadsUpEntryPhone entry = getHeadsUpEntryPhone(key); - entry.removeAsSoonAsPossible(); - return false; - } + public boolean removeNotification(@NonNull String key, boolean releaseImmediately) { + return super.removeNotification(key, canRemoveImmediately(key) + || releaseImmediately); + } + + @Override + public void snooze() { + super.snooze(); + mReleaseOnExpandFinish = true; } public void addSwipedOutNotification(@NonNull String key) { @@ -354,9 +342,9 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, public void onReorderingAllowed() { mBar.getNotificationScrollLayout().setHeadsUpGoingAwayAnimationsAllowed(false); for (NotificationData.Entry entry : mEntriesToRemoveWhenReorderingAllowed) { - if (isHeadsUp(entry.key)) { + if (contains(entry.key)) { // Maybe the heads-up was removed already - removeHeadsUpEntry(entry); + removeAlertEntry(entry.key); } } mEntriesToRemoveWhenReorderingAllowed.clear(); @@ -367,14 +355,14 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, // HeadsUpManager utility (protected) methods overrides: @Override - protected HeadsUpEntry createHeadsUpEntry() { + protected HeadsUpEntry createAlertEntry() { return mEntryPool.acquire(); } @Override - protected void releaseHeadsUpEntry(HeadsUpEntry entry) { - entry.reset(); - mEntryPool.release((HeadsUpEntryPhone) entry); + protected void onAlertEntryRemoved(AlertEntry alertEntry) { + super.onAlertEntryRemoved(alertEntry); + mEntryPool.release((HeadsUpEntryPhone) alertEntry); } @Override @@ -394,7 +382,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, @Nullable private HeadsUpEntryPhone getHeadsUpEntryPhone(@NonNull String key) { - return (HeadsUpEntryPhone) getHeadsUpEntry(key); + return (HeadsUpEntryPhone) mAlertEntries.get(key); } @Nullable @@ -402,7 +390,7 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, return (HeadsUpEntryPhone) getTopHeadsUpEntry(); } - private boolean wasShownLongEnough(@NonNull String key) { + private boolean canRemoveImmediately(@NonNull String key) { if (mSwipedOutKeys.contains(key)) { // We always instantly dismiss views being manually swiped out. mSwipedOutKeys.remove(key); @@ -461,33 +449,29 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable, mVisualStabilityManager.addReorderingAllowedCallback( HeadsUpManagerPhone.this); } else if (!mTrackingHeadsUp) { - removeHeadsUpEntry(entry); + removeAlertEntry(entry.key); } else { mEntriesToRemoveAfterExpand.add(entry); } }; - super.setEntry(entry, removeHeadsUpRunnable); - } - - public boolean wasShownLongEnough() { - return earliestRemovaltime < mClock.currentTimeMillis(); + setEntry(entry, removeHeadsUpRunnable); } @Override public void updateEntry(boolean updatePostTime) { super.updateEntry(updatePostTime); - if (mEntriesToRemoveAfterExpand.contains(entry)) { - mEntriesToRemoveAfterExpand.remove(entry); + if (mEntriesToRemoveAfterExpand.contains(mEntry)) { + mEntriesToRemoveAfterExpand.remove(mEntry); } - if (mEntriesToRemoveWhenReorderingAllowed.contains(entry)) { - mEntriesToRemoveWhenReorderingAllowed.remove(entry); + if (mEntriesToRemoveWhenReorderingAllowed.contains(mEntry)) { + mEntriesToRemoveWhenReorderingAllowed.remove(mEntry); } } @Override - public void expanded(boolean expanded) { + public void setExpanded(boolean expanded) { if (this.expanded == expanded) { return; } 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 b7c1b1088f5a..3837fbcd547b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -523,8 +523,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav final boolean quickStepEnabled = mOverviewProxyService.shouldShowSwipeUpUI(); KeyButtonDrawable drawable = quickStepEnabled ? getDrawable(lightContext, darkContext, R.drawable.ic_sysbar_home_quick_step) - : getDrawable(lightContext, darkContext, R.drawable.ic_sysbar_home, - false /* hasShadow */); + : getDrawable(lightContext, darkContext, R.drawable.ic_sysbar_home); orientHomeButton(drawable); return drawable; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java index 37c2fdff6c44..c27ccea30963 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java @@ -171,7 +171,7 @@ public class NotificationGroupManager implements OnHeadsUpChangedListener { */ private void cleanUpHeadsUpStatesOnAdd(NotificationGroup group, boolean addIsPending) { if (!addIsPending && group.hunSummaryOnNextAddition) { - if (!mHeadsUpManager.isHeadsUp(group.summary.key)) { + if (!mHeadsUpManager.contains(group.summary.key)) { mHeadsUpManager.showNotification(group.summary); } group.hunSummaryOnNextAddition = false; @@ -208,15 +208,17 @@ public class NotificationGroupManager implements OnHeadsUpChangedListener { NotificationData.Entry entry = children.get(i); if (onlySummaryAlerts(entry) && entry.row.isHeadsUp()) { releasedChild = true; - mHeadsUpManager.releaseImmediately(entry.key); + mHeadsUpManager.removeNotification( + entry.key, true /* releaseImmediately */); } } if (isolatedChild != null && onlySummaryAlerts(isolatedChild) && isolatedChild.row.isHeadsUp()) { releasedChild = true; - mHeadsUpManager.releaseImmediately(isolatedChild.key); + mHeadsUpManager.removeNotification( + isolatedChild.key, true /* releaseImmediately */); } - if (releasedChild && !mHeadsUpManager.isHeadsUp(group.summary.key)) { + if (releasedChild && !mHeadsUpManager.contains(group.summary.key)) { boolean notifyImmediately = (numChildren - numPendingChildren) > 1; if (notifyImmediately) { mHeadsUpManager.showNotification(group.summary); @@ -546,8 +548,8 @@ public class NotificationGroupManager implements OnHeadsUpChangedListener { // the notification is actually already removed, no need to do heads-up on it. return; } - if (mHeadsUpManager.isHeadsUp(child.key)) { - mHeadsUpManager.updateNotification(child, true); + if (mHeadsUpManager.contains(child.key)) { + mHeadsUpManager.updateNotification(child.key, true /* alert */); } else { if (onlySummaryAlerts(entry)) { notificationGroup.lastHeadsUpTransfer = SystemClock.elapsedRealtime(); @@ -556,7 +558,7 @@ public class NotificationGroupManager implements OnHeadsUpChangedListener { } } } - mHeadsUpManager.releaseImmediately(entry.key); + mHeadsUpManager.removeNotification(entry.key, true /* releaseImmediately */); } private boolean onlySummaryAlerts(NotificationData.Entry entry) { 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 3c351abc1fda..cd0255b0edf4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -56,7 +56,6 @@ import android.app.PendingIntent; import android.app.StatusBarManager; import android.app.TaskStackBuilder; import android.app.UiModeManager; -import android.app.WallpaperColors; import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; @@ -67,8 +66,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; -import android.content.om.IOverlayManager; -import android.content.om.OverlayInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -1414,7 +1411,7 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void onPerformRemoveNotification(StatusBarNotification n) { if (mStackScroller.hasPulsingNotifications() && - !mHeadsUpManager.hasHeadsUpNotifications()) { + !mHeadsUpManager.hasNotifications()) { // We were showing a pulse for a notification, but no notifications are pulsing anymore. // Finish the pulse. mDozeScrimController.pulseOutNow(); @@ -4835,7 +4832,7 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void onPulseStarted() { callback.onPulseStarted(); - if (mHeadsUpManager.hasHeadsUpNotifications()) { + if (mHeadsUpManager.hasNotifications()) { // Only pulse the stack scroller if there's actually something to show. // Otherwise just show the always-on screen. setPulsing(true); @@ -5108,7 +5105,7 @@ public class StatusBar extends SystemUI implements DemoMode, final boolean wasOccluded = mIsOccluded; dismissKeyguardThenExecute(() -> { // TODO: Some of this code may be able to move to NotificationEntryManager. - if (mHeadsUpManager != null && mHeadsUpManager.isHeadsUp(notificationKey)) { + if (mHeadsUpManager != null && mHeadsUpManager.contains(notificationKey)) { // Release the HUN notification to the shade. if (isPresenterFullyCollapsed()) { @@ -5117,7 +5114,8 @@ public class StatusBar extends SystemUI implements DemoMode, // // In most cases, when FLAG_AUTO_CANCEL is set, the notification will // become canceled shortly by NoMan, but we can't assume that. - mHeadsUpManager.releaseImmediately(notificationKey); + mHeadsUpManager.removeNotification(sbn.getKey(), + true /* releaseImmediately */); } StatusBarNotification parentToCancel = null; if (shouldAutoCancel(sbn) && mGroupManager.isOnlyChildInGroup(sbn)) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java index 677dd731a992..d477587f8ecb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java @@ -21,56 +21,44 @@ import android.annotation.Nullable; import android.content.Context; import android.content.res.Resources; import android.database.ContentObserver; -import android.os.SystemClock; -import android.os.Handler; -import android.os.Looper; import android.util.ArrayMap; import android.provider.Settings; import android.util.Log; -import android.view.accessibility.AccessibilityEvent; import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; +import com.android.systemui.statusbar.AlertingNotificationManager; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.NotificationData; import java.io.FileDescriptor; import java.io.PrintWriter; -import java.util.Iterator; -import java.util.stream.Stream; -import java.util.HashMap; import java.util.HashSet; /** * A manager which handles heads up notifications which is a special mode where * they simply peek from the top of the screen. */ -public class HeadsUpManager { +public abstract class HeadsUpManager extends AlertingNotificationManager { private static final String TAG = "HeadsUpManager"; - private static final boolean DEBUG = false; private static final String SETTING_HEADS_UP_SNOOZE_LENGTH_MS = "heads_up_snooze_length_ms"; - protected final Clock mClock = new Clock(); protected final HashSet<OnHeadsUpChangedListener> mListeners = new HashSet<>(); - protected final Handler mHandler = new Handler(Looper.getMainLooper()); protected final Context mContext; - protected int mHeadsUpNotificationDecay; - protected int mMinimumDisplayTime; protected int mTouchAcceptanceDelay; protected int mSnoozeLengthMs; protected boolean mHasPinnedNotification; protected int mUser; - private final HashMap<String, HeadsUpEntry> mHeadsUpEntries = new HashMap<>(); private final ArrayMap<String, Long> mSnoozedPackages; public HeadsUpManager(@NonNull final Context context) { mContext = context; Resources resources = context.getResources(); mMinimumDisplayTime = resources.getInteger(R.integer.heads_up_notification_minimum_time); - mHeadsUpNotificationDecay = resources.getInteger(R.integer.heads_up_notification_decay); + mAutoDismissNotificationDecay = resources.getInteger(R.integer.heads_up_notification_decay); mTouchAcceptanceDelay = resources.getInteger(R.integer.touch_acceptance_delay); mSnoozedPackages = new ArrayMap<>(); int defaultSnoozeLengthMs = @@ -85,7 +73,9 @@ public class HeadsUpManager { context.getContentResolver(), SETTING_HEADS_UP_SNOOZE_LENGTH_MS, -1); if (packageSnoozeLengthMs > -1 && packageSnoozeLengthMs != mSnoozeLengthMs) { mSnoozeLengthMs = packageSnoozeLengthMs; - if (DEBUG) Log.v(TAG, "mSnoozeLengthMs = " + mSnoozeLengthMs); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "mSnoozeLengthMs = " + mSnoozeLengthMs); + } } } }; @@ -108,49 +98,14 @@ public class HeadsUpManager { mListeners.remove(listener); } - /** - * Called when posting a new notification to the heads up. - */ - public void showNotification(@NonNull NotificationData.Entry headsUp) { - if (DEBUG) Log.v(TAG, "showNotification"); - addHeadsUpEntry(headsUp); - updateNotification(headsUp, true); - headsUp.setInterruption(); - } - - /** - * Called when updating or posting a notification to the heads up. - */ - public void updateNotification(@NonNull NotificationData.Entry headsUp, boolean alert) { - if (DEBUG) Log.v(TAG, "updateNotification"); - - headsUp.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - - if (alert) { - HeadsUpEntry headsUpEntry = mHeadsUpEntries.get(headsUp.key); - if (headsUpEntry == null) { - // the entry was released before this update (i.e by a listener) This can happen - // with the groupmanager - return; - } - headsUpEntry.updateEntry(true /* updatePostTime */); - setEntryPinned(headsUpEntry, shouldHeadsUpBecomePinned(headsUp)); + public void updateNotification(@NonNull String key, boolean alert) { + super.updateNotification(key, alert); + AlertEntry alertEntry = getHeadsUpEntry(key); + if (alert && alertEntry != null) { + setEntryPinned((HeadsUpEntry) alertEntry, shouldHeadsUpBecomePinned(alertEntry.mEntry)); } } - private void addHeadsUpEntry(@NonNull NotificationData.Entry entry) { - HeadsUpEntry headsUpEntry = createHeadsUpEntry(); - // This will also add the entry to the sortedList - headsUpEntry.setEntry(entry); - mHeadsUpEntries.put(entry.key, headsUpEntry); - entry.row.setHeadsUp(true); - setEntryPinned(headsUpEntry, shouldHeadsUpBecomePinned(entry)); - for (OnHeadsUpChangedListener listener : mListeners) { - listener.onHeadsUpStateChanged(entry, true); - } - entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - } - protected boolean shouldHeadsUpBecomePinned(@NonNull NotificationData.Entry entry) { return hasFullScreenIntent(entry); } @@ -161,8 +116,10 @@ public class HeadsUpManager { protected void setEntryPinned( @NonNull HeadsUpManager.HeadsUpEntry headsUpEntry, boolean isPinned) { - if (DEBUG) Log.v(TAG, "setEntryPinned: " + isPinned); - ExpandableNotificationRow row = headsUpEntry.entry.row; + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "setEntryPinned: " + isPinned); + } + ExpandableNotificationRow row = headsUpEntry.mEntry.row; if (row.isPinned() != isPinned) { row.setPinned(isPinned); updatePinnedMode(); @@ -176,20 +133,24 @@ public class HeadsUpManager { } } - protected void removeHeadsUpEntry(@NonNull NotificationData.Entry entry) { - HeadsUpEntry remove = mHeadsUpEntries.remove(entry.key); - onHeadsUpEntryRemoved(remove); + @Override + protected void onAlertEntryAdded(AlertEntry alertEntry) { + NotificationData.Entry entry = alertEntry.mEntry; + entry.row.setHeadsUp(true); + setEntryPinned((HeadsUpEntry) alertEntry, shouldHeadsUpBecomePinned(entry)); + for (OnHeadsUpChangedListener listener : mListeners) { + listener.onHeadsUpStateChanged(entry, true); + } } - protected void onHeadsUpEntryRemoved(@NonNull HeadsUpEntry remove) { - NotificationData.Entry entry = remove.entry; - entry.row.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + @Override + protected void onAlertEntryRemoved(AlertEntry alertEntry) { + NotificationData.Entry entry = alertEntry.mEntry; entry.row.setHeadsUp(false); - setEntryPinned(remove, false /* isPinned */); + setEntryPinned((HeadsUpEntry) alertEntry, false /* isPinned */); for (OnHeadsUpChangedListener listener : mListeners) { listener.onHeadsUpStateChanged(entry, false); } - releaseHeadsUpEntry(remove); } protected void updatePinnedMode() { @@ -197,7 +158,7 @@ public class HeadsUpManager { if (hasPinnedNotification == mHasPinnedNotification) { return; } - if (DEBUG) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "Pinned mode changed: " + mHasPinnedNotification + " -> " + hasPinnedNotification); } @@ -211,50 +172,6 @@ public class HeadsUpManager { } /** - * React to the removal of the notification in the heads up. - * - * @return true if the notification was removed and false if it still needs to be kept around - * for a bit since it wasn't shown long enough - */ - public boolean removeNotification(@NonNull String key, boolean ignoreEarliestRemovalTime) { - if (DEBUG) Log.v(TAG, "removeNotification"); - releaseImmediately(key); - return true; - } - - /** - * Returns if the given notification is in the Heads Up Notification list or not. - */ - public boolean isHeadsUp(@NonNull String key) { - return mHeadsUpEntries.containsKey(key); - } - - /** - * Pushes any current Heads Up notification down into the shade. - */ - public void releaseAllImmediately() { - if (DEBUG) Log.v(TAG, "releaseAllImmediately"); - Iterator<HeadsUpEntry> iterator = mHeadsUpEntries.values().iterator(); - while (iterator.hasNext()) { - HeadsUpEntry entry = iterator.next(); - iterator.remove(); - onHeadsUpEntryRemoved(entry); - } - } - - /** - * Pushes the given Heads Up notification down into the shade. - */ - public void releaseImmediately(@NonNull String key) { - HeadsUpEntry headsUpEntry = getHeadsUpEntry(key); - if (headsUpEntry == null) { - return; - } - NotificationData.Entry shadeEntry = headsUpEntry.entry; - removeHeadsUpEntry(shadeEntry); - } - - /** * Returns if the given notification is snoozed or not. */ public boolean isSnoozed(@NonNull String packageName) { @@ -262,7 +179,9 @@ public class HeadsUpManager { Long snoozedUntil = mSnoozedPackages.get(key); if (snoozedUntil != null) { if (snoozedUntil > mClock.currentTimeMillis()) { - if (DEBUG) Log.v(TAG, key + " snoozed"); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, key + " snoozed"); + } return true; } mSnoozedPackages.remove(packageName); @@ -274,9 +193,9 @@ public class HeadsUpManager { * Snoozes all current Heads Up Notifications. */ public void snooze() { - for (String key : mHeadsUpEntries.keySet()) { - HeadsUpEntry entry = mHeadsUpEntries.get(key); - String packageName = entry.entry.notification.getPackageName(); + for (String key : mAlertEntries.keySet()) { + AlertEntry entry = getHeadsUpEntry(key); + String packageName = entry.mEntry.notification.getPackageName(); mSnoozedPackages.put(snoozeKey(packageName, mUser), mClock.currentTimeMillis() + mSnoozeLengthMs); } @@ -289,53 +208,27 @@ public class HeadsUpManager { @Nullable protected HeadsUpEntry getHeadsUpEntry(@NonNull String key) { - return mHeadsUpEntries.get(key); + return (HeadsUpEntry) mAlertEntries.get(key); } /** - * Returns the entry of given Heads Up Notification. - * - * @param key Key of heads up notification - */ - @Nullable - public NotificationData.Entry getEntry(@NonNull String key) { - HeadsUpEntry entry = mHeadsUpEntries.get(key); - return entry != null ? entry.entry : null; - } - - /** - * Returns the stream of all current Heads Up Notifications. - */ - @NonNull - public Stream<NotificationData.Entry> getAllEntries() { - return mHeadsUpEntries.values().stream().map(headsUpEntry -> headsUpEntry.entry); - } - - /** - * Returns the top Heads Up Notification, which appeares to show at first. + * Returns the top Heads Up Notification, which appears to show at first. */ @Nullable public NotificationData.Entry getTopEntry() { HeadsUpEntry topEntry = getTopHeadsUpEntry(); - return (topEntry != null) ? topEntry.entry : null; - } - - /** - * Returns if any heads up notification is available or not. - */ - public boolean hasHeadsUpNotifications() { - return !mHeadsUpEntries.isEmpty(); + return (topEntry != null) ? topEntry.mEntry : null; } @Nullable protected HeadsUpEntry getTopHeadsUpEntry() { - if (mHeadsUpEntries.isEmpty()) { + if (mAlertEntries.isEmpty()) { return null; } HeadsUpEntry topEntry = null; - for (HeadsUpEntry entry: mHeadsUpEntries.values()) { + for (AlertEntry entry: mAlertEntries.values()) { if (topEntry == null || entry.compareTo(topEntry) < 0) { - topEntry = entry; + topEntry = (HeadsUpEntry) entry; } } return topEntry; @@ -359,8 +252,8 @@ public class HeadsUpManager { pw.print(" mSnoozeLengthMs="); pw.println(mSnoozeLengthMs); pw.print(" now="); pw.println(mClock.currentTimeMillis()); pw.print(" mUser="); pw.println(mUser); - for (HeadsUpEntry entry: mHeadsUpEntries.values()) { - pw.print(" HeadsUpEntry="); pw.println(entry.entry); + for (AlertEntry entry: mAlertEntries.values()) { + pw.print(" HeadsUpEntry="); pw.println(entry.mEntry); } int N = mSnoozedPackages.size(); pw.println(" snoozed packages: " + N); @@ -378,9 +271,9 @@ public class HeadsUpManager { } private boolean hasPinnedNotificationInternal() { - for (String key : mHeadsUpEntries.keySet()) { - HeadsUpEntry entry = mHeadsUpEntries.get(key); - if (entry.entry.row.isPinned()) { + for (String key : mAlertEntries.keySet()) { + AlertEntry entry = getHeadsUpEntry(key); + if (entry.mEntry.row.isPinned()) { return true; } } @@ -392,16 +285,16 @@ public class HeadsUpManager { * @param userUnPinned The unpinned action is trigger by user real operation. */ public void unpinAll(boolean userUnPinned) { - for (String key : mHeadsUpEntries.keySet()) { - HeadsUpEntry entry = mHeadsUpEntries.get(key); + for (String key : mAlertEntries.keySet()) { + HeadsUpEntry entry = getHeadsUpEntry(key); setEntryPinned(entry, false /* isPinned */); // maybe it got un sticky entry.updateEntry(false /* updatePostTime */); // when the user unpinned all of HUNs by moving one HUN, all of HUNs should not stay // on the screen. - if (userUnPinned && entry.entry != null && entry.entry.row != null) { - ExpandableNotificationRow row = entry.entry.row; + if (userUnPinned && entry.mEntry != null && entry.mEntry.row != null) { + ExpandableNotificationRow row = entry.mEntry.row; if (row.mustStayOnScreen()) { row.setHeadsUpIsVisible(); } @@ -425,8 +318,8 @@ public class HeadsUpManager { * one should be ranked higher and 0 if they are equal. */ public int compare(@NonNull NotificationData.Entry a, @NonNull NotificationData.Entry b) { - HeadsUpEntry aEntry = getHeadsUpEntry(a.key); - HeadsUpEntry bEntry = getHeadsUpEntry(b.key); + AlertEntry aEntry = getHeadsUpEntry(a.key); + AlertEntry bEntry = getHeadsUpEntry(b.key); if (aEntry == null || bEntry == null) { return aEntry == null ? 1 : -1; } @@ -438,21 +331,18 @@ public class HeadsUpManager { * until it's collapsed again. */ public void setExpanded(@NonNull NotificationData.Entry entry, boolean expanded) { - HeadsUpManager.HeadsUpEntry headsUpEntry = mHeadsUpEntries.get(entry.key); + HeadsUpEntry headsUpEntry = getHeadsUpEntry(entry.key); if (headsUpEntry != null && entry.row.isPinned()) { - headsUpEntry.expanded(expanded); + headsUpEntry.setExpanded(expanded); } } @NonNull - protected HeadsUpEntry createHeadsUpEntry() { + @Override + protected HeadsUpEntry createAlertEntry() { return new HeadsUpEntry(); } - protected void releaseHeadsUpEntry(@NonNull HeadsUpEntry entry) { - entry.reset(); - } - public void onDensityOrFontScaleChanged() { } @@ -460,108 +350,58 @@ public class HeadsUpManager { * This represents a notification and how long it is in a heads up mode. It also manages its * lifecycle automatically when created. */ - protected class HeadsUpEntry implements Comparable<HeadsUpEntry> { - @Nullable public NotificationData.Entry entry; - public long postTime; + protected class HeadsUpEntry extends AlertEntry { public boolean remoteInputActive; - public long earliestRemovaltime; - public boolean expanded; - - @Nullable private Runnable mRemoveHeadsUpRunnable; - - public void setEntry(@Nullable final NotificationData.Entry entry) { - setEntry(entry, null); - } + protected boolean expanded; - public void setEntry(@Nullable final NotificationData.Entry entry, - @Nullable Runnable removeHeadsUpRunnable) { - this.entry = entry; - this.mRemoveHeadsUpRunnable = removeHeadsUpRunnable; - - // The actual post time will be just after the heads-up really slided in - postTime = mClock.currentTimeMillis() + mTouchAcceptanceDelay; - updateEntry(true /* updatePostTime */); - } - - public void updateEntry(boolean updatePostTime) { - if (DEBUG) Log.v(TAG, "updateEntry"); - - long currentTime = mClock.currentTimeMillis(); - earliestRemovaltime = currentTime + mMinimumDisplayTime; - if (updatePostTime) { - postTime = Math.max(postTime, currentTime); - } - removeAutoRemovalCallbacks(); - - if (!isSticky()) { - long finishTime = postTime + mHeadsUpNotificationDecay; - long removeDelay = Math.max(finishTime - currentTime, mMinimumDisplayTime); - mHandler.postDelayed(mRemoveHeadsUpRunnable, removeDelay); - } - } - - private boolean isSticky() { - return (entry.row.isPinned() && expanded) - || remoteInputActive || hasFullScreenIntent(entry); + @Override + protected boolean isSticky() { + return (mEntry.row.isPinned() && expanded) + || remoteInputActive || hasFullScreenIntent(mEntry); } @Override - public int compareTo(@NonNull HeadsUpEntry o) { - boolean isPinned = entry.row.isPinned(); - boolean otherPinned = o.entry.row.isPinned(); + public int compareTo(@NonNull AlertEntry alertEntry) { + HeadsUpEntry headsUpEntry = (HeadsUpEntry) alertEntry; + boolean isPinned = mEntry.row.isPinned(); + boolean otherPinned = headsUpEntry.mEntry.row.isPinned(); if (isPinned && !otherPinned) { return -1; } else if (!isPinned && otherPinned) { return 1; } - boolean selfFullscreen = hasFullScreenIntent(entry); - boolean otherFullscreen = hasFullScreenIntent(o.entry); + boolean selfFullscreen = hasFullScreenIntent(mEntry); + boolean otherFullscreen = hasFullScreenIntent(headsUpEntry.mEntry); if (selfFullscreen && !otherFullscreen) { return -1; } else if (!selfFullscreen && otherFullscreen) { return 1; } - if (remoteInputActive && !o.remoteInputActive) { + if (remoteInputActive && !headsUpEntry.remoteInputActive) { return -1; - } else if (!remoteInputActive && o.remoteInputActive) { + } else if (!remoteInputActive && headsUpEntry.remoteInputActive) { return 1; } - return postTime < o.postTime ? 1 - : postTime == o.postTime ? entry.key.compareTo(o.entry.key) - : -1; + return super.compareTo(headsUpEntry); } - public void expanded(boolean expanded) { + public void setExpanded(boolean expanded) { this.expanded = expanded; } + @Override public void reset() { - entry = null; + super.reset(); expanded = false; remoteInputActive = false; - removeAutoRemovalCallbacks(); - mRemoveHeadsUpRunnable = null; - } - - public void removeAutoRemovalCallbacks() { - if (mRemoveHeadsUpRunnable != null) - mHandler.removeCallbacks(mRemoveHeadsUpRunnable); - } - - public void removeAsSoonAsPossible() { - if (mRemoveHeadsUpRunnable != null) { - removeAutoRemovalCallbacks(); - mHandler.postDelayed(mRemoveHeadsUpRunnable, - earliestRemovaltime - mClock.currentTimeMillis()); - } } - } - public static class Clock { - public long currentTimeMillis() { - return SystemClock.elapsedRealtime(); + @Override + protected long calculatePostTime() { + // The actual post time will be just after the heads-up really slided in + return super.calculatePostTime() + mTouchAcceptanceDelay; } } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java index d7c4bbf3ea1d..c97095e1860b 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/SafetyWarningDialog.java @@ -21,11 +21,13 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Resources.NotFoundException; import android.media.AudioManager; import android.util.Log; import android.view.KeyEvent; import android.view.WindowManager; + import com.android.systemui.statusbar.phone.SystemUIDialog; abstract public class SafetyWarningDialog extends SystemUIDialog @@ -40,12 +42,18 @@ abstract public class SafetyWarningDialog extends SystemUIDialog private long mShowTime; private boolean mNewVolumeUp; + private boolean mDisableOnVolumeUp; public SafetyWarningDialog(Context context, AudioManager audioManager) { super(context); mContext = context; mAudioManager = audioManager; - + try { + mDisableOnVolumeUp = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_safe_media_disable_on_volume_up); + } catch (NotFoundException e) { + mDisableOnVolumeUp = true; + } getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); setShowForAllUsers(true); setMessage(mContext.getString(com.android.internal.R.string.safe_media_volume_warning)); @@ -63,7 +71,8 @@ abstract public class SafetyWarningDialog extends SystemUIDialog @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) { + if (mDisableOnVolumeUp && keyCode == KeyEvent.KEYCODE_VOLUME_UP + && event.getRepeatCount() == 0) { mNewVolumeUp = true; } return super.onKeyDown(keyCode, event); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 41e47689fdaa..13c43f7009a1 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -149,7 +149,6 @@ public class VolumeDialogImpl implements VolumeDialog { private boolean mHovering = false; private boolean mShowActiveStreamOnly; private boolean mConfigChanged = false; - private boolean mIsAnimatingDismiss = false; public VolumeDialogImpl(Context context) { mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); @@ -583,24 +582,18 @@ public class VolumeDialogImpl implements VolumeDialog { protected void dismissH(int reason) { mHandler.removeMessages(H.DISMISS); mHandler.removeMessages(H.SHOW); - if (mIsAnimatingDismiss) { - return; - } mDialogView.animate().cancel(); - mIsAnimatingDismiss = false; mShowing = false; mDialogView.setTranslationX(0); mDialogView.setAlpha(1); ViewPropertyAnimator animator = mDialogView.animate() - .withStartAction(() -> mIsAnimatingDismiss = true) .alpha(0) .setDuration(250) .setInterpolator(new SystemUIInterpolators.LogAccelerateInterpolator()) .withEndAction(() -> mHandler.postDelayed(() -> { if (D.BUG) Log.d(TAG, "mDialog.dismiss()"); mDialog.dismiss(); - mIsAnimatingDismiss = false; }, 50)); if (!isLandscape()) animator.translationX(mDialogView.getWidth() / 2); animator.start(); @@ -1202,7 +1195,7 @@ public class VolumeDialogImpl implements VolumeDialog { @Override public boolean onTouchEvent(MotionEvent event) { - if (isShowing()) { + if (mShowing) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); return true; diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk index a4120c45a83a..9ee55324efa2 100644 --- a/packages/SystemUI/tests/Android.mk +++ b/packages/SystemUI/tests/Android.mk @@ -30,37 +30,17 @@ LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_COMPATIBILITY_SUITE := device-tests LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - $(call all-Iaidl-files-under, src) \ - $(call all-java-files-under, ../src) + $(call all-Iaidl-files-under, src) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ - frameworks/base/packages/SystemUI/res \ - frameworks/base/packages/SystemUI/res-keyguard \ +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_STATIC_ANDROID_LIBRARIES := \ - SystemUIPluginLib \ - SystemUISharedLib \ - androidx.car_car \ - androidx.legacy_legacy-support-v4 \ - androidx.recyclerview_recyclerview \ - androidx.preference_preference \ - androidx.appcompat_appcompat \ - androidx.mediarouter_mediarouter \ - androidx.palette_palette \ - androidx.legacy_legacy-preference-v14 \ - androidx.leanback_leanback \ - androidx.slice_slice-core \ - androidx.slice_slice-view \ - androidx.slice_slice-builders \ - androidx.arch.core_core-runtime \ - androidx.lifecycle_lifecycle-extensions \ + SystemUI-core LOCAL_STATIC_JAVA_LIBRARIES := \ metrics-helper-lib \ android-support-test \ mockito-target-inline-minus-junit4 \ - SystemUI-proto \ - SystemUI-tags \ testables \ truth-prebuilt \ @@ -70,7 +50,6 @@ LOCAL_JNI_SHARED_LIBRARIES := \ libdexmakerjvmtiagent \ libmultiplejvmtiagentsinterferenceagent - LOCAL_JAVA_LIBRARIES := \ android.test.runner \ telephony-common \ @@ -112,8 +91,6 @@ jacoco_exclude := $(subst $(space),$(comma),$(patsubst %,%*,$(local_classes))) LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.systemui.* LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := com.android.systemui.tests.*,$(jacoco_exclude) -include frameworks/base/packages/SettingsLib/common.mk - ifeq ($(EXCLUDE_SYSTEMUI_TESTS),) include $(BUILD_PACKAGE) endif diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml index e604877c63b0..64f96da09b08 100644 --- a/packages/SystemUI/tests/AndroidManifest.xml +++ b/packages/SystemUI/tests/AndroidManifest.xml @@ -15,6 +15,8 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" + xmlns:tools="http://schemas.android.com/tools" package="com.android.systemui.tests"> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> @@ -64,6 +66,25 @@ <action android:name="com.android.systemui.action.TEST_ACTION" /> </intent-filter> </receiver> + + <provider + android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer" + tools:replace="android:authorities" + android:authorities="${applicationId}.lifecycle-tests" + android:exported="false" + android:multiprocess="true" /> + <provider android:name="com.android.systemui.keyguard.KeyguardSliceProvider" + android:authorities="com.android.systemui.test.keyguard.disabled" + android:enabled="false" + tools:replace="android:authorities" + tools:node="remove" /> + + <provider + android:name="androidx.core.content.FileProvider" + android:authorities="com.android.systemui.test.fileprovider" + android:exported="false" + tools:replace="android:authorities" + android:grantUriPermissions="true" /> </application> <instrumentation android:name="android.testing.TestableInstrumentation" diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java new file mode 100644 index 000000000000..f04a1151384e --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.android.systemui.statusbar; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.junit.Assert.assertEquals; + +import android.app.ActivityManager; +import android.app.Notification; +import android.os.Handler; +import android.os.Looper; +import android.os.UserHandle; +import android.service.notification.StatusBarNotification; +import android.support.test.filters.SmallTest; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; + +import com.android.systemui.R; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.AlertingNotificationManager; +import com.android.systemui.statusbar.notification.NotificationData; +import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; + + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +@SmallTest +@RunWith(AndroidTestingRunner.class) +@TestableLooper.RunWithLooper +public class AlertingNotificationManagerTest extends SysuiTestCase { + @Rule + public MockitoRule rule = MockitoJUnit.rule(); + + private static final String TEST_PACKAGE_NAME = "test"; + private static final int TEST_UID = 0; + + private static final int TEST_MINIMUM_DISPLAY_TIME = 200; + private static final int TEST_AUTO_DISMISS_TIME = 500; + // Number of notifications to use in tests requiring multiple notifications + private static final int TEST_NUM_NOTIFICATIONS = 4; + private static final int TEST_TIMEOUT_TIME = 10000; + private final Runnable TEST_TIMEOUT_RUNNABLE = () -> mTimedOut = true; + + private AlertingNotificationManager mAlertingNotificationManager; + + protected NotificationData.Entry mEntry; + protected Handler mTestHandler; + private StatusBarNotification mSbn; + private boolean mTimedOut = false; + + @Mock protected ExpandableNotificationRow mRow; + + private final class TestableAlertingNotificationManager extends AlertingNotificationManager { + private TestableAlertingNotificationManager() { + mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME; + mAutoDismissNotificationDecay = TEST_AUTO_DISMISS_TIME; + mHandler = mTestHandler; + } + + @Override + protected void onAlertEntryAdded(AlertEntry alertEntry) {} + + @Override + protected void onAlertEntryRemoved(AlertEntry alertEntry) {} + } + + protected AlertingNotificationManager createAlertingNotificationManager() { + return new TestableAlertingNotificationManager(); + } + + private StatusBarNotification createNewNotification(int id) { + Notification.Builder n = new Notification.Builder(mContext, "") + .setSmallIcon(R.drawable.ic_person) + .setContentTitle("Title") + .setContentText("Text"); + return new StatusBarNotification( + TEST_PACKAGE_NAME /* pkg */, + TEST_PACKAGE_NAME, + id, + null /* tag */, + TEST_UID, + 0 /* initialPid */, + n.build(), + new UserHandle(ActivityManager.getCurrentUser()), + null /* overrideGroupKey */, + 0 /* postTime */); + } + + @Before + public void setUp() { + mTestHandler = Handler.createAsync(Looper.myLooper()); + mSbn = createNewNotification(0 /* id */); + mEntry = new NotificationData.Entry(mSbn); + mEntry.row = mRow; + + mAlertingNotificationManager = createAlertingNotificationManager(); + } + + @Test + public void testShowNotification_addsEntry() { + mAlertingNotificationManager.showNotification(mEntry); + + assertTrue(mAlertingNotificationManager.contains(mEntry.key)); + assertTrue(mAlertingNotificationManager.hasNotifications()); + assertEquals(mEntry, mAlertingNotificationManager.getEntry(mEntry.key)); + } + + @Test + public void testShowNotification_autoDismisses() { + mAlertingNotificationManager.showNotification(mEntry); + mTestHandler.postDelayed(TEST_TIMEOUT_RUNNABLE, TEST_TIMEOUT_TIME); + + // Wait for remove runnable and then process it immediately + TestableLooper.get(this).processMessages(1); + + assertFalse("Test timed out", mTimedOut); + assertFalse(mAlertingNotificationManager.contains(mEntry.key)); + } + + @Test + public void testRemoveNotification_removeDeferred() { + mAlertingNotificationManager.showNotification(mEntry); + + // Try to remove but defer, since the notification has not been shown long enough. + mAlertingNotificationManager.removeNotification(mEntry.key, false /* releaseImmediately */); + + assertTrue(mAlertingNotificationManager.contains(mEntry.key)); + } + + @Test + public void testRemoveNotification_forceRemove() { + mAlertingNotificationManager.showNotification(mEntry); + + //Remove forcibly with releaseImmediately = true. + mAlertingNotificationManager.removeNotification(mEntry.key, true /* releaseImmediately */); + + assertFalse(mAlertingNotificationManager.contains(mEntry.key)); + } + + @Test + public void testReleaseAllImmediately() { + for (int i = 0; i < TEST_NUM_NOTIFICATIONS; i++) { + StatusBarNotification sbn = createNewNotification(i); + NotificationData.Entry entry = new NotificationData.Entry(sbn); + entry.row = mRow; + mAlertingNotificationManager.showNotification(entry); + } + + mAlertingNotificationManager.releaseAllImmediately(); + + assertEquals(0, mAlertingNotificationManager.getAllEntries().count()); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java index 1837909d5d7c..bdf7cd31c791 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java @@ -16,22 +16,13 @@ package com.android.systemui.statusbar.phone; -import android.app.ActivityManager; -import android.app.Instrumentation; -import android.app.Notification; -import android.os.UserHandle; import android.view.View; -import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; -import com.android.systemui.R; -import com.android.systemui.SysuiTestCase; -import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; -import com.android.systemui.statusbar.notification.NotificationData; -import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.AlertingNotificationManager; +import com.android.systemui.statusbar.AlertingNotificationManagerTest; import com.android.systemui.statusbar.notification.VisualStabilityManager; import org.junit.Before; @@ -42,175 +33,54 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertFalse; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper -public class HeadsUpManagerPhoneTest extends SysuiTestCase { +public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest { @Rule public MockitoRule rule = MockitoJUnit.rule(); - private static final String TEST_PACKAGE_NAME = "test"; - private static final int TEST_UID = 0; - private HeadsUpManagerPhone mHeadsUpManager; - private NotificationData.Entry mEntry; - private StatusBarNotification mSbn; - @Mock private NotificationGroupManager mGroupManager; @Mock private View mStatusBarWindowView; - @Mock private StatusBar mBar; - @Mock private ExpandableNotificationRow mRow; @Mock private VisualStabilityManager mVSManager; + @Mock private StatusBar mBar; + + protected AlertingNotificationManager createAlertingNotificationManager() { + return mHeadsUpManager; + } @Before public void setUp() { when(mVSManager.isReorderingAllowed()).thenReturn(true); - - mHeadsUpManager = new HeadsUpManagerPhone( - mContext, mStatusBarWindowView, mGroupManager, mBar, mVSManager); - - Notification.Builder n = new Notification.Builder(mContext, "") - .setSmallIcon(R.drawable.ic_person) - .setContentTitle("Title") - .setContentText("Text"); - mSbn = new StatusBarNotification(TEST_PACKAGE_NAME, TEST_PACKAGE_NAME, 0, null, TEST_UID, - 0, n.build(), new UserHandle(ActivityManager.getCurrentUser()), null, 0); - - mEntry = new NotificationData.Entry(mSbn); - mEntry.row = mRow; - mEntry.expandedIcon = mock(StatusBarIconView.class); + mHeadsUpManager = new HeadsUpManagerPhone(mContext, mStatusBarWindowView, mGroupManager, + mBar, mVSManager); + super.setUp(); + mHeadsUpManager.mHandler = mTestHandler; } @Test - public void testBasicOperations() { - // Check the initial state. - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - - // Add a notification. + public void testSnooze() { mHeadsUpManager.showNotification(mEntry); - assertEquals(mEntry, mHeadsUpManager.getEntry(mEntry.key)); - assertEquals(mEntry, mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); - - // Update the notification. - mHeadsUpManager.updateNotification(mEntry, false); - - assertEquals(mEntry, mHeadsUpManager.getEntry(mEntry.key)); - assertEquals(mEntry, mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); - - // Try to remove but defer, since the notification is currenlt visible on display. - mHeadsUpManager.removeNotification(mEntry.key, false /* ignoreEarliestRemovalTime */); - - assertEquals(mEntry, mHeadsUpManager.getEntry(mEntry.key)); - assertEquals(mEntry, mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); + mHeadsUpManager.snooze(); - // Remove forcibly with ignoreEarliestRemovalTime = true. - mHeadsUpManager.removeNotification(mEntry.key, true /* ignoreEarliestRemovalTime */); - - // Check the initial state. - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - } - - @Test - public void testsTimeoutRemoval() { - mHeadsUpManager.removeMinimumDisplayTimeForTesting(); - - // Check the initial state. - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - - // Run the code on the main thready, not to run an async operations. - instrumentation.runOnMainSync(() -> { - // Add a notification. - mHeadsUpManager.showNotification(mEntry); - - // Ensure the head up is visible before timeout. - assertNotNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNotNull(mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); - }); - // Wait for the async operations, which removes the heads up notification. - waitForIdleSync(); - - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - } - - @Test - public void releaseImmediately() { - // Check the initial state. - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - - // Add a notification. - mHeadsUpManager.showNotification(mEntry); - - assertEquals(mEntry, mHeadsUpManager.getEntry(mEntry.key)); - assertEquals(mEntry, mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); - - // Remove but defer, since the notification is visible on display. - mHeadsUpManager.releaseImmediately(mEntry.key); - - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); + assertTrue(mHeadsUpManager.isSnoozed(mEntry.notification.getPackageName())); } @Test - public void releaseAllImmediately() { - // Check the initial state. - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); - - // Add a notification. + public void testSwipedOutNotification() { mHeadsUpManager.showNotification(mEntry); + mHeadsUpManager.addSwipedOutNotification(mEntry.key); - assertEquals(mEntry, mHeadsUpManager.getEntry(mEntry.key)); - assertEquals(mEntry, mHeadsUpManager.getTopEntry()); - assertEquals(1, mHeadsUpManager.getAllEntries().count()); - assertTrue(mHeadsUpManager.hasHeadsUpNotifications()); - - // Remove but defer, since the notification is visible on display. - mHeadsUpManager.releaseAllImmediately(); + // Remove should succeed because the notification is swiped out + mHeadsUpManager.removeNotification(mEntry.key, false /* releaseImmediately */); - assertNull(mHeadsUpManager.getEntry(mEntry.key)); - assertNull(mHeadsUpManager.getTopEntry()); - assertEquals(0, mHeadsUpManager.getAllEntries().count()); - assertFalse(mHeadsUpManager.hasHeadsUpNotifications()); + assertFalse(mHeadsUpManager.contains(mEntry.key)); } } diff --git a/packages/VpnDialogs/res/values-fr/strings.xml b/packages/VpnDialogs/res/values-fr/strings.xml index 2b3eacea6430..71801197ddf2 100644 --- a/packages/VpnDialogs/res/values-fr/strings.xml +++ b/packages/VpnDialogs/res/values-fr/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Demande de connexion"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> souhaite configurer une connexion VPN qui permet de surveiller le trafic réseau. N\'acceptez que si vous faites confiance à la source. <br /> <br /> <img src=vpn_icon /> s\'affiche en haut de votre écran lorsqu\'une connexion VPN est active."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> souhaite configurer une connexion VPN qui lui permet de surveiller le trafic réseau. N\'acceptez que si vous faites confiance à la source. <br /> <br /> <img src=vpn_icon /> s\'affiche en haut de votre écran lorsqu\'une connexion VPN est active."</string> <string name="legacy_title" msgid="192936250066580964">"VPN connecté"</string> <string name="session" msgid="6470628549473641030">"Session :"</string> <string name="duration" msgid="3584782459928719435">"Durée :"</string> diff --git a/packages/VpnDialogs/res/values-ru/strings.xml b/packages/VpnDialogs/res/values-ru/strings.xml index 3b9b4b550ec7..0543937a39fc 100644 --- a/packages/VpnDialogs/res/values-ru/strings.xml +++ b/packages/VpnDialogs/res/values-ru/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Запрос на подключение"</string> - <string name="warning" msgid="809658604548412033">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" пытается подключиться к сети VPN, чтобы отслеживать трафик. Этот запрос следует принимать, только если вы доверяете источнику.<br/><br/>Когда подключение к сети VPN активно, в верхней части экрана появляется значок <img src=vpn_icon />."</string> + <string name="warning" msgid="809658604548412033">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" пытается подключиться к сети VPN, чтобы отслеживать трафик. Этот запрос следует принимать, только если вы доверяете источнику. <br/><br/>Когда подключение к сети VPN активно, в верхней части экрана появляется значок <img src=vpn_icon />."</string> <string name="legacy_title" msgid="192936250066580964">"VPN-подключение установлено"</string> <string name="session" msgid="6470628549473641030">"Сеанс:"</string> <string name="duration" msgid="3584782459928719435">"Продолжительность:"</string> diff --git a/packages/VpnDialogs/res/values-ta/strings.xml b/packages/VpnDialogs/res/values-ta/strings.xml index ffaf93ae5b17..3b4cc571d860 100644 --- a/packages/VpnDialogs/res/values-ta/strings.xml +++ b/packages/VpnDialogs/res/values-ta/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"இணைப்புக் கோரிக்கை"</string> - <string name="warning" msgid="809658604548412033">"VPN இணைப்பை அமைக்க <xliff:g id="APP">%s</xliff:g> விழைகிறது. அதன்மூலம் இது நெட்வொர்க் டிராஃபிக்கைக் கண்காணிக்கும் அனுமதியைப் பெறும். நம்பகமான மூலத்தை மட்டுமே ஏற்கவும். <br /> <br /> VPN இயக்கத்தில் உள்ளபோது திரையில் மேல் பகுதியில் <img src=vpn_icon /> தோன்றும்."</string> + <string name="warning" msgid="809658604548412033">"நெட்வொர்க் டிராஃபிக்கைக் கண்காணிக்க வசதியாக VPN இணைப்பை அமைக்க <xliff:g id="APP">%s</xliff:g> கோருகிறது. நம்பகமான மூலத்தை மட்டுமே ஏற்கவும். <br /> <br /> VPN இயக்கத்தில் உள்ளபோது திரையின் மேல் பகுதியில் <img src=vpn_icon /> தோன்றும்."</string> <string name="legacy_title" msgid="192936250066580964">"VPN இணைக்கப்பட்டது"</string> <string name="session" msgid="6470628549473641030">"அமர்வு:"</string> <string name="duration" msgid="3584782459928719435">"காலஅளவு:"</string> diff --git a/proto/src/gnss.proto b/proto/src/gnss.proto index 016839232255..1509fc00fb1d 100644 --- a/proto/src/gnss.proto +++ b/proto/src/gnss.proto @@ -45,6 +45,9 @@ message GnssLog { // Power metrics optional PowerMetrics power_metrics = 12; + + // Hardware revision (EVT, DVT, PVT etc.) + optional string hardware_revision = 13; } // Power metrics diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index f8b4d744efa9..a20eece5a668 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -2219,6 +2219,7 @@ message MetricsEvent { // 1: Gesture performed is Nudge // 2: Gesture performed is Pickup // 4: Gesture performed is Double Tap + // 6: Gesture performed is Reach ACTION_AMBIENT_GESTURE = 411; // ---- End N Constants, all N constants go above this line ---- @@ -4084,6 +4085,8 @@ message MetricsEvent { // Tag FIELD_AUTOFILL_SERVICE: Package of service that processed the request // Tag FIELD_AUTOFILL_SESSION_ID: id of the autofill session associated with this metric. // Tag FIELD_AUTOFILL_COMPAT_MODE: package is being autofilled on compatibility mode. + // NOTE: starting on OS Q, it also added the following fields: + // FIELD_AUTOFILL_UPDATE: Whether the UI displayed "UPDATE" instead of "SAVE" AUTOFILL_SAVE_UI = 916; // Tag of a field for the number of saveable ids @@ -6430,6 +6433,18 @@ message MetricsEvent { // OS: Q FACE_ENROLL_PREVIEW = 1554; + // Field used to indicate whether a save request was used to update existing user data. + FIELD_AUTOFILL_UPDATE = 1555; + + // OPEN: Settings > Network & Internet > Wi-Fi > Add network + // CATEGORY: SETTINGS + // OS: Q + SETTINGS_WIFI_ADD_NETWORK = 1556; + + // OPEN: Settings > System > Input & Gesture > Reach up gesture + // OS: Q + SETTINGS_GESTURE_REACH = 1557; + // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto index f7fcf5c6adac..7f8989d8548e 100644 --- a/proto/src/wifi.proto +++ b/proto/src/wifi.proto @@ -476,6 +476,9 @@ message WifiLog { // Histogram of the EAP method type of all installed Passpoint profiles repeated PasspointProfileTypeCount installed_passpoint_profile_type = 123; + + // Hardware revision (EVT, DVT, PVT etc.) + optional string hardware_revision = 124; } // Information that gets logged for every WiFi connection. @@ -811,6 +814,12 @@ message StaEvent { // Framework changed Sta interface MAC address TYPE_MAC_CHANGE = 17; + + // Wifi is turned on + TYPE_WIFI_ENABLED = 18; + + // Wifi is turned off + TYPE_WIFI_DISABLED = 19; } enum FrameworkDisconnectReason { diff --git a/services/art-profile b/services/art-profile index cbc00ea53427..3c60eee4a2a9 100644 --- a/services/art-profile +++ b/services/art-profile @@ -13303,7 +13303,7 @@ PLcom/android/server/notification/NotificationManagerService$10;->createNotifica PLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V PLcom/android/server/notification/NotificationManagerService$10;->enforcePolicyAccess(ILjava/lang/String;)V PLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUI(Ljava/lang/String;)V -PLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V +PLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;II)V PLcom/android/server/notification/NotificationManagerService$10;->finishToken(Ljava/lang/String;Landroid/app/ITransientNotification;)V PLcom/android/server/notification/NotificationManagerService$10;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice; PLcom/android/server/notification/NotificationManagerService$10;->getBackupPayload(I)[B diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 03f9ad0eb6e4..5a10c1e4b42a 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -1474,11 +1474,15 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState // Cache used to make sure changed fields do not belong to a dataset. final ArrayMap<AutofillId, AutofillValue> currentValues = new ArrayMap<>(); - final ArraySet<AutofillId> allIds = new ArraySet<>(); + // Savable (optional or required) ids that will be checked against the dataset ids. + final ArraySet<AutofillId> savableIds = new ArraySet<>(); final AutofillId[] requiredIds = saveInfo.getRequiredIds(); boolean allRequiredAreNotEmpty = true; boolean atLeastOneChanged = false; + // If an autofilled field is changed, we need to change isUpdate to true so the proper UI is + // shown. + boolean isUpdate = false; if (requiredIds != null) { for (int i = 0; i < requiredIds.length; i++) { final AutofillId id = requiredIds[i]; @@ -1486,7 +1490,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState Slog.w(TAG, "null autofill id on " + Arrays.toString(requiredIds)); continue; } - allIds.add(id); + savableIds.add(id); final ViewState viewState = mViewStates.get(id); if (viewState == null) { Slog.w(TAG, "showSaveLocked(): no ViewState for required " + id); @@ -1536,6 +1540,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } changed = false; } + } else { + isUpdate = true; } if (changed) { if (sDebug) { @@ -1549,12 +1555,21 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } final AutofillId[] optionalIds = saveInfo.getOptionalIds(); + if (sVerbose) { + Slog.v(TAG, "allRequiredAreNotEmpty: " + allRequiredAreNotEmpty + " hasOptional: " + + (optionalIds != null)); + } if (allRequiredAreNotEmpty) { - if (!atLeastOneChanged && optionalIds != null) { + // Must look up all optional ids in 2 scenarios: + // - if no required id changed but an optional id did, it should trigger save / update + // - if at least one required id changed but it was not part of a filled dataset, we + // need to check if an optional id is part of a filled datased (in which case we show + // Update instead of Save) + if (optionalIds!= null && (!atLeastOneChanged || !isUpdate)) { // No change on required ids yet, look for changes on optional ids. for (int i = 0; i < optionalIds.length; i++) { final AutofillId id = optionalIds[i]; - allIds.add(id); + savableIds.add(id); final ViewState viewState = mViewStates.get(id); if (viewState == null) { Slog.w(TAG, "no ViewState for optional " + id); @@ -1562,17 +1577,27 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } if ((viewState.getState() & ViewState.STATE_CHANGED) != 0) { final AutofillValue currentValue = viewState.getCurrentValue(); - currentValues.put(id, currentValue); + final AutofillValue value = getSanitizedValue(sanitizers, id, currentValue); + if (value == null) { + if (sDebug) { + Slog.d(TAG, "value of opt. field " + id + " failed sanitization"); + } + continue; + } + + currentValues.put(id, value); final AutofillValue filledValue = viewState.getAutofilledValue(); - if (currentValue != null && !currentValue.equals(filledValue)) { + if (value != null && !value.equals(filledValue)) { if (sDebug) { Slog.d(TAG, "found a change on optional " + id + ": " + filledValue - + " => " + currentValue); + + " => " + value); + } + if (filledValue != null) { + isUpdate = true; } atLeastOneChanged = true; - break; } - } else { + } else { // Update current values cache based on initial value final AutofillValue initialValue = getValueFromContextsLocked(id); if (sDebug) { @@ -1623,16 +1648,16 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState Helper.getFields(dataset); if (sVerbose) { Slog.v(TAG, "Checking if saved fields match contents of dataset #" + i - + ": " + dataset + "; allIds=" + allIds); + + ": " + dataset + "; savableIds=" + savableIds); } - for (int j = 0; j < allIds.size(); j++) { - final AutofillId id = allIds.valueAt(j); + savable_ids_loop: for (int j = 0; j < savableIds.size(); j++) { + final AutofillId id = savableIds.valueAt(j); final AutofillValue currentValue = currentValues.get(id); if (currentValue == null) { if (sDebug) { Slog.d(TAG, "dataset has value for field that is null: " + id); } - continue datasets_loop; + continue savable_ids_loop; } final AutofillValue datasetValue = datasetValues.get(id); if (!currentValue.equals(datasetValue)) { @@ -1658,14 +1683,13 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } // Use handler so logContextCommitted() is logged first - mHandler.sendMessage(obtainMessage( - Session::logSaveShown, this)); + mHandler.sendMessage(obtainMessage(Session::logSaveShown, this)); final IAutoFillManagerClient client = getClient(); mPendingSaveUi = new PendingUi(mActivityToken, id, client); getUiForShowing().showSaveUi(mService.getServiceLabel(), mService.getServiceIcon(), mService.getServicePackageName(), saveInfo, this, - mComponentName, this, mPendingSaveUi, mCompatMode); + mComponentName, this, mPendingSaveUi, isUpdate, mCompatMode); if (client != null) { try { client.setSaveUiState(id, true); @@ -1715,12 +1739,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return sanitizers; } + // TODO: this method is called a few times in the save process, we should cache its results into + // ViewState. @Nullable private AutofillValue getSanitizedValue( @Nullable ArrayMap<AutofillId, InternalSanitizer> sanitizers, @NonNull AutofillId id, - @NonNull AutofillValue value) { - if (sanitizers == null) return value; + @Nullable AutofillValue value) { + if (sanitizers == null || value == null) return value; final InternalSanitizer sanitizer = sanitizers.get(id); if (sanitizer == null) { diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java index c5e838aaa85e..596240601f55 100644 --- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java +++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java @@ -268,9 +268,10 @@ public final class AutoFillUI { @Nullable String servicePackageName, @NonNull SaveInfo info, @NonNull ValueFinder valueFinder, @NonNull ComponentName componentName, @NonNull AutoFillUiCallback callback, @NonNull PendingUi pendingSaveUi, - boolean compatMode) { + boolean isUpdate, boolean compatMode) { if (sVerbose) { - Slog.v(TAG, "showSaveUi() for " + componentName.toShortString() + ": " + info); + Slog.v(TAG, "showSaveUi(update=" + isUpdate + ") for " + componentName.toShortString() + + ": " + info); } int numIds = 0; numIds += info.getRequiredIds() == null ? 0 : info.getRequiredIds().length; @@ -280,6 +281,9 @@ public final class AutoFillUI { .newLogMaker(MetricsEvent.AUTOFILL_SAVE_UI, componentName, servicePackageName, pendingSaveUi.sessionId, compatMode) .addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_IDS, numIds); + if (isUpdate) { + log.addTaggedData(MetricsEvent.FIELD_AUTOFILL_UPDATE, 1); + } mHandler.post(() -> { if (callback != mCallback) { @@ -328,7 +332,7 @@ public final class AutoFillUI { } mMetricsLogger.write(log); } - }, compatMode); + }, isUpdate, compatMode); }); } diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java index 58823036212d..0812cb992100 100644 --- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java +++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java @@ -149,7 +149,7 @@ final class SaveUi { @Nullable String servicePackageName, @NonNull ComponentName componentName, @NonNull SaveInfo info, @NonNull ValueFinder valueFinder, @NonNull OverlayControl overlayControl, @NonNull OnSaveListener listener, - boolean compatMode) { + boolean isUpdate, boolean compatMode) { mPendingUi= pendingUi; mListener = new OneTimeListener(listener); mOverlayControl = overlayControl; @@ -184,21 +184,29 @@ final class SaveUi { switch (types.size()) { case 1: - mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_type, + mTitle = Html.fromHtml(context.getString( + isUpdate ? R.string.autofill_update_title_with_type + : R.string.autofill_save_title_with_type, types.valueAt(0), serviceLabel), 0); break; case 2: - mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_2types, + mTitle = Html.fromHtml(context.getString( + isUpdate ? R.string.autofill_update_title_with_2types + : R.string.autofill_save_title_with_2types, types.valueAt(0), types.valueAt(1), serviceLabel), 0); break; case 3: - mTitle = Html.fromHtml(context.getString(R.string.autofill_save_title_with_3types, + mTitle = Html.fromHtml(context.getString( + isUpdate ? R.string.autofill_update_title_with_3types + : R.string.autofill_save_title_with_3types, types.valueAt(0), types.valueAt(1), types.valueAt(2), serviceLabel), 0); break; default: // Use generic if more than 3 or invalid type (size 0). mTitle = Html.fromHtml( - context.getString(R.string.autofill_save_title, serviceLabel), 0); + context.getString(isUpdate ? R.string.autofill_update_title + : R.string.autofill_save_title, serviceLabel), + 0); } titleView.setText(mTitle); @@ -233,7 +241,10 @@ final class SaveUi { } noButton.setOnClickListener((v) -> mListener.onCancel(info.getNegativeActionListener())); - final View yesButton = view.findViewById(R.id.autofill_save_yes); + final TextView yesButton = view.findViewById(R.id.autofill_save_yes); + if (isUpdate) { + yesButton.setText(R.string.autofill_update_yes); + } yesButton.setOnClickListener((v) -> mListener.onSave()); mDialog = new Dialog(context, THEME_ID); diff --git a/services/backup/java/com/android/server/backup/internal/BackupHandler.java b/services/backup/java/com/android/server/backup/internal/BackupHandler.java index 2722729b9f4c..f66d8cc8a9a5 100644 --- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java +++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java @@ -57,6 +57,7 @@ import com.android.server.backup.transport.TransportClient; import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * Asynchronous backup/restore handler thread. @@ -121,8 +122,8 @@ public class BackupHandler extends Handler { break; } - // snapshot the pending-backup set and work on that - ArrayList<BackupRequest> queue = new ArrayList<>(); + // Snapshot the pending-backup set and work on that. + List<String> queue = new ArrayList<>(); DataChangedJournal oldJournal = backupManagerService.getJournal(); synchronized (backupManagerService.getQueueLock()) { // Do we have any work to do? Construct the work queue @@ -130,7 +131,7 @@ public class BackupHandler extends Handler { // the backup. if (backupManagerService.getPendingBackups().size() > 0) { for (BackupRequest b : backupManagerService.getPendingBackups().values()) { - queue.add(b); + queue.add(b.packageName); } if (DEBUG) { Slog.v(TAG, "clearing pending backups"); @@ -405,10 +406,6 @@ public class BackupHandler extends Handler { if (MORE_DEBUG) { Slog.d(TAG, "MSG_REQUEST_BACKUP observer=" + params.observer); } - ArrayList<BackupRequest> kvQueue = new ArrayList<>(); - for (String packageName : params.kvPackages) { - kvQueue.add(new BackupRequest(packageName)); - } backupManagerService.setBackupRunning(true); backupManagerService.getWakelock().acquire(); @@ -416,7 +413,7 @@ public class BackupHandler extends Handler { backupManagerService, params.transportClient, params.dirName, - kvQueue, + params.kvPackages, /* dataChangedJournal */ null, params.observer, params.monitor, diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java index 8c83e6756d1c..8fbca4b828e7 100644 --- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java +++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java @@ -83,13 +83,7 @@ class KeyValueBackupReporter { Slog.w(TAG, "Backup begun with an empty queue, nothing to do"); } - void onPmFoundInQueue() { - if (MORE_DEBUG) { - Slog.i(TAG, "PM metadata in queue, removing"); - } - } - - void onQueueReady(List<BackupRequest> queue) { + void onQueueReady(List<String> queue) { if (DEBUG) { Slog.v(TAG, "Beginning backup of " + queue.size() + " targets"); } @@ -120,7 +114,7 @@ class KeyValueBackupReporter { Slog.d(TAG, "Skipping backup of PM metadata"); } - void onInvokePmAgentError(Exception e) { + void onExtractPmAgentDataError(Exception e) { Slog.e(TAG, "Error during PM metadata backup", e); } @@ -171,7 +165,7 @@ class KeyValueBackupReporter { mObserver, packageName, BackupManager.ERROR_AGENT_FAILURE); } - void onInvokeAgent(String packageName) { + void onExtractAgentData(String packageName) { if (DEBUG) { Slog.d(TAG, "Invoking agent on " + packageName); } diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java index 41013aafa504..91af6f1b801f 100644 --- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java +++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java @@ -178,6 +178,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private static final int THREAD_PRIORITY = Process.THREAD_PRIORITY_BACKGROUND; private static final AtomicInteger THREAD_COUNT = new AtomicInteger(); private static final String BLANK_STATE_FILE_NAME = "blank_state"; + private static final String PM_PACKAGE = BackupManagerService.PACKAGE_MANAGER_SENTINEL; @VisibleForTesting public static final String STAGING_FILE_SUFFIX = ".data"; @VisibleForTesting @@ -192,8 +193,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { * operation. * @param transportDirName The value of {@link IBackupTransport#transportDirName()} for the * transport whose {@link TransportClient} was provided above. - * @param queue The list of packages that will be backed-up, in the form of {@link - * BackupRequest}. + * @param queue The list of package names that will be backed-up. * @param dataChangedJournal The old data-changed journal file that will be deleted when the * operation finishes (successfully or not) or {@code null}. * @param observer A {@link IBackupObserver}. @@ -210,7 +210,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { BackupManagerService backupManagerService, TransportClient transportClient, String transportDirName, - List<BackupRequest> queue, + List<String> queue, @Nullable DataChangedJournal dataChangedJournal, IBackupObserver observer, @Nullable IBackupManagerMonitor monitor, @@ -251,8 +251,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private final boolean mNonIncremental; private final int mCurrentOpToken; private final File mStateDir; - private final List<BackupRequest> mOriginalQueue; - private final List<BackupRequest> mQueue; + private final List<String> mOriginalQueue; + private final List<String> mQueue; private final List<String> mPendingFullBackups; @Nullable private final DataChangedJournal mJournal; @Nullable private PerformFullTransportBackupTask mFullBackupTask; @@ -294,7 +294,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { BackupManagerService backupManagerService, TransportClient transportClient, String transportDirName, - List<BackupRequest> queue, + List<String> queue, @Nullable DataChangedJournal journal, IBackupObserver observer, @Nullable IBackupManagerMonitor monitor, @@ -355,11 +355,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { break; } } - if (state == BackupState.CANCELLED) { - finishCancelledBackup(); - } else { - finishBackup(); - } + finishBackup(); } private BackupState handleAgentResult(RemoteResult result) { @@ -420,25 +416,11 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { return BackupState.FINAL; } - // When the transport is forcing non-incremental key/value payloads, we send the - // metadata only if it explicitly asks for it. - boolean skipPm = mNonIncremental; - - // The app metadata pseudopackage might also be represented in the - // backup queue if apps have been added/removed since the last time - // we performed a backup. Drop it from the working queue now that - // we're committed to evaluating it for backup regardless. - for (int i = 0; i < mQueue.size(); i++) { - if (PACKAGE_MANAGER_SENTINEL.equals(mQueue.get(i).packageName)) { - mReporter.onPmFoundInQueue(); - mQueue.remove(i); - skipPm = false; - break; - } - } - mReporter.onQueueReady(mQueue); + // We only backup PM if it was explicitly in the queue or if it's incremental. + boolean backupPm = mQueue.remove(PM_PACKAGE) || !mNonIncremental; - File pmState = new File(mStateDir, PACKAGE_MANAGER_SENTINEL); + mReporter.onQueueReady(mQueue); + File pmState = new File(mStateDir, PM_PACKAGE); try { IBackupTransport transport = mTransportClient.connectOrThrow("KVBT.startBackup()"); String transportName = transport.name(); @@ -461,7 +443,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { return BackupState.FINAL; } - if (skipPm) { + if (!backupPm) { mReporter.onSkipPm(); return BackupState.RUNNING_QUEUE; } @@ -472,16 +454,19 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private BackupState backupPm() { RemoteResult agentResult = null; try { + mCurrentPackage = new PackageInfo(); + mCurrentPackage.packageName = PM_PACKAGE; + // Since PM is running in the system process we can set up its agent directly. BackupAgent pmAgent = mBackupManagerService.makeMetadataAgent(); Pair<Integer, RemoteResult> statusAndResult = extractAgentData( - PACKAGE_MANAGER_SENTINEL, + PM_PACKAGE, IBackupAgent.Stub.asInterface(pmAgent.onBind())); mStatus = statusAndResult.first; agentResult = statusAndResult.second; } catch (Exception e) { - mReporter.onInvokePmAgentError(e); + mReporter.onExtractPmAgentDataError(e); mStatus = BackupTransport.TRANSPORT_ERROR; } @@ -510,15 +495,14 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { return Pair.create(BackupState.FINAL, null); } - BackupRequest request = mQueue.remove(0); - String packageName = request.packageName; + String packageName = mQueue.remove(0); mReporter.onStartPackageBackup(packageName); // Verify that the requested app is eligible for key-value backup. RemoteResult agentResult = null; try { mCurrentPackage = mPackageManager.getPackageInfo( - request.packageName, PackageManager.GET_SIGNING_CERTIFICATES); + packageName, PackageManager.GET_SIGNING_CERTIFICATES); ApplicationInfo applicationInfo = mCurrentPackage.applicationInfo; if (!AppBackupUtils.appIsEligibleForBackup(applicationInfo, mPackageManager)) { // The manifest has changed. This won't happen again because the app won't be @@ -548,7 +532,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { if (agent != null) { mAgentBinder = agent; Pair<Integer, RemoteResult> statusAndResult = - extractAgentData(request.packageName, agent); + extractAgentData(packageName, agent); mStatus = statusAndResult.first; agentResult = statusAndResult.second; } else { @@ -570,7 +554,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { if (mStatus == BackupTransport.AGENT_ERROR) { mReporter.onAgentError(packageName); - mBackupManagerService.dataChangedImpl(request.packageName); + mBackupManagerService.dataChangedImpl(packageName); mStatus = BackupTransport.TRANSPORT_OK; return Pair.create(BackupState.RUNNING_QUEUE, null); } @@ -592,8 +576,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private void finishBackup() { // Mark packages that we couldn't backup as pending backup. - for (BackupRequest request : mQueue) { - mBackupManagerService.dataChangedImpl(request.packageName); + for (String packageName : mQueue) { + mBackupManagerService.dataChangedImpl(packageName); } // If backup succeeded, we just invalidated this journal. If not, we've already re-enqueued @@ -636,6 +620,12 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { unregisterTask(); mReporter.onKeyValueBackupFinished(); + if (mCancelled) { + // We acknowledge the cancel as soon as we unregister the task, allowing other backups + // to be performed. + mCancelAcknowledged.open(); + } + if (!mCancelled && mStatus == BackupTransport.TRANSPORT_OK && mFullBackupTask != null @@ -675,7 +665,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { /** Removes PM state, triggering initialization in the next key-value task. */ private void clearPmMetadata() { - File pmState = new File(mStateDir, PACKAGE_MANAGER_SENTINEL); + File pmState = new File(mStateDir, PM_PACKAGE); if (pmState.exists()) { pmState.delete(); } @@ -687,7 +677,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { * otherwise {@code null}. */ private Pair<Integer, RemoteResult> extractAgentData(String packageName, IBackupAgent agent) { - mReporter.onInvokeAgent(packageName); + mReporter.onExtractAgentData(packageName); File blankStateFile = new File(mStateDir, BLANK_STATE_FILE_NAME); mSavedStateFile = new File(mStateDir, packageName); @@ -704,12 +694,6 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { boolean callingAgent = false; final RemoteResult agentResult; try { - // TODO: Move this to backupPm() - if (packageName.equals(PACKAGE_MANAGER_SENTINEL)) { - mCurrentPackage = new PackageInfo(); - mCurrentPackage.packageName = packageName; - } - // MODE_CREATE to make an empty file if necessary mSavedState = ParcelFileDescriptor.open( savedStateFileForAgent, MODE_READ_ONLY | MODE_CREATE); @@ -748,9 +732,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { callingAgent ? BackupTransport.AGENT_ERROR : BackupTransport.TRANSPORT_ERROR; return Pair.create(status, null); } - if (mNonIncremental) { - blankStateFile.delete(); - } + blankStateFile.delete(); + return Pair.create(BackupTransport.TRANSPORT_OK, agentResult); } @@ -934,10 +917,10 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { mNewStateFile.delete(); // Immediately retry the package by adding it back to the front of the queue. - // We cannot add @pm@ to the queue because we back it up separately at the start - // of the backup pass in state BACKUP_PM. See below. - if (!PACKAGE_MANAGER_SENTINEL.equals(packageName)) { - mQueue.add(0, new BackupRequest(packageName)); + // We cannot add @pm@ to the queue because we back it up separately at the start. + // Below we request PM backup if that is the case. + if (!PM_PACKAGE.equals(packageName)) { + mQueue.add(0, packageName); } } else { mReporter.onPackageBackupTransportFailure(packageName); @@ -956,7 +939,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } else if (mStatus == BackupTransport.TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED) { // We want to immediately retry the current package. - if (PACKAGE_MANAGER_SENTINEL.equals(packageName)) { + if (PM_PACKAGE.equals(packageName)) { nextState = BackupState.BACKUP_PM; } else { // This is an ordinary package so we will have added it back into the queue @@ -987,7 +970,12 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } /** - * Cancels this task. After this method returns there will be no more calls to the transport. + * Cancels this task. + * + * <p>After this method returns this task won't be registered in {@link BackupManagerService} + * anymore, which means there will be no backups running unless there is a racy request + * coming from another thread in between. As a consequence there will be no more calls to the + * transport originated from this task. * * <p>If this method is executed while an agent is performing a backup, we will stop waiting for * it, disregard its backup data and finalize the task. However, if this method is executed in @@ -995,18 +983,33 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { * the transport and we will not consider the next agent (nor the rest of the queue), proceeding * to finalize the backup. * + * <p>Note: This method is inherently racy since there are no guarantees about how much of the + * task will be executed after you made the call. + * * @param cancelAll MUST be {@code true}. Will be removed. */ @Override public void handleCancel(boolean cancelAll) { // This is called in a thread different from the one that executes method run(). Preconditions.checkArgument(cancelAll, "Can't partially cancel a key-value backup task"); + markCancel(); + waitCancel(); + } + + /** Marks this task as cancelled and tries to stop any ongoing agent call. */ + @VisibleForTesting + public void markCancel() { mReporter.onCancel(); mCancelled = true; RemoteCall pendingCall = mPendingCall; if (pendingCall != null) { pendingCall.cancel(); } + } + + /** Waits for this task to be cancelled after call to {@link #markCancel()}. */ + @VisibleForTesting + public void waitCancel() { mCancelAcknowledged.block(); } @@ -1020,12 +1023,6 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { errorCleanup(); } - private void finishCancelledBackup() { - finishBackup(); - // finalizeBackup() may call the transport, so we only acknowledge the cancellation here. - mCancelAcknowledged.open(); - } - private void revertBackup() { mReporter.onRevertBackup(); long delay; @@ -1041,8 +1038,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { KeyValueBackupJob.schedule( mBackupManagerService.getContext(), delay, mBackupManagerService.getConstants()); - for (BackupRequest request : mOriginalQueue) { - mBackupManagerService.dataChangedImpl(request.packageName); + for (String packageName : mOriginalQueue) { + mBackupManagerService.dataChangedImpl(packageName); } } diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 5f391d82b663..4b0379ef75c1 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -2309,9 +2309,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); try { - mConnector.execute("clatd", "start", interfaceName); - } catch (NativeDaemonConnectorException e) { - throw e.rethrowAsParcelableException(); + mNetdService.clatdStart(interfaceName); + } catch (RemoteException | ServiceSpecificException e) { + throw new IllegalStateException(e); } } @@ -2320,25 +2320,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); try { - mConnector.execute("clatd", "stop", interfaceName); - } catch (NativeDaemonConnectorException e) { - throw e.rethrowAsParcelableException(); - } - } - - @Override - public boolean isClatdStarted(String interfaceName) { - mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); - - final NativeDaemonEvent event; - try { - event = mConnector.execute("clatd", "status", interfaceName); - } catch (NativeDaemonConnectorException e) { - throw e.rethrowAsParcelableException(); + mNetdService.clatdStop(interfaceName); + } catch (RemoteException | ServiceSpecificException e) { + throw new IllegalStateException(e); } - - event.checkCode(ClatdStatusResult); - return event.getMessage().endsWith("started"); } @Override diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 42157cc562b9..306cd832e8ef 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -24,12 +24,14 @@ import static android.os.storage.OnObbStateChangeListener.ERROR_NOT_MOUNTED; import static android.os.storage.OnObbStateChangeListener.ERROR_PERMISSION_DENIED; import static android.os.storage.OnObbStateChangeListener.MOUNTED; import static android.os.storage.OnObbStateChangeListener.UNMOUNTED; + import static com.android.internal.util.XmlUtils.readIntAttribute; import static com.android.internal.util.XmlUtils.readLongAttribute; import static com.android.internal.util.XmlUtils.readStringAttribute; import static com.android.internal.util.XmlUtils.writeIntAttribute; import static com.android.internal.util.XmlUtils.writeLongAttribute; import static com.android.internal.util.XmlUtils.writeStringAttribute; + import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import static org.xmlpull.v1.XmlPullParser.START_TAG; @@ -112,6 +114,7 @@ import android.util.TimeUtils; import android.util.Xml; import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IMediaContainerService; import com.android.internal.os.AppFuseMount; import com.android.internal.os.BackgroundThread; @@ -125,11 +128,13 @@ import com.android.internal.util.HexDump; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.internal.widget.LockPatternUtils; -import com.android.server.pm.PackageManagerService; import com.android.server.storage.AppFuseBridge; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal.ScreenObserver; +import libcore.io.IoUtils; +import libcore.util.EmptyArray; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -159,14 +164,13 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; -import libcore.io.IoUtils; -import libcore.util.EmptyArray; - /** * Service responsible for various storage media. Connects to {@code vold} to * watch for and manage dynamically added storage, such as SD cards and USB mass @@ -182,8 +186,8 @@ class StorageManagerService extends IStorageManager.Stub private static final String ZRAM_ENABLED_PROPERTY = "persist.sys.zram_enabled"; - private static final String ISOLATED_STORAGE_PROPERTY = - "persist.sys.isolated_storage"; + private static final boolean ENABLE_ISOLATED_STORAGE = SystemProperties + .getBoolean(StorageManager.PROP_ISOLATED_STORAGE, false); private static final String SHARED_SANDBOX_ID_PREFIX = "shared:"; @@ -448,8 +452,8 @@ class StorageManagerService extends IStorageManager.Stub private volatile boolean mDaemonConnected = false; private volatile boolean mSecureKeyguardShowing = true; - private PackageManagerService mPms; private PackageManagerInternal mPmInternal; + private UserManagerInternal mUmInternal; private final Callbacks mCallbacks; private final LockPatternUtils mLockPatternUtils; @@ -824,8 +828,8 @@ class StorageManagerService extends IStorageManager.Stub // System user does not have media provider, so skip. if (user.isSystemOnly()) continue; - final ProviderInfo provider = mPms.resolveContentProvider(MediaStore.AUTHORITY, - PackageManager.MATCH_DIRECT_BOOT_AWARE + final ProviderInfo provider = mPmInternal.resolveContentProvider( + MediaStore.AUTHORITY, PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, user.id); if (provider != null) { @@ -1180,7 +1184,7 @@ class StorageManagerService extends IStorageManager.Stub @GuardedBy("mLock") private void onVolumeCreatedLocked(VolumeInfo vol) { - if (mPms.isOnlyCoreApps()) { + if (mPmInternal.isOnlyCoreApps()) { Slog.d(TAG, "System booted in core-only mode; ignoring volume " + vol.getId()); return; } @@ -1428,9 +1432,8 @@ class StorageManagerService extends IStorageManager.Stub mCallbacks = new Callbacks(FgThread.get().getLooper()); mLockPatternUtils = new LockPatternUtils(mContext); - // XXX: This will go away soon in favor of IMountServiceObserver - mPms = (PackageManagerService) ServiceManager.getService("package"); mPmInternal = LocalServices.getService(PackageManagerInternal.class); + mUmInternal = LocalServices.getService(UserManagerInternal.class); HandlerThread hthread = new HandlerThread(TAG); hthread.start(); @@ -1484,14 +1487,13 @@ class StorageManagerService extends IStorageManager.Stub connect(); } - private void collectPackagesInfo() { - if (!SystemProperties.getBoolean(ISOLATED_STORAGE_PROPERTY, false)) { - return; - } + @VisibleForTesting + void collectPackagesInfo() { + if (!ENABLE_ISOLATED_STORAGE) return; + resetPackageData(); final SparseArray<String> sharedUserIds = mPmInternal.getAppsWithSharedUserIds(); - final int[] userIds = LocalServices.getService( - UserManagerInternal.class).getUserIds(); + final int[] userIds = mUmInternal.getUserIds(); for (int userId : userIds) { final List<ApplicationInfo> appInfos = mContext.getPackageManager().getInstalledApplicationsAsUser( @@ -1525,9 +1527,8 @@ class StorageManagerService extends IStorageManager.Stub return sharedUserId == null ? packageName : SHARED_SANDBOX_ID_PREFIX + sharedUserId; } private void pushPackagesInfo() throws RemoteException { - if (!SystemProperties.getBoolean(ISOLATED_STORAGE_PROPERTY, false)) { - return; - } + if (!ENABLE_ISOLATED_STORAGE) return; + // Arrays to fill up from {@link #mAppIds} final String[] allPackageNames; final int[] appIdsForPackages; @@ -1565,9 +1566,8 @@ class StorageManagerService extends IStorageManager.Stub } private String[] getPackagesArrayForUser(int userId) { - if (!SystemProperties.getBoolean(ISOLATED_STORAGE_PROPERTY, false)) { - return new String[0]; - } + if (!ENABLE_ISOLATED_STORAGE) return EmptyArray.STRING; + synchronized (mPackagesLock) { return getPackagesForUserPL(userId).toArray(new String[0]); } @@ -2267,7 +2267,7 @@ class StorageManagerService extends IStorageManager.Stub return false; } - final int packageUid = mPms.getPackageUid(packageName, + final int packageUid = mPmInternal.getPackageUid(packageName, PackageManager.MATCH_DEBUG_TRIAGED_MISSING, UserHandle.getUserId(callerUid)); if (DEBUG_OBB) { @@ -3091,7 +3091,7 @@ class StorageManagerService extends IStorageManager.Stub bytes += storage.getStorageLowBytes(path); } - mPms.freeStorage(volumeUuid, bytes, flags); + mPmInternal.freeStorage(volumeUuid, bytes, flags); } catch (IOException e) { throw new ParcelableException(e); } finally { @@ -3099,6 +3099,72 @@ class StorageManagerService extends IStorageManager.Stub } } + private static final Pattern PATTERN_TRANSLATE = Pattern.compile( + "(?i)^(/storage/[^/]+/(?:[0-9]+/)?)(.*)"); + + @Override + public String translateAppToSystem(String path, String packageName, int userId) { + return translateInternal(path, packageName, userId, true); + } + + @Override + public String translateSystemToApp(String path, String packageName, int userId) { + return translateInternal(path, packageName, userId, false); + } + + private String translateInternal(String path, String packageName, int userId, + boolean toSystem) { + if (!ENABLE_ISOLATED_STORAGE) return path; + + if (path.contains("/../")) { + throw new SecurityException("Shady looking path " + path); + } + + final int uid = mPmInternal.getPackageUid(packageName, + PackageManager.MATCH_UNINSTALLED_PACKAGES, userId); + final String sandboxId; + synchronized (mPackagesLock) { + sandboxId = mSandboxIds.get(UserHandle.getAppId(uid)); + } + if (uid < 0 || sandboxId == null) { + throw new IllegalArgumentException("Unknown package " + packageName); + } + + final Matcher m = PATTERN_TRANSLATE.matcher(path); + if (m.matches()) { + final String device = m.group(1); + final String devicePath = m.group(2); + + // Does path belong to any packages belonging to this UID? If so, + // they get to go straight through to legacy paths. + final String[] pkgs = mContext.getPackageManager().getPackagesForUid(uid); + for (String pkg : pkgs) { + if (devicePath.startsWith("Android/data/" + pkg + "/") || + devicePath.startsWith("Android/media/" + pkg + "/") || + devicePath.startsWith("Android/obb/" + pkg + "/")) { + return path; + } + } + + if (toSystem) { + // Everything else goes into sandbox. + return device + "Android/sandbox/" + sandboxId.replace(':', '/') + "/" + devicePath; + } else { + // Does path belong to this sandbox? If so, leave sandbox. + final String sandboxPrefix = "Android/sandbox/" + sandboxId.replace(':', '/') + "/"; + if (devicePath.startsWith(sandboxPrefix)) { + return device + devicePath.substring(sandboxPrefix.length()); + } + + // Path isn't valid inside sandbox! + throw new SecurityException( + "Path " + path + " isn't valid inside sandbox " + sandboxId); + } + } + + return path; + } + private void addObbStateLocked(ObbState obbState) throws RemoteException { final IBinder binder = obbState.getBinder(); List<ObbState> obbStates = mObbMounts.get(binder); @@ -3764,9 +3830,7 @@ class StorageManagerService extends IStorageManager.Stub @Override public void onExternalStoragePolicyChanged(int uid, String packageName) { // No runtime storage permissions in isolated storage world, so nothing to do here. - if (SystemProperties.getBoolean(ISOLATED_STORAGE_PROPERTY, false)) { - return; - } + if (ENABLE_ISOLATED_STORAGE) return; final int mountMode = getExternalStorageMountMode(uid, packageName); remountUidExternalStorage(uid, mountMode); } diff --git a/services/core/java/com/android/server/am/ActiveInstrumentation.java b/services/core/java/com/android/server/am/ActiveInstrumentation.java index ff6595115584..8cd9d1881639 100644 --- a/services/core/java/com/android/server/am/ActiveInstrumentation.java +++ b/services/core/java/com/android/server/am/ActiveInstrumentation.java @@ -139,7 +139,9 @@ class ActiveInstrumentation { proto.write(ActiveInstrumentationProto.WATCHER, mWatcher.toString()); proto.write(ActiveInstrumentationProto.UI_AUTOMATION_CONNECTION, mUiAutomationConnection.toString()); - proto.write(ActiveInstrumentationProto.ARGUMENTS, mArguments.toString()); + if (mArguments != null) { + mArguments.writeToProto(proto, ActiveInstrumentationProto.ARGUMENTS); + } proto.end(token); } } diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 67abedc96eed..628207cdbd53 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -705,9 +705,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo final boolean inPictureInPictureMode = inPinnedWindowingMode() && targetStackBounds != null; if (inPictureInPictureMode != mLastReportedPictureInPictureMode || forceUpdate) { // Picture-in-picture mode changes also trigger a multi-window mode change as well, so - // update that here in order + // update that here in order. Set the last reported MW state to the same as the PiP + // state since we haven't yet actually resized the task (these callbacks need to + // preceed the configuration change from the resiez. + // TODO(110009072): Once we move these callbacks to the client, remove all logic related + // to forcing the update of the picture-in-picture mode as a part of the PiP animation. mLastReportedPictureInPictureMode = inPictureInPictureMode; - mLastReportedMultiWindowMode = inMultiWindowMode(); + mLastReportedMultiWindowMode = inPictureInPictureMode; final Configuration newConfig = task.computeNewOverrideConfigurationForBounds( targetStackBounds, null); schedulePictureInPictureModeChanged(newConfig); diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 257e119891f0..bd412fc5339c 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -2179,7 +2179,9 @@ class UserController implements Handler.Callback { void startUserWidgets(int userId) { AppWidgetManagerInternal awm = LocalServices.getService(AppWidgetManagerInternal.class); - awm.unlockUser(userId); + if (awm != null) { + awm.unlockUser(userId); + } } void updateUserConfiguration() { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 7a16925cd702..f0743192d65e 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -628,15 +628,17 @@ public class NotificationManagerService extends SystemService { final String pkg; final ITransientNotification callback; int duration; + int displayId; Binder token; ToastRecord(int pid, String pkg, ITransientNotification callback, int duration, - Binder token) { + Binder token, int displayId) { this.pid = pid; this.pkg = pkg; this.callback = callback; this.duration = duration; this.token = token; + this.displayId = displayId; } void update(int duration) { @@ -1986,11 +1988,12 @@ public class NotificationManagerService extends SystemService { // ============================================================================ @Override - public void enqueueToast(String pkg, ITransientNotification callback, int duration) + public void enqueueToast(String pkg, ITransientNotification callback, int duration, + int displayId) { if (DBG) { Slog.i(TAG, "enqueueToast pkg=" + pkg + " callback=" + callback - + " duration=" + duration); + + " duration=" + duration + " displayId=" + displayId); } if (pkg == null || callback == null) { @@ -2042,8 +2045,9 @@ public class NotificationManagerService extends SystemService { } Binder token = new Binder(); - mWindowManagerInternal.addWindowToken(token, TYPE_TOAST, DEFAULT_DISPLAY); - record = new ToastRecord(callingPid, pkg, callback, duration, token); + mWindowManagerInternal.addWindowToken(token, TYPE_TOAST, displayId); + record = new ToastRecord(callingPid, pkg, callback, duration, token, + displayId); mToastQueue.add(record); index = mToastQueue.size() - 1; keepProcessAliveIfNeededLocked(callingPid); @@ -2094,7 +2098,7 @@ public class NotificationManagerService extends SystemService { int index = indexOfToastLocked(pkg, callback); if (index >= 0) { ToastRecord record = mToastQueue.get(index); - finishTokenLocked(record.token); + finishTokenLocked(record.token, record.displayId); } else { Slog.w(TAG, "Toast already killed. pkg=" + pkg + " callback=" + callback); @@ -5231,13 +5235,13 @@ public class NotificationManagerService extends SystemService { ToastRecord lastToast = mToastQueue.remove(index); mWindowManagerInternal.removeWindowToken(lastToast.token, false /* removeWindows */, - DEFAULT_DISPLAY); + lastToast.displayId); // We passed 'false' for 'removeWindows' so that the client has time to stop // rendering (as hide above is a one-way message), otherwise we could crash // a client which was actively using a surface made from the token. However // we need to schedule a timeout to make sure the token is eventually killed // one way or another. - scheduleKillTokenTimeout(lastToast.token); + scheduleKillTokenTimeout(lastToast); keepProcessAliveIfNeededLocked(record.pid); if (mToastQueue.size() > 0) { @@ -5248,14 +5252,13 @@ public class NotificationManagerService extends SystemService { } } - void finishTokenLocked(IBinder t) { + void finishTokenLocked(IBinder t, int displayId) { mHandler.removeCallbacksAndMessages(t); // We pass 'true' for 'removeWindows' to let the WindowManager destroy any // remaining surfaces as either the client has called finishToken indicating // it has successfully removed the views, or the client has timed out // at which point anything goes. - mWindowManagerInternal.removeWindowToken(t, true /* removeWindows */, - DEFAULT_DISPLAY); + mWindowManagerInternal.removeWindowToken(t, true /* removeWindows */, displayId); } @GuardedBy("mToastQueue") @@ -5279,18 +5282,18 @@ public class NotificationManagerService extends SystemService { } @GuardedBy("mToastQueue") - private void scheduleKillTokenTimeout(IBinder token) + private void scheduleKillTokenTimeout(ToastRecord r) { - mHandler.removeCallbacksAndMessages(token); - Message m = Message.obtain(mHandler, MESSAGE_FINISH_TOKEN_TIMEOUT, token); + mHandler.removeCallbacksAndMessages(r); + Message m = Message.obtain(mHandler, MESSAGE_FINISH_TOKEN_TIMEOUT, r); mHandler.sendMessageDelayed(m, FINISH_TOKEN_TIMEOUT); } - private void handleKillTokenTimeout(IBinder token) + private void handleKillTokenTimeout(ToastRecord record) { - if (DBG) Slog.d(TAG, "Kill Token Timeout token=" + token); + if (DBG) Slog.d(TAG, "Kill Token Timeout token=" + record.token); synchronized (mToastQueue) { - finishTokenLocked(token); + finishTokenLocked(record.token, record.displayId); } } @@ -5484,7 +5487,7 @@ public class NotificationManagerService extends SystemService { handleDurationReached((ToastRecord)msg.obj); break; case MESSAGE_FINISH_TOKEN_TIMEOUT: - handleKillTokenTimeout((IBinder)msg.obj); + handleKillTokenTimeout((ToastRecord)msg.obj); break; case MESSAGE_SAVE_POLICY_FILE: handleSavePolicyFile(); @@ -6570,18 +6573,18 @@ public class NotificationManagerService extends SystemService { mHandler.post(new Runnable() { @Override public void run() { - notifyEnqueued(info, sbnToPost); + notifyEnqueued(info, sbnToPost, r.getChannel()); } }); } } private void notifyEnqueued(final ManagedServiceInfo info, - final StatusBarNotification sbn) { + final StatusBarNotification sbn, final NotificationChannel channel) { final INotificationListener assistant = (INotificationListener) info.service; StatusBarNotificationHolder sbnHolder = new StatusBarNotificationHolder(sbn); try { - assistant.onNotificationEnqueued(sbnHolder); + assistant.onNotificationEnqueuedWithChannel(sbnHolder, channel); } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex); } diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java index 71cee052d9a1..28cee7ac4dda 100644 --- a/services/core/java/com/android/server/notification/ZenModeFiltering.java +++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java @@ -117,7 +117,8 @@ public class ZenModeFiltering { } public boolean shouldIntercept(int zen, ZenModeConfig config, NotificationRecord record) { - if (zen == ZEN_MODE_OFF) { + // Zen mode is ignored for critical notifications. + if (zen == ZEN_MODE_OFF || isCritical(record)) { return false; } // Make an exception to policy for the notification saying that policy has changed @@ -207,6 +208,19 @@ public class ZenModeFiltering { } } + /** + * Check if the notification is too critical to be suppressed. + * + * @param record the record to test for criticality + * @return {@code true} if notification is considered critical + * + * @see CriticalNotificationExtractor for criteria + */ + private boolean isCritical(NotificationRecord record) { + // 0 is the most critical + return record.getCriticality() < CriticalNotificationExtractor.NORMAL; + } + private static boolean shouldInterceptAudience(int source, NotificationRecord record) { if (!audienceMatches(source, record.getContactAffinity())) { ZenLog.traceIntercepted(record, "!audienceMatches"); diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 55b194078a69..95c70d590b69 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -417,7 +417,7 @@ public class PackageDexOptimizer { // TODO(calin): maybe add a separate call. mInstaller.dexopt(path, info.uid, info.packageName, isa, /*dexoptNeeded*/ 0, /*oatDir*/ null, dexoptFlags, - compilerFilter, info.volumeUuid, classLoaderContext, info.seInfoUser, + compilerFilter, info.volumeUuid, classLoaderContext, info.seInfo, options.isDowngrade(), info.targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null, getReasonName(reason)); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6df030893184..f3d333b751c0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -9023,6 +9023,20 @@ public class PackageManagerService extends IPackageManager.Stub } } + /** + * Enforces that only the system UID or shell's UID can call a method exposed + * via Binder. + * + * @param message used as message if SecurityException is thrown + * @throws SecurityException if the caller is not system or shell + */ + private static void enforceSystemOrShell(String message) { + final int uid = Binder.getCallingUid(); + if (uid != Process.SYSTEM_UID && uid != Process.SHELL_UID) { + throw new SecurityException(message); + } + } + @Override public void performFstrimIfNeeded() { enforceSystemOrRoot("Only the system can request fstrim"); @@ -9504,7 +9518,13 @@ public class PackageManagerService extends IPackageManager.Stub if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return false; } - return BackgroundDexOptService.runIdleOptimizationsNow(this, mContext, packageNames); + enforceSystemOrShell("runBackgroundDexoptJob"); + final long identity = Binder.clearCallingIdentity(); + try { + return BackgroundDexOptService.runIdleOptimizationsNow(this, mContext, packageNames); + } finally { + Binder.restoreCallingIdentity(identity); + } } List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) { @@ -24451,6 +24471,17 @@ public class PackageManagerService extends IPackageManager.Stub return getAppsWithSharedUserIdsLocked(); } } + + @Override + public boolean isOnlyCoreApps() { + return PackageManagerService.this.isOnlyCoreApps(); + } + + @Override + public void freeStorage(String volumeUuid, long bytes, int storageFlags) + throws IOException { + PackageManagerService.this.freeStorage(volumeUuid, bytes, storageFlags); + } } private SparseArray<String> getAppsWithSharedUserIdsLocked() { diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java index ca08415f7a77..c94d209892af 100644 --- a/services/core/java/com/android/server/pm/SharedUserSetting.java +++ b/services/core/java/com/android/server/pm/SharedUserSetting.java @@ -64,7 +64,7 @@ public final class SharedUserSetting extends SettingBase { public void writeToProto(ProtoOutputStream proto, long fieldId) { long token = proto.start(fieldId); - proto.write(PackageServiceDumpProto.SharedUserProto.USER_ID, userId); + proto.write(PackageServiceDumpProto.SharedUserProto.UID, userId); proto.write(PackageServiceDumpProto.SharedUserProto.NAME, name); proto.end(token); } diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 50e6f8d5b905..843cd8a1ba0f 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -45,6 +45,7 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.SystemProperties; import android.os.UserHandle; import android.os.storage.StorageManager; import android.print.PrintManager; @@ -169,12 +170,33 @@ public final class DefaultPermissionGrantPolicy { SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS); } + @Deprecated private static final Set<String> STORAGE_PERMISSIONS = new ArraySet<>(); static { STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE); STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } + private static final Set<String> MEDIA_AURAL_PERMISSIONS = new ArraySet<>(); + static { + // STOPSHIP(b/112545973): remove once feature enabled by default + if (SystemProperties.getBoolean(StorageManager.PROP_ISOLATED_STORAGE, false)) { + MEDIA_AURAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_AUDIO); + MEDIA_AURAL_PERMISSIONS.add(Manifest.permission.WRITE_MEDIA_AUDIO); + } + } + + private static final Set<String> MEDIA_VISUAL_PERMISSIONS = new ArraySet<>(); + static { + // STOPSHIP(b/112545973): remove once feature enabled by default + if (SystemProperties.getBoolean(StorageManager.PROP_ISOLATED_STORAGE, false)) { + MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_IMAGES); + MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.WRITE_MEDIA_IMAGES); + MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VIDEO); + MEDIA_VISUAL_PERMISSIONS.add(Manifest.permission.WRITE_MEDIA_VIDEO); + } + } + private static final int MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS = 1; private static final String ACTION_TRACK = "com.android.fitness.TRACK"; @@ -404,6 +426,8 @@ public final class DefaultPermissionGrantPolicy { MediaStore.AUTHORITY, userId); if (mediaStorePackage != null) { grantRuntimePermissions(mediaStorePackage, STORAGE_PERMISSIONS, true, userId); + grantRuntimePermissions(mediaStorePackage, MEDIA_AURAL_PERMISSIONS, true, userId); + grantRuntimePermissions(mediaStorePackage, MEDIA_VISUAL_PERMISSIONS, true, userId); grantRuntimePermissions(mediaStorePackage, PHONE_PERMISSIONS, true, userId); } @@ -615,6 +639,7 @@ public final class DefaultPermissionGrantPolicy { if (galleryPackage != null && doesPackageSupportRuntimePermissions(galleryPackage)) { grantRuntimePermissions(galleryPackage, STORAGE_PERMISSIONS, userId); + grantRuntimePermissions(galleryPackage, MEDIA_VISUAL_PERMISSIONS, userId); } // Email @@ -724,6 +749,7 @@ public final class DefaultPermissionGrantPolicy { if (musicPackage != null && doesPackageSupportRuntimePermissions(musicPackage)) { grantRuntimePermissions(musicPackage, STORAGE_PERMISSIONS, userId); + grantRuntimePermissions(musicPackage, MEDIA_AURAL_PERMISSIONS, userId); } // Home diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 4521dc10a606..49638a91662c 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -20,7 +20,6 @@ import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LE import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND; @@ -59,12 +58,25 @@ import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; +import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE; + import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; -import static com.android.server.wm.utils.CoordinateTransforms.transformPhysicalToLogicalCoordinates; -import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE; +import static com.android.server.wm.DisplayContentProto.ABOVE_APP_WINDOWS; +import static com.android.server.wm.DisplayContentProto.BELOW_APP_WINDOWS; +import static com.android.server.wm.DisplayContentProto.DISPLAY_FRAMES; +import static com.android.server.wm.DisplayContentProto.DISPLAY_INFO; +import static com.android.server.wm.DisplayContentProto.DOCKED_STACK_DIVIDER_CONTROLLER; +import static com.android.server.wm.DisplayContentProto.DPI; +import static com.android.server.wm.DisplayContentProto.ID; +import static com.android.server.wm.DisplayContentProto.IME_WINDOWS; +import static com.android.server.wm.DisplayContentProto.PINNED_STACK_CONTROLLER; +import static com.android.server.wm.DisplayContentProto.ROTATION; +import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION; +import static com.android.server.wm.DisplayContentProto.STACKS; +import static com.android.server.wm.DisplayContentProto.WINDOW_CONTAINER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_BOOT; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY; @@ -101,19 +113,7 @@ import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP; import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING; import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW; import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE; -import static com.android.server.wm.DisplayProto.ABOVE_APP_WINDOWS; -import static com.android.server.wm.DisplayProto.BELOW_APP_WINDOWS; -import static com.android.server.wm.DisplayProto.DISPLAY_FRAMES; -import static com.android.server.wm.DisplayProto.DISPLAY_INFO; -import static com.android.server.wm.DisplayProto.DOCKED_STACK_DIVIDER_CONTROLLER; -import static com.android.server.wm.DisplayProto.DPI; -import static com.android.server.wm.DisplayProto.ID; -import static com.android.server.wm.DisplayProto.IME_WINDOWS; -import static com.android.server.wm.DisplayProto.PINNED_STACK_CONTROLLER; -import static com.android.server.wm.DisplayProto.ROTATION; -import static com.android.server.wm.DisplayProto.SCREEN_ROTATION_ANIMATION; -import static com.android.server.wm.DisplayProto.STACKS; -import static com.android.server.wm.DisplayProto.WINDOW_CONTAINER; +import static com.android.server.wm.utils.CoordinateTransforms.transformPhysicalToLogicalCoordinates; import android.annotation.CallSuper; import android.annotation.NonNull; @@ -122,7 +122,6 @@ import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Matrix; -import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; @@ -141,6 +140,7 @@ import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayInfo; +import android.view.Gravity; import android.view.InputDevice; import android.view.MagnificationSpec; import android.view.Surface; @@ -1617,6 +1617,54 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } + /** + * Apps that use the compact menu panel (as controlled by the panelMenuIsCompact + * theme attribute) on devices that feature a physical options menu key attempt to position + * their menu panel window along the edge of the screen nearest the physical menu key. + * This lowers the travel distance between invoking the menu panel and selecting + * a menu option. + * + * This method helps control where that menu is placed. Its current implementation makes + * assumptions about the menu key and its relationship to the screen based on whether + * the device's natural orientation is portrait (width < height) or landscape. + * + * The menu key is assumed to be located along the bottom edge of natural-portrait + * devices and along the right edge of natural-landscape devices. If these assumptions + * do not hold for the target device, this method should be changed to reflect that. + * + * @return A {@link Gravity} value for placing the options menu window. + */ + int getPreferredOptionsPanelGravity() { + final int rotation = getRotation(); + if (mInitialDisplayWidth < mInitialDisplayHeight) { + // On devices with a natural orientation of portrait. + switch (rotation) { + default: + case Surface.ROTATION_0: + return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + case Surface.ROTATION_90: + return Gravity.RIGHT | Gravity.BOTTOM; + case Surface.ROTATION_180: + return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + case Surface.ROTATION_270: + return Gravity.START | Gravity.BOTTOM; + } + } + + // On devices with a natural orientation of landscape. + switch (rotation) { + default: + case Surface.ROTATION_0: + return Gravity.RIGHT | Gravity.BOTTOM; + case Surface.ROTATION_90: + return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + case Surface.ROTATION_180: + return Gravity.START | Gravity.BOTTOM; + case Surface.ROTATION_270: + return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + } + } + DockedStackDividerController getDockedDividerController() { return mDividerControllerLocked; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 7520bfafe71a..e18d56485d47 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -226,7 +226,6 @@ import android.view.WindowManagerGlobal; import android.view.WindowManagerPolicyConstants.PointerEventListener; import com.android.internal.R; -import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.internal.os.IResultReceiver; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.internal.policy.IShortcutService; @@ -269,7 +268,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; /** {@hide} */ public class WindowManagerService extends IWindowManager.Stub @@ -1367,7 +1365,7 @@ public class WindowManagerService extends IWindowManager.Stub // UID, otherwise we allow unlimited duration. When a UID looses focus we // schedule hiding all of its toast windows. if (type == TYPE_TOAST) { - if (!getDefaultDisplayContentLocked().canAddToastWindowForUid(callingUid)) { + if (!displayContent.canAddToastWindowForUid(callingUid)) { Slog.w(TAG_WM, "Adding more than one toast window for UID at a time."); return WindowManagerGlobal.ADD_DUPLICATE_ADD; } @@ -3954,56 +3952,14 @@ public class WindowManagerService extends IWindowManager.Stub } } - /** - * Apps that use the compact menu panel (as controlled by the panelMenuIsCompact - * theme attribute) on devices that feature a physical options menu key attempt to position - * their menu panel window along the edge of the screen nearest the physical menu key. - * This lowers the travel distance between invoking the menu panel and selecting - * a menu option. - * - * This method helps control where that menu is placed. Its current implementation makes - * assumptions about the menu key and its relationship to the screen based on whether - * the device's natural orientation is portrait (width < height) or landscape. - * - * The menu key is assumed to be located along the bottom edge of natural-portrait - * devices and along the right edge of natural-landscape devices. If these assumptions - * do not hold for the target device, this method should be changed to reflect that. - * - * @return A {@link Gravity} value for placing the options menu window - */ @Override - public int getPreferredOptionsPanelGravity() { + public int getPreferredOptionsPanelGravity(int displayId) { synchronized (mWindowMap) { - // TODO(multidisplay): Assume that such devices physical keys are on the main screen. - final DisplayContent displayContent = getDefaultDisplayContentLocked(); - final int rotation = displayContent.getRotation(); - if (displayContent.mInitialDisplayWidth < displayContent.mInitialDisplayHeight) { - // On devices with a natural orientation of portrait - switch (rotation) { - default: - case Surface.ROTATION_0: - return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - case Surface.ROTATION_90: - return Gravity.RIGHT | Gravity.BOTTOM; - case Surface.ROTATION_180: - return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - case Surface.ROTATION_270: - return Gravity.START | Gravity.BOTTOM; - } - } - - // On devices with a natural orientation of landscape - switch (rotation) { - default: - case Surface.ROTATION_0: - return Gravity.RIGHT | Gravity.BOTTOM; - case Surface.ROTATION_90: - return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - case Surface.ROTATION_180: - return Gravity.START | Gravity.BOTTOM; - case Surface.ROTATION_270: - return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + final DisplayContent displayContent = mRoot.getDisplayContent(displayId); + if (displayContent == null) { + return Gravity.CENTER | Gravity.BOTTOM; } + return displayContent.getPreferredOptionsPanelGravity(); } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 81ac6a40e88a..664a83750aa7 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -4579,10 +4579,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { enforceFullCrossUsersPermission(userHandle); synchronized (getLockObject()) { if (!isCallerWithSystemUid()) { - // This API can only be called by an active device admin, - // so try to retrieve it to check that the caller is one. - getActiveAdminForCallerLocked( - null, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent); + // This API can be called by an active device admin or by keyguard code. + if (mContext.checkCallingPermission(permission.ACCESS_KEYGUARD_SECURE_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + getActiveAdminForCallerLocked( + null, DeviceAdminInfo.USES_POLICY_WATCH_LOGIN, parent); + } } DevicePolicyData policy = getUserDataUnchecked(getCredentialOwner(userHandle, parent)); diff --git a/services/robotests/src/com/android/server/backup/BackupManagerServiceTest.java b/services/robotests/src/com/android/server/backup/BackupManagerServiceTest.java index 2e0ae02664b9..91a8857a3de0 100644 --- a/services/robotests/src/com/android/server/backup/BackupManagerServiceTest.java +++ b/services/robotests/src/com/android/server/backup/BackupManagerServiceTest.java @@ -45,7 +45,6 @@ import android.os.PowerManager; import android.os.PowerSaveState; import android.platform.test.annotations.Presubmit; import android.provider.Settings; -import com.android.server.backup.keyvalue.BackupRequest; import com.android.server.backup.testing.BackupManagerServiceTestUtils; import com.android.server.backup.testing.TransportData; import com.android.server.backup.testing.TransportTestUtils.TransportMock; @@ -769,7 +768,7 @@ public class BackupManagerServiceTest { mShadowBackupLooper.runToEndOfTasks(); assertThat(result).isEqualTo(BackupManager.SUCCESS); ShadowKeyValueBackupTask shadowTask = ShadowKeyValueBackupTask.getLastCreated(); - assertThat(shadowTask.getQueue()).containsExactly(new BackupRequest(PACKAGE_1)); + assertThat(shadowTask.getQueue()).containsExactly(PACKAGE_1); assertThat(shadowTask.getPendingFullBackups()).isEmpty(); // TODO: Assert more about KeyValueBackupTask tearDownForRequestBackup(); diff --git a/services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java b/services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java index e316d5b48de5..9d6b8d553827 100644 --- a/services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java +++ b/services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java @@ -25,17 +25,16 @@ import static android.app.backup.BackupManager.SUCCESS; import static android.app.backup.ForwardingBackupAgent.forward; import static com.android.server.backup.testing.BackupManagerServiceTestUtils.createBackupWakeLock; -import static com.android.server.backup.testing.BackupManagerServiceTestUtils - .createInitializedBackupManagerService; -import static com.android.server.backup.testing.BackupManagerServiceTestUtils - .setUpBackupManagerServiceBasics; -import static com.android.server.backup.testing.BackupManagerServiceTestUtils - .setUpBinderCallerAndApplicationAsSystem; +import static com.android.server.backup.testing.BackupManagerServiceTestUtils.createInitializedBackupManagerService; +import static com.android.server.backup.testing.BackupManagerServiceTestUtils.setUpBackupManagerServiceBasics; +import static com.android.server.backup.testing.BackupManagerServiceTestUtils.setUpBinderCallerAndApplicationAsSystem; import static com.android.server.backup.testing.PackageData.PM_PACKAGE; import static com.android.server.backup.testing.PackageData.fullBackupPackage; import static com.android.server.backup.testing.PackageData.keyValuePackage; import static com.android.server.backup.testing.TestUtils.assertEventLogged; +import static com.android.server.backup.testing.TestUtils.messagesInLooper; import static com.android.server.backup.testing.TestUtils.uncheck; +import static com.android.server.backup.testing.TestUtils.waitUntil; import static com.android.server.backup.testing.TransportData.backupTransport; import static com.android.server.backup.testing.Utils.oneTimeIterable; @@ -51,17 +50,19 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; import static org.robolectric.shadow.api.Shadow.extract; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static java.util.Collections.emptyList; -import static java.util.stream.Collectors.toCollection; import static java.util.stream.Collectors.toList; import android.annotation.Nullable; @@ -72,6 +73,7 @@ import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; import android.app.backup.BackupManager; import android.app.backup.BackupTransport; +import android.app.backup.IBackupCallback; import android.app.backup.IBackupManager; import android.app.backup.IBackupManagerMonitor; import android.app.backup.IBackupObserver; @@ -81,6 +83,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.ConditionVariable; import android.os.DeadObjectException; import android.os.Handler; import android.os.Looper; @@ -102,6 +105,7 @@ import com.android.server.backup.TransportManager; import com.android.server.backup.internal.BackupHandler; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.testing.PackageData; +import com.android.server.backup.testing.TestUtils.ThrowingRunnable; import com.android.server.backup.testing.TransportData; import com.android.server.backup.testing.TransportTestUtils; import com.android.server.backup.testing.TransportTestUtils.TransportMock; @@ -121,6 +125,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; +import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; @@ -143,6 +148,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeoutException; import java.util.stream.Stream; // TODO: When returning to RUNNING_QUEUE vs FINAL, RUNNING_QUEUE sets status = OK. Why? Verify? @@ -165,6 +171,8 @@ import java.util.stream.Stream; public class KeyValueBackupTaskTest { private static final PackageData PACKAGE_1 = keyValuePackage(1); private static final PackageData PACKAGE_2 = keyValuePackage(2); + private static final String BACKUP_AGENT_SHARED_PREFS_SYNCHRONIZER_CLASS = + "android.app.backup.BackupAgent$SharedPrefsSynchronizer"; @Mock private TransportManager mTransportManager; @Mock private DataChangedJournal mOldJournal; @@ -182,6 +190,7 @@ public class KeyValueBackupTaskTest { private File mDataDir; private Application mApplication; private ShadowApplication mShadowApplication; + private Looper mMainLooper; private FrameworkShadowLooper mShadowMainLooper; private Context mContext; @@ -195,7 +204,8 @@ public class KeyValueBackupTaskTest { mShadowApplication = shadowOf(mApplication); mContext = mApplication; - mShadowMainLooper = extract(Looper.getMainLooper()); + mMainLooper = Looper.getMainLooper(); + mShadowMainLooper = extract(mMainLooper); File cacheDir = mApplication.getCacheDir(); // Corresponds to /data/backup @@ -1596,6 +1606,224 @@ public class KeyValueBackupTaskTest { runTask(task); } + @Test + public void + testRunTask_whenMarkCancelDuringFirstAgentOnBackup_doesNotCallTransportAfterWaitCancel() + throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + AgentMock agentMock = setUpAgent(PACKAGE_1); + setUpAgentsWithData(PACKAGE_2); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, + mTransport.transportDirName, + PACKAGE_1, + PACKAGE_2); + agentOnBackupDo( + agentMock, + (oldState, dataOutput, newState) -> { + writeData(dataOutput, "key", "data".getBytes()); + writeState(newState, "newState".getBytes()); + runInWorkerThread(task::markCancel); + }); + + ConditionVariable taskFinished = runTaskAsync(task); + + verifyAndUnblockAgentCalls(2); + task.waitCancel(); + reset(transportMock.transport); + taskFinished.block(); + verifyZeroInteractions(transportMock.transport); + } + + @Test + public void testRunTask_whenMarkCancelDuringAgentOnBackup_doesNotCallTransportForPackage() + throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + AgentMock agentMock = setUpAgent(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + agentOnBackupDo( + agentMock, + (oldState, dataOutput, newState) -> { + writeData(dataOutput, "key", "data".getBytes()); + writeState(newState, "newState".getBytes()); + runInWorkerThread(task::markCancel); + }); + + ConditionVariable taskFinished = runTaskAsync(task); + + verifyAndUnblockAgentCalls(2); + taskFinished.block(); + // For PM + verify(transportMock.transport, times(1)).finishBackup(); + verify(transportMock.transport, never()) + .performBackup(argThat(packageInfo(PACKAGE_1)), any(), anyInt()); + } + + @Test + public void testRunTask_whenMarkCancelDuringTransportPerformBackup_callsTransportForPackage() + throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentWithData(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + when(transportMock.transport.performBackup( + argThat(packageInfo(PACKAGE_1)), any(), anyInt())) + .thenAnswer( + invocation -> { + runInWorkerThread(task::markCancel); + return BackupTransport.TRANSPORT_OK; + }); + + ConditionVariable taskFinished = runTaskAsync(task); + + verifyAndUnblockAgentCalls(2); + taskFinished.block(); + InOrder inOrder = inOrder(transportMock.transport); + inOrder.verify(transportMock.transport) + .performBackup(argThat(packageInfo(PACKAGE_1)), any(), anyInt()); + inOrder.verify(transportMock.transport).finishBackup(); + } + + @Test + public void + testRunTask_whenMarkCancelDuringSecondAgentOnBackup_callsTransportForFirstPackageButNotForSecond() + throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentWithData(PACKAGE_1); + AgentMock agentMock = setUpAgent(PACKAGE_2); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, + mTransport.transportDirName, + PACKAGE_1, + PACKAGE_2); + agentOnBackupDo( + agentMock, + (oldState, dataOutput, newState) -> { + writeData(dataOutput, "key", "data".getBytes()); + writeState(newState, "newState".getBytes()); + runInWorkerThread(task::markCancel); + }); + + ConditionVariable taskFinished = runTaskAsync(task); + + verifyAndUnblockAgentCalls(3); + taskFinished.block(); + InOrder inOrder = inOrder(transportMock.transport); + inOrder.verify(transportMock.transport) + .performBackup(argThat(packageInfo(PACKAGE_1)), any(), anyInt()); + inOrder.verify(transportMock.transport).finishBackup(); + verify(transportMock.transport, never()) + .performBackup(argThat(packageInfo(PACKAGE_2)), any(), anyInt()); + } + + @Test + public void + testRunTask_whenMarkCancelDuringTransportPerformBackupForFirstPackage_callsTransportForFirstPackageButNotForSecond() + throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentsWithData(PACKAGE_1, PACKAGE_2); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, + mTransport.transportDirName, + PACKAGE_1, + PACKAGE_2); + when(transportMock.transport.performBackup( + argThat(packageInfo(PACKAGE_1)), any(), anyInt())) + .thenAnswer( + invocation -> { + runInWorkerThread(task::markCancel); + return BackupTransport.TRANSPORT_OK; + }); + + ConditionVariable taskFinished = runTaskAsync(task); + + verifyAndUnblockAgentCalls(2); + taskFinished.block(); + InOrder inOrder = inOrder(transportMock.transport); + inOrder.verify(transportMock.transport) + .performBackup(argThat(packageInfo(PACKAGE_1)), any(), anyInt()); + inOrder.verify(transportMock.transport).finishBackup(); + verify(transportMock.transport, never()) + .performBackup(argThat(packageInfo(PACKAGE_2)), any(), anyInt()); + } + + @Test + public void testRunTask_afterMarkCancel_doesNotCallAgentOrTransport() throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + AgentMock agentMock = setUpAgentWithData(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + task.markCancel(); + + runTask(task); + + verify(agentMock.agent, never()).onBackup(any(), any(), any()); + verify(transportMock.transport, never()).performBackup(any(), any(), anyInt()); + verify(transportMock.transport, never()).finishBackup(); + } + + @Test + public void testWaitCancel_afterCancelledTaskFinished_returns() throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentWithData(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + task.markCancel(); + runTask(task); + + task.waitCancel(); + } + + @Test + public void testWaitCancel_whenMarkCancelDuringAgentOnBackup_unregistersTask() throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentWithData(PACKAGE_1); + AgentMock agentMock = setUpAgent(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + agentOnBackupDo( + agentMock, + (oldState, dataOutput, newState) -> { + writeData(dataOutput, "key", "data".getBytes()); + writeState(newState, "newState".getBytes()); + runInWorkerThread(task::markCancel); + }); + ConditionVariable taskFinished = runTaskAsync(task); + verifyAndUnblockAgentCalls(1); + boolean backupInProgressDuringBackup = mBackupManagerService.isBackupOperationInProgress(); + assertThat(backupInProgressDuringBackup).isTrue(); + verifyAndUnblockAgentCalls(1); + + task.waitCancel(); + + boolean backupInProgressAfterWaitCancel = + mBackupManagerService.isBackupOperationInProgress(); + assertThat(backupInProgressDuringBackup).isTrue(); + assertThat(backupInProgressAfterWaitCancel).isFalse(); + taskFinished.block(); + } + + @Test + public void testMarkCancel_afterTaskFinished_returns() throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + setUpAgentWithData(PACKAGE_1); + KeyValueBackupTask task = + createKeyValueBackupTask( + transportMock.transportClient, mTransport.transportDirName, PACKAGE_1); + runTask(task); + + task.markCancel(); + } + private void runTask(KeyValueBackupTask task) { // Pretend we are not on the main-thread to prevent RemoteCall from complaining mShadowMainLooper.setCurrentThread(false); @@ -1604,6 +1832,60 @@ public class KeyValueBackupTaskTest { assertTaskPostConditions(); } + private ConditionVariable runTaskAsync(KeyValueBackupTask task) { + return runInWorkerThreadAsync(task::run); + } + + private static ConditionVariable runInWorkerThreadAsync(ThrowingRunnable runnable) { + ConditionVariable finished = new ConditionVariable(false); + new Thread( + () -> { + uncheck(runnable); + finished.open(); + }, + "test-worker-thread") + .start(); + return finished; + } + + private static void runInWorkerThread(ThrowingRunnable runnable) { + runInWorkerThreadAsync(runnable).block(); + } + + /** + * If you have kicked-off the task with {@link #runTaskAsync(KeyValueBackupTask)}, call this to + * unblock the task thread that will be waiting for the agent's {@link + * IBackupAgent#doBackup(ParcelFileDescriptor, ParcelFileDescriptor, ParcelFileDescriptor, long, + * IBackupCallback, int)}. + * + * @param times The number of {@link IBackupAgent#doBackup(ParcelFileDescriptor, + * ParcelFileDescriptor, ParcelFileDescriptor, long, IBackupCallback, int)} calls. Remember + * to count PM calls. + */ + private void verifyAndUnblockAgentCalls(int times) + throws InterruptedException, TimeoutException { + // HACK: IBackupAgent.doBackup() posts a runnable to the front of the main-thread queue and + // immediately waits for its execution. In Robolectric, if we are in the main-thread this + // runnable is executed inline (this is called unpaused looper), that's why when we run the + // task in the main-thread (runTask() as opposed to runTaskAsync()) we don't need to call + // this method. However, if we are not in the main-thread nobody executes the runnable for + // us, thus IBackupAgent code will be stuck waiting for someone to execute the runnable. + // This method waits for that *specific* runnable, identifying it via class name, and then + // idles the main looper (for 0 seconds because it's posted at the front of the queue), + // which executes the method. + for (int i = 0; i < times; i++) { + waitUntil(() -> messagesInLooper(mMainLooper, this::isSharedPrefsSynchronizer) > 0); + mShadowMainLooper.idle(); + } + } + + private boolean isSharedPrefsSynchronizer(@Nullable Message message) { + String className = BACKUP_AGENT_SHARED_PREFS_SYNCHRONIZER_CLASS; + return message != null + && message.getCallback() != null + && className.equals(message.getCallback().getClass().getName()); + } + private TransportMock setUpTransport(TransportData transport) throws Exception { TransportMock transportMock = TransportTestUtils.setUpTransport(mTransportManager, transport); @@ -1724,11 +2006,8 @@ public class KeyValueBackupTaskTest { String transportDirName, boolean nonIncremental, PackageData... packages) { - ArrayList<BackupRequest> keyValueBackupRequests = - Stream.of(packages) - .map(packageData -> packageData.packageName) - .map(BackupRequest::new) - .collect(toCollection(ArrayList::new)); + List<String> queue = + Stream.of(packages).map(packageData -> packageData.packageName).collect(toList()); mBackupManagerService.getPendingBackups().clear(); // mOldJournal is a mock, but it would be the value returned by BMS.getJournal() now mBackupManagerService.setJournal(null); @@ -1738,7 +2017,7 @@ public class KeyValueBackupTaskTest { mBackupManagerService, transportClient, transportDirName, - keyValueBackupRequests, + queue, mOldJournal, mObserver, mMonitor, diff --git a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java index 084f27f94fbf..603a471b0e8b 100644 --- a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java +++ b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java @@ -99,7 +99,6 @@ public class BackupManagerServiceTestUtils { Handler backupHandler, PowerManager.WakeLock wakeLock, BackupAgentTimeoutParameters agentTimeoutParameters) { - SparseArray<Operation> operations = new SparseArray<>(); when(backupManagerService.getContext()).thenReturn(application); when(backupManagerService.getTransportManager()).thenReturn(transportManager); @@ -107,7 +106,6 @@ public class BackupManagerServiceTestUtils { when(backupManagerService.getBackupHandler()).thenReturn(backupHandler); when(backupManagerService.getCurrentOpLock()).thenReturn(new Object()); when(backupManagerService.getQueueLock()).thenReturn(new Object()); - when(backupManagerService.getCurrentOperations()).thenReturn(operations); when(backupManagerService.getActivityManager()).thenReturn(mock(IActivityManager.class)); when(backupManagerService.getWakelock()).thenReturn(wakeLock); when(backupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters); @@ -119,22 +117,6 @@ public class BackupManagerServiceTestUtils { AccessorMock backupRunning = mockAccessor(false); doAnswer(backupEnabled.getter).when(backupManagerService).isBackupRunning(); doAnswer(backupRunning.setter).when(backupManagerService).setBackupRunning(anyBoolean()); - - doAnswer( - invocation -> { - operations.put(invocation.getArgument(0), invocation.getArgument(1)); - return null; - }) - .when(backupManagerService) - .putOperation(anyInt(), any()); - doAnswer( - invocation -> { - int token = invocation.getArgument(0); - operations.remove(token); - return null; - }) - .when(backupManagerService) - .removeOperation(anyInt()); } public static void setUpBinderCallerAndApplicationAsSystem(Application application) { diff --git a/services/robotests/src/com/android/server/backup/testing/TestUtils.java b/services/robotests/src/com/android/server/backup/testing/TestUtils.java index 134cfd8e16ad..df4d457a3833 100644 --- a/services/robotests/src/com/android/server/backup/testing/TestUtils.java +++ b/services/robotests/src/com/android/server/backup/testing/TestUtils.java @@ -21,6 +21,8 @@ import static com.google.common.truth.Truth.assertThat; import static org.robolectric.Shadows.shadowOf; import android.os.Looper; +import android.os.Message; +import android.os.MessageQueue; import com.android.server.testing.shadows.ShadowEventLog; @@ -30,9 +32,49 @@ import org.robolectric.shadows.ShadowSystemClock; import java.util.Arrays; import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.function.Predicate; +import java.util.function.Supplier; public class TestUtils { + private static final long TIMEOUT_MS = 3000; + private static final long STEP_MS = 50; + + /** + * Counts the number of messages in the looper {@code looper} that satisfy {@code + * messageFilter}. + */ + public static int messagesInLooper(Looper looper, Predicate<Message> messageFilter) { + MessageQueue queue = looper.getQueue(); + int i = 0; + for (Message m = shadowOf(queue).getHead(); m != null; m = shadowOf(m).getNext()) { + if (messageFilter.test(m)) { + i += 1; + } + } + return i; + } + + public static void waitUntil(Supplier<Boolean> condition) + throws InterruptedException, TimeoutException { + waitUntil(condition, STEP_MS, TIMEOUT_MS); + } + + public static void waitUntil(Supplier<Boolean> condition, long stepMs, long timeoutMs) + throws InterruptedException, TimeoutException { + long deadline = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeoutMs); + while (true) { + if (condition.get()) { + return; + } + if (System.nanoTime() > deadline) { + throw new TimeoutException("Test timed-out waiting for condition"); + } + Thread.sleep(stepMs); + } + } + /** Version of {@link ShadowLooper#runToEndOfTasks()} that also advances the system clock. */ public static void runToEndOfTasks(Looper looper) { ShadowLooper shadowLooper = shadowOf(looper); diff --git a/services/robotests/src/com/android/server/testing/shadows/ShadowKeyValueBackupTask.java b/services/robotests/src/com/android/server/testing/shadows/ShadowKeyValueBackupTask.java index 838902d43031..aeda2dc5a774 100644 --- a/services/robotests/src/com/android/server/testing/shadows/ShadowKeyValueBackupTask.java +++ b/services/robotests/src/com/android/server/testing/shadows/ShadowKeyValueBackupTask.java @@ -23,7 +23,6 @@ import android.app.backup.IBackupObserver; import com.android.server.backup.BackupManagerService; import com.android.server.backup.DataChangedJournal; import com.android.server.backup.internal.OnTaskFinishedListener; -import com.android.server.backup.keyvalue.BackupRequest; import com.android.server.backup.keyvalue.KeyValueBackupTask; import com.android.server.backup.transport.TransportClient; @@ -51,7 +50,7 @@ public class ShadowKeyValueBackupTask { } private OnTaskFinishedListener mListener; - private List<BackupRequest> mQueue; + private List<String> mQueue; private List<String> mPendingFullBackups; @Implementation @@ -59,7 +58,7 @@ public class ShadowKeyValueBackupTask { BackupManagerService backupManagerService, TransportClient transportClient, String dirName, - List<BackupRequest> queue, + List<String> queue, @Nullable DataChangedJournal journal, IBackupObserver observer, IBackupManagerMonitor monitor, @@ -78,7 +77,7 @@ public class ShadowKeyValueBackupTask { mListener.onFinished("ShadowKeyValueBackupTask.execute()"); } - public List<BackupRequest> getQueue() { + public List<String> getQueue() { return mQueue; } diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml index 16cc8fd18bfd..348e2015c7c0 100644 --- a/services/tests/servicestests/AndroidManifest.xml +++ b/services/tests/servicestests/AndroidManifest.xml @@ -65,6 +65,7 @@ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.SUSPEND_APPS"/> <uses-permission android:name="android.permission.CONTROL_KEYGUARD"/> + <uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE"/> <!-- Uses API introduced in O (26) --> <uses-sdk android:minSdkVersion="1" diff --git a/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java new file mode 100644 index 000000000000..43438b99edef --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.server; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; +import android.os.UserHandle; +import android.os.UserManagerInternal; +import android.os.storage.StorageManagerInternal; +import android.support.test.filters.SmallTest; +import android.support.test.runner.AndroidJUnit4; +import android.util.SparseArray; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.List; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class StorageManagerServiceTest { + + private StorageManagerService mService; + + @Mock private Context mContext; + @Mock private PackageManager mPm; + @Mock private PackageManagerInternal mPmi; + @Mock private UserManagerInternal mUmi; + + private static final String PKG_GREY = "com.grey"; + private static final String PKG_RED = "com.red"; + private static final String PKG_BLUE = "com.blue"; + + private static final int UID_GREY = 10000; + private static final int UID_COLORS = 10001; + + private static final String NAME_COLORS = "colors"; + + private static ApplicationInfo buildApplicationInfo(String packageName, int uid) { + final ApplicationInfo ai = new ApplicationInfo(); + ai.packageName = packageName; + ai.uid = uid; + return ai; + } + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + + LocalServices.removeServiceForTest(StorageManagerInternal.class); + + LocalServices.removeServiceForTest(PackageManagerInternal.class); + LocalServices.addService(PackageManagerInternal.class, mPmi); + LocalServices.removeServiceForTest(UserManagerInternal.class); + LocalServices.addService(UserManagerInternal.class, mUmi); + + when(mContext.getPackageManager()).thenReturn(mPm); + + when(mUmi.getUserIds()).thenReturn(new int[] { 0 }); + + { + final SparseArray<String> res = new SparseArray<>(); + res.put(UID_COLORS, NAME_COLORS); + when(mPmi.getAppsWithSharedUserIds()).thenReturn(res); + } + + { + final List<ApplicationInfo> res = new ArrayList<>(); + res.add(buildApplicationInfo(PKG_GREY, UID_GREY)); + res.add(buildApplicationInfo(PKG_RED, UID_COLORS)); + res.add(buildApplicationInfo(PKG_BLUE, UID_COLORS)); + when(mPm.getInstalledApplicationsAsUser(anyInt(), anyInt())).thenReturn(res); + } + + when(mPmi.getPackageUid(eq(PKG_GREY), anyInt(), anyInt())).thenReturn(UID_GREY); + when(mPmi.getPackageUid(eq(PKG_RED), anyInt(), anyInt())).thenReturn(UID_COLORS); + when(mPmi.getPackageUid(eq(PKG_BLUE), anyInt(), anyInt())).thenReturn(UID_COLORS); + + when(mPm.getPackagesForUid(eq(UID_GREY))).thenReturn(new String[] { PKG_GREY }); + when(mPm.getPackagesForUid(eq(UID_COLORS))).thenReturn(new String[] { PKG_RED, PKG_BLUE }); + + mService = new StorageManagerService(mContext); + mService.collectPackagesInfo(); + } + + @Test + public void testNone() throws Exception { + assertTranslation( + "/dev/null", + "/dev/null", PKG_GREY); + assertTranslation( + "/dev/null", + "/dev/null", PKG_RED); + } + + @Test + public void testPrimary() throws Exception { + assertTranslation( + "/storage/emulated/0/Android/sandbox/com.grey/foo.jpg", + "/storage/emulated/0/foo.jpg", PKG_GREY); + assertTranslation( + "/storage/emulated/0/Android/sandbox/shared/colors/foo.jpg", + "/storage/emulated/0/foo.jpg", PKG_RED); + } + + @Test + public void testSecondary() throws Exception { + assertTranslation( + "/storage/0000-0000/Android/sandbox/com.grey/foo/bar.jpg", + "/storage/0000-0000/foo/bar.jpg", PKG_GREY); + assertTranslation( + "/storage/0000-0000/Android/sandbox/shared/colors/foo/bar.jpg", + "/storage/0000-0000/foo/bar.jpg", PKG_RED); + } + + @Test + public void testLegacy() throws Exception { + // Accessing their own paths goes straight through + assertTranslation( + "/storage/emulated/0/Android/data/com.grey/foo.jpg", + "/storage/emulated/0/Android/data/com.grey/foo.jpg", PKG_GREY); + + // Accessing other package paths goes into sandbox + assertTranslation( + "/storage/emulated/0/Android/sandbox/shared/colors/" + + "Android/data/com.grey/foo.jpg", + "/storage/emulated/0/Android/data/com.grey/foo.jpg", PKG_RED); + } + + @Test + public void testLegacyShared() throws Exception { + // Accessing their own paths goes straight through + assertTranslation( + "/storage/emulated/0/Android/data/com.red/foo.jpg", + "/storage/emulated/0/Android/data/com.red/foo.jpg", PKG_RED); + assertTranslation( + "/storage/emulated/0/Android/data/com.red/foo.jpg", + "/storage/emulated/0/Android/data/com.red/foo.jpg", PKG_BLUE); + + // Accessing other package paths goes into sandbox + assertTranslation( + "/storage/emulated/0/Android/sandbox/com.grey/" + + "Android/data/com.red/foo.jpg", + "/storage/emulated/0/Android/data/com.red/foo.jpg", PKG_GREY); + } + + @Test + public void testSecurity() throws Exception { + // Shady paths should throw + try { + mService.translateAppToSystem( + "/storage/emulated/0/../foo.jpg", + PKG_GREY, UserHandle.USER_SYSTEM); + fail(); + } catch (SecurityException expected) { + } + + // Sandboxes can't see system paths + try { + mService.translateSystemToApp( + "/storage/emulated/0/foo.jpg", + PKG_GREY, UserHandle.USER_SYSTEM); + fail(); + } catch (SecurityException expected) { + } + + // Sandboxes can't see paths in other sandboxes + try { + mService.translateSystemToApp( + "/storage/emulated/0/Android/sandbox/shared/colors/foo.jpg", + PKG_GREY, UserHandle.USER_SYSTEM); + fail(); + } catch (SecurityException expected) { + } + } + + private void assertTranslation(String system, String sandbox, String packageName) + throws Exception { + assertEquals(system, + mService.translateAppToSystem(sandbox, packageName, UserHandle.USER_SYSTEM)); + assertEquals(sandbox, + mService.translateSystemToApp(system, packageName, UserHandle.USER_SYSTEM)); + } +} diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java index 5c449b3b2843..7a96f4cf1bc8 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java @@ -47,6 +47,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.Signature; import android.content.pm.UserInfo; @@ -111,6 +112,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { @Mock private IAccountManagerResponse mMockAccountManagerResponse; @Mock private IBinder mMockBinder; @Mock private INotificationManager mMockNotificationManager; + @Mock private PackageManagerInternal mMockPackageManagerInternal; @Captor private ArgumentCaptor<Intent> mIntentCaptor; @Captor private ArgumentCaptor<Bundle> mBundleCaptor; @@ -155,6 +157,9 @@ public class AccountManagerServiceTest extends AndroidTestCase { when(mMockContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn( mMockDevicePolicyManager); when(mMockAccountManagerResponse.asBinder()).thenReturn(mMockBinder); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(true); + LocalServices.addService(PackageManagerInternal.class, mMockPackageManagerInternal); Context realTestContext = getContext(); MyMockContext mockContext = new MyMockContext(realTestContext, mMockContext); @@ -174,6 +179,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { cdl.countDown(); }); cdl.await(1, TimeUnit.SECONDS); + LocalServices.removeServiceForTest(PackageManagerInternal.class); super.tearDown(); } @@ -607,6 +613,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -623,7 +631,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { waitForLatch(latch); verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -789,6 +797,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -805,7 +815,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { waitForLatch(latch); verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -1089,6 +1099,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -1103,7 +1115,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { waitForLatch(latch); verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -1349,6 +1361,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { unlockSystemUser(); when(mMockPackageManager.checkSignatures(anyInt(), anyInt())) .thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); try { mAms.removeAccountAsUser( mMockAccountManagerResponse, // response @@ -1685,6 +1699,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -1698,7 +1714,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { waitForLatch(latch); verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -1956,6 +1972,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -1971,7 +1989,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { waitForLatch(latch); verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -2094,6 +2112,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -2107,7 +2127,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -2227,6 +2247,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { any(Intent.class), anyInt(), anyInt())).thenReturn(resolveInfo); when(mMockPackageManager.checkSignatures( anyInt(), anyInt())).thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); @@ -2242,7 +2264,7 @@ public class AccountManagerServiceTest extends AndroidTestCase { verify(mMockAccountManagerResponse, never()).onResult(any(Bundle.class)); verify(mMockAccountManagerResponse).onError( - eq(AccountManager.ERROR_CODE_REMOTE_EXCEPTION), anyString()); + eq(AccountManager.ERROR_CODE_INVALID_RESPONSE), anyString()); } @SmallTest @@ -2329,6 +2351,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { unlockSystemUser(); when(mMockPackageManager.checkSignatures(anyInt(), anyInt())) .thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); try { mAms.editProperties( mMockAccountManagerResponse, // response @@ -2618,6 +2642,8 @@ public class AccountManagerServiceTest extends AndroidTestCase { PackageManager.PERMISSION_DENIED); when(mMockPackageManager.checkSignatures(anyInt(), anyInt())) .thenReturn(PackageManager.SIGNATURE_NO_MATCH); + when(mMockPackageManagerInternal.hasSignatureCapability(anyInt(), anyInt(), anyInt())) + .thenReturn(false); final CountDownLatch latch = new CountDownLatch(1); Response response = new Response(latch, mMockAccountManagerResponse); diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java index fa7501dc8ac6..72c22fd2b135 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java @@ -25,6 +25,7 @@ import static org.junit.Assert.assertTrue; import android.accounts.Account; import android.content.Context; import android.database.Cursor; +import android.os.Build; import android.test.suitebuilder.annotation.SmallTest; import android.util.Pair; @@ -86,6 +87,12 @@ public class AccountsDbTest { @Test public void testCeNotAvailableInitially() { + // If the CE database is not attached to the DE database then any calls that modify the CE + // database will result in a Log.wtf call that will crash this process on eng builds. To + // allow the test to run through to completion skip this test on eng builds. + if (Build.IS_ENG) { + return; + } Account account = new Account("name", "example.com"); long id = mAccountsDb.insertCeAccount(account, ""); assertEquals("Insert into CE should fail until CE database is attached", -1, id); diff --git a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java index b431af1f75c3..3f7c7148381e 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java @@ -143,10 +143,10 @@ public class TaskStackChangedListenerTest { assertEquals(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, params[1]); } - @Test /** * Tests for onTaskCreated, onTaskMovedToFront, onTaskRemoved and onTaskRemovalStarted. */ + @Test public void testTaskChangeCallBacks() throws Exception { final Object[] params = new Object[2]; final CountDownLatch taskCreatedLaunchLatch = new CountDownLatch(1); @@ -218,16 +218,17 @@ public class TaskStackChangedListenerTest { /** * Starts the provided activity and returns the started instance. */ - private Activity startTestActivity(Class<?> activityClass) { + private TestActivity startTestActivity(Class<?> activityClass) throws InterruptedException { final Context context = InstrumentationRegistry.getContext(); final ActivityMonitor monitor = new ActivityMonitor(activityClass.getName(), null, false); InstrumentationRegistry.getInstrumentation().addMonitor(monitor); context.startActivity(new Intent(context, activityClass)); - final Activity activity = monitor.waitForActivityWithTimeout(1000); + final TestActivity activity = (TestActivity)monitor.waitForActivityWithTimeout(1000); if (activity == null) { throw new RuntimeException("Timed out waiting for Activity"); } + activity.waitForResumeStateChange(true); return activity; } @@ -245,7 +246,43 @@ public class TaskStackChangedListenerTest { }catch (InterruptedException e) {} } - public static class ActivityA extends Activity { + public static class TestActivity extends Activity { + boolean mIsResumed = false; + + @Override + protected void onPostResume() { + super.onPostResume(); + synchronized (this) { + mIsResumed = true; + notifyAll(); + } + } + + @Override + protected void onPause() { + super.onPause(); + synchronized (this) { + mIsResumed = false; + notifyAll(); + } + } + + /** + * If isResumed is {@code true}, sleep the thread until the activity is resumed. + * if {@code false}, sleep the thread until the activity is paused. + */ + public void waitForResumeStateChange(boolean isResumed) throws InterruptedException { + synchronized (this) { + if (mIsResumed == isResumed) { + return; + } + wait(5000); + } + assertTrue("The activity resume state change timed out", mIsResumed == isResumed); + } + } + + public static class ActivityA extends TestActivity { private boolean mActivityBLaunched = false; @@ -261,7 +298,7 @@ public class TaskStackChangedListenerTest { } } - public static class ActivityB extends Activity { + public static class ActivityB extends TestActivity { @Override protected void onPostResume() { @@ -274,7 +311,7 @@ public class TaskStackChangedListenerTest { } } - public static class ActivityRequestedOrientationChange extends Activity { + public static class ActivityRequestedOrientationChange extends TestActivity { @Override protected void onPostResume() { super.onPostResume(); @@ -283,7 +320,7 @@ public class TaskStackChangedListenerTest { } } - public static class ActivityTaskDescriptionChange extends Activity { + public static class ActivityTaskDescriptionChange extends TestActivity { @Override protected void onPostResume() { super.onPostResume(); @@ -292,7 +329,7 @@ public class TaskStackChangedListenerTest { } } - public static class ActivityTaskChangeCallbacks extends Activity { + public static class ActivityTaskChangeCallbacks extends TestActivity { boolean onDetachedFromWindowCalled = false; CountDownLatch onDetachedFromWindowCountDownLatch; diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java index 14695c526bff..9d617a96e60f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -22,7 +22,9 @@ import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.Looper; import android.os.test.TestLooper; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockWeaverService.java b/services/tests/servicestests/src/com/android/server/locksettings/MockWeaverService.java index 34831cd53dbe..7fb127831090 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/MockWeaverService.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/MockWeaverService.java @@ -15,7 +15,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.Arrays; -public class MockWeaverService implements IWeaver { +public class MockWeaverService extends IWeaver.Stub { private static final int MAX_SLOTS = 8; private static final int KEY_LENGTH = 256 / 8; @@ -55,54 +55,4 @@ public class MockWeaverService implements IWeaver { cb.onValues(WeaverStatus.FAILED, response); } } - - @Override - public IHwBinder asBinder() { - throw new UnsupportedOperationException(); - } - - @Override - public ArrayList<String> interfaceChain() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public String interfaceDescriptor() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public void setHALInstrumentation() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public boolean linkToDeath(DeathRecipient recipient, long cookie) throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public void ping() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public DebugInfo getDebugInfo() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public void notifySyspropsChanged() throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public boolean unlinkToDeath(DeathRecipient recipient) throws RemoteException { - throw new UnsupportedOperationException(); - } - - @Override - public ArrayList<byte[]> getHashChain() throws RemoteException { - throw new UnsupportedOperationException(); - } } diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenAnimationTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenAnimationTests.java index c3907ff8ddb4..e3ab5cf4fc52 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenAnimationTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenAnimationTests.java @@ -26,8 +26,9 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import android.view.SurfaceControl; import com.android.server.wm.WindowTestUtils.TestAppWindowToken; diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java index cfef51c88838..0d40c5e25acb 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java @@ -51,6 +51,7 @@ import android.platform.test.annotations.Presubmit; import android.util.DisplayMetrics; import android.util.SparseIntArray; import android.view.DisplayCutout; +import android.view.Gravity; import android.view.MotionEvent; import android.view.Surface; @@ -575,6 +576,31 @@ public class DisplayContentTests extends WindowTestsBase { .setDisplayInfoOverrideFromWindowManager(dc.getDisplayId(), null); } + @Test + public void testGetPreferredOptionsPanelGravityFromDifferentDisplays() { + final DisplayContent portraitDisplay = createNewDisplay(); + portraitDisplay.mInitialDisplayHeight = 2000; + portraitDisplay.mInitialDisplayWidth = 1000; + + portraitDisplay.setRotation(Surface.ROTATION_0); + assertFalse(isOptionsPanelAtRight(portraitDisplay.getDisplayId())); + portraitDisplay.setRotation(Surface.ROTATION_90); + assertTrue(isOptionsPanelAtRight(portraitDisplay.getDisplayId())); + + final DisplayContent landscapeDisplay = createNewDisplay(); + landscapeDisplay.mInitialDisplayHeight = 1000; + landscapeDisplay.mInitialDisplayWidth = 2000; + + landscapeDisplay.setRotation(Surface.ROTATION_0); + assertTrue(isOptionsPanelAtRight(landscapeDisplay.getDisplayId())); + landscapeDisplay.setRotation(Surface.ROTATION_90); + assertFalse(isOptionsPanelAtRight(landscapeDisplay.getDisplayId())); + } + + private boolean isOptionsPanelAtRight(int displayId) { + return (sWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT; + } + private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth, int expectedBaseHeight, int expectedBaseDensity) { assertEquals(displayContent.mBaseDisplayWidth, expectedBaseWidth); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index d128363b7a83..5db0867298b0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -158,7 +158,11 @@ class WindowTestsBase { // If @After throws an exception, the error isn't logged. This will make sure any failures // in the tear down are clear. This can be removed when b/37850063 is fixed. try { - final LinkedList<WindowState> nonCommonWindows = new LinkedList(); + // Test may schedule to perform surface placement or other messages. Wait until a + // stable state to clean up for consistency. + waitUntilHandlersIdle(); + + final LinkedList<WindowState> nonCommonWindows = new LinkedList<>(); synchronized (sWm.mWindowMap) { sWm.mRoot.forAllWindows(w -> { @@ -171,7 +175,12 @@ class WindowTestsBase { nonCommonWindows.pollLast().removeImmediately(); } - mDisplayContent.removeImmediately(); + for (int i = sWm.mRoot.mChildren.size() - 1; i >= 0; --i) { + final DisplayContent displayContent = sWm.mRoot.mChildren.get(i); + if (!displayContent.isDefaultDisplay) { + displayContent.removeImmediately(); + } + } sWm.mInputMethodTarget = null; sWm.mClosingApps.clear(); sWm.mOpeningApps.clear(); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java index 96ac93536a8a..110e3fe5eb24 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java @@ -333,6 +333,17 @@ public class ScheduleCalendarTest extends UiServiceTestCase { } @Test + public void testMaybeSetNextAlarm_expiredOldAlarm() { + mScheduleInfo.exitAtAlarm = true; + mScheduleInfo.nextAlarm = 998; + mScheduleCalendar.setSchedule(mScheduleInfo); + + mScheduleCalendar.maybeSetNextAlarm(1000, 1001); + + assertEquals(1001, mScheduleInfo.nextAlarm); + } + + @Test @FlakyTest public void testIsInSchedule_inScheduleOvernight() { Calendar cal = new GregorianCalendar(); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java index c0bd7ccf6bf4..d3354502f40b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java @@ -171,4 +171,17 @@ public class ZenModeFilteringTest extends UiServiceTestCase { assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_OFF, config, r)); } + + @Test + public void testSuppressAnything_bypass_ZenModeOn() { + NotificationRecord r = getNotificationRecord(); + r.setCriticality(CriticalNotificationExtractor.CRITICAL); + when(r.sbn.getPackageName()).thenReturn("bananas"); + ZenModeConfig config = mock(ZenModeConfig.class); + + assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, config, r)); + + r.setCriticality(CriticalNotificationExtractor.CRITICAL_LOW); + assertFalse(mZenModeFiltering.shouldIntercept(ZEN_MODE_NO_INTERRUPTIONS, config, r)); + } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java index 4772cb6424bc..a032f702df3b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java @@ -67,7 +67,6 @@ import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.server.notification.ManagedServices.UserProfiles; import com.android.internal.util.FastXmlSerializer; import com.android.server.UiServiceTestCase; -import android.util.Slog; import org.junit.Before; import org.junit.Test; @@ -622,7 +621,37 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - public void testReadXml() throws Exception { + public void testReadXmlRestore() throws Exception { + setupZenConfig(); + + // one enabled automatic rule + ArrayMap<String, ZenModeConfig.ZenRule> automaticRules = new ArrayMap<>(); + ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule(); + final ScheduleInfo customRuleInfo = new ScheduleInfo(); + customRule.enabled = true; + customRule.creationTime = 0; + customRule.id = "customRule"; + customRule.name = "Custom Rule"; + customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; + customRule.component = new ComponentName("test", "test"); + customRule.conditionId = ZenModeConfig.toScheduleConditionId(customRuleInfo); + automaticRules.put("customRule", customRule); + mZenModeHelperSpy.mConfig.automaticRules = automaticRules; + + ZenModeConfig original = mZenModeHelperSpy.mConfig.copy(); + + ByteArrayOutputStream baos = writeXmlAndPurge(false, null); + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(new BufferedInputStream( + new ByteArrayInputStream(baos.toByteArray())), null); + parser.nextTag(); + mZenModeHelperSpy.readXml(parser, true); + assertEquals(original.hashCode(), mZenModeHelperSpy.mConfig.hashCode()); + assertEquals(original, mZenModeHelperSpy.mConfig); + } + + @Test + public void testReadXmlRulesNotOverriden() throws Exception { setupZenConfig(); // automatic zen rule is enabled on upgrade so rules should not be overriden to default @@ -636,8 +665,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { enabledAutoRule.put("customRule", customRule); mZenModeHelperSpy.mConfig.automaticRules = enabledAutoRule; - ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); - // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); XmlPullParser parser = Xml.newPullParser(); @@ -790,17 +817,17 @@ public class ZenModeHelperTest extends UiServiceTestCase { public void testReadXmlAllDisabledRulesResetDefaultRules() throws Exception { setupZenConfig(); - // all automatic zen rules are diabled on upgrade (and default rules don't already exist) + // all automatic zen rules are disabled on upgrade (and default rules don't already exist) // so rules should be overriden by default rules - ArrayMap<String, ZenModeConfig.ZenRule> enabledAutoRule = new ArrayMap<>(); + ArrayMap<String, ZenModeConfig.ZenRule> disabledAutoRule = new ArrayMap<>(); ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule(); final ScheduleInfo weeknights = new ScheduleInfo(); customRule.enabled = false; customRule.name = "Custom Rule"; customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; customRule.conditionId = ZenModeConfig.toScheduleConditionId(weeknights); - enabledAutoRule.put("customRule", customRule); - mZenModeHelperSpy.mConfig.automaticRules = enabledAutoRule; + disabledAutoRule.put("customRule", customRule); + mZenModeHelperSpy.mConfig.automaticRules = disabledAutoRule; // set previous version ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); @@ -957,12 +984,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.allowEvents = true; mZenModeHelperSpy.mConfig.allowRepeatCallers= true; mZenModeHelperSpy.mConfig.suppressedVisualEffects = SUPPRESSED_EFFECT_BADGE; - mZenModeHelperSpy.mConfig.manualRule = new ZenModeConfig.ZenRule(); - mZenModeHelperSpy.mConfig.manualRule.zenMode = - Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; - mZenModeHelperSpy.mConfig.manualRule.component = new ComponentName("a", "a"); - mZenModeHelperSpy.mConfig.manualRule.enabled = true; - mZenModeHelperSpy.mConfig.manualRule.snoozing = true; + mZenModeHelperSpy.mConfig.manualRule = null; } private void setupZenConfigMaintained() { diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java index 8283e97adce2..b9de374f5510 100644 --- a/telephony/java/android/provider/Telephony.java +++ b/telephony/java/android/provider/Telephony.java @@ -19,6 +19,7 @@ package android.provider; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.job.JobService; import android.content.ComponentName; import android.content.ContentResolver; @@ -373,6 +374,7 @@ public final class Telephony { * Return cursor for table query. * @hide */ + @UnsupportedAppUsage public static Cursor query(ContentResolver cr, String[] projection, String where, String orderBy) { return cr.query(CONTENT_URI, projection, where, @@ -403,6 +405,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessageToUri(ContentResolver resolver, Uri uri, String address, String body, String subject, Long date, boolean read, boolean deliveryReport) { @@ -425,6 +428,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessageToUri(int subId, ContentResolver resolver, Uri uri, String address, String body, String subject, Long date, boolean read, boolean deliveryReport) { @@ -447,6 +451,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessageToUri(ContentResolver resolver, Uri uri, String address, String body, String subject, Long date, boolean read, boolean deliveryReport, long threadId) { @@ -471,6 +476,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessageToUri(int subId, ContentResolver resolver, Uri uri, String address, String body, String subject, Long date, boolean read, boolean deliveryReport, long threadId) { @@ -503,6 +509,7 @@ public final class Telephony { * @return true if the operation succeeded * @hide */ + @UnsupportedAppUsage public static boolean moveMessageToFolder(Context context, Uri uri, int folder, int error) { if (uri == null) { @@ -546,6 +553,7 @@ public final class Telephony { * outgoing message. * @hide */ + @UnsupportedAppUsage public static boolean isOutgoingFolder(int messageType) { return (messageType == MESSAGE_TYPE_FAILED) || (messageType == MESSAGE_TYPE_OUTBOX) @@ -587,6 +595,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(ContentResolver resolver, String address, String body, String subject, Long date, boolean read) { @@ -607,6 +616,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(int subId, ContentResolver resolver, String address, String body, String subject, Long date, boolean read) { return addMessageToUri(subId, resolver, CONTENT_URI, address, body, @@ -647,6 +657,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(ContentResolver resolver, String address, String body, String subject, Long date) { return addMessageToUri(SubscriptionManager.getDefaultSmsSubscriptionId(), @@ -665,6 +676,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(int subId, ContentResolver resolver, String address, String body, String subject, Long date) { return addMessageToUri(subId, resolver, CONTENT_URI, address, body, @@ -692,6 +704,7 @@ public final class Telephony { /** * @hide */ + @UnsupportedAppUsage public static Uri addMessage(ContentResolver resolver, String address, String body, String subject, Long date) { return addMessageToUri(SubscriptionManager.getDefaultSmsSubscriptionId(), @@ -710,6 +723,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(int subId, ContentResolver resolver, String address, String body, String subject, Long date) { return addMessageToUri(subId, resolver, CONTENT_URI, address, body, @@ -756,6 +770,7 @@ public final class Telephony { * @return the URI for the new message * @hide */ + @UnsupportedAppUsage public static Uri addMessage(ContentResolver resolver, String address, String body, String subject, Long date, boolean deliveryReport, long threadId) { @@ -1935,12 +1950,14 @@ public final class Telephony { */ public static final class Threads implements ThreadsColumns { + @UnsupportedAppUsage private static final String[] ID_PROJECTION = { BaseColumns._ID }; /** * Private {@code content://} style URL for this table. Used by * {@link #getOrCreateThreadId(android.content.Context, java.util.Set)}. */ + @UnsupportedAppUsage private static final Uri THREAD_ID_CONTENT_URI = Uri.parse( "content://mms-sms/threadID"); @@ -2069,6 +2086,7 @@ public final class Telephony { * </ul> * @hide */ + @UnsupportedAppUsage public static final Pattern NAME_ADDR_EMAIL_PATTERN = Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*"); @@ -2096,6 +2114,7 @@ public final class Telephony { * Helper method to extract email address from address string. * @hide */ + @UnsupportedAppUsage public static String extractAddrSpec(String address) { Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address); @@ -2112,6 +2131,7 @@ public final class Telephony { * @return true if address is an email address; false otherwise. * @hide */ + @UnsupportedAppUsage public static boolean isEmailAddress(String address) { if (TextUtils.isEmpty(address)) { return false; @@ -2129,6 +2149,7 @@ public final class Telephony { * @return true if number is a phone number; false otherwise. * @hide */ + @UnsupportedAppUsage public static boolean isPhoneNumber(String number) { if (TextUtils.isEmpty(number)) { return false; diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 667ad91086b2..2bc43d410174 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -135,12 +135,35 @@ public class SubscriptionInfo implements Parcelable { private String mCardId; /** + * Whether the subscription is opportunistic. + */ + private boolean mIsOpportunistic; + + /** + * SubId of the parent subscription, if there is one. + */ + private int mParentSubId; + + /** * @hide */ public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName, CharSequence carrierName, int nameSource, int iconTint, String number, int roaming, Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded, @Nullable UiccAccessRule[] accessRules, String cardId) { + this(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, + roaming, icon, mcc, mnc, countryIso, isEmbedded, accessRules, cardId, + false, SubscriptionManager.INVALID_SUBSCRIPTION_ID); + } + + /** + * @hide + */ + public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName, + CharSequence carrierName, int nameSource, int iconTint, String number, int roaming, + Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded, + @Nullable UiccAccessRule[] accessRules, String cardId, boolean isOpportunistic, + int parentSubId) { this.mId = id; this.mIccId = iccId; this.mSimSlotIndex = simSlotIndex; @@ -157,6 +180,8 @@ public class SubscriptionInfo implements Parcelable { this.mIsEmbedded = isEmbedded; this.mAccessRules = accessRules; this.mCardId = cardId; + this.mIsOpportunistic = isOpportunistic; + this.mParentSubId = parentSubId; } /** @@ -347,6 +372,29 @@ public class SubscriptionInfo implements Parcelable { } /** + * An opportunistic subscription connects to a network that is + * limited in functionality and / or coverage. + * + * @return whether subscription is opportunistic. + */ + public boolean isOpportunistic() { + return mIsOpportunistic; + } + + /** + * Used in scenarios where a child subscription is bundled with a primary parent subscription. + * The child subscription will typically be opportunistic (see {@link #isOpportunistic()}) + * and will be used to provide data services where available, with the parent being the primary + * fallback subscription. + * + * @return subId of parent subscription if it’s bundled with a primary subscription. + * If there isn't one, {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID} + */ + public int getParentSubId() { + return mParentSubId; + } + + /** * Checks whether the app with the given context is authorized to manage this subscription * according to its metadata. Only supported for embedded subscriptions (if {@link #isEmbedded} * returns true). @@ -438,10 +486,12 @@ public class SubscriptionInfo implements Parcelable { boolean isEmbedded = source.readBoolean(); UiccAccessRule[] accessRules = source.createTypedArray(UiccAccessRule.CREATOR); String cardId = source.readString(); + boolean isOpportunistic = source.readBoolean(); + int parentSubId = source.readInt(); return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, - isEmbedded, accessRules, cardId); + isEmbedded, accessRules, cardId, isOpportunistic, parentSubId); } @Override @@ -468,6 +518,8 @@ public class SubscriptionInfo implements Parcelable { dest.writeBoolean(mIsEmbedded); dest.writeTypedArray(mAccessRules, flags); dest.writeString(mCardId); + dest.writeBoolean(mIsOpportunistic); + dest.writeInt(mParentSubId); } @Override @@ -500,6 +552,7 @@ public class SubscriptionInfo implements Parcelable { + " dataRoaming=" + mDataRoaming + " iconBitmap=" + mIconBitmap + " mcc " + mMcc + " mnc " + mMnc + " isEmbedded " + mIsEmbedded + " accessRules " + Arrays.toString(mAccessRules) - + " cardId=" + cardIdToPrint + "}"; + + " cardId=" + cardIdToPrint + " isOpportunistic " + mIsOpportunistic + + " parentSubId=" + mParentSubId + "}"; } } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 8aa5bf659be2..151b936604fd 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -29,6 +29,7 @@ import android.annotation.SuppressAutoDoc; import android.annotation.SystemApi; import android.annotation.SystemService; import android.app.BroadcastOptions; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; @@ -43,6 +44,7 @@ import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; +import android.telephony.euicc.EuiccManager; import android.util.DisplayMetrics; import com.android.internal.telephony.IOnSubscriptionsChangedListener; @@ -433,6 +435,24 @@ public class SubscriptionManager { public static final String WFC_IMS_ROAMING_ENABLED = "wfc_ims_roaming_enabled"; /** + * TelephonyProvider column name for whether a subscription is opportunistic, that is, + * whether the network it connects to is limited in functionality or coverage. + * For example, CBRS. + * IS_EMBEDDED should always be true. + * <p>Type: INTEGER (int), 1 for opportunistic or 0 for non-opportunistic. + * @hide + */ + public static final String IS_OPPORTUNISTIC = "is_opportunistic"; + + /** + * TelephonyProvider column name for subId of parent subscription of an opportunistic + * subscription. + * if the parent sub id is valid, then is_opportunistic should always to true. + * @hide + */ + public static final String PARENT_SUB_ID = "parent_sub_id"; + + /** * Broadcast Action: The user has changed one of the default subs related to * data, phone calls, or sms</p> * @@ -1940,6 +1960,91 @@ public class SubscriptionManager { return false; } + /** + * Set preferred default data. + * Set on which slot default data will be on. + * + * @param slotId which slot is preferred to for cellular data. + * @hide + * + */ + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public void setPreferredData(int slotId) { + if (VDBG) logd("[setPreferredData]+ slotId:" + slotId); + setSubscriptionPropertyHelper(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, + "setPreferredData", (iSub)-> iSub.setPreferredData(slotId)); + } + + /** + * Get User downloaded Profiles. + * + * Provide all available user downloaded profile on the phone. + * @param slotId on which phone the switch will operate on + */ + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) + List<SubscriptionInfo> getOpportunisticSubscriptions(int slotId) { + String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>"; + List<SubscriptionInfo> subInfoList = null; + + try { + ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); + if (iSub != null) { + subInfoList = iSub.getOpportunisticSubscriptions(slotId, pkgForDebug); + } + } catch (RemoteException ex) { + // ignore it + } + + if (subInfoList == null) { + subInfoList = new ArrayList<>(); + } + + return subInfoList; + } + + /** + * Switch to a certain subscription + * + * @param subId sub id + * @param callbackIntent pending intent that will be sent after operation is done. + */ + @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) + public void switchToSubscription(int subId, PendingIntent callbackIntent) { + EuiccManager euiccManager = new EuiccManager(mContext); + euiccManager.switchToSubscription(subId, callbackIntent); + } + + /** + * Set opportunistic by simInfo index + * + * @param opportunistic whether it’s opportunistic subscription. + * @param subId the unique SubscriptionInfo index in database + * @return the number of records updated + * @hide + */ + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public int setOpportunistic(boolean opportunistic, int subId) { + if (VDBG) logd("[setOpportunistic]+ opportunistic:" + opportunistic + " subId:" + subId); + return setSubscriptionPropertyHelper(subId, "setOpportunistic", + (iSub)-> iSub.setOpportunistic(opportunistic, subId)); + } + + /** + * Set parent subId by simInfo index + * + * @param parentSubId subId of its parent subscription. + * @param subId the unique SubscriptionInfo index in database + * @return the number of records updated + * @hide + * + */ + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public int setParentSubId(int parentSubId, int subId) { + if (VDBG) logd("[setParentSubId]+ parentSubId:" + parentSubId + " subId:" + subId); + return setSubscriptionPropertyHelper(subId, "parentSubId", + (iSub)-> iSub.setParentSubId(parentSubId, subId)); + } + private interface CallISubMethodHelper { int callMethod(ISub iSub) throws RemoteException; } diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl index 5e015e069f4a..6521f0b41cb2 100755 --- a/telephony/java/com/android/internal/telephony/ISub.aidl +++ b/telephony/java/com/android/internal/telephony/ISub.aidl @@ -156,6 +156,42 @@ interface ISub { */ int setDataRoaming(int roaming, int subId); + /** + * Switch to a certain subscription + * + * @param opportunistic whether it’s opportunistic subscription. + * @param subId the unique SubscriptionInfo index in database + * @return the number of records updated + */ + int setOpportunistic(boolean opportunistic, int subId); + + /** + * Set parent subId by simInfo index + * + * @param parentSubId: subId of its parent subscription. + * @param subId the unique SubscriptionInfo index in database + * @return the number of records updated + */ + int setParentSubId(int parentSubId, int subId); + + /** + * Set preferred default data. + * Set on which slot default data will be on. + * + * @param slotId which slot is preferred to for cellular data. + * @hide + * + */ + int setPreferredData(int slotId); + + /** + * Get User downloaded Profiles. + * + * Provide all available user downloaded profile on the phone. + * @param slotId on which phone the switch will operate on + */ + List<SubscriptionInfo> getOpportunisticSubscriptions(int slotId, String callingPackage); + int getSlotIndex(int subId); int[] getSubId(int slotIndex); @@ -186,7 +222,7 @@ interface ISub { int[] getActiveSubIdList(); - void setSubscriptionProperty(int subId, String propKey, String propValue); + int setSubscriptionProperty(int subId, String propKey, String propValue); String getSubscriptionProperty(int subId, String propKey, String callingPackage); diff --git a/telephony/java/com/android/internal/telephony/TelephonyIntents.java b/telephony/java/com/android/internal/telephony/TelephonyIntents.java index 51369d06bf46..5ecb43ebf112 100644 --- a/telephony/java/com/android/internal/telephony/TelephonyIntents.java +++ b/telephony/java/com/android/internal/telephony/TelephonyIntents.java @@ -15,7 +15,6 @@ */ package com.android.internal.telephony; -import android.content.Intent; import android.content.Intent; import android.telephony.SubscriptionManager; diff --git a/test-base/Android.bp b/test-base/Android.bp index d25b47727c0b..0b8a02a815d9 100644 --- a/test-base/Android.bp +++ b/test-base/Android.bp @@ -19,9 +19,8 @@ // This contains the junit.framework and android.test classes that were in // Android API level 25 excluding those from android.test.runner. // Also contains the com.android.internal.util.Predicate[s] classes. -java_library { +java_sdk_library { name: "android.test.base", - installable: true, srcs: ["src/**/*.java"], @@ -29,11 +28,38 @@ java_library { javacflags: ["-Xep:DepAnn:ERROR"], }, + hostdex: true, + + api_packages: [ + "android.test", + "android.test.suitebuilder.annotation", + "com.android.internal.util", + "junit.framework", + ], + + droiddoc_options: ["stubsourceonly"], + compile_dex: true, +} + +// Build the android.test.base_static library +// ========================================== +// This is only intended for inclusion in the android.test.runner-minus-junit, +// robolectric_android-all-stub and repackaged.android.test.* libraries. +// Must not be used elewhere. +java_library_static { + name: "android.test.base_static", + installable: false, + + srcs: ["src/**/*.java"], + + errorprone: { + javacflags: ["-Xep:DepAnn:ERROR"], + }, + // Needs to be consistent with the repackaged version of this make target. java_version: "1.8", sdk_version: "current", - hostdex: true, } // Build the legacy-test library @@ -46,7 +72,7 @@ java_library { installable: true, sdk_version: "current", - static_libs: ["android.test.base"], + static_libs: ["android.test.base_static"], } // Build the repackaged.android.test.base library @@ -57,7 +83,7 @@ java_library_static { name: "repackaged.android.test.base", sdk_version: "current", - static_libs: ["android.test.base"], + static_libs: ["android.test.base_static"], jarjar_rules: "jarjar-rules.txt", // Pin java_version until jarjar is certified to support later versions. http://b/72703434 @@ -84,38 +110,3 @@ java_library_static { ], } -droiddoc { - name: "android-test-base-api-stubs-gen-docs", - srcs: [ - "src/**/*.java", - ], - custom_template: "droiddoc-templates-sdk", - installable: false, - args: "-stubpackages android.test:" + - "android.test.suitebuilder.annotation:" + - "com.android.internal.util:" + - "junit.framework -stubsourceonly -nodocs", - sdk_version: "current", - api_tag_name: "ANDROID_TEST_BASE", - api_filename: "android-test-base-api.txt", - removed_api_filename: "android-test-base-removed.txt", -} - -// Build the android.test.base.stubs library -// ========================================= -java_library_static { - name: "android.test.base.stubs", - srcs: [ - ":android-test-base-api-stubs-gen-docs", - ], - product_variables: { - pdk: { - enabled: false, - }, - unbundled_build: { - enabled: false, - }, - }, - sdk_version: "current", - compile_dex: true, -} diff --git a/test-base/Android.mk b/test-base/Android.mk index baf5726ff8bd..a9d30cf3131a 100644 --- a/test-base/Android.mk +++ b/test-base/Android.mk @@ -16,50 +16,6 @@ LOCAL_PATH:= $(call my-dir) -# For unbundled build we'll use the prebuilt jar from prebuilts/sdk. -ifeq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK))) - -ANDROID_TEST_BASE_API_FILE := $(LOCAL_PATH)/api/android-test-base-current.txt -ANDROID_TEST_BASE_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-base-removed.txt - -full_classes_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,android.test.base.stubs,,COMMON)/classes.jar -# Archive a copy of the classes.jar in SDK build. -$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.base.stubs.jar) - -# Check that the android.test.base.stubs library has not changed -# ============================================================== - -# Check that the API we're building hasn't changed from the not-yet-released -# SDK version. -$(eval $(call check-api, \ - check-android-test-base-api-current, \ - $(ANDROID_TEST_BASE_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_BASE_API_FILE), \ - $(ANDROID_TEST_BASE_REMOVED_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_BASE_REMOVED_API_FILE), \ - -error 2 -error 3 -error 4 -error 5 -error 6 \ - -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ - -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ - -error 25 -error 26 -error 27, \ - cat $(LOCAL_PATH)/api/apicheck_msg_android_test_base.txt, \ - check-android-test-base-api, \ - $(OUT_DOCS)/android-test-base-api-stubs-gen-docs-stubs.srcjar \ - )) - -.PHONY: check-android-test-base-api -checkapi: check-android-test-base-api - -.PHONY: update-android-test-base-api -update-api: update-android-test-base-api - -update-android-test-base-api: $(INTERNAL_PLATFORM_ANDROID_TEST_BASE_API_FILE) | $(ACP) - @echo Copying current.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_BASE_API_FILE) $(ANDROID_TEST_BASE_API_FILE) - @echo Copying removed.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_BASE_REMOVED_API_FILE) $(ANDROID_TEST_BASE_REMOVED_API_FILE) - -endif # not TARGET_BUILD_APPS not TARGET_BUILD_PDK=true - ifeq ($(HOST_OS),linux) # Build the legacy-performance-test-hostdex library # ================================================= diff --git a/test-base/api/apicheck_msg_android_test_base.txt b/test-base/api/apicheck_msg_android_test_base.txt deleted file mode 100644 index 144aecc21bce..000000000000 --- a/test-base/api/apicheck_msg_android_test_base.txt +++ /dev/null @@ -1,17 +0,0 @@ - -****************************** -You have tried to change the API from what has been previously approved. - -To make these errors go away, you have two choices: - 1) You can add "@hide" javadoc comments to the methods, etc. listed in the - errors above. - - 2) You can update android-test-base-current.txt by executing the following command: - make update-android-test-base-api - - To submit the revised android-test-base-current.txt to the main Android repository, - you will need approval. -****************************** - - - diff --git a/test-base/api/android-test-base-current.txt b/test-base/api/current.txt index 7ebd6aa8a4a2..7ebd6aa8a4a2 100644 --- a/test-base/api/android-test-base-current.txt +++ b/test-base/api/current.txt diff --git a/test-base/api/android-test-base-removed.txt b/test-base/api/removed.txt index e69de29bb2d1..e69de29bb2d1 100644 --- a/test-base/api/android-test-base-removed.txt +++ b/test-base/api/removed.txt diff --git a/test-mock/api/android-test-mock-system-removed.txt b/test-base/api/system-current.txt index e69de29bb2d1..e69de29bb2d1 100644 --- a/test-mock/api/android-test-mock-system-removed.txt +++ b/test-base/api/system-current.txt diff --git a/test-runner/api/android-test-runner-removed.txt b/test-base/api/system-removed.txt index e69de29bb2d1..e69de29bb2d1 100644 --- a/test-runner/api/android-test-runner-removed.txt +++ b/test-base/api/system-removed.txt diff --git a/test-base/api/test-current.txt b/test-base/api/test-current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-base/api/test-current.txt diff --git a/test-base/api/test-removed.txt b/test-base/api/test-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-base/api/test-removed.txt diff --git a/test-legacy/Android.bp b/test-legacy/Android.bp index d2af8a9f1c82..833c714f07b0 100644 --- a/test-legacy/Android.bp +++ b/test-legacy/Android.bp @@ -25,7 +25,7 @@ java_library_static { static_libs: [ "android.test.base-minus-junit", "android.test.runner-minus-junit", - "android.test.mock", + "android.test.mock.impl", ], no_framework_libs: true, diff --git a/test-mock/Android.bp b/test-mock/Android.bp index 8d3faaef9f6b..5eba01779f46 100644 --- a/test-mock/Android.bp +++ b/test-mock/Android.bp @@ -16,95 +16,15 @@ // Build the android.test.mock library // =================================== -java_library { +java_sdk_library { name: "android.test.mock", - installable: true, - java_version: "1.8", srcs: ["src/**/*.java"], - no_framework_libs: true, - libs: [ - "framework", + api_packages: [ + "android.test.mock", ], -} - -doc_defaults { - name:"android.test.mock.docs-defaults", - srcs: ["src/android/test/mock/**/*.java"], - // Includes the main framework source to ensure that doclava has access to the - // visibility information for the base classes of the mock classes. Without it - // otherwise hidden methods could be visible. - srcs_lib: "framework", - srcs_lib_whitelist_dirs: ["core/java"], srcs_lib_whitelist_pkgs: ["android"], - libs: [ - "core-oj", - "core-libart", - "framework", - "conscrypt", - "okhttp", - "bouncycastle", - "ext", - ], - local_sourcepaths: ["src/android/test/mock"], - custom_template: "droiddoc-templates-sdk", - installable: false, -} - -android_test_mock_docs_args = - "-hide 110 -hide 111 -hide 113 -hide 121 -hide 125 -hide 126 -hide 127 -hide 128 " + - "-stubpackages android.test.mock " + - "-nodocs " - -droiddoc { - name: "android.test.mock.docs", - defaults: ["android.test.mock.docs-defaults"], - - api_tag_name: "ANDROID_TEST_MOCK", - api_filename: "api/android-test-mock-current.txt", - removed_api_filename: "api/android-test-mock-removed.txt", - - args: android_test_mock_docs_args, -} - -droiddoc { - name: "android.test.mock.docs-system", - defaults: ["android.test.mock.docs-defaults"], - - api_tag_name: "ANDROID_TEST_MOCK_SYSTEM", - api_filename: "api/android-test-mock-system-current.txt", - removed_api_filename: "api/android-test-mock-system-removed.txt", - - args: android_test_mock_docs_args + - "-showAnnotation android.annotation.SystemApi ", -} - -java_library_static { - name: "android.test.mock.stubs", - srcs: [":android.test.mock.docs"], - sdk_version: "current", - product_variables: { - unbundled_build: { - // Unbundled apps will use the prebuilt one - // prebuilts/sdk/current - enabled: false, - }, - }, - compile_dex: true, -} - -java_library_static { - name: "android.test.mock.stubs-system", - srcs: [":android.test.mock.docs-system"], - sdk_version: "system_current", - product_variables: { - unbundled_build: { - // Unbundled apps will use the prebuilt one - // prebuilts/sdk/system_current - enabled: false, - }, - }, compile_dex: true, } diff --git a/test-mock/Android.mk b/test-mock/Android.mk deleted file mode 100644 index 73a7340826a6..000000000000 --- a/test-mock/Android.mk +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (C) 2008 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) - -# Archive a copy of the classes.jar in SDK build. -full_classes_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,android.test.mock.stubs,,COMMON)/classes.jar -$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.mock.stubs.jar) - -# Check that the android.test.mock.stubs library has not changed -# ============================================================== -ANDROID_TEST_MOCK_API_FILE := $(LOCAL_PATH)/api/android-test-mock-current.txt -ANDROID_TEST_MOCK_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-mock-removed.txt - -# Check that the API we're building hasn't changed from the not-yet-released -# SDK version. -$(eval $(call check-api, \ - check-android-test-mock-api-current, \ - $(ANDROID_TEST_MOCK_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_API_FILE), \ - $(ANDROID_TEST_MOCK_REMOVED_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_REMOVED_API_FILE), \ - -error 2 -error 3 -error 4 -error 5 -error 6 \ - -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ - -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ - -error 25 -error 26 -error 27, \ - cat $(LOCAL_PATH)/api/apicheck_msg_android_test_mock.txt, \ - check-android-test-mock-api, \ - $(OUT_DOCS)/android.test.mock.docs-stubs.srcjar \ - )) - -.PHONY: check-android-test-mock-api -checkapi: check-android-test-mock-api - -.PHONY: update-android-test-mock-api -update-api: update-android-test-mock-api - -update-android-test-mock-api: $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_API_FILE) | $(ACP) - @echo Copying current.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_API_FILE) $(ANDROID_TEST_MOCK_API_FILE) - @echo Copying removed.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_REMOVED_API_FILE) $(ANDROID_TEST_MOCK_REMOVED_API_FILE) - -# Archive a copy of the classes.jar in SDK build. -full_classes_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,android.test.mock.stubs-system,,COMMON)/classes.jar -$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.mock.stubs_system.jar) - -# Check that the android.test.mock.stubs-system library has not changed -# ===================================================================== -ANDROID_TEST_MOCK_SYSTEM_API_FILE := $(LOCAL_PATH)/api/android-test-mock-system-current.txt -ANDROID_TEST_MOCK_SYSTEM_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-mock-system-removed.txt - -# Check that the API we're building hasn't changed from the not-yet-released -# SDK version. -$(eval $(call check-api, \ - check-android-test-mock-system-api-current, \ - $(ANDROID_TEST_MOCK_SYSTEM_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_SYSTEM_API_FILE), \ - $(ANDROID_TEST_MOCK_SYSTEM_REMOVED_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_SYSTEM_REMOVED_API_FILE), \ - -error 2 -error 3 -error 4 -error 5 -error 6 \ - -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ - -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ - -error 25 -error 26 -error 27, \ - cat $(LOCAL_PATH)/api/apicheck_msg_android_test_mock-system.txt, \ - check-android-test-mock-system-api, \ - $(OUT_DOCS)/android.test.mock.docs-system-stubs.srcjar \ - )) - -.PHONY: check-android-test-mock-system-api -checkapi: check-android-test-mock-system-api - -.PHONY: update-android-test-mock-system-api -update-api: update-android-test-mock-system-api - -update-android-test-mock-system-api: $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_SYSTEM_API_FILE) | $(ACP) - @echo Copying current.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_SYSTEM_API_FILE) $(ANDROID_TEST_MOCK_SYSTEM_API_FILE) - @echo Copying removed.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_MOCK_SYSTEM_REMOVED_API_FILE) $(ANDROID_TEST_MOCK_SYSTEM_REMOVED_API_FILE) diff --git a/test-mock/api/apicheck_msg_android_test_mock-system.txt b/test-mock/api/apicheck_msg_android_test_mock-system.txt deleted file mode 100644 index 3a97117f3ea1..000000000000 --- a/test-mock/api/apicheck_msg_android_test_mock-system.txt +++ /dev/null @@ -1,17 +0,0 @@ - -****************************** -You have tried to change the API from what has been previously approved. - -To make these errors go away, you have two choices: - 1) You can add "@hide" javadoc comments to the methods, etc. listed in the - errors above. - - 2) You can update android-test-mock-current.txt by executing the following command: - make update-android-test-mock-system-api - - To submit the revised android-test-mock-system-current.txt to the main Android repository, - you will need approval. -****************************** - - - diff --git a/test-mock/api/apicheck_msg_android_test_mock.txt b/test-mock/api/apicheck_msg_android_test_mock.txt deleted file mode 100644 index e388935bf798..000000000000 --- a/test-mock/api/apicheck_msg_android_test_mock.txt +++ /dev/null @@ -1,17 +0,0 @@ - -****************************** -You have tried to change the API from what has been previously approved. - -To make these errors go away, you have two choices: - 1) You can add "@hide" javadoc comments to the methods, etc. listed in the - errors above. - - 2) You can update android-test-mock-current.txt by executing the following command: - make update-android-test-mock-api - - To submit the revised android-test-mock-current.txt to the main Android repository, - you will need approval. -****************************** - - - diff --git a/test-mock/api/android-test-mock-current.txt b/test-mock/api/current.txt index f3b253c0f460..f3b253c0f460 100644 --- a/test-mock/api/android-test-mock-current.txt +++ b/test-mock/api/current.txt diff --git a/test-mock/api/android-test-mock-removed.txt b/test-mock/api/removed.txt index bd109a887933..bd109a887933 100644 --- a/test-mock/api/android-test-mock-removed.txt +++ b/test-mock/api/removed.txt diff --git a/test-mock/api/android-test-mock-system-current.txt b/test-mock/api/system-current.txt index 20401a50b6a2..20401a50b6a2 100644 --- a/test-mock/api/android-test-mock-system-current.txt +++ b/test-mock/api/system-current.txt diff --git a/test-mock/api/system-removed.txt b/test-mock/api/system-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-mock/api/system-removed.txt diff --git a/test-mock/api/test-current.txt b/test-mock/api/test-current.txt new file mode 100644 index 000000000000..f1ec000dfa6a --- /dev/null +++ b/test-mock/api/test-current.txt @@ -0,0 +1,22 @@ +package android.test.mock { + + public class MockContext extends android.content.Context { + method public java.lang.String getOpPackageName(); + } + + public deprecated class MockPackageManager extends android.content.pm.PackageManager { + method public boolean arePermissionsIndividuallyControlled(); + method public java.lang.String getDefaultBrowserPackageNameAsUser(int); + method public int getInstallReason(java.lang.String, android.os.UserHandle); + method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int); + method public java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int); + method public java.lang.String[] getNamesForUids(int[]); + method public java.lang.String getPermissionControllerPackageName(); + method public java.lang.String getServicesSystemSharedLibraryPackageName(); + method public java.lang.String getSharedSystemSharedLibraryPackageName(); + method public void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); + method public void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); + } + +} + diff --git a/test-mock/api/test-removed.txt b/test-mock/api/test-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-mock/api/test-removed.txt diff --git a/test-runner/Android.bp b/test-runner/Android.bp index 2caa6c45f16b..ea615b920df6 100644 --- a/test-runner/Android.bp +++ b/test-runner/Android.bp @@ -16,23 +16,32 @@ // Build the android.test.runner library // ===================================== -java_library { +java_sdk_library { name: "android.test.runner", - installable: true, - // Needs to be consistent with the repackaged version of this make target. - java_version: "1.8", srcs: ["src/**/*.java"], errorprone: { javacflags: ["-Xep:DepAnn:ERROR"], }, - sdk_version: "current", libs: [ "android.test.base", - "android.test.mock.stubs", + "android.test.mock", + ], + stub_only_libs: [ + "android.test.base", + "android.test.mock", ], + api_packages: [ + "android.test", + "android.test.suitebuilder", + "junit.runner", + "junit.textui", + ], + + droiddoc_options: ["stubsourceonly"], + compile_dex: true } // Build the android.test.runner-minus-junit library @@ -46,8 +55,8 @@ java_library { sdk_version: "current", libs: [ - "android.test.base", - "android.test.mock.stubs", + "android.test.base_static", + "android.test.mock", "junit", ], } @@ -70,7 +79,7 @@ java_library_static { sdk_version: "current", libs: [ - "android.test.base", + "android.test.base_static", ], jarjar_rules: "jarjar-rules.txt", @@ -78,48 +87,3 @@ java_library_static { java_version: "1.8", } -droiddoc { - name: "android-test-runner-api-stubs-gen-docs", - srcs: [ - "src/**/*.java", - ], - libs: [ - "core-oj", - "core-libart", - "framework", - "android.test.base", - "android.test.mock", - ], - custom_template: "droiddoc-templates-sdk", - installable: false, - args: "-stubpackages android.test:" + - "android.test.suitebuilder:" + - "junit.runner:" + - "junit.textui -stubsourceonly -nodocs", - api_tag_name: "ANDROID_TEST_RUNNER", - api_filename: "android-test-runner-current.txt", - removed_api_filename: "android-test-runner-removed.txt", -} - -// Build the android.test.runner.stubs library -// ========================================= -java_library_static { - name: "android.test.runner.stubs", - srcs: [ - ":android-test-runner-api-stubs-gen-docs", - ], - libs: [ - "android.test.base.stubs", - "android.test.mock.stubs", - ], - product_variables: { - pdk: { - enabled: false, - }, - unbundled_build: { - enabled: false, - }, - }, - sdk_version: "current", - compile_dex: true, -} diff --git a/test-runner/Android.mk b/test-runner/Android.mk index b70d2498d491..18bde8517351 100644 --- a/test-runner/Android.mk +++ b/test-runner/Android.mk @@ -16,49 +16,5 @@ LOCAL_PATH:= $(call my-dir) -# For unbundled build we'll use the prebuilt jar from prebuilts/sdk. -ifeq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK))) - -ANDROID_TEST_RUNNER_API_FILE := $(LOCAL_PATH)/api/android-test-runner-current.txt -ANDROID_TEST_RUNNER_REMOVED_API_FILE := $(LOCAL_PATH)/api/android-test-runner-removed.txt - -full_classes_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,android.test.runner.stubs,,COMMON)/classes.jar -# Archive a copy of the classes.jar in SDK build. -$(call dist-for-goals,sdk win_sdk,$(full_classes_jar):android.test.runner.stubs.jar) - -# Check that the android.test.runner.stubs library has not changed -# ================================================================ - -# Check that the API we're building hasn't changed from the not-yet-released -# SDK version. -$(eval $(call check-api, \ - check-android-test-runner-api-current, \ - $(ANDROID_TEST_RUNNER_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_RUNNER_API_FILE), \ - $(ANDROID_TEST_RUNNER_REMOVED_API_FILE), \ - $(INTERNAL_PLATFORM_ANDROID_TEST_RUNNER_REMOVED_API_FILE), \ - -error 2 -error 3 -error 4 -error 5 -error 6 \ - -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \ - -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \ - -error 25 -error 26 -error 27, \ - cat $(LOCAL_PATH)/api/apicheck_msg_android_test_runner.txt, \ - check-android-test-runner-api, \ - $(OUT_DOCS)/android-test-runner-api-stubs-gen-docs-stubs.srcjar \ - )) - -.PHONY: check-android-test-runner-api -checkapi: check-android-test-runner-api - -.PHONY: update-android-test-runner-api -update-api: update-android-test-runner-api - -update-android-test-runner-api: $(INTERNAL_PLATFORM_ANDROID_TEST_RUNNER_API_FILE) | $(ACP) - @echo Copying current.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_RUNNER_API_FILE) $(ANDROID_TEST_RUNNER_API_FILE) - @echo Copying removed.txt - $(hide) $(ACP) $(INTERNAL_PLATFORM_ANDROID_TEST_RUNNER_REMOVED_API_FILE) $(ANDROID_TEST_RUNNER_REMOVED_API_FILE) - -endif # not TARGET_BUILD_APPS not TARGET_BUILD_PDK=true - # additionally, build unit tests in a separate .apk include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/test-runner/api/apicheck_msg_android_test_runner.txt b/test-runner/api/apicheck_msg_android_test_runner.txt deleted file mode 100644 index cf2d15ee1ee1..000000000000 --- a/test-runner/api/apicheck_msg_android_test_runner.txt +++ /dev/null @@ -1,17 +0,0 @@ - -****************************** -You have tried to change the API from what has been previously approved. - -To make these errors go away, you have two choices: - 1) You can add "@hide" javadoc comments to the methods, etc. listed in the - errors above. - - 2) You can update android-test-runner-current.txt by executing the following command: - make update-android-test-runner-api - - To submit the revised android-test-runner-current.txt to the main Android repository, - you will need approval. -****************************** - - - diff --git a/test-runner/api/android-test-runner-current.txt b/test-runner/api/current.txt index 1170eb53ab7f..1170eb53ab7f 100644 --- a/test-runner/api/android-test-runner-current.txt +++ b/test-runner/api/current.txt diff --git a/test-runner/api/removed.txt b/test-runner/api/removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-runner/api/removed.txt diff --git a/test-runner/api/system-current.txt b/test-runner/api/system-current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-runner/api/system-current.txt diff --git a/test-runner/api/system-removed.txt b/test-runner/api/system-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-runner/api/system-removed.txt diff --git a/test-runner/api/test-current.txt b/test-runner/api/test-current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-runner/api/test-current.txt diff --git a/test-runner/api/test-removed.txt b/test-runner/api/test-removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test-runner/api/test-removed.txt diff --git a/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java b/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java index e247951f16ef..e509d2d87bf7 100644 --- a/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java +++ b/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java @@ -17,8 +17,10 @@ package com.android.server.pm; import android.app.AlarmManager; +import android.app.UiAutomation; import android.content.Context; import android.os.Environment; +import android.os.ParcelFileDescriptor; import android.os.SystemProperties; import android.os.storage.StorageManager; import android.support.test.InstrumentationRegistry; @@ -34,6 +36,7 @@ import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -141,27 +144,17 @@ public final class BackgroundDexOptServiceIntegrationTests { // Run the command and return the stdout. private static String runShellCommand(String cmd) throws IOException { Log.i(TAG, String.format("running command: '%s'", cmd)); - long startTime = System.nanoTime(); - Process p = Runtime.getRuntime().exec(cmd); - int res; - try { - res = p.waitFor(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - String stdout = inputStreamToString(p.getInputStream()); - String stderr = inputStreamToString(p.getErrorStream()); - long elapsedTime = System.nanoTime() - startTime; - Log.i(TAG, String.format("ran command: '%s' in %d ms with return code %d", cmd, - TimeUnit.NANOSECONDS.toMillis(elapsedTime), res)); - Log.i(TAG, "stdout"); - Log.i(TAG, stdout); - Log.i(TAG, "stderr"); - Log.i(TAG, stderr); - if (res != 0) { - throw new RuntimeException(String.format("failed command: '%s'", cmd)); + ParcelFileDescriptor pfd = InstrumentationRegistry.getInstrumentation().getUiAutomation() + .executeShellCommand(cmd); + byte[] buf = new byte[512]; + int bytesRead; + FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd); + StringBuilder stdout = new StringBuilder(); + while ((bytesRead = fis.read(buf)) != -1) { + stdout.append(new String(buf, 0, bytesRead)); } - return stdout; + fis.close(); + return stdout.toString(); } // Run the command and return the stdout split by lines. diff --git a/tests/testables/Android.bp b/tests/testables/Android.bp new file mode 100644 index 000000000000..f07f09da3f03 --- /dev/null +++ b/tests/testables/Android.bp @@ -0,0 +1,32 @@ +// +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +java_library { + + name: "testables", + // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_MODULE_TAG + // LOCAL_MODULE_TAG := tests + + srcs: ["src/**/*.java"], + + libs: [ + "android.test.runner", + "android.test.mock", + "android-support-test", + "mockito-target-inline-minus-junit4", + ], + +} diff --git a/tests/testables/Android.mk b/tests/testables/Android.mk deleted file mode 100644 index f3cbac05d1cb..000000000000 --- a/tests/testables/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := testables -LOCAL_MODULE_TAG := tests - -LOCAL_SRC_FILES := $(call all-java-files-under,src) - -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.mock \ - android-support-test \ - mockito-target-inline-minus-junit4 - -include $(BUILD_STATIC_JAVA_LIBRARY) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tools/aapt2/Debug.cpp b/tools/aapt2/Debug.cpp index f064cb14248f..0a517ab8a2de 100644 --- a/tools/aapt2/Debug.cpp +++ b/tools/aapt2/Debug.cpp @@ -408,6 +408,41 @@ void Debug::DumpHex(const void* data, size_t len) { } } +void Debug::DumpResStringPool(const android::ResStringPool* pool, text::Printer* printer) { + using namespace android; + + if (pool->getError() == NO_INIT) { + printer->Print("String pool is unitialized.\n"); + return; + } else if (pool->getError() != NO_ERROR) { + printer->Print("String pool is corrupt/invalid.\n"); + return; + } + + SortedVector<const void*> uniqueStrings; + const size_t N = pool->size(); + for (size_t i=0; i<N; i++) { + size_t len; + if (pool->isUTF8()) { + uniqueStrings.add(pool->string8At(i, &len)); + } else { + uniqueStrings.add(pool->stringAt(i, &len)); + } + } + + printer->Print(StringPrintf("String pool of %zd unique %s %s strings, %zd entries and %zd styles " + "using %zd bytes:\n", uniqueStrings.size(), + pool->isUTF8() ? "UTF-8" : "UTF-16", + pool->isSorted() ? "sorted" : "non-sorted", N, pool->styleCount(), + pool->bytes())); + + const size_t NS = pool->size(); + for (size_t s=0; s<NS; s++) { + String8 str = pool->string8ObjectAt(s); + printer->Print(StringPrintf("String #%zd : %s\n", s, str.string())); + } +} + namespace { class XmlPrinter : public xml::ConstVisitor { diff --git a/tools/aapt2/Debug.h b/tools/aapt2/Debug.h index 382707e1d4cd..a43197cacf7b 100644 --- a/tools/aapt2/Debug.h +++ b/tools/aapt2/Debug.h @@ -38,6 +38,7 @@ struct Debug { static void PrintStyleGraph(ResourceTable* table, const ResourceName& target_style); static void DumpHex(const void* data, size_t len); static void DumpXml(const xml::XmlResource& doc, text::Printer* printer); + static void DumpResStringPool(const android::ResStringPool* pool, text::Printer* printer); }; } // namespace aapt diff --git a/tools/aapt2/LoadedApk.cpp b/tools/aapt2/LoadedApk.cpp index 1dd46ba813db..a73d56c8f951 100644 --- a/tools/aapt2/LoadedApk.cpp +++ b/tools/aapt2/LoadedApk.cpp @@ -76,7 +76,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection( } std::string error; - table = util::make_unique<ResourceTable>(); + table = util::make_unique<ResourceTable>(/** validate_resources **/ false); if (!DeserializeTableFromPb(pb_table, collection.get(), table.get(), &error)) { diag->Error(DiagMessage(source) << "failed to deserialize " << kProtoResourceTablePath << ": " << error); @@ -120,7 +120,7 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadBinaryApkFromFileCollection( io::IFile* table_file = collection->FindFile(kApkResourceTablePath); if (table_file != nullptr) { - table = util::make_unique<ResourceTable>(); + table = util::make_unique<ResourceTable>(/** validate_resources **/ false); std::unique_ptr<io::IData> data = table_file->OpenAsData(); if (data == nullptr) { diag->Error(DiagMessage(source) << "failed to open " << kApkResourceTablePath); @@ -184,10 +184,7 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table std::unique_ptr<io::IFileCollectionIterator> iterator = apk_->Iterator(); while (iterator->HasNext()) { io::IFile* file = iterator->Next(); - std::string path = file->GetSource().path; - // The name of the path has the format "<zip-file-name>@<path-to-file>". - path = path.substr(path.find('@') + 1); // Skip resources that are not referenced if requested. if (path.find("res/") == 0 && referenced_resources.find(path) == referenced_resources.end()) { @@ -257,6 +254,53 @@ bool LoadedApk::WriteToArchive(IAaptContext* context, ResourceTable* split_table return true; } +std::unique_ptr<xml::XmlResource> LoadedApk::LoadXml(const std::string& file_path, + IDiagnostics* diag) { + io::IFile* file = apk_->FindFile(file_path); + if (file == nullptr) { + diag->Error(DiagMessage() << "failed to find file"); + return nullptr; + } + + std::unique_ptr<xml::XmlResource> doc; + if (format_ == ApkFormat::kProto) { + std::unique_ptr<io::InputStream> in = file->OpenInputStream(); + if (!in) { + diag->Error(DiagMessage() << "failed to open file"); + return nullptr; + } + + io::ZeroCopyInputAdaptor adaptor(in.get()); + pb::XmlNode pb_node; + if (!pb_node.ParseFromZeroCopyStream(&adaptor)) { + diag->Error(DiagMessage() << "failed to parse file as proto XML"); + return nullptr; + } + + std::string err; + doc = DeserializeXmlResourceFromPb(pb_node, &err); + if (!doc) { + diag->Error(DiagMessage() << "failed to deserialize proto XML: " << err); + return nullptr; + } + } else if (format_ == ApkFormat::kBinary) { + std::unique_ptr<io::IData> data = file->OpenAsData(); + if (!data) { + diag->Error(DiagMessage() << "failed to open file"); + return nullptr; + } + + std::string err; + doc = xml::Inflate(data->data(), data->size(), &err); + if (!doc) { + diag->Error(DiagMessage() << "failed to parse file as binary XML: " << err); + return nullptr; + } + } + + return doc; +} + ApkFormat LoadedApk::DetermineApkFormat(io::IFileCollection* apk) { if (apk->FindFile(kApkResourceTablePath) != nullptr) { return ApkFormat::kBinary; diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h index 41f879d0cdc3..dcb085aa2b0b 100644 --- a/tools/aapt2/LoadedApk.h +++ b/tools/aapt2/LoadedApk.h @@ -70,6 +70,10 @@ class LoadedApk { return apk_.get(); } + ApkFormat GetApkFormat() { + return format_; + } + const ResourceTable* GetResourceTable() const { return table_.get(); } @@ -106,6 +110,8 @@ class LoadedApk { const TableFlattenerOptions& options, FilterChain* filters, IArchiveWriter* writer, xml::XmlResource* manifest = nullptr); + /** Loads the file as an xml document. */ + std::unique_ptr<xml::XmlResource> LoadXml(const std::string& file_path, IDiagnostics* diag); private: DISALLOW_COPY_AND_ASSIGN(LoadedApk); diff --git a/tools/aapt2/Main.cpp b/tools/aapt2/Main.cpp index 23903c9e05f3..37013c07ffef 100644 --- a/tools/aapt2/Main.cpp +++ b/tools/aapt2/Main.cpp @@ -71,7 +71,7 @@ class MainCommand : public Command { explicit MainCommand(IDiagnostics* diagnostics) : Command("aapt2"), diagnostics_(diagnostics) { AddOptionalSubcommand(util::make_unique<CompileCommand>(diagnostics)); AddOptionalSubcommand(util::make_unique<LinkCommand>(diagnostics)); - AddOptionalSubcommand(util::make_unique<DumpCommand>()); + AddOptionalSubcommand(util::make_unique<DumpCommand>(diagnostics)); AddOptionalSubcommand(util::make_unique<DiffCommand>()); AddOptionalSubcommand(util::make_unique<OptimizeCommand>()); AddOptionalSubcommand(util::make_unique<ConvertCommand>()); diff --git a/tools/aapt2/Resource.cpp b/tools/aapt2/Resource.cpp index b78f48ce7f17..ae01170a6894 100644 --- a/tools/aapt2/Resource.cpp +++ b/tools/aapt2/Resource.cpp @@ -96,6 +96,8 @@ StringPiece to_string(ResourceType type) { return "styleable"; case ResourceType::kTransition: return "transition"; + case ResourceType::kUnknown: + return "unknown"; case ResourceType::kXml: return "xml"; } diff --git a/tools/aapt2/Resource.h b/tools/aapt2/Resource.h index 6fcf0f6d19cd..879d0bd8d94e 100644 --- a/tools/aapt2/Resource.h +++ b/tools/aapt2/Resource.h @@ -66,6 +66,11 @@ enum class ResourceType { kStyle, kStyleable, kTransition, + + // Not a parsed type. It is only used when loading resource tables that may have modified type + // names + kUnknown, + kXml, }; diff --git a/tools/aapt2/ResourceTable.cpp b/tools/aapt2/ResourceTable.cpp index d0faac30425a..58b5e8f0212c 100644 --- a/tools/aapt2/ResourceTable.cpp +++ b/tools/aapt2/ResourceTable.cpp @@ -26,6 +26,7 @@ #include "androidfw/ResourceTypes.h" #include "ConfigDescription.h" +#include "Debug.h" #include "NameMangler.h" #include "ResourceValues.h" #include "ValueVisitor.h" @@ -38,8 +39,9 @@ using ::android::base::StringPrintf; namespace aapt { -static bool less_than_type(const std::unique_ptr<ResourceTableType>& lhs, ResourceType rhs) { - return lhs->type < rhs; +static bool less_than_type_and_id(const std::unique_ptr<ResourceTableType>& lhs, + const std::pair<ResourceType, Maybe<uint8_t>>& rhs) { + return lhs->type < rhs.first || (lhs->type == rhs.first && rhs.second && lhs->id < rhs.second); } template <typename T> @@ -51,7 +53,7 @@ template <typename T> static bool less_than_struct_with_name_and_id(const std::unique_ptr<T>& lhs, const std::pair<StringPiece, Maybe<uint8_t>>& rhs) { int name_cmp = lhs->name.compare(0, lhs->name.size(), rhs.first.data(), rhs.first.size()); - return name_cmp < 0 || (name_cmp == 0 && lhs->id < rhs.second); + return name_cmp < 0 || (name_cmp == 0 && rhs.second && lhs->id < rhs.second); } ResourceTablePackage* ResourceTable::FindPackage(const StringPiece& name) const { @@ -115,42 +117,52 @@ ResourceTablePackage* ResourceTable::FindOrCreatePackage(const StringPiece& name return packages.emplace(iter, std::move(new_package))->get(); } -ResourceTableType* ResourceTablePackage::FindType(ResourceType type) { +ResourceTableType* ResourceTablePackage::FindType(ResourceType type, const Maybe<uint8_t> id) { const auto last = types.end(); - auto iter = std::lower_bound(types.begin(), last, type, less_than_type); - if (iter != last && (*iter)->type == type) { + auto iter = std::lower_bound(types.begin(), last, std::make_pair(type, id), + less_than_type_and_id); + if (iter != last && (*iter)->type == type && (!id || id == (*iter)->id)) { return iter->get(); } return nullptr; } -ResourceTableType* ResourceTablePackage::FindOrCreateType(ResourceType type) { +ResourceTableType* ResourceTablePackage::FindOrCreateType(ResourceType type, + const Maybe<uint8_t> id) { const auto last = types.end(); - auto iter = std::lower_bound(types.begin(), last, type, less_than_type); - if (iter != last && (*iter)->type == type) { + auto iter = std::lower_bound(types.begin(), last, std::make_pair(type, id), + less_than_type_and_id); + if (iter != last && (*iter)->type == type && (!id || id == (*iter)->id)) { return iter->get(); } - return types.emplace(iter, new ResourceTableType(type))->get(); + + auto new_type = new ResourceTableType(type); + new_type->id = id; + return types.emplace(iter, std::move(new_type))->get(); } -ResourceEntry* ResourceTableType::FindEntry(const StringPiece& name) { +ResourceEntry* ResourceTableType::FindEntry(const StringPiece& name, const Maybe<uint8_t> id) { const auto last = entries.end(); - auto iter = - std::lower_bound(entries.begin(), last, name, less_than_struct_with_name<ResourceEntry>); - if (iter != last && name == (*iter)->name) { + auto iter = std::lower_bound(entries.begin(), last, std::make_pair(name, id), + less_than_struct_with_name_and_id<ResourceEntry>); + if (iter != last && name == (*iter)->name && (!id || id == (*iter)->id)) { return iter->get(); } return nullptr; } -ResourceEntry* ResourceTableType::FindOrCreateEntry(const StringPiece& name) { +ResourceEntry* ResourceTableType::FindOrCreateEntry(const StringPiece& name, + const Maybe<uint8_t> id) { auto last = entries.end(); - auto iter = - std::lower_bound(entries.begin(), last, name, less_than_struct_with_name<ResourceEntry>); - if (iter != last && name == (*iter)->name) { + auto iter = std::lower_bound(entries.begin(), last, std::make_pair(name, id), + less_than_struct_with_name_and_id<ResourceEntry>); + if (iter != last && name == (*iter)->name && (!id || id == (*iter)->id)) { return iter->get(); } - return entries.emplace(iter, new ResourceEntry(name))->get(); + + auto new_entry = new ResourceEntry(name); + new_entry->id = id; + return entries.emplace(iter, std::move(new_entry))->get(); } ResourceConfigValue* ResourceEntry::FindValue(const ConfigDescription& config) { @@ -302,9 +314,15 @@ ResourceTable::CollisionResult ResourceTable::ResolveValueCollision(Value* exist // Keep the existing attribute. return CollisionResult::kKeepOriginal; } + return CollisionResult::kConflict; } +ResourceTable::CollisionResult ResourceTable::IgnoreCollision(Value* /** existing **/, + Value* /** incoming **/) { + return CollisionResult::kKeepBoth; +} + static StringPiece ResourceNameValidator(const StringPiece& name) { if (!IsValidResourceEntryName(name)) { return name; @@ -321,15 +339,17 @@ bool ResourceTable::AddResource(const ResourceNameRef& name, const StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag) { - return AddResourceImpl(name, {}, config, product, std::move(value), ResourceNameValidator, - ResolveValueCollision, diag); + return AddResourceImpl(name, ResourceId{}, config, product, std::move(value), + (validate_resources_ ? ResourceNameValidator : SkipNameValidator), + (validate_resources_ ? ResolveValueCollision : IgnoreCollision), diag); } bool ResourceTable::AddResourceWithId(const ResourceNameRef& name, const ResourceId& res_id, const ConfigDescription& config, const StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag) { - return AddResourceImpl(name, res_id, config, product, std::move(value), ResourceNameValidator, - ResolveValueCollision, diag); + return AddResourceImpl(name, res_id, config, product, std::move(value), + (validate_resources_ ? ResourceNameValidator : SkipNameValidator), + (validate_resources_ ? ResolveValueCollision : IgnoreCollision), diag); } bool ResourceTable::AddFileReference(const ResourceNameRef& name, @@ -337,14 +357,18 @@ bool ResourceTable::AddFileReference(const ResourceNameRef& name, const Source& source, const StringPiece& path, IDiagnostics* diag) { - return AddFileReferenceImpl(name, config, source, path, nullptr, ResourceNameValidator, diag); + return AddFileReferenceImpl(name, config, source, path, nullptr, + (validate_resources_ ? ResourceNameValidator : SkipNameValidator), + diag); } bool ResourceTable::AddFileReferenceMangled(const ResourceNameRef& name, const ConfigDescription& config, const Source& source, const StringPiece& path, io::IFile* file, IDiagnostics* diag) { - return AddFileReferenceImpl(name, config, source, path, file, SkipNameValidator, diag); + return AddFileReferenceImpl(name, config, source, path, file, + (validate_resources_ ? ResourceNameValidator : SkipNameValidator), + diag); } bool ResourceTable::AddFileReferenceImpl(const ResourceNameRef& name, @@ -363,7 +387,7 @@ bool ResourceTable::AddResourceMangled(const ResourceNameRef& name, const Config const StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag) { return AddResourceImpl(name, ResourceId{}, config, product, std::move(value), SkipNameValidator, - ResolveValueCollision, diag); + (validate_resources_ ? ResolveValueCollision : IgnoreCollision), diag); } bool ResourceTable::AddResourceWithIdMangled(const ResourceNameRef& name, const ResourceId& id, @@ -371,7 +395,7 @@ bool ResourceTable::AddResourceWithIdMangled(const ResourceNameRef& name, const const StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag) { return AddResourceImpl(name, id, config, product, std::move(value), SkipNameValidator, - ResolveValueCollision, diag); + (validate_resources_ ? ResolveValueCollision : IgnoreCollision), diag); } bool ResourceTable::ValidateName(NameValidator name_validator, const ResourceNameRef& name, @@ -398,37 +422,57 @@ bool ResourceTable::AddResourceImpl(const ResourceNameRef& name, const ResourceI return false; } + // Check for package names appearing twice with two different package ids ResourceTablePackage* package = FindOrCreatePackage(name.package); if (res_id.is_valid_dynamic() && package->id && package->id.value() != res_id.package_id()) { - diag->Error(DiagMessage(source) << "trying to add resource '" << name << "' with ID " << res_id - << " but package '" << package->name << "' already has ID " - << StringPrintf("%02x", package->id.value())); + diag->Error(DiagMessage(source) + << "trying to add resource '" << name << "' with ID " << res_id + << " but package '" << package->name << "' already has ID " + << StringPrintf("%02x", package->id.value())); return false; } - ResourceTableType* type = package->FindOrCreateType(name.type); - if (res_id.is_valid_dynamic() && type->id && type->id.value() != res_id.type_id()) { + // Whether or not to error on duplicate resources + bool check_id = validate_resources_ && res_id.is_valid_dynamic(); + // Whether or not to create a duplicate resource if the id does not match + bool use_id = !validate_resources_ && res_id.is_valid_dynamic(); + + ResourceTableType* type = package->FindOrCreateType(name.type, use_id ? res_id.type_id() + : Maybe<uint8_t>()); + + // Check for types appearing twice with two different type ids + if (check_id && type->id && type->id.value() != res_id.type_id()) { diag->Error(DiagMessage(source) - << "trying to add resource '" << name << "' with ID " << res_id << " but type '" - << type->type << "' already has ID " << StringPrintf("%02x", type->id.value())); + << "trying to add resource '" << name << "' with ID " << res_id + << " but type '" << type->type << "' already has ID " + << StringPrintf("%02x", type->id.value())); return false; } - ResourceEntry* entry = type->FindOrCreateEntry(name.entry); - if (res_id.is_valid_dynamic() && entry->id && entry->id.value() != res_id.entry_id()) { + ResourceEntry* entry = type->FindOrCreateEntry(name.entry, use_id ? res_id.entry_id() + : Maybe<uint8_t>()); + + // Check for entries appearing twice with two different entry ids + if (check_id && entry->id && entry->id.value() != res_id.entry_id()) { diag->Error(DiagMessage(source) - << "trying to add resource '" << name << "' with ID " << res_id - << " but resource already has ID " - << ResourceId(package->id.value(), type->id.value(), entry->id.value())); + << "trying to add resource '" << name << "' with ID " << res_id + << " but resource already has ID " + << ResourceId(package->id.value(), type->id.value(), entry->id.value())); return false; } ResourceConfigValue* config_value = entry->FindOrCreateValue(config, product); - if (config_value->value == nullptr) { + if (!config_value->value) { // Resource does not exist, add it now. config_value->value = std::move(value); } else { switch (conflict_resolver(config_value->value.get(), value.get())) { + case CollisionResult::kKeepBoth: + // Insert the value ignoring for duplicate configurations + entry->values.push_back(util::make_unique<ResourceConfigValue>(config, product)); + entry->values.back()->value = std::move(value); + break; + case CollisionResult::kTakeNew: // Take the incoming value. config_value->value = std::move(value); @@ -450,17 +494,22 @@ bool ResourceTable::AddResourceImpl(const ResourceNameRef& name, const ResourceI type->id = res_id.type_id(); entry->id = res_id.entry_id(); } + return true; } +bool ResourceTable::GetValidateResources() { + return validate_resources_; +} + bool ResourceTable::SetVisibility(const ResourceNameRef& name, const Visibility& visibility, IDiagnostics* diag) { - return SetVisibilityImpl(name, visibility, ResourceId{}, ResourceNameValidator, diag); + return SetVisibilityImpl(name, visibility, {}, ResourceNameValidator, diag); } bool ResourceTable::SetVisibilityMangled(const ResourceNameRef& name, const Visibility& visibility, IDiagnostics* diag) { - return SetVisibilityImpl(name, visibility, ResourceId{}, SkipNameValidator, diag); + return SetVisibilityImpl(name, visibility, {}, SkipNameValidator, diag); } bool ResourceTable::SetVisibilityWithId(const ResourceNameRef& name, const Visibility& visibility, @@ -484,28 +533,42 @@ bool ResourceTable::SetVisibilityImpl(const ResourceNameRef& name, const Visibil return false; } + // Check for package names appearing twice with two different package ids ResourceTablePackage* package = FindOrCreatePackage(name.package); if (res_id.is_valid_dynamic() && package->id && package->id.value() != res_id.package_id()) { - diag->Error(DiagMessage(source) << "trying to add resource '" << name << "' with ID " << res_id - << " but package '" << package->name << "' already has ID " - << StringPrintf("%02x", package->id.value())); + diag->Error(DiagMessage(source) + << "trying to add resource '" << name << "' with ID " << res_id + << " but package '" << package->name << "' already has ID " + << StringPrintf("%02x", package->id.value())); return false; } - ResourceTableType* type = package->FindOrCreateType(name.type); - if (res_id.is_valid_dynamic() && type->id && type->id.value() != res_id.type_id()) { + // Whether or not to error on duplicate resources + bool check_id = validate_resources_ && res_id.is_valid_dynamic(); + // Whether or not to create a duplicate resource if the id does not match + bool use_id = !validate_resources_ && res_id.is_valid_dynamic(); + + ResourceTableType* type = package->FindOrCreateType(name.type, use_id ? res_id.type_id() + : Maybe<uint8_t>()); + + // Check for types appearing twice with two different type ids + if (check_id && type->id && type->id.value() != res_id.type_id()) { diag->Error(DiagMessage(source) - << "trying to add resource '" << name << "' with ID " << res_id << " but type '" - << type->type << "' already has ID " << StringPrintf("%02x", type->id.value())); + << "trying to add resource '" << name << "' with ID " << res_id + << " but type '" << type->type << "' already has ID " + << StringPrintf("%02x", type->id.value())); return false; } - ResourceEntry* entry = type->FindOrCreateEntry(name.entry); - if (res_id.is_valid_dynamic() && entry->id && entry->id.value() != res_id.entry_id()) { + ResourceEntry* entry = type->FindOrCreateEntry(name.entry, use_id ? res_id.entry_id() + : Maybe<uint8_t>()); + + // Check for entries appearing twice with two different entry ids + if (check_id && entry->id && entry->id.value() != res_id.entry_id()) { diag->Error(DiagMessage(source) - << "trying to add resource '" << name << "' with ID " << res_id - << " but resource already has ID " - << ResourceId(package->id.value(), type->id.value(), entry->id.value())); + << "trying to add resource '" << name << "' with ID " << res_id + << " but resource already has ID " + << ResourceId(package->id.value(), type->id.value(), entry->id.value())); return false; } diff --git a/tools/aapt2/ResourceTable.h b/tools/aapt2/ResourceTable.h index 8534eaaf0366..c40323c34f48 100644 --- a/tools/aapt2/ResourceTable.h +++ b/tools/aapt2/ResourceTable.h @@ -146,8 +146,9 @@ class ResourceTableType { explicit ResourceTableType(const ResourceType type) : type(type) {} - ResourceEntry* FindEntry(const android::StringPiece& name); - ResourceEntry* FindOrCreateEntry(const android::StringPiece& name); + ResourceEntry* FindEntry(const android::StringPiece& name, Maybe<uint8_t> id = Maybe<uint8_t>()); + ResourceEntry* FindOrCreateEntry(const android::StringPiece& name, + Maybe<uint8_t> id = Maybe<uint8_t>()); private: DISALLOW_COPY_AND_ASSIGN(ResourceTableType); @@ -163,8 +164,9 @@ class ResourceTablePackage { std::vector<std::unique_ptr<ResourceTableType>> types; ResourceTablePackage() = default; - ResourceTableType* FindType(ResourceType type); - ResourceTableType* FindOrCreateType(const ResourceType type); + ResourceTableType* FindType(ResourceType type, Maybe<uint8_t> id = Maybe<uint8_t>()); + ResourceTableType* FindOrCreateType(const ResourceType type, + Maybe<uint8_t> id = Maybe<uint8_t>()); private: DISALLOW_COPY_AND_ASSIGN(ResourceTablePackage); @@ -174,14 +176,18 @@ class ResourceTablePackage { class ResourceTable { public: ResourceTable() = default; + explicit ResourceTable(bool validate_resources) : validate_resources_(validate_resources) {} - enum class CollisionResult { kKeepOriginal, kConflict, kTakeNew }; + enum class CollisionResult { kKeepBoth, kKeepOriginal, kConflict, kTakeNew }; using CollisionResolverFunc = std::function<CollisionResult(Value*, Value*)>; // When a collision of resources occurs, this method decides which value to keep. static CollisionResult ResolveValueCollision(Value* existing, Value* incoming); + // When a collision of resources occurs, this method keeps both values + static CollisionResult IgnoreCollision(Value* existing, Value* incoming); + bool AddResource(const ResourceNameRef& name, const ConfigDescription& config, const android::StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag); @@ -208,6 +214,8 @@ class ResourceTable { const android::StringPiece& product, std::unique_ptr<Value> value, IDiagnostics* diag); + bool GetValidateResources(); + bool SetVisibility(const ResourceNameRef& name, const Visibility& visibility, IDiagnostics* diag); bool SetVisibilityMangled(const ResourceNameRef& name, const Visibility& visibility, IDiagnostics* diag); @@ -299,6 +307,9 @@ class ResourceTable { const Visibility& symbol, NameValidator name_validator, IDiagnostics* diag); + // Controls whether the table validates resource names and prevents duplicate resource names + bool validate_resources_ = true; + DISALLOW_COPY_AND_ASSIGN(ResourceTable); }; diff --git a/tools/aapt2/SdkConstants.cpp b/tools/aapt2/SdkConstants.cpp index 8ebde752bc4b..f4b0124abcda 100644 --- a/tools/aapt2/SdkConstants.cpp +++ b/tools/aapt2/SdkConstants.cpp @@ -25,8 +25,8 @@ using android::StringPiece; namespace aapt { -static const char* sDevelopmentSdkCodeName = "P"; -static ApiVersion sDevelopmentSdkLevel = 28; +static const char* sDevelopmentSdkCodeName = "Q"; +static ApiVersion sDevelopmentSdkLevel = 10000; static const std::vector<std::pair<uint16_t, ApiVersion>> sAttrIdMap = { {0x021c, 1}, @@ -54,6 +54,7 @@ static const std::vector<std::pair<uint16_t, ApiVersion>> sAttrIdMap = { {0x0530, SDK_NOUGAT_MR1}, {0x0568, SDK_O}, {0x056d, SDK_O_MR1}, + {0x0586, SDK_P}, }; static bool less_entry_id(const std::pair<uint16_t, ApiVersion>& p, uint16_t entryId) { diff --git a/tools/aapt2/Source.h b/tools/aapt2/Source.h index 0f312d6998f1..92934c343960 100644 --- a/tools/aapt2/Source.h +++ b/tools/aapt2/Source.h @@ -31,12 +31,16 @@ namespace aapt { struct Source { std::string path; Maybe<size_t> line; + Maybe<std::string> archive; Source() = default; inline Source(const android::StringPiece& path) : path(path.to_string()) { // NOLINT(implicit) } + inline Source(const android::StringPiece& path, const android::StringPiece& archive) + : path(path.to_string()), archive(archive.to_string()) {} + inline Source(const android::StringPiece& path, size_t line) : path(path.to_string()), line(line) {} @@ -45,10 +49,14 @@ struct Source { } std::string to_string() const { + std::string s = path; + if (archive) { + s = ::android::base::StringPrintf("%s@%s", archive.value().c_str(), s.c_str()); + } if (line) { - return ::android::base::StringPrintf("%s:%zd", path.c_str(), line.value()); + s = ::android::base::StringPrintf("%s:%zd", s.c_str(), line.value()); } - return path; + return s; } }; diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp index 2ba2cf7926b0..62c19fbfcdd3 100644 --- a/tools/aapt2/cmd/Compile.cpp +++ b/tools/aapt2/cmd/Compile.cpp @@ -41,8 +41,10 @@ #include "format/proto/ProtoSerialize.h" #include "io/BigBufferStream.h" #include "io/FileStream.h" +#include "io/FileSystem.h" #include "io/StringStream.h" #include "io/Util.h" +#include "io/ZipArchive.h" #include "util/Files.h" #include "util/Maybe.h" #include "util/Util.h" @@ -135,81 +137,20 @@ static std::string BuildIntermediateContainerFilename(const ResourcePathData& da return name.str(); } -static bool IsHidden(const StringPiece& filename) { - return util::StartsWith(filename, "."); -} - -// Walks the res directory structure, looking for resource files. -static bool LoadInputFilesFromDir(IAaptContext* context, const CompileOptions& options, - std::vector<ResourcePathData>* out_path_data) { - const std::string& root_dir = options.res_dir.value(); - std::unique_ptr<DIR, decltype(closedir)*> d(opendir(root_dir.data()), closedir); - if (!d) { - context->GetDiagnostics()->Error(DiagMessage(root_dir) << "failed to open directory: " - << SystemErrorCodeToString(errno)); - return false; - } - - while (struct dirent* entry = readdir(d.get())) { - if (IsHidden(entry->d_name)) { - continue; - } - - std::string prefix_path = root_dir; - file::AppendPath(&prefix_path, entry->d_name); - - if (file::GetFileType(prefix_path) != file::FileType::kDirectory) { - continue; - } - - std::unique_ptr<DIR, decltype(closedir)*> subdir(opendir(prefix_path.data()), closedir); - if (!subdir) { - context->GetDiagnostics()->Error(DiagMessage(prefix_path) << "failed to open directory: " - << SystemErrorCodeToString(errno)); - return false; - } - - while (struct dirent* leaf_entry = readdir(subdir.get())) { - if (IsHidden(leaf_entry->d_name)) { - continue; - } - - std::string full_path = prefix_path; - file::AppendPath(&full_path, leaf_entry->d_name); - - std::string err_str; - Maybe<ResourcePathData> path_data = ExtractResourcePathData(full_path, &err_str); - if (!path_data) { - context->GetDiagnostics()->Error(DiagMessage(full_path) << err_str); - return false; - } - - out_path_data->push_back(std::move(path_data.value())); - } - } - - // File-system directory enumeration order is platform-dependent. Sort the result to remove any - // inconsistencies between platforms. - std::sort( - out_path_data->begin(), out_path_data->end(), - [](const ResourcePathData& a, const ResourcePathData& b) { return a.source < b.source; }); - return true; -} - static bool CompileTable(IAaptContext* context, const CompileOptions& options, - const ResourcePathData& path_data, IArchiveWriter* writer, + const ResourcePathData& path_data, io::IFile* file, IArchiveWriter* writer, const std::string& output_path) { ResourceTable table; { - FileInputStream fin(path_data.source.path); - if (fin.HadError()) { + auto fin = file->OpenInputStream(); + if (fin->HadError()) { context->GetDiagnostics()->Error(DiagMessage(path_data.source) - << "failed to open file: " << fin.GetError()); + << "failed to open file: " << fin->GetError()); return false; } // Parse the values file from XML. - xml::XmlPullParser xml_parser(&fin); + xml::XmlPullParser xml_parser(fin.get()); ResourceParserOptions parser_options; parser_options.error_on_positional_arguments = !options.legacy_mode; @@ -222,7 +163,7 @@ static bool CompileTable(IAaptContext* context, const CompileOptions& options, parser_options.visibility = options.visibility; ResourceParser res_parser(context->GetDiagnostics(), &table, path_data.source, path_data.config, - parser_options); + parser_options); if (!res_parser.Parse(&xml_parser)) { return false; } @@ -408,7 +349,7 @@ static bool IsValidFile(IAaptContext* context, const std::string& input_path) { } static bool CompileXml(IAaptContext* context, const CompileOptions& options, - const ResourcePathData& path_data, IArchiveWriter* writer, + const ResourcePathData& path_data, io::IFile* file, IArchiveWriter* writer, const std::string& output_path) { if (context->IsVerbose()) { context->GetDiagnostics()->Note(DiagMessage(path_data.source) << "compiling XML"); @@ -416,18 +357,17 @@ static bool CompileXml(IAaptContext* context, const CompileOptions& options, std::unique_ptr<xml::XmlResource> xmlres; { - FileInputStream fin(path_data.source.path); - if (fin.HadError()) { + auto fin = file->OpenInputStream(); + if (fin->HadError()) { context->GetDiagnostics()->Error(DiagMessage(path_data.source) - << "failed to open file: " << fin.GetError()); + << "failed to open file: " << fin->GetError()); return false; } - xmlres = xml::Inflate(&fin, context->GetDiagnostics(), path_data.source); - } - - if (!xmlres) { - return false; + xmlres = xml::Inflate(fin.get(), context->GetDiagnostics(), path_data.source); + if (!xmlres) { + return false; + } } xmlres->file.name = ResourceName({}, *ParseResourceType(path_data.resource_dir), path_data.name); @@ -508,7 +448,7 @@ static bool CompileXml(IAaptContext* context, const CompileOptions& options, } static bool CompilePng(IAaptContext* context, const CompileOptions& options, - const ResourcePathData& path_data, IArchiveWriter* writer, + const ResourcePathData& path_data, io::IFile* file, IArchiveWriter* writer, const std::string& output_path) { if (context->IsVerbose()) { context->GetDiagnostics()->Note(DiagMessage(path_data.source) << "compiling PNG"); @@ -522,15 +462,17 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options, res_file.type = ResourceFile::Type::kPng; { - std::string content; - if (!android::base::ReadFileToString(path_data.source.path, &content, - true /*follow_symlinks*/)) { - context->GetDiagnostics()->Error(DiagMessage(path_data.source) - << "failed to open file: " - << SystemErrorCodeToString(errno)); + auto data = file->OpenAsData(); + if (!data) { + context->GetDiagnostics()->Error(DiagMessage(path_data.source) << "failed to open file "); return false; } + // Read the file as a string + char buffer_2[data->size()]; + memcpy(&buffer_2, data->data(), data->size()); + StringPiece content(buffer_2, data->size()); + BigBuffer crunched_png_buffer(4096); io::BigBufferOutputStream crunched_png_buffer_out(&crunched_png_buffer); @@ -598,7 +540,7 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options, if (context->IsVerbose()) { // For debugging only, use the legacy PNG cruncher and compare the resulting file sizes. // This will help catch exotic cases where the new code may generate larger PNGs. - std::stringstream legacy_stream(content); + std::stringstream legacy_stream(content.to_string()); BigBuffer legacy_buffer(4096); Png png(context->GetDiagnostics()); if (!png.process(path_data.source, &legacy_stream, &legacy_buffer, {})) { @@ -612,41 +554,31 @@ static bool CompilePng(IAaptContext* context, const CompileOptions& options, } io::BigBufferInputStream buffer_in(&buffer); - if (!WriteHeaderAndDataToWriter(output_path, res_file, &buffer_in, writer, - context->GetDiagnostics())) { - return false; - } - return true; + return WriteHeaderAndDataToWriter(output_path, res_file, &buffer_in, writer, + context->GetDiagnostics()); } static bool CompileFile(IAaptContext* context, const CompileOptions& options, - const ResourcePathData& path_data, IArchiveWriter* writer, + const ResourcePathData& path_data, io::IFile* file, IArchiveWriter* writer, const std::string& output_path) { if (context->IsVerbose()) { context->GetDiagnostics()->Note(DiagMessage(path_data.source) << "compiling file"); } - BigBuffer buffer(256); ResourceFile res_file; res_file.name = ResourceName({}, *ParseResourceType(path_data.resource_dir), path_data.name); res_file.config = path_data.config; res_file.source = path_data.source; res_file.type = ResourceFile::Type::kUnknown; - std::string error_str; - Maybe<android::FileMap> f = file::MmapPath(path_data.source.path, &error_str); - if (!f) { - context->GetDiagnostics()->Error(DiagMessage(path_data.source) << "failed to mmap file: " - << error_str); + auto data = file->OpenAsData(); + if (!data) { + context->GetDiagnostics()->Error(DiagMessage(path_data.source) << "failed to open file "); return false; } - io::MmappedData mmapped_in(std::move(f.value())); - if (!WriteHeaderAndDataToWriter(output_path, res_file, &mmapped_in, writer, - context->GetDiagnostics())) { - return false; - } - return true; + return WriteHeaderAndDataToWriter(output_path, res_file, data.get(), writer, + context->GetDiagnostics()); } class CompileContext : public IAaptContext { @@ -701,6 +633,79 @@ class CompileContext : public IAaptContext { bool verbose_ = false; }; +int Compile(IAaptContext* context, io::IFileCollection* inputs, IArchiveWriter* output_writer, + CompileOptions& options) { + bool error = false; + + // Iterate over the input files in a stable, platform-independent manner + auto file_iterator = inputs->Iterator(); + while (file_iterator->HasNext()) { + auto file = file_iterator->Next(); + std::string path = file->GetSource().path; + + // Skip hidden input files + if (file::IsHidden(path)) { + continue; + } + + if (!options.res_zip && !IsValidFile(context, path)) { + error = true; + continue; + } + + // Extract resource type information from the full path + std::string err_str; + ResourcePathData path_data; + if (auto maybe_path_data = ExtractResourcePathData(path, &err_str)) { + path_data = maybe_path_data.value(); + } else { + context->GetDiagnostics()->Error(DiagMessage(file->GetSource()) << err_str); + error = true; + continue; + } + + // Determine how to compile the file based on its type. + auto compile_func = &CompileFile; + if (path_data.resource_dir == "values" && path_data.extension == "xml") { + compile_func = &CompileTable; + // We use a different extension (not necessary anymore, but avoids altering the existing + // build system logic). + path_data.extension = "arsc"; + + } else if (const ResourceType* type = ParseResourceType(path_data.resource_dir)) { + if (*type != ResourceType::kRaw) { + if (path_data.extension == "xml") { + compile_func = &CompileXml; + } else if ((!options.no_png_crunch && path_data.extension == "png") + || path_data.extension == "9.png") { + compile_func = &CompilePng; + } + } + } else { + context->GetDiagnostics()->Error(DiagMessage() + << "invalid file path '" << path_data.source << "'"); + error = true; + continue; + } + + // Treat periods as a reserved character that should not be present in a file name + // Legacy support for AAPT which did not reserve periods + if (compile_func != &CompileFile && !options.legacy_mode + && std::count(path_data.name.begin(), path_data.name.end(), '.') != 0) { + error = true; + context->GetDiagnostics()->Error(DiagMessage(file->GetSource()) + << "file name cannot contain '.' other than for" + << " specifying the extension"); + continue; + } + + const std::string out_path = BuildIntermediateContainerFilename(path_data); + error |= !compile_func(context, options, path_data, file, output_writer, out_path); + } + + return error ? 1 : 0; +} + int CompileCommand::Action(const std::vector<std::string>& args) { CompileContext context(diagnostic_); context.SetVerbose(options_.verbose); @@ -720,37 +725,55 @@ int CompileCommand::Action(const std::vector<std::string>& args) { } } + std::unique_ptr<io::IFileCollection> file_collection; std::unique_ptr<IArchiveWriter> archive_writer; - std::vector<ResourcePathData> input_data; - if (options_.res_dir) { + // Collect the resources files to compile + if (options_.res_dir && options_.res_zip) { + context.GetDiagnostics()->Error(DiagMessage() + << "only one of --dir and --zip can be specified"); + return 1; + } else if (options_.res_dir) { if (!args.empty()) { - // Can't have both files and a resource directory. context.GetDiagnostics()->Error(DiagMessage() << "files given but --dir specified"); Usage(&std::cerr); return 1; } - if (!LoadInputFilesFromDir(&context, options_, &input_data)) { + // Load the files from the res directory + std::string err; + file_collection = io::FileCollection::Create(options_.res_dir.value(), &err); + if (!file_collection) { + context.GetDiagnostics()->Error(DiagMessage(options_.res_dir.value()) << err); return 1; } archive_writer = CreateZipFileArchiveWriter(context.GetDiagnostics(), options_.output_path); + } else if (options_.res_zip) { + if (!args.empty()) { + context.GetDiagnostics()->Error(DiagMessage() << "files given but --zip specified"); + Usage(&std::cerr); + return 1; + } + // Load a zip file containing a res directory + std::string err; + file_collection = io::ZipFileCollection::Create(options_.res_zip.value(), &err); + if (!file_collection) { + context.GetDiagnostics()->Error(DiagMessage(options_.res_zip.value()) << err); + return 1; + } + + archive_writer = CreateZipFileArchiveWriter(context.GetDiagnostics(), options_.output_path); } else { - input_data.reserve(args.size()); + auto collection = util::make_unique<io::FileCollection>(); // Collect data from the path for each input file. for (const std::string& arg : args) { - std::string error_str; - if (Maybe<ResourcePathData> path_data = ExtractResourcePathData(arg, &error_str)) { - input_data.push_back(std::move(path_data.value())); - } else { - context.GetDiagnostics()->Error(DiagMessage() << error_str << " (" << arg << ")"); - return 1; - } + collection->InsertFile(arg); } + file_collection = std::move(collection); archive_writer = CreateDirectoryArchiveWriter(context.GetDiagnostics(), options_.output_path); } @@ -758,57 +781,7 @@ int CompileCommand::Action(const std::vector<std::string>& args) { return 1; } - bool error = false; - for (ResourcePathData& path_data : input_data) { - if (options_.verbose) { - context.GetDiagnostics()->Note(DiagMessage(path_data.source) << "processing"); - } - - if (!IsValidFile(&context, path_data.source.path)) { - error = true; - continue; - } - - // Determine how to compile the file based on its type. - auto compile_func = &CompileFile; - if (path_data.resource_dir == "values" && path_data.extension == "xml") { - compile_func = &CompileTable; - // We use a different extension (not necessary anymore, but avoids altering the existing - // build system logic). - path_data.extension = "arsc"; - - } else if (const ResourceType* type = ParseResourceType(path_data.resource_dir)) { - if (*type != ResourceType::kRaw) { - if (path_data.extension == "xml") { - compile_func = &CompileXml; - } else if ((!options_.no_png_crunch && path_data.extension == "png") - || path_data.extension == "9.png") { - compile_func = &CompilePng; - } - } - } else { - context.GetDiagnostics()->Error(DiagMessage() - << "invalid file path '" << path_data.source << "'"); - error = true; - continue; - } - - // Treat periods as a reserved character that should not be present in a file name - // Legacy support for AAPT which did not reserve periods - if (compile_func != &CompileFile && !options_.legacy_mode - && std::count(path_data.name.begin(), path_data.name.end(), '.') != 0) { - error = true; - context.GetDiagnostics()->Error(DiagMessage() << "resource file '" << path_data.source.path - << "' name cannot contain '.' other than for" - << "specifying the extension"); - continue; - } - - // Compile the file. - const std::string out_path = BuildIntermediateContainerFilename(path_data); - error |= !compile_func(&context, options_, path_data, archive_writer.get(), out_path); - } - return error ? 1 : 0; + return Compile(&context, file_collection.get(), archive_writer.get(), options_); } } // namespace aapt diff --git a/tools/aapt2/cmd/Compile.h b/tools/aapt2/cmd/Compile.h index 41519520fda1..c429d5f5d4b2 100644 --- a/tools/aapt2/cmd/Compile.h +++ b/tools/aapt2/cmd/Compile.h @@ -18,7 +18,8 @@ #define AAPT2_COMPILE_H #include "androidfw/StringPiece.h" - +#include "format/Archive.h" +#include "process/IResourceTableConsumer.h" #include "Command.h" #include "Diagnostics.h" #include "ResourceTable.h" @@ -28,6 +29,7 @@ namespace aapt { struct CompileOptions { std::string output_path; Maybe<std::string> res_dir; + Maybe<std::string> res_zip; Maybe<std::string> generate_text_symbols_path; Maybe<Visibility::Level> visibility; bool pseudolocalize = false; @@ -36,6 +38,7 @@ struct CompileOptions { bool verbose = false; }; +/** Parses flags and compiles resources to be used in linking. */ class CompileCommand : public Command { public: explicit CompileCommand(IDiagnostics* diagnostic) : Command("compile", "c"), @@ -43,6 +46,8 @@ class CompileCommand : public Command { SetDescription("Compiles resources to be linked into an apk."); AddRequiredFlag("-o", "Output path", &options_.output_path); AddOptionalFlag("--dir", "Directory to scan for resources", &options_.res_dir); + AddOptionalFlag("--zip", "Zip file containing the res directory to scan for resources", + &options_.res_zip); AddOptionalFlag("--output-text-symbols", "Generates a text file containing the resource symbols in the\n" "specified file", &options_.generate_text_symbols_path); @@ -51,10 +56,10 @@ class CompileCommand : public Command { AddOptionalSwitch("--no-crunch", "Disables PNG processing", &options_.no_png_crunch); AddOptionalSwitch("--legacy", "Treat errors that used to be valid in AAPT as warnings", &options_.legacy_mode); - AddOptionalSwitch("-v", "Enables verbose logging", &options_.verbose); AddOptionalFlag("--visibility", "Sets the visibility of the compiled resources to the specified\n" "level. Accepted levels: public, private, default", &visibility_); + AddOptionalSwitch("-v", "Enables verbose logging", &options_.verbose); } int Action(const std::vector<std::string>& args) override; @@ -65,6 +70,8 @@ class CompileCommand : public Command { Maybe<std::string> visibility_; }; +int Compile(IAaptContext* context, io::IFileCollection* inputs, + IArchiveWriter* output_writer, CompileOptions& options); }// namespace aapt #endif //AAPT2_COMPILE_H diff --git a/tools/aapt2/cmd/Compile_test.cpp b/tools/aapt2/cmd/Compile_test.cpp index d21addf4a081..dd5198ce86da 100644 --- a/tools/aapt2/cmd/Compile_test.cpp +++ b/tools/aapt2/cmd/Compile_test.cpp @@ -18,6 +18,7 @@ #include "android-base/file.h" #include "io/StringStream.h" +#include "io/ZipArchive.h" #include "java/AnnotationProcessor.h" #include "test/Test.h" @@ -29,7 +30,6 @@ int TestCompile(const std::string& path, const std::string& outDir, bool legacy, args.push_back(path); args.push_back("-o"); args.push_back(outDir); - args.push_back("-v"); if (legacy) { args.push_back("--legacy"); } @@ -94,4 +94,56 @@ TEST(CompilerTest, MultiplePeriods) { ASSERT_EQ(remove(path5_out.c_str()), 0); } -}
\ No newline at end of file +TEST(CompilerTest, DirInput) { + StdErrDiagnostics diag; + std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); + const std::string kResDir = android::base::Dirname(android::base::GetExecutablePath()) + + "/integration-tests/CompileTest/DirInput/res"; + const std::string kOutputFlata = android::base::Dirname(android::base::GetExecutablePath()) + + "/integration-tests/CompileTest/DirInput/compiled.flata"; + remove(kOutputFlata.c_str()); + + std::vector<android::StringPiece> args; + args.push_back("--dir"); + args.push_back(kResDir); + args.push_back("-o"); + args.push_back(kOutputFlata); + ASSERT_EQ(CompileCommand(&diag).Execute(args, &std::cerr), 0); + + // Check for the presence of the compiled files + std::string err; + std::unique_ptr<io::ZipFileCollection> zip = io::ZipFileCollection::Create(kOutputFlata, &err); + ASSERT_NE(zip, nullptr) << err; + ASSERT_NE(zip->FindFile("drawable_image.png.flat"), nullptr); + ASSERT_NE(zip->FindFile("layout_layout.xml.flat"), nullptr); + ASSERT_NE(zip->FindFile("values_values.arsc.flat"), nullptr); + ASSERT_EQ(remove(kOutputFlata.c_str()), 0); +} + +TEST(CompilerTest, ZipInput) { + StdErrDiagnostics diag; + std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); + const std::string kResZip = android::base::Dirname(android::base::GetExecutablePath()) + + "/integration-tests/CompileTest/ZipInput/res.zip"; + const std::string kOutputFlata = android::base::Dirname(android::base::GetExecutablePath()) + + "/integration-tests/CompileTest/ZipInput/compiled.flata"; + remove(kOutputFlata.c_str()); + + std::vector<android::StringPiece> args; + args.push_back("--zip"); + args.push_back(kResZip); + args.push_back("-o"); + args.push_back(kOutputFlata); + ASSERT_EQ(CompileCommand(&diag).Execute(args, &std::cerr), 0); + + // Check for the presence of the compiled files + std::string err; + std::unique_ptr<io::ZipFileCollection> zip = io::ZipFileCollection::Create(kOutputFlata, &err); + ASSERT_NE(zip, nullptr) << err; + ASSERT_NE(zip->FindFile("drawable_image.png.flat"), nullptr); + ASSERT_NE(zip->FindFile("layout_layout.xml.flat"), nullptr); + ASSERT_NE(zip->FindFile("values_values.arsc.flat"), nullptr); + ASSERT_EQ(remove(kOutputFlata.c_str()), 0); +} + +} // namespace aapt
\ No newline at end of file diff --git a/tools/aapt2/cmd/Convert.cpp b/tools/aapt2/cmd/Convert.cpp index d57eaa1ba145..86b1f4c54deb 100644 --- a/tools/aapt2/cmd/Convert.cpp +++ b/tools/aapt2/cmd/Convert.cpp @@ -105,10 +105,7 @@ bool ConvertApk(IAaptContext* context, unique_ptr<LoadedApk> apk, IApkSerializer std::unique_ptr<io::IFileCollectionIterator> iterator = apk->GetFileCollection()->Iterator(); while (iterator->HasNext()) { io::IFile* file = iterator->Next(); - std::string path = file->GetSource().path; - // The name of the path has the format "<zip-file-name>@<path-to-file>". - path = path.substr(path.find('@') + 1); // Manifest, resource table and resources have already been taken care of. if (path == kAndroidManifestPath || diff --git a/tools/aapt2/cmd/Dump.cpp b/tools/aapt2/cmd/Dump.cpp index 8b1f67204c22..b4311c56428b 100644 --- a/tools/aapt2/cmd/Dump.cpp +++ b/tools/aapt2/cmd/Dump.cpp @@ -24,8 +24,11 @@ #include "Debug.h" #include "Diagnostics.h" +#include "LoadedApk.h" +#include "Util.h" #include "format/Container.h" #include "format/binary/BinaryResourceParser.h" +#include "format/binary/XmlFlattener.h" #include "format/proto/ProtoDeserialize.h" #include "io/FileStream.h" #include "io/ZipArchive.h" @@ -70,184 +73,6 @@ static void DumpCompiledFile(const ResourceFile& file, const Source& source, off printer->Println(StringPrintf("Data: offset=%" PRIi64 " length=%zd", offset, len)); } -static bool DumpXmlFile(IAaptContext* context, io::IFile* file, bool proto, - text::Printer* printer) { - std::unique_ptr<xml::XmlResource> doc; - if (proto) { - std::unique_ptr<io::InputStream> in = file->OpenInputStream(); - if (in == nullptr) { - context->GetDiagnostics()->Error(DiagMessage() << "failed to open file"); - return false; - } - - io::ZeroCopyInputAdaptor adaptor(in.get()); - pb::XmlNode pb_node; - if (!pb_node.ParseFromZeroCopyStream(&adaptor)) { - context->GetDiagnostics()->Error(DiagMessage() << "failed to parse file as proto XML"); - return false; - } - - std::string err; - doc = DeserializeXmlResourceFromPb(pb_node, &err); - if (doc == nullptr) { - context->GetDiagnostics()->Error(DiagMessage() << "failed to deserialize proto XML"); - return false; - } - printer->Println("Proto XML"); - } else { - std::unique_ptr<io::IData> data = file->OpenAsData(); - if (data == nullptr) { - context->GetDiagnostics()->Error(DiagMessage() << "failed to open file"); - return false; - } - - std::string err; - doc = xml::Inflate(data->data(), data->size(), &err); - if (doc == nullptr) { - context->GetDiagnostics()->Error(DiagMessage() << "failed to parse file as binary XML"); - return false; - } - printer->Println("Binary XML"); - } - - Debug::DumpXml(*doc, printer); - return true; -} - -static bool TryDumpFile(IAaptContext* context, const std::string& file_path, - const DumpOptions& options) { - // Use a smaller buffer so that there is less latency for dumping to stdout. - constexpr size_t kStdOutBufferSize = 1024u; - io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); - Printer printer(&fout); - - std::string err; - std::unique_ptr<io::ZipFileCollection> zip = io::ZipFileCollection::Create(file_path, &err); - if (zip) { - ResourceTable table; - bool proto = false; - if (io::IFile* file = zip->FindFile("resources.pb")) { - proto = true; - - std::unique_ptr<io::IData> data = file->OpenAsData(); - if (data == nullptr) { - context->GetDiagnostics()->Error(DiagMessage(file_path) << "failed to open resources.pb"); - return false; - } - - pb::ResourceTable pb_table; - if (!pb_table.ParseFromArray(data->data(), data->size())) { - context->GetDiagnostics()->Error(DiagMessage(file_path) << "invalid resources.pb"); - return false; - } - - if (!DeserializeTableFromPb(pb_table, zip.get(), &table, &err)) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "failed to parse table: " << err); - return false; - } - } else if (io::IFile* file = zip->FindFile("resources.arsc")) { - std::unique_ptr<io::IData> data = file->OpenAsData(); - if (!data) { - context->GetDiagnostics()->Error(DiagMessage(file_path) << "failed to open resources.arsc"); - return false; - } - - BinaryResourceParser parser(context->GetDiagnostics(), &table, Source(file_path), - data->data(), data->size()); - if (!parser.Parse()) { - return false; - } - } - - if (!options.file_to_dump_path) { - if (proto) { - printer.Println("Proto APK"); - } else { - printer.Println("Binary APK"); - } - Debug::PrintTable(table, options.print_options, &printer); - return true; - } - - io::IFile* file = zip->FindFile(options.file_to_dump_path.value()); - if (file == nullptr) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "file '" << options.file_to_dump_path.value() - << "' not found in APK"); - return false; - } - return DumpXmlFile(context, file, proto, &printer); - } - - err.clear(); - - io::FileInputStream input(file_path); - if (input.HadError()) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "failed to open file: " << input.GetError()); - return false; - } - - // Try as a compiled file. - ContainerReader reader(&input); - if (reader.HadError()) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "failed to read container: " << reader.GetError()); - return false; - } - - printer.Println("AAPT2 Container (APC)"); - ContainerReaderEntry* entry; - while ((entry = reader.Next()) != nullptr) { - if (entry->Type() == ContainerEntryType::kResTable) { - printer.Println("kResTable"); - - pb::ResourceTable pb_table; - if (!entry->GetResTable(&pb_table)) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "failed to parse proto table: " << entry->GetError()); - continue; - } - - ResourceTable table; - err.clear(); - if (!DeserializeTableFromPb(pb_table, nullptr /*files*/, &table, &err)) { - context->GetDiagnostics()->Error(DiagMessage(file_path) - << "failed to parse table: " << err); - continue; - } - - printer.Indent(); - Debug::PrintTable(table, options.print_options, &printer); - printer.Undent(); - } else if (entry->Type() == ContainerEntryType::kResFile) { - printer.Println("kResFile"); - pb::internal::CompiledFile pb_compiled_file; - off64_t offset; - size_t length; - if (!entry->GetResFileOffsets(&pb_compiled_file, &offset, &length)) { - context->GetDiagnostics()->Error( - DiagMessage(file_path) << "failed to parse compiled proto file: " << entry->GetError()); - continue; - } - - ResourceFile file; - std::string error; - if (!DeserializeCompiledFileFromPb(pb_compiled_file, &file, &error)) { - context->GetDiagnostics()->Warn(DiagMessage(file_path) - << "failed to parse compiled file: " << error); - continue; - } - - printer.Indent(); - DumpCompiledFile(file, Source(file_path), offset, length, &printer); - printer.Undent(); - } - } - return true; -} - namespace { class DumpContext : public IAaptContext { @@ -299,17 +124,290 @@ class DumpContext : public IAaptContext { } // namespace -int DumpCommand::Action(const std::vector<std::string>& args) { +// Use a smaller buffer so that there is less latency for dumping to stdout. +constexpr size_t kStdOutBufferSize = 1024u; + +int DumpAPCCommand::Action(const std::vector<std::string>& args) { + DumpContext context; + DebugPrintTableOptions print_options; + print_options.show_sources = true; + print_options.show_values = !no_values_; + + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump container specified."); + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + for (auto container : args) { + io::FileInputStream input(container); + if (input.HadError()) { + context.GetDiagnostics()->Error(DiagMessage(container) + << "failed to open file: " << input.GetError()); + return false; + } + + // Try as a compiled file. + ContainerReader reader(&input); + if (reader.HadError()) { + context.GetDiagnostics()->Error(DiagMessage(container) + << "failed to read container: " << reader.GetError()); + return false; + } + + printer.Println("AAPT2 Container (APC)"); + ContainerReaderEntry* entry; + std::string error; + while ((entry = reader.Next()) != nullptr) { + if (entry->Type() == ContainerEntryType::kResTable) { + printer.Println("kResTable"); + + pb::ResourceTable pb_table; + if (!entry->GetResTable(&pb_table)) { + context.GetDiagnostics()->Error(DiagMessage(container) + << "failed to parse proto table: " + << entry->GetError()); + continue; + } + + ResourceTable table; + error.clear(); + if (!DeserializeTableFromPb(pb_table, nullptr /*files*/, &table, &error)) { + context.GetDiagnostics()->Error(DiagMessage(container) + << "failed to parse table: " << error); + continue; + } + + printer.Indent(); + Debug::PrintTable(table, print_options, &printer); + printer.Undent(); + } else if (entry->Type() == ContainerEntryType::kResFile) { + printer.Println("kResFile"); + pb::internal::CompiledFile pb_compiled_file; + off64_t offset; + size_t length; + if (!entry->GetResFileOffsets(&pb_compiled_file, &offset, &length)) { + context.GetDiagnostics()->Error( + DiagMessage(container) << "failed to parse compiled proto file: " + << entry->GetError()); + continue; + } + + ResourceFile file; + if (!DeserializeCompiledFileFromPb(pb_compiled_file, &file, &error)) { + context.GetDiagnostics()->Warn(DiagMessage(container) + << "failed to parse compiled file: " << error); + continue; + } + + printer.Indent(); + DumpCompiledFile(file, Source(container), offset, length, &printer); + printer.Undent(); + } + } + } + + return 0; +} + +int DumpConfigsCommand::Action(const std::vector<std::string>& args) { + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified."); + return 1; + } + + auto loaded_apk = LoadedApk::LoadApkFromPath(args[0], diag_); + if (!loaded_apk) { + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + // Comparison function used to order configurations + auto compare = [](ConfigDescription c1, ConfigDescription c2) -> bool { + return c1.compare(c2) < 0; + }; + + // Insert the configurations into a set in order to keep every configuarion seen + std::set<ConfigDescription, decltype(compare)> configs(compare); + for (auto& package : loaded_apk->GetResourceTable()->packages) { + for (auto& type : package->types) { + for (auto& entry : type->entries) { + for (auto& value : entry->values) { + configs.insert(value->config); + } + } + } + } + + // Print the configurations in order + for (auto& config : configs) { + printer.Print(StringPrintf("%s\n", config.to_string().data())); + } + + return 0; +} + +int DumpStringsCommand::Action(const std::vector<std::string>& args) { DumpContext context; - context.SetVerbose(verbose_); - options_.print_options.show_sources = true; - options_.print_options.show_values = !no_values_; - for (const std::string& arg : args) { - if (!TryDumpFile(&context, arg, options_)) { + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified."); + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + for (auto apk : args) { + auto loaded_apk = LoadedApk::LoadApkFromPath(apk, diag_); + if (!loaded_apk) { + return 1; + } + + // Load the run-time xml string pool using the flattened data + BigBuffer buffer(4096); + StringPool::FlattenUtf8(&buffer, loaded_apk->GetResourceTable()->string_pool, + context.GetDiagnostics()); + auto data = buffer.to_string(); + android::ResStringPool pool(data.data(), data.size(), false); + Debug::DumpResStringPool(&pool, &printer); + } + + return 0; +} + +int DumpTableCommand::Action(const std::vector<std::string>& args) { + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified."); + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + DebugPrintTableOptions print_options; + print_options.show_sources = true; + print_options.show_values = !no_values_; + + for (auto apk : args) { + auto loaded_apk = LoadedApk::LoadApkFromPath(apk, diag_); + if (!loaded_apk) { + return 1; + } + + if (loaded_apk->GetApkFormat()) { + printer.Println("Proto APK"); + } else { + printer.Println("Binary APK"); + } + + Debug::PrintTable(*loaded_apk->GetResourceTable(), print_options, &printer); + } + + return 0; +} + +int DumpXmlTreeCommand::Action(const std::vector<std::string>& args) { + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified"); + return 1; + } + + auto loaded_apk = LoadedApk::LoadApkFromPath(args[0], diag_); + if (!loaded_apk) { + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + // Dump the xml tree of every passed in file + for (auto file : files_) { + auto xml = loaded_apk->LoadXml(file, diag_); + if (!xml) { return 1; } + + Debug::DumpXml(*xml, &printer); + } + + return 0; +} + +int DumpXmlStringsCommand::Action(const std::vector<std::string>& args) { + DumpContext context; + if (args.size() < 1) { + diag_->Error(DiagMessage() << "No dump apk specified."); + return 1; + } + + auto loaded_apk = LoadedApk::LoadApkFromPath(args[0], diag_); + if (!loaded_apk) { + return 1; + } + + io::FileOutputStream fout(STDOUT_FILENO, kStdOutBufferSize); + Printer printer(&fout); + + // Dump the xml strings of every passed in file + for (auto xml_file : files_) { + android::ResXMLTree tree; + + if (loaded_apk->GetApkFormat() == kProto) { + auto xml = loaded_apk->LoadXml(xml_file, diag_); + if (!xml) { + return 1; + } + + // Flatten the xml document to get a binary representation of the proto xml file + BigBuffer buffer(4096); + XmlFlattenerOptions options = {}; + options.keep_raw_values = true; + XmlFlattener flattener(&buffer, options); + if (!flattener.Consume(&context, xml.get())) { + return 1; + } + + // Load the run-time xml tree using the flattened data + std::string data = buffer.to_string(); + tree.setTo(data.data(), data.size(), /** copyData */ true); + + } else if (loaded_apk->GetApkFormat() == kBinary) { + io::IFile* file = loaded_apk->GetFileCollection()->FindFile(xml_file); + if (!file) { + diag_->Error(DiagMessage(xml_file) << "file '" << xml_file << "' not found in APK"); + return 1; + } + + std::unique_ptr<io::IData> data = file->OpenAsData(); + if (!data) { + diag_->Error(DiagMessage() << "failed to open file"); + return 1; + } + + // Load the run-time xml tree from the file data + tree.setTo(data->data(), data->size(), /** copyData */ true); + } + + Debug::DumpResStringPool(&tree.getStrings(), &printer); } + return 0; } +/** Preform no action because a subcommand is required. */ +int DumpCommand::Action(const std::vector<std::string>& args) { + if (args.size() == 0) { + diag_->Error(DiagMessage() << "no subcommand specified"); + } else { + diag_->Error(DiagMessage() << "unknown subcommand '" << args[0] << "'"); + } + + Usage(&std::cerr); + return 1; +} + } // namespace aapt diff --git a/tools/aapt2/cmd/Dump.h b/tools/aapt2/cmd/Dump.h index 4893c8b76041..03a4fba133ba 100644 --- a/tools/aapt2/cmd/Dump.h +++ b/tools/aapt2/cmd/Dump.h @@ -22,33 +22,117 @@ namespace aapt { -struct DumpOptions { - DebugPrintTableOptions print_options; +/** Command the contents of files generated from the compilation stage. */ +class DumpAPCCommand : public Command { + public: + explicit DumpAPCCommand(IDiagnostics* diag) : Command("apc"), diag_(diag) { + SetDescription("Print the contents of the AAPT2 Container (APC) generated fom compilation."); + AddOptionalSwitch("--no-values", "Suppresses output of values when displaying resource tables.", + &no_values_); + AddOptionalSwitch("-v", "Enables verbose logging.", &verbose_); + } - // The path to a file within an APK to dump. - Maybe<std::string> file_to_dump_path; + int Action(const std::vector<std::string>& args) override; + + private: + IDiagnostics* diag_; + bool verbose_ = false; + bool no_values_ = false; }; -class DumpCommand : public Command { +/** Prints every configuration used by a resource in an APK. */ +class DumpConfigsCommand : public Command { public: - DumpCommand() : Command("dump", "d") { - SetDescription("Prints resource and manifest information."); - AddOptionalSwitch("--no-values", "Suppresses output of values when displaying resource tables.", - &no_values_); - AddOptionalFlag("--file", "Dumps the specified file from the APK passed as arg.", - &options_.file_to_dump_path); - AddOptionalSwitch("-v", "increase verbosity of output", &verbose_); + explicit DumpConfigsCommand(IDiagnostics* diag) : Command("configurations"), diag_(diag) { + SetDescription("Print every configuration used by a resource in the APK."); } int Action(const std::vector<std::string>& args) override; private: - DumpOptions options_; + IDiagnostics* diag_; +}; +/** Prints the contents of the resource table string pool in the APK. */ +class DumpStringsCommand : public Command { + public: + explicit DumpStringsCommand(IDiagnostics* diag) : Command("strings"), diag_(diag) { + SetDescription("Print the contents of the resource table string pool in the APK."); + } + + int Action(const std::vector<std::string>& args) override; + + private: + IDiagnostics* diag_; +}; + +/** Prints the contents of the resource table from the APK. */ +class DumpTableCommand : public Command { + public: + explicit DumpTableCommand(IDiagnostics* diag) : Command("resources"), diag_(diag) { + SetDescription("Print the contents of the resource table from the APK."); + AddOptionalSwitch("--no-values", "Suppresses output of values when displaying resource tables.", + &no_values_); + AddOptionalSwitch("-v", "Enables verbose logging.", &verbose_); + } + + int Action(const std::vector<std::string>& args) override; + + private: + IDiagnostics* diag_; bool verbose_ = false; bool no_values_ = false; }; +/** Prints the string pool of a compiled xml in an APK. */ +class DumpXmlStringsCommand : public Command { +public: + explicit DumpXmlStringsCommand(IDiagnostics* diag) : Command("xmlstrings"), diag_(diag) { + SetDescription("Print the string pool of a compiled xml in an APK."); + AddRequiredFlagList("--file", "A compiled xml file to print", &files_); + } + + int Action(const std::vector<std::string>& args) override; + +private: + IDiagnostics* diag_; + std::vector<std::string> files_; +}; + + +/** Prints the tree of a compiled xml in an APK. */ +class DumpXmlTreeCommand : public Command { + public: + explicit DumpXmlTreeCommand(IDiagnostics* diag) : Command("xmltree"), diag_(diag) { + SetDescription("Print the tree of a compiled xml in an APK."); + AddRequiredFlagList("--file", "A compiled xml file to print", &files_); + } + + int Action(const std::vector<std::string>& args) override; + + private: + IDiagnostics* diag_; + std::vector<std::string> files_; +}; + +/** The default dump command. Preforms no action because a subcommand is required. */ +class DumpCommand : public Command { + public: + explicit DumpCommand(IDiagnostics* diag) : Command("dump", "d"), diag_(diag) { + AddOptionalSubcommand(util::make_unique<DumpAPCCommand>(diag_)); + AddOptionalSubcommand(util::make_unique<DumpConfigsCommand>(diag_)); + AddOptionalSubcommand(util::make_unique<DumpStringsCommand>(diag_)); + AddOptionalSubcommand(util::make_unique<DumpTableCommand>(diag_)); + AddOptionalSubcommand(util::make_unique<DumpXmlStringsCommand>(diag_)); + AddOptionalSubcommand(util::make_unique<DumpXmlTreeCommand>(diag_)); + } + + int Action(const std::vector<std::string>& args) override; + + private: + IDiagnostics* diag_; +}; + }// namespace aapt #endif //AAPT2_DUMP_H diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp index c94b8473ea87..119f56a5013c 100644 --- a/tools/aapt2/cmd/Link.cpp +++ b/tools/aapt2/cmd/Link.cpp @@ -470,6 +470,10 @@ ResourceFile::Type XmlFileTypeForOutputFormat(OutputFormat format) { return ResourceFile::Type::kUnknown; } +static auto kDrawableVersions = std::map<std::string, ApiVersion>{ + { "adaptive-icon" , SDK_O }, +}; + bool ResourceFileFlattener::Flatten(ResourceTable* table, IArchiveWriter* archive_writer) { bool error = false; std::map<std::pair<ConfigDescription, StringPiece>, FileOperation> config_sorted_files; @@ -567,6 +571,20 @@ bool ResourceFileFlattener::Flatten(ResourceTable* table, IArchiveWriter* archiv FileOperation& file_op = map_entry.second; if (file_op.xml_to_flatten) { + // Check minimum sdk versions supported for drawables + auto drawable_entry = kDrawableVersions.find(file_op.xml_to_flatten->root->name); + if (drawable_entry != kDrawableVersions.end()) { + if (drawable_entry->second > context_->GetMinSdkVersion() + && drawable_entry->second > config.sdkVersion) { + context_->GetDiagnostics()->Error(DiagMessage(file_op.xml_to_flatten->file.source) + << "<" << drawable_entry->first << "> elements " + << "require a sdk version of at least " + << (int16_t) drawable_entry->second); + error = true; + continue; + } + } + std::vector<std::unique_ptr<xml::XmlResource>> versioned_docs = LinkAndVersionXmlFile(table, &file_op); if (versioned_docs.empty()) { diff --git a/tools/aapt2/configuration/ConfigurationParser_test.cpp b/tools/aapt2/configuration/ConfigurationParser_test.cpp index febbb2ed11a0..ccaea4e2a771 100644 --- a/tools/aapt2/configuration/ConfigurationParser_test.cpp +++ b/tools/aapt2/configuration/ConfigurationParser_test.cpp @@ -703,35 +703,24 @@ TEST_F(ConfigurationParserTest, AndroidSdkGroupAction_InvalidVersion) { } TEST_F(ConfigurationParserTest, AndroidSdkGroupAction_NonNumeric) { - static constexpr const char* xml = R"xml( + auto doc = test::BuildXmlDom(R"xml( <android-sdk - label="P" + label="Q" minSdkVersion="25" - targetSdkVersion="%s" - maxSdkVersion="%s"> - </android-sdk>)xml"; - - const auto& dev_sdk = GetDevelopmentSdkCodeNameAndVersion(); - const char* codename = dev_sdk.first.data(); - const ApiVersion& version = dev_sdk.second; - - auto doc = test::BuildXmlDom(StringPrintf(xml, codename, codename)); + targetSdkVersion="Q" + maxSdkVersion="Q"> + </android-sdk>)xml"); PostProcessingConfiguration config; - bool ok = AndroidSdkTagHandler(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); - ASSERT_TRUE(ok); - + ASSERT_TRUE(AndroidSdkTagHandler(&config, NodeCast<Element>(doc.get()->root.get()), &diag_)); ASSERT_EQ(1ul, config.android_sdks.size()); - ASSERT_EQ(1u, config.android_sdks.count("P")); - - auto& out = config.android_sdks["P"]; + ASSERT_EQ(1u, config.android_sdks.count("Q")); AndroidSdk sdk; sdk.min_sdk_version = 25; - sdk.target_sdk_version = version; - sdk.max_sdk_version = version; - - ASSERT_EQ(sdk, out); + sdk.target_sdk_version = 10000; + sdk.max_sdk_version = 10000; + ASSERT_EQ(sdk, config.android_sdks["Q"]); } TEST_F(ConfigurationParserTest, GlTextureGroupAction) { diff --git a/tools/aapt2/format/binary/BinaryResourceParser.cpp b/tools/aapt2/format/binary/BinaryResourceParser.cpp index 8215ddf0461c..3a39a6baeeeb 100644 --- a/tools/aapt2/format/binary/BinaryResourceParser.cpp +++ b/tools/aapt2/format/binary/BinaryResourceParser.cpp @@ -338,10 +338,13 @@ bool BinaryResourceParser::ParseType(const ResourceTablePackage* package, const std::string type_str = util::GetString(type_pool_, type->id - 1); - const ResourceType* parsed_type = ParseResourceType(type_str); - if (!parsed_type) { - diag_->Error(DiagMessage(source_) - << "invalid type name '" << type_str << "' for type with ID " << (int)type->id); + // Be lenient on the name of the type if the table is lenient on resource validation. + auto parsed_type = ResourceType::kUnknown; + if (const ResourceType* parsed = ParseResourceType(type_str)) { + parsed_type = *parsed; + } else if (table_->GetValidateResources()) { + diag_->Error(DiagMessage(source_) << "invalid type name '" << type_str << "' for type with ID " + << (int) type->id); return false; } @@ -352,7 +355,7 @@ bool BinaryResourceParser::ParseType(const ResourceTablePackage* package, continue; } - const ResourceName name(package->name, *parsed_type, + const ResourceName name(package->name, parsed_type, util::GetString(key_pool_, util::DeviceToHost32(entry->key.index))); const ResourceId res_id(package->id.value(), type->id, static_cast<uint16_t>(it.index())); diff --git a/tools/aapt2/integration-tests/CompileTest/DirInput/res/drawable/image.png b/tools/aapt2/integration-tests/CompileTest/DirInput/res/drawable/image.png Binary files differnew file mode 100644 index 000000000000..1a3731bbc8b8 --- /dev/null +++ b/tools/aapt2/integration-tests/CompileTest/DirInput/res/drawable/image.png diff --git a/tools/aapt2/integration-tests/CompileTest/DirInput/res/layout/layout.xml b/tools/aapt2/integration-tests/CompileTest/DirInput/res/layout/layout.xml new file mode 100644 index 000000000000..e5835ed1a169 --- /dev/null +++ b/tools/aapt2/integration-tests/CompileTest/DirInput/res/layout/layout.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<View xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" /> diff --git a/tools/aapt2/integration-tests/CompileTest/DirInput/res/values/values.xml b/tools/aapt2/integration-tests/CompileTest/DirInput/res/values/values.xml new file mode 100644 index 000000000000..62ab6526ef7e --- /dev/null +++ b/tools/aapt2/integration-tests/CompileTest/DirInput/res/values/values.xml @@ -0,0 +1,18 @@ +<?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> +</resources>
\ No newline at end of file diff --git a/tools/aapt2/integration-tests/CompileTest/ZipInput/res.zip b/tools/aapt2/integration-tests/CompileTest/ZipInput/res.zip Binary files differnew file mode 100644 index 000000000000..00e396d812c7 --- /dev/null +++ b/tools/aapt2/integration-tests/CompileTest/ZipInput/res.zip diff --git a/tools/aapt2/io/FileSystem.cpp b/tools/aapt2/io/FileSystem.cpp index 1387d2218ed4..16a20f4cb09d 100644 --- a/tools/aapt2/io/FileSystem.cpp +++ b/tools/aapt2/io/FileSystem.cpp @@ -16,6 +16,9 @@ #include "io/FileSystem.h" +#include <dirent.h> + +#include "android-base/errors.h" #include "androidfw/StringPiece.h" #include "utils/FileMap.h" @@ -26,6 +29,7 @@ #include "util/Util.h" using ::android::StringPiece; +using ::android::base::SystemErrorCodeToString; namespace aapt { namespace io { @@ -64,6 +68,50 @@ IFile* FileCollectionIterator::Next() { return result; } +std::unique_ptr<FileCollection> FileCollection::Create(const android::StringPiece& root, + std::string* outError) { + std::unique_ptr<FileCollection> collection = + std::unique_ptr<FileCollection>(new FileCollection()); + + std::unique_ptr<DIR, decltype(closedir) *> d(opendir(root.data()), closedir); + if (!d) { + *outError = "failed to open directory: " + SystemErrorCodeToString(errno); + return nullptr; + } + + while (struct dirent *entry = readdir(d.get())) { + std::string prefix_path = root.to_string(); + file::AppendPath(&prefix_path, entry->d_name); + + // The directory to iterate over looking for files + if (file::GetFileType(prefix_path) != file::FileType::kDirectory + || file::IsHidden(prefix_path)) { + continue; + } + + std::unique_ptr<DIR, decltype(closedir)*> subdir(opendir(prefix_path.data()), closedir); + if (!subdir) { + *outError = "failed to open directory: " + SystemErrorCodeToString(errno); + return nullptr; + } + + while (struct dirent* leaf_entry = readdir(subdir.get())) { + std::string full_path = prefix_path; + file::AppendPath(&full_path, leaf_entry->d_name); + + // Do not add folders to the file collection + if (file::GetFileType(full_path) == file::FileType::kDirectory + || file::IsHidden(full_path)) { + continue; + } + + collection->InsertFile(full_path); + } + } + + return collection; +} + IFile* FileCollection::InsertFile(const StringPiece& path) { return (files_[path.to_string()] = util::make_unique<RegularFile>(Source(path))).get(); } diff --git a/tools/aapt2/io/FileSystem.h b/tools/aapt2/io/FileSystem.h index 6be8807735f1..fb6bf6eeabbc 100644 --- a/tools/aapt2/io/FileSystem.h +++ b/tools/aapt2/io/FileSystem.h @@ -59,6 +59,10 @@ class FileCollection : public IFileCollection { public: FileCollection() = default; + /** Creates a file collection containing all files contained in the specified root directory. */ + static std::unique_ptr<FileCollection> Create(const android::StringPiece& path, + std::string* outError); + // Adds a file located at path. Returns the IFile representation of that file. IFile* InsertFile(const android::StringPiece& path); IFile* FindFile(const android::StringPiece& path) override; diff --git a/tools/aapt2/io/ZipArchive.cpp b/tools/aapt2/io/ZipArchive.cpp index 269b6c5a12e1..8e6d7137640a 100644 --- a/tools/aapt2/io/ZipArchive.cpp +++ b/tools/aapt2/io/ZipArchive.cpp @@ -20,6 +20,7 @@ #include "ziparchive/zip_archive.h" #include "Source.h" +#include "util/Files.h" #include "util/Util.h" using ::android::StringPiece; @@ -121,9 +122,14 @@ std::unique_ptr<ZipFileCollection> ZipFileCollection::Create( std::string zip_entry_path = std::string(reinterpret_cast<const char*>(zip_entry_name.name), zip_entry_name.name_length); - std::string nested_path = path.to_string() + "@" + zip_entry_path; - std::unique_ptr<IFile> file = - util::make_unique<ZipFile>(collection->handle_, zip_data, Source(nested_path)); + + // Do not add folders to the file collection + if (util::EndsWith(zip_entry_path, "/")) { + continue; + } + + std::unique_ptr<IFile> file = util::make_unique<ZipFile>(collection->handle_, zip_data, + Source(zip_entry_path, path.to_string())); collection->files_by_name_[zip_entry_path] = file.get(); collection->files_.push_back(std::move(file)); } @@ -132,6 +138,7 @@ std::unique_ptr<ZipFileCollection> ZipFileCollection::Create( if (out_error) *out_error = ErrorCodeString(result); return {}; } + return collection; } diff --git a/tools/aapt2/util/Files.cpp b/tools/aapt2/util/Files.cpp index 5a8ff0926483..7cd023bca369 100644 --- a/tools/aapt2/util/Files.cpp +++ b/tools/aapt2/util/Files.cpp @@ -149,6 +149,10 @@ StringPiece GetExtension(const StringPiece& path) { return {}; } +bool IsHidden(const android::StringPiece& path) { + return util::StartsWith(GetFilename(path), "."); +} + void AppendPath(std::string* base, StringPiece part) { CHECK(base != nullptr); const bool base_has_trailing_sep = (!base->empty() && *(base->end() - 1) == sDirSep); diff --git a/tools/aapt2/util/Files.h b/tools/aapt2/util/Files.h index b26e4fa26de6..219e1a07af95 100644 --- a/tools/aapt2/util/Files.h +++ b/tools/aapt2/util/Files.h @@ -70,6 +70,9 @@ android::StringPiece GetFilename(const android::StringPiece& path); // of the path. android::StringPiece GetExtension(const android::StringPiece& path); +// Returns whether or not the name of the file or directory is a hidden file name +bool IsHidden(const android::StringPiece& path); + // Converts a package name (com.android.app) to a path: com/android/app std::string PackageToPath(const android::StringPiece& package); diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index f210b61e9f71..3a4e88b49daf 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -17,6 +17,7 @@ package android.net.wifi; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -40,6 +41,7 @@ public class ScanResult implements Parcelable { /** * Ascii encoded SSID. This will replace SSID when we deprecate it. @hide */ + @UnsupportedAppUsage public WifiSsid wifiSsid; /** @@ -51,12 +53,14 @@ public class ScanResult implements Parcelable { * The HESSID from the beacon. * @hide */ + @UnsupportedAppUsage public long hessid; /** * The ANQP Domain ID from the Hotspot 2.0 Indication element, if present. * @hide */ + @UnsupportedAppUsage public int anqpDomainId; /* @@ -214,6 +218,7 @@ public class ScanResult implements Parcelable { * @deprecated use is80211mcResponder() instead * @hide */ + @UnsupportedAppUsage public boolean is80211McRTTResponder; /** @@ -226,6 +231,7 @@ public class ScanResult implements Parcelable { * Timestamp representing date when this result was last seen, in milliseconds from 1970 * {@hide} */ + @UnsupportedAppUsage public long seen; /** @@ -284,6 +290,7 @@ public class ScanResult implements Parcelable { * Number of time autojoin used it * @hide */ + @UnsupportedAppUsage public int numUsage; /** @@ -291,6 +298,7 @@ public class ScanResult implements Parcelable { * {@link UNSPECIFIED}. * {@hide} */ + @UnsupportedAppUsage public int distanceCm; /** @@ -298,6 +306,7 @@ public class ScanResult implements Parcelable { * Else {@link UNSPECIFIED}. * {@hide} */ + @UnsupportedAppUsage public int distanceSdCm; /** {@hide} */ @@ -314,6 +323,7 @@ public class ScanResult implements Parcelable { * Defines flags; such as {@link #FLAG_PASSPOINT_NETWORK}. * {@hide} */ + @UnsupportedAppUsage public long flags; /** @@ -391,29 +401,45 @@ public class ScanResult implements Parcelable { * @hide * anqp lines from supplicant BSS response */ + @UnsupportedAppUsage public List<String> anqpLines; /** information elements from beacon * @hide */ public static class InformationElement { + @UnsupportedAppUsage public static final int EID_SSID = 0; + @UnsupportedAppUsage public static final int EID_SUPPORTED_RATES = 1; + @UnsupportedAppUsage public static final int EID_TIM = 5; + @UnsupportedAppUsage public static final int EID_BSS_LOAD = 11; + @UnsupportedAppUsage public static final int EID_ERP = 42; public static final int EID_HT_CAPABILITIES = 45; + @UnsupportedAppUsage public static final int EID_RSN = 48; + @UnsupportedAppUsage public static final int EID_EXTENDED_SUPPORTED_RATES = 50; + @UnsupportedAppUsage public static final int EID_HT_OPERATION = 61; + @UnsupportedAppUsage public static final int EID_INTERWORKING = 107; + @UnsupportedAppUsage public static final int EID_ROAMING_CONSORTIUM = 111; + @UnsupportedAppUsage public static final int EID_EXTENDED_CAPS = 127; public static final int EID_VHT_CAPABILITIES = 191; + @UnsupportedAppUsage public static final int EID_VHT_OPERATION = 192; + @UnsupportedAppUsage public static final int EID_VSA = 221; + @UnsupportedAppUsage public int id; + @UnsupportedAppUsage public byte[] bytes; public InformationElement() { @@ -428,6 +454,7 @@ public class ScanResult implements Parcelable { /** information elements found in the beacon * @hide */ + @UnsupportedAppUsage public InformationElement[] informationElements; /** ANQP response elements. @@ -704,6 +731,7 @@ public class ScanResult implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<ScanResult> CREATOR = new Creator<ScanResult>() { public ScanResult createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 2918cf697dee..ce8d71d7ed2a 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -18,6 +18,7 @@ package android.net.wifi; import android.annotation.NonNull; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.pm.PackageManager; import android.net.IpConfiguration; import android.net.IpConfiguration.ProxySettings; @@ -61,6 +62,7 @@ public class WifiConfiguration implements Parcelable { public static final String pskVarName = "psk"; /** {@hide} */ @Deprecated + @UnsupportedAppUsage public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; /** {@hide} */ @Deprecated @@ -305,6 +307,7 @@ public class WifiConfiguration implements Parcelable { * By default, 2G is chosen * @hide */ + @UnsupportedAppUsage public int apBand = AP_BAND_2GHZ; /** @@ -314,6 +317,7 @@ public class WifiConfiguration implements Parcelable { * 0 - find a random available channel according to the apBand * @hide */ + @UnsupportedAppUsage public int apChannel = 0; /** @@ -438,12 +442,14 @@ public class WifiConfiguration implements Parcelable { * This network configuration is visible to and usable by other users on the * same device. */ + @UnsupportedAppUsage public boolean shared; /** * @hide */ @NonNull + @UnsupportedAppUsage private IpConfiguration mIpConfiguration; /** @@ -456,12 +462,14 @@ public class WifiConfiguration implements Parcelable { * @hide * default Gateway MAC address if known */ + @UnsupportedAppUsage public String defaultGwMacAddress; /** * @hide * last time we connected, this configuration had validated internet access */ + @UnsupportedAppUsage public boolean validatedInternetAccess; /** @@ -491,6 +499,7 @@ public class WifiConfiguration implements Parcelable { * @hide * Uid of last app issuing a connection related command */ + @UnsupportedAppUsage public int lastConnectUid; /** @@ -533,6 +542,7 @@ public class WifiConfiguration implements Parcelable { * the network we need to be before autojoin kicks in */ /** @hide **/ + @UnsupportedAppUsage public static int INVALID_RSSI = -127; // States for the userApproved field @@ -561,6 +571,7 @@ public class WifiConfiguration implements Parcelable { * @hide * Number of reports indicating no Internet Access */ + @UnsupportedAppUsage public int numNoInternetAccessReports; /** @@ -592,6 +603,7 @@ public class WifiConfiguration implements Parcelable { * this configuration and selects "don't ask again". * @hide */ + @UnsupportedAppUsage public boolean noInternetAccessExpected; /** @@ -624,6 +636,7 @@ public class WifiConfiguration implements Parcelable { * since we will now consider that the configuration belong to him. * @hide */ + @UnsupportedAppUsage public boolean selfAdded; /** @@ -1557,6 +1570,7 @@ public class WifiConfiguration implements Parcelable { * Helper function, idenfity if a configuration should be treated as an enterprise network * @hide */ + @UnsupportedAppUsage public boolean isEnterprise() { return (allowedKeyManagement.get(KeyMgmt.WPA_EAP) || allowedKeyManagement.get(KeyMgmt.IEEE8021X)) @@ -1740,6 +1754,7 @@ public class WifiConfiguration implements Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public String getPrintableSsid() { if (SSID == null) return ""; final int length = SSID.length(); @@ -1840,6 +1855,7 @@ public class WifiConfiguration implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public int getAuthType() { if (allowedKeyManagement.cardinality() > 1) { throw new IllegalStateException("More than one auth type set"); @@ -1902,42 +1918,50 @@ public class WifiConfiguration implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public IpConfiguration getIpConfiguration() { return mIpConfiguration; } /** @hide */ + @UnsupportedAppUsage public void setIpConfiguration(IpConfiguration ipConfiguration) { if (ipConfiguration == null) ipConfiguration = new IpConfiguration(); mIpConfiguration = ipConfiguration; } /** @hide */ + @UnsupportedAppUsage public StaticIpConfiguration getStaticIpConfiguration() { return mIpConfiguration.getStaticIpConfiguration(); } /** @hide */ + @UnsupportedAppUsage public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration); } /** @hide */ + @UnsupportedAppUsage public IpConfiguration.IpAssignment getIpAssignment() { return mIpConfiguration.ipAssignment; } /** @hide */ + @UnsupportedAppUsage public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) { mIpConfiguration.ipAssignment = ipAssignment; } /** @hide */ + @UnsupportedAppUsage public IpConfiguration.ProxySettings getProxySettings() { return mIpConfiguration.proxySettings; } /** @hide */ + @UnsupportedAppUsage public void setProxySettings(IpConfiguration.ProxySettings proxySettings) { mIpConfiguration.proxySettings = proxySettings; } @@ -1991,6 +2015,7 @@ public class WifiConfiguration implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setProxy(ProxySettings settings, ProxyInfo proxy) { mIpConfiguration.proxySettings = settings; mIpConfiguration.httpProxy = proxy; @@ -2012,6 +2037,7 @@ public class WifiConfiguration implements Parcelable { } /** copy constructor {@hide} */ + @UnsupportedAppUsage public WifiConfiguration(WifiConfiguration source) { if (source != null) { networkId = source.networkId; @@ -2149,6 +2175,7 @@ public class WifiConfiguration implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<WifiConfiguration> CREATOR = new Creator<WifiConfiguration>() { public WifiConfiguration createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java index 52f7a6042095..17847eaa0ca5 100644 --- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java +++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java @@ -16,6 +16,7 @@ package android.net.wifi; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.security.Credentials; @@ -139,6 +140,7 @@ public class WifiEnterpriseConfig implements Parcelable { */ private static final List<String> UNQUOTED_KEYS = Arrays.asList(ENGINE_KEY, OPP_KEY_CACHING); + @UnsupportedAppUsage private HashMap<String, String> mFields = new HashMap<String, String>(); private X509Certificate[] mCaCerts; private PrivateKey mClientPrivateKey; @@ -574,6 +576,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param alias identifies the certificate * @hide */ + @UnsupportedAppUsage public void setCaCertificateAlias(String alias) { setFieldValue(CA_CERT_KEY, alias, CA_CERT_PREFIX); } @@ -612,6 +615,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return alias to the CA certificate * @hide */ + @UnsupportedAppUsage public String getCaCertificateAlias() { return getFieldValue(CA_CERT_KEY, CA_CERT_PREFIX); } @@ -760,6 +764,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @param alias identifies the certificate * @hide */ + @UnsupportedAppUsage public void setClientCertificateAlias(String alias) { setFieldValue(CLIENT_CERT_KEY, alias, CLIENT_CERT_PREFIX); setFieldValue(PRIVATE_KEY_ID_KEY, alias, Credentials.USER_PRIVATE_KEY); @@ -778,6 +783,7 @@ public class WifiEnterpriseConfig implements Parcelable { * @return alias to the client certificate * @hide */ + @UnsupportedAppUsage public String getClientCertificateAlias() { return getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX); } diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index 3eb13ce6f8b1..1e03891019f6 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -16,6 +16,7 @@ package android.net.wifi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; import android.net.NetworkInfo.DetailedState; @@ -48,6 +49,7 @@ public class WifiInfo implements Parcelable { * * @hide */ + @UnsupportedAppUsage public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00"; static { @@ -67,11 +69,14 @@ public class WifiInfo implements Parcelable { } private SupplicantState mSupplicantState; + @UnsupportedAppUsage private String mBSSID; + @UnsupportedAppUsage private WifiSsid mWifiSsid; private int mNetworkId; /** @hide **/ + @UnsupportedAppUsage public static final int INVALID_RSSI = -127; /** @hide **/ @@ -98,7 +103,9 @@ public class WifiInfo implements Parcelable { public static final String FREQUENCY_UNITS = "MHz"; private int mFrequency; + @UnsupportedAppUsage private InetAddress mIpAddress; + @UnsupportedAppUsage private String mMacAddress = DEFAULT_MAC_ADDRESS; private boolean mEphemeral; @@ -148,6 +155,7 @@ public class WifiInfo implements Parcelable { /** * @hide */ + @UnsupportedAppUsage public int score; /** @@ -157,6 +165,7 @@ public class WifiInfo implements Parcelable { private boolean mMeteredHint; /** @hide */ + @UnsupportedAppUsage public WifiInfo() { mWifiSsid = null; mBSSID = null; @@ -248,11 +257,13 @@ public class WifiInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public WifiSsid getWifiSsid() { return mWifiSsid; } /** @hide */ + @UnsupportedAppUsage public void setBSSID(String BSSID) { mBSSID = BSSID; } @@ -280,6 +291,7 @@ public class WifiInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setRssi(int rssi) { if (rssi < INVALID_RSSI) rssi = INVALID_RSSI; @@ -298,6 +310,7 @@ public class WifiInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setLinkSpeed(int linkSpeed) { this.mLinkSpeed = linkSpeed; } @@ -328,6 +341,7 @@ public class WifiInfo implements Parcelable { * @hide * TODO: makes real freq boundaries */ + @UnsupportedAppUsage public boolean is5GHz() { return ScanResult.is5GHz(mFrequency); } @@ -337,6 +351,7 @@ public class WifiInfo implements Parcelable { * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form * @hide */ + @UnsupportedAppUsage public void setMacAddress(String macAddress) { this.mMacAddress = macAddress; } @@ -366,6 +381,7 @@ public class WifiInfo implements Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public boolean getMeteredHint() { return mMeteredHint; } @@ -376,11 +392,13 @@ public class WifiInfo implements Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public boolean isEphemeral() { return mEphemeral; } /** @hide */ + @UnsupportedAppUsage public void setNetworkId(int id) { mNetworkId = id; } @@ -405,6 +423,7 @@ public class WifiInfo implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setSupplicantState(SupplicantState state) { mSupplicantState = state; } @@ -446,6 +465,7 @@ public class WifiInfo implements Parcelable { * @param stateName the name of the state, as a <code>String</code> returned * in an event sent by {@code wpa_supplicant}. */ + @UnsupportedAppUsage void setSupplicantState(String stateName) { mSupplicantState = valueOf(stateName); } @@ -463,6 +483,7 @@ public class WifiInfo implements Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public static String removeDoubleQuotes(String string) { if (string == null) return null; final int length = string.length(); @@ -527,6 +548,7 @@ public class WifiInfo implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<WifiInfo> CREATOR = new Creator<WifiInfo>() { public WifiInfo createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index f16d006ff49d..f7de37034860 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -24,6 +24,7 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ParceledListSlice; import android.net.ConnectivityManager; @@ -776,6 +777,7 @@ public class WifiManager { * changed on wifi. * @hide */ + @UnsupportedAppUsage public static final String LINK_CONFIGURATION_CHANGED_ACTION = "android.net.wifi.LINK_CONFIGURATION_CHANGED"; @@ -891,9 +893,11 @@ public class WifiManager { public static final int WIFI_MODE_FULL_HIGH_PERF = 3; /** Anything worse than or equal to this will show 0 bars. */ + @UnsupportedAppUsage private static final int MIN_RSSI = -100; /** Anything better than or equal to this will show the max bars. */ + @UnsupportedAppUsage private static final int MAX_RSSI = -55; /** @@ -901,6 +905,7 @@ public class WifiManager { * {@link #RSSI_CHANGED_ACTION} broadcast * @hide */ + @UnsupportedAppUsage public static final int RSSI_LEVELS = 5; /** @@ -908,18 +913,21 @@ public class WifiManager { * 2.4 GHz and 5 GHz or make a dynamic decision on selecting the band. * @hide */ + @UnsupportedAppUsage public static final int WIFI_FREQUENCY_BAND_AUTO = 0; /** * Operation on 5 GHz alone * @hide */ + @UnsupportedAppUsage public static final int WIFI_FREQUENCY_BAND_5GHZ = 1; /** * Operation on 2.4 GHz alone * @hide */ + @UnsupportedAppUsage public static final int WIFI_FREQUENCY_BAND_2GHZ = 2; /** @hide */ @@ -932,9 +940,11 @@ public class WifiManager { private static final int MAX_ACTIVE_LOCKS = 50; /* Number of currently active WifiLocks and MulticastLocks */ + @UnsupportedAppUsage private int mActiveLockCount; private Context mContext; + @UnsupportedAppUsage IWifiManager mService; private final int mTargetSdkVersion; @@ -1036,6 +1046,7 @@ public class WifiManager { * @throws UnsupportedOperationException if Passpoint is not enabled on the device. * @hide */ + @UnsupportedAppUsage public WifiConfiguration getMatchingWifiConfig(ScanResult scanResult) { try { return mService.getMatchingWifiConfig(scanResult); @@ -1725,6 +1736,7 @@ public class WifiManager { * * @hide */ + @UnsupportedAppUsage public String getCountryCode() { try { String country = mService.getCountryCode(); @@ -1739,6 +1751,7 @@ public class WifiManager { * @return {@code true} if supported, {@code false} otherwise. * @hide */ + @UnsupportedAppUsage public boolean isDualBandSupported() { try { return mService.isDualBandSupported(); @@ -2004,6 +2017,7 @@ public class WifiManager { * * @hide */ + @UnsupportedAppUsage public void cancelLocalOnlyHotspotRequest() { synchronized (mLock) { stopLocalOnlyHotspot(); @@ -2977,6 +2991,7 @@ public class WifiManager { * initialized again * @hide */ + @UnsupportedAppUsage public void connect(int networkId, ActionListener listener) { if (networkId < 0) throw new IllegalArgumentException("Network id cannot be negative"); getChannel().sendMessage(CONNECT_NETWORK, networkId, putListener(listener)); @@ -3002,6 +3017,7 @@ public class WifiManager { * initialized again * @hide */ + @UnsupportedAppUsage public void save(WifiConfiguration config, ActionListener listener) { if (config == null) throw new IllegalArgumentException("config cannot be null"); getChannel().sendMessage(SAVE_NETWORK, 0, putListener(listener), config); @@ -3020,6 +3036,7 @@ public class WifiManager { * initialized again * @hide */ + @UnsupportedAppUsage public void forget(int netId, ActionListener listener) { if (netId < 0) throw new IllegalArgumentException("Network id cannot be negative"); getChannel().sendMessage(FORGET_NETWORK, netId, putListener(listener)); @@ -3034,6 +3051,7 @@ public class WifiManager { * initialized again * @hide */ + @UnsupportedAppUsage public void disable(int netId, ActionListener listener) { if (netId < 0) throw new IllegalArgumentException("Network id cannot be negative"); getChannel().sendMessage(DISABLE_NETWORK, netId, putListener(listener)); @@ -3089,6 +3107,7 @@ public class WifiManager { * * @return Messenger pointing to the WifiService handler */ + @UnsupportedAppUsage private Messenger getWifiServiceMessenger() { try { return mService.getWifiServiceMessenger(mContext.getOpPackageName()); @@ -3519,6 +3538,7 @@ public class WifiManager { * Initialize the multicast filtering to 'on' * @hide no intent to publish */ + @UnsupportedAppUsage public boolean initializeMulticastFiltering() { try { mService.initializeMulticastFiltering(); @@ -3543,6 +3563,7 @@ public class WifiManager { * @hide */ @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) + @UnsupportedAppUsage public void enableVerboseLogging (int verbose) { try { mService.enableVerboseLogging(verbose); @@ -3557,6 +3578,7 @@ public class WifiManager { * to decide what to show within the picker. * @hide */ + @UnsupportedAppUsage public int getVerboseLoggingLevel() { try { return mService.getVerboseLoggingLevel(); @@ -3583,6 +3605,7 @@ public class WifiManager { * @return Get Network object of current wifi network * @hide */ + @UnsupportedAppUsage public Network getCurrentNetwork() { try { return mService.getCurrentNetwork(); diff --git a/wifi/java/android/net/wifi/WifiSsid.java b/wifi/java/android/net/wifi/WifiSsid.java index 5deb80a842a1..9acbc146ce42 100644 --- a/wifi/java/android/net/wifi/WifiSsid.java +++ b/wifi/java/android/net/wifi/WifiSsid.java @@ -16,6 +16,7 @@ package android.net.wifi; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -42,9 +43,11 @@ import java.util.Locale; public class WifiSsid implements Parcelable { private static final String TAG = "WifiSsid"; + @UnsupportedAppUsage public final ByteArrayOutputStream octets = new ByteArrayOutputStream(32); private static final int HEX_RADIX = 16; + @UnsupportedAppUsage public static final String NONE = "<unknown ssid>"; private WifiSsid() { @@ -58,6 +61,7 @@ public class WifiSsid implements Parcelable { return wifiSsid; } + @UnsupportedAppUsage public static WifiSsid createFromAsciiEncoded(String asciiEncoded) { WifiSsid a = new WifiSsid(); a.convertToBytes(asciiEncoded); @@ -220,6 +224,7 @@ public class WifiSsid implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public byte[] getOctets() { return octets.toByteArray(); } @@ -246,6 +251,7 @@ public class WifiSsid implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<WifiSsid> CREATOR = new Creator<WifiSsid>() { public WifiSsid createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java index b019fd727ed2..67720961f8ed 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; import android.net.wifi.WpsInfo; import android.os.Parcelable; import android.os.Parcel; @@ -40,6 +41,7 @@ public class WifiP2pConfig implements Parcelable { /** @hide */ public static final int MAX_GROUP_OWNER_INTENT = 15; /** @hide */ + @UnsupportedAppUsage public static final int MIN_GROUP_OWNER_INTENT = 0; /** @@ -52,6 +54,7 @@ public class WifiP2pConfig implements Parcelable { public int groupOwnerIntent = -1; /** @hide */ + @UnsupportedAppUsage public int netId = WifiP2pGroup.PERSISTENT_NET_ID; public WifiP2pConfig() { @@ -66,6 +69,7 @@ public class WifiP2pConfig implements Parcelable { } /** P2P-GO-NEG-REQUEST 42:fc:89:a8:96:09 dev_passwd_id=4 {@hide}*/ + @UnsupportedAppUsage public WifiP2pConfig(String supplicantEvent) throws IllegalArgumentException { String[] tokens = supplicantEvent.split(" "); diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java index 98a595b513a1..22dc2ed32083 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; import android.util.Log; @@ -96,18 +97,21 @@ public class WifiP2pDevice implements Parcelable { * WPS config methods supported * @hide */ + @UnsupportedAppUsage public int wpsConfigMethodsSupported; /** * Device capability * @hide */ + @UnsupportedAppUsage public int deviceCapability; /** * Group capability * @hide */ + @UnsupportedAppUsage public int groupCapability; public static final int CONNECTED = 0; @@ -120,6 +124,7 @@ public class WifiP2pDevice implements Parcelable { public int status = UNAVAILABLE; /** @hide */ + @UnsupportedAppUsage public WifiP2pWfdInfo wfdInfo; /** Detailed device string pattern with WFD info @@ -179,6 +184,7 @@ public class WifiP2pDevice implements Parcelable { * Note: The events formats can be looked up in the wpa_supplicant code * @hide */ + @UnsupportedAppUsage public WifiP2pDevice(String string) throws IllegalArgumentException { String[] tokens = string.split("[ \n]"); Matcher match; @@ -279,6 +285,7 @@ public class WifiP2pDevice implements Parcelable { * @throws IllegalArgumentException if the device is null or device address does not match * @hide */ + @UnsupportedAppUsage public void update(WifiP2pDevice device) { updateSupplicantDetails(device); status = device.status; diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java index 3d0bb3dcedcd..72edd56272d4 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; import android.net.wifi.p2p.WifiP2pDevice; @@ -83,6 +84,7 @@ public class WifiP2pDeviceList implements Parcelable { * @param device to be updated * @hide */ + @UnsupportedAppUsage public void update(WifiP2pDevice device) { updateSupplicantDetails(device); mDevices.get(device.deviceAddress).status = device.status; @@ -146,6 +148,7 @@ public class WifiP2pDeviceList implements Parcelable { * @return WifiP2pDevice device removed, or null if none removed * @hide */ + @UnsupportedAppUsage public WifiP2pDevice remove(String deviceAddress) { validateDeviceAddress(deviceAddress); return mDevices.remove(deviceAddress); diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java index 32673c771baa..01feb1ef5b42 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; @@ -37,6 +38,7 @@ public class WifiP2pGroup implements Parcelable { /** The temporary network id. * {@hide} */ + @UnsupportedAppUsage public static final int TEMPORARY_NET_ID = -1; /** The persistent network id. @@ -95,6 +97,7 @@ public class WifiP2pGroup implements Parcelable { * Note: The events formats can be looked up in the wpa_supplicant code * @hide */ + @UnsupportedAppUsage public WifiP2pGroup(String supplicantEvent) throws IllegalArgumentException { String[] tokens = supplicantEvent.split(" "); @@ -169,6 +172,7 @@ public class WifiP2pGroup implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setIsGroupOwner(boolean isGo) { mIsGroupOwner = isGo; } @@ -212,6 +216,7 @@ public class WifiP2pGroup implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public boolean isClientListEmpty() { return mClients.size() == 0; } @@ -242,6 +247,7 @@ public class WifiP2pGroup implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public void setInterface(String intf) { mInterface = intf; } @@ -252,11 +258,13 @@ public class WifiP2pGroup implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public int getNetworkId() { return mNetId; } /** @hide */ + @UnsupportedAppUsage public void setNetworkId(int netId) { this.mNetId = netId; } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java index 64bb00b713c7..8d922539d06e 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java @@ -18,6 +18,7 @@ package android.net.wifi.p2p; import java.util.Collection; import java.util.Map; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.util.LruCache; @@ -33,6 +34,7 @@ public class WifiP2pGroupList implements Parcelable { private static final int CREDENTIAL_MAX_NUM = 32; + @UnsupportedAppUsage private final LruCache<Integer, WifiP2pGroup> mGroups; private final GroupDeleteListener mListener; @@ -48,6 +50,7 @@ public class WifiP2pGroupList implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public WifiP2pGroupList(WifiP2pGroupList source, GroupDeleteListener listener) { mListener = listener; mGroups = new LruCache<Integer, WifiP2pGroup>(CREDENTIAL_MAX_NUM) { @@ -72,6 +75,7 @@ public class WifiP2pGroupList implements Parcelable { * * @return the list of p2p group. */ + @UnsupportedAppUsage public Collection<WifiP2pGroup> getGroupList() { return mGroups.snapshot().values(); } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java index 8075e178f2ed..57f3973a4eb5 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java @@ -19,6 +19,7 @@ package android.net.wifi.p2p; import android.annotation.SdkConstant; import android.annotation.SystemService; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.net.wifi.WpsInfo; import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo; @@ -325,6 +326,7 @@ public class WifiP2pManager { public static final int CANCEL_CONNECT_SUCCEEDED = BASE + 12; /** @hide */ + @UnsupportedAppUsage public static final int CREATE_GROUP = BASE + 13; /** @hide */ public static final int CREATE_GROUP_FAILED = BASE + 14; @@ -486,6 +488,7 @@ public class WifiP2pManager { * @hide - hide this because it takes in a parameter of type IWifiP2pManager, which * is a system private class. */ + @UnsupportedAppUsage public WifiP2pManager(IWifiP2pManager service) { mService = service; } @@ -731,6 +734,7 @@ public class WifiP2pManager { /* package */ final Binder mBinder; + @UnsupportedAppUsage private AsyncChannel mAsyncChannel; private P2pHandler mHandler; Context mContext; @@ -887,6 +891,7 @@ public class WifiP2pManager { } } + @UnsupportedAppUsage private int putListener(Object listener) { if (listener == null) return INVALID_LISTENER_KEY; int key; @@ -1099,6 +1104,7 @@ public class WifiP2pManager { } /** @hide */ + @UnsupportedAppUsage public void setWifiP2pChannels(Channel c, int lc, int oc, ActionListener listener) { checkChannel(c); Bundle p2pChannels = new Bundle(); @@ -1117,6 +1123,7 @@ public class WifiP2pManager { * {@link ActionListener#onSuccess} or {@link ActionListener#onFailure}. * @hide */ + @UnsupportedAppUsage public void startWps(Channel c, WpsInfo wps, ActionListener listener) { checkChannel(c); c.mAsyncChannel.sendMessage(START_WPS, 0, c.putListener(listener), wps); @@ -1363,6 +1370,7 @@ public class WifiP2pManager { * @param c is the channel created at {@link #initialize} * @param listener for callback when group info is available. Can be null. */ + @UnsupportedAppUsage public void setDeviceName(Channel c, String devName, ActionListener listener) { checkChannel(c); WifiP2pDevice d = new WifiP2pDevice(); @@ -1371,6 +1379,7 @@ public class WifiP2pManager { } /** @hide */ + @UnsupportedAppUsage public void setWFDInfo( Channel c, WifiP2pWfdInfo wfdInfo, ActionListener listener) { @@ -1401,6 +1410,7 @@ public class WifiP2pManager { * @param listener for callbacks on success or failure. Can be null. * @hide */ + @UnsupportedAppUsage public void deletePersistentGroup(Channel c, int netId, ActionListener listener) { checkChannel(c); c.mAsyncChannel.sendMessage(DELETE_PERSISTENT_GROUP, netId, c.putListener(listener)); @@ -1413,6 +1423,7 @@ public class WifiP2pManager { * @param listener for callback when persistent group info list is available. Can be null. * @hide */ + @UnsupportedAppUsage public void requestPersistentGroupInfo(Channel c, PersistentGroupInfoListener listener) { checkChannel(c); c.mAsyncChannel.sendMessage(REQUEST_PERSISTENT_GROUP_INFO, 0, c.putListener(listener)); @@ -1425,6 +1436,7 @@ public class WifiP2pManager { /** @hide */ public static final int MIRACAST_SINK = 2; /** Internal use only @hide */ + @UnsupportedAppUsage public void setMiracastMode(int mode) { try { mService.setMiracastMode(mode); diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java b/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java index 98683cbcdce5..153e03cc4d9d 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java @@ -16,6 +16,8 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; + /** * A class representing a Wi-Fi p2p provisional discovery request/response * See {@link #WifiP2pProvDiscEvent} for supported types @@ -32,13 +34,17 @@ public class WifiP2pProvDiscEvent { public static final int SHOW_PIN = 4; /* One of PBC_REQ, PBC_RSP, ENTER_PIN or SHOW_PIN */ + @UnsupportedAppUsage public int event; + @UnsupportedAppUsage public WifiP2pDevice device; /* Valid when event = SHOW_PIN */ + @UnsupportedAppUsage public String pin; + @UnsupportedAppUsage public WifiP2pProvDiscEvent() { device = new WifiP2pDevice(); } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java index ebf5c2a474cc..ef1bff4c793c 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pWfdInfo.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p; +import android.annotation.UnsupportedAppUsage; import android.os.Parcelable; import android.os.Parcel; @@ -53,9 +54,11 @@ public class WifiP2pWfdInfo implements Parcelable { private int mMaxThroughput; + @UnsupportedAppUsage public WifiP2pWfdInfo() { } + @UnsupportedAppUsage public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) { mWfdEnabled = true; mDeviceInfo = devInfo; @@ -63,18 +66,22 @@ public class WifiP2pWfdInfo implements Parcelable { mMaxThroughput = maxTput; } + @UnsupportedAppUsage public boolean isWfdEnabled() { return mWfdEnabled; } + @UnsupportedAppUsage public void setWfdEnabled(boolean enabled) { mWfdEnabled = enabled; } + @UnsupportedAppUsage public int getDeviceType() { return (mDeviceInfo & DEVICE_TYPE); } + @UnsupportedAppUsage public boolean setDeviceType(int deviceType) { if (deviceType >= WFD_SOURCE && deviceType <= SOURCE_OR_PRIMARY_SINK) { mDeviceInfo &= ~DEVICE_TYPE; @@ -112,6 +119,7 @@ public class WifiP2pWfdInfo implements Parcelable { return (mDeviceInfo & SESSION_AVAILABLE) != 0; } + @UnsupportedAppUsage public void setSessionAvailable(boolean enabled) { if (enabled) { mDeviceInfo |= SESSION_AVAILABLE_BIT1; @@ -125,10 +133,12 @@ public class WifiP2pWfdInfo implements Parcelable { return mCtrlPort; } + @UnsupportedAppUsage public void setControlPort(int port) { mCtrlPort = port; } + @UnsupportedAppUsage public void setMaxThroughput(int maxThroughput) { mMaxThroughput = maxThroughput; } @@ -157,6 +167,7 @@ public class WifiP2pWfdInfo implements Parcelable { } /** copy constructor */ + @UnsupportedAppUsage public WifiP2pWfdInfo(WifiP2pWfdInfo source) { if (source != null) { mWfdEnabled = source.mWfdEnabled; @@ -182,6 +193,7 @@ public class WifiP2pWfdInfo implements Parcelable { } /** Implement the Parcelable interface */ + @UnsupportedAppUsage public static final Creator<WifiP2pWfdInfo> CREATOR = new Creator<WifiP2pWfdInfo>() { public WifiP2pWfdInfo createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java index a4118dc95335..c9e9867e200d 100644 --- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java +++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p.nsd; +import android.annotation.UnsupportedAppUsage; import android.net.nsd.DnsSdTxtRecord; import android.text.TextUtils; @@ -173,6 +174,7 @@ public class WifiP2pDnsSdServiceInfo extends WifiP2pServiceInfo { * @param version version number * @hide */ + @UnsupportedAppUsage static String createRequest(String dnsName, int dnsType, int version) { StringBuffer sb = new StringBuffer(); diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java index b931475ed4ab..35631985bdfc 100644 --- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java +++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p.nsd; +import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -83,6 +84,7 @@ public class WifiP2pServiceInfo implements Parcelable { * {"upnp", "10", "uuid:6859dede-8574-59ab-9322-123456789012::urn:schemas-upnp * -org:service:ContentDirectory:2"} */ + @UnsupportedAppUsage private List<String> mQueryList; /** @@ -91,6 +93,7 @@ public class WifiP2pServiceInfo implements Parcelable { * @param queryList query string for wpa_supplicant * @hide */ + @UnsupportedAppUsage protected WifiP2pServiceInfo(List<String> queryList) { if (queryList == null) { throw new IllegalArgumentException("query list cannot be null"); @@ -166,6 +169,7 @@ public class WifiP2pServiceInfo implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<WifiP2pServiceInfo> CREATOR = new Creator<WifiP2pServiceInfo>() { public WifiP2pServiceInfo createFromParcel(Parcel in) { diff --git a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java index 7462b85c8b2d..2e7f44802ab2 100644 --- a/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java +++ b/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java @@ -16,6 +16,7 @@ package android.net.wifi.p2p.nsd; +import android.annotation.UnsupportedAppUsage; import android.net.wifi.p2p.WifiP2pManager; import android.os.Parcel; import android.os.Parcelable; @@ -72,6 +73,7 @@ public class WifiP2pServiceRequest implements Parcelable { * @param query The part of service specific query. * @hide */ + @UnsupportedAppUsage protected WifiP2pServiceRequest(int protocolType, String query) { validateQuery(query); @@ -262,6 +264,7 @@ public class WifiP2pServiceRequest implements Parcelable { } /** Implement the Parcelable interface {@hide} */ + @UnsupportedAppUsage public static final Creator<WifiP2pServiceRequest> CREATOR = new Creator<WifiP2pServiceRequest>() { public WifiP2pServiceRequest createFromParcel(Parcel in) { |