diff options
33 files changed, 724 insertions, 157 deletions
| diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index 0d70375ee135..da386d7d533a 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -20,8 +20,19 @@ Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager;  Landroid/app/ActivityManager;->PROCESS_STATE_IMPORTANT_BACKGROUND:I  Landroid/app/ActivityManager;->PROCESS_STATE_TOP:I  Landroid/app/ActivityManager$RecentTaskInfo;->firstActiveTime:J +Landroid/app/ActivityManager$RecentTaskInfo;->lastActiveTime:J +Landroid/app/ActivityManager$RecentTaskInfo;->resizeMode:I +Landroid/app/ActivityManager$RecentTaskInfo;->supportsSplitScreenMultiWindow:Z +Landroid/app/ActivityManager$RecentTaskInfo;->userId:I  Landroid/app/ActivityManager$RunningAppProcessInfo;->flags:I  Landroid/app/ActivityManager$RunningAppProcessInfo;->processState:I +Landroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I +Landroid/app/ActivityManager$TaskDescription;->getInMemoryIcon()Landroid/graphics/Bitmap; +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/Activity;->mApplication:Landroid/app/Application;  Landroid/app/Activity;->mComponent:Landroid/content/ComponentName;  Landroid/app/Activity;->mFragments:Landroid/app/FragmentController; @@ -35,6 +46,7 @@ Landroid/app/Activity;->mResumed:Z  Landroid/app/Activity;->mToken:Landroid/os/IBinder;  Landroid/app/Activity;->mWindow:Landroid/view/Window;  Landroid/app/Activity;->mWindowManager:Landroid/view/WindowManager; +Landroid/app/ActivityOptions;->makeMultiThumbFutureAspectScaleAnimation(Landroid/content/Context;Landroid/os/Handler;Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/app/ActivityOptions$OnAnimationStartedListener;Z)Landroid/app/ActivityOptions;  Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V  Landroid/app/Activity;->setPersistent(Z)V  Landroid/app/ActivityThread$ActivityClientRecord;->activityInfo:Landroid/content/pm/ActivityInfo; @@ -564,6 +576,7 @@ Landroid/database/sqlite/SQLiteDebug$PagerStats;->memoryUsed:I  Landroid/database/sqlite/SQLiteDebug$PagerStats;->pageCacheOverflow:I  Landroid/database/sqlite/SQLiteOpenHelper;->mName:Ljava/lang/String;  Landroid/ddm/DdmHandleAppName;->getAppName()Ljava/lang/String; +Landroid/graphics/AvoidXfermode$Mode;->TARGET:Landroid/graphics/AvoidXfermode$Mode;  Landroid/graphics/BaseCanvas;->mNativeCanvasWrapper:J  Landroid/graphics/Bitmap$Config;->nativeInt:I  Landroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config; @@ -644,6 +657,7 @@ Landroid/graphics/FontFamily;-><init>()V  Landroid/graphics/fonts/FontVariationAxis;->mStyleValue:F  Landroid/graphics/fonts/FontVariationAxis;->mTag:I  Landroid/graphics/GraphicBuffer;->createFromExisting(IIIIJ)Landroid/graphics/GraphicBuffer; +Landroid/graphics/GraphicBuffer;->CREATOR:Landroid/os/Parcelable$Creator;  Landroid/graphics/GraphicBuffer;-><init>(IIIIJ)V  Landroid/graphics/GraphicBuffer;->mNativeObject:J  Landroid/graphics/ImageDecoder;-><init>(JIIZ)V @@ -893,6 +907,7 @@ Landroid/media/IAudioService;->getStreamVolume(I)I  Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V  Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService;  Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController;  Landroid/media/JetPlayer;->mNativePlayerInJavaObj:J  Landroid/media/JetPlayer;->postEventFromNative(Ljava/lang/Object;III)V  Landroid/media/MediaCodec$CodecException;-><init>(IILjava/lang/String;)V @@ -1130,6 +1145,7 @@ Landroid/os/BatteryStats$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Ti  Landroid/os/Binder;->execTransact(IJJI)Z  Landroid/os/Binder;->mObject:J  Landroid/os/Build;->getString(Ljava/lang/String;)Ljava/lang/String; +Landroid/os/Build;->IS_DEBUGGABLE:Z  Landroid/os/Build$VERSION;->ACTIVE_CODENAMES:[Ljava/lang/String;  Landroid/os/Bundle;->getIBinder(Ljava/lang/String;)Landroid/os/IBinder;  Landroid/os/Bundle;->putIBinder(Ljava/lang/String;Landroid/os/IBinder;)V @@ -1214,8 +1230,10 @@ Landroid/os/Message;->when:J  Landroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;)V  Landroid/os/Parcel;->mNativePtr:J  Landroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V +Landroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;  Landroid/os/Parcel$ReadWriteHelper;-><init>()V  Landroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V +Landroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V  Landroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I  Landroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I  Landroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I @@ -1967,9 +1985,11 @@ Landroid/view/inputmethod/InputMethodManager;->sInstance:Landroid/view/inputmeth  Landroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V  Landroid/view/inputmethod/InputMethodSubtypeArray;-><init>(Ljava/util/List;)V  Landroid/view/InputQueue;->finishInputEvent(JZ)V +Landroid/view/IRecentsAnimationController;->setAnimationTargetsBehindSystemBars(Z)V  Landroid/view/IWindowManager;->getAnimationScale(I)F  Landroid/view/IWindowManager;->hasNavigationBar()Z  Landroid/view/IWindowManager;->setAnimationScale(IF)V +Landroid/view/IWindowManager;->setShelfHeight(ZI)V  Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V  Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager;  Landroid/view/IWindowManager$Stub$Proxy;->getBaseDisplayDensity(I)I @@ -2017,6 +2037,18 @@ Landroid/view/PointerIcon;->mDurationPerFrame:I  Landroid/view/PointerIcon;->mHotSpotX:F  Landroid/view/PointerIcon;->mHotSpotY:F  Landroid/view/PointerIcon;->mType:I +Landroid/view/RemoteAnimationDefinition;->addRemoteAnimation(IILandroid/view/RemoteAnimationAdapter;)V +Landroid/view/RemoteAnimationTarget;->clipRect:Landroid/graphics/Rect; +Landroid/view/RemoteAnimationTarget;->contentInsets:Landroid/graphics/Rect; +Landroid/view/RemoteAnimationTarget;->isNotInRecents:Z +Landroid/view/RemoteAnimationTarget;->isTranslucent:Z +Landroid/view/RemoteAnimationTarget;->leash:Landroid/view/SurfaceControl; +Landroid/view/RemoteAnimationTarget;->mode:I +Landroid/view/RemoteAnimationTarget;->position:Landroid/graphics/Point; +Landroid/view/RemoteAnimationTarget;->prefixOrderIndex:I +Landroid/view/RemoteAnimationTarget;->sourceContainerBounds:Landroid/graphics/Rect; +Landroid/view/RemoteAnimationTarget;->taskId:I +Landroid/view/RemoteAnimationTarget;->windowConfiguration:Landroid/app/WindowConfiguration;  Landroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V  Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;  Landroid/view/ScaleGestureDetector;->mMinSpan:I @@ -2154,6 +2186,7 @@ Landroid/view/ViewRootImpl;->detachFunctor(J)V  Landroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;)V  Landroid/view/ViewRootImpl;->invokeFunctor(JZ)V  Landroid/view/ViewRootImpl;->mStopped:Z +Landroid/view/ViewRootImpl;->mSurface:Landroid/view/Surface;  Landroid/view/ViewRootImpl;->mView:Landroid/view/View;  Landroid/view/View$ScrollabilityCache;->scrollBar:Landroid/widget/ScrollBarDrawable;  Landroid/view/View;->setAlphaNoInvalidation(F)Z diff --git a/config/hiddenapi-vendor-list.txt b/config/hiddenapi-vendor-list.txt index 952b28b8b820..fe9a5dbb1c24 100644 --- a/config/hiddenapi-vendor-list.txt +++ b/config/hiddenapi-vendor-list.txt @@ -1,9 +1,24 @@ +Landroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;Landroid/os/Handler;)V +Landroid/app/Activity;->managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +Landroid/app/ActivityManagerNative;->broadcastStickyIntent(Landroid/content/Intent;Ljava/lang/String;I)V  Landroid/app/ActivityManager$RecentTaskInfo;->configuration:Landroid/content/res/Configuration;  Landroid/app/ActivityManager$TaskDescription;->loadTaskDescriptionIcon(Ljava/lang/String;I)Landroid/graphics/Bitmap;  Landroid/app/ActivityManager$TaskSnapshot;->getSnapshot()Landroid/graphics/GraphicBuffer;  Landroid/app/ActivityOptions;->makeRemoteAnimation(Landroid/view/RemoteAnimationAdapter;)Landroid/app/ActivityOptions;  Landroid/app/ActivityOptions;->setSplitScreenCreateMode(I)V  Landroid/app/Activity;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)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;->getPackagesForOps([I)Ljava/util/List; +Landroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder; +Landroid/app/AppOpsManager$OpEntry;->getOp()I +Landroid/app/AppOpsManager$OpEntry;->getTime()J +Landroid/app/AppOpsManager$OpEntry;->isRunning()Z +Landroid/app/AppOpsManager$PackageOps;->getOps()Ljava/util/List; +Landroid/app/AppOpsManager$PackageOps;->getPackageName()Ljava/lang/String; +Landroid/app/AppOpsManager$PackageOps;->getUid()I  Landroid/app/IActivityController$Stub;-><init>()V  Landroid/app/IActivityManager;->cancelRecentsAnimation()V  Landroid/app/IActivityManager;->cancelTaskWindowTransition(I)V @@ -11,12 +26,18 @@ Landroid/app/IActivityManager;->closeSystemDialogs(Ljava/lang/String;)V  Landroid/app/IActivityManager;->getCurrentUser()Landroid/content/pm/UserInfo;  Landroid/app/IActivityManager;->getFilteredTasks(III)Ljava/util/List;  Landroid/app/IActivityManager;->getLockTaskModeState()I +Landroid/app/IActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;  Landroid/app/IActivityManager;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice; +Landroid/app/IActivityManager;->getRunningAppProcesses()Ljava/util/List;  Landroid/app/IActivityManager;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot;  Landroid/app/IActivityManager;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V  Landroid/app/IActivityManager;->removeTask(I)Z +Landroid/app/IActivityManager;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I  Landroid/app/IActivityManager;->startActivityFromRecents(ILandroid/os/Bundle;)I +Landroid/app/IActivityManager;->startActivity(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;)I  Landroid/app/IActivityManager;->startRecentsActivity(Landroid/content/Intent;Landroid/app/IAssistDataReceiver;Landroid/view/IRecentsAnimationRunner;)V +Landroid/app/IAlarmManager;->setTime(J)Z +Landroid/app/IAlarmManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmManager;  Landroid/app/IAssistDataReceiver;->onHandleAssistData(Landroid/os/Bundle;)V  Landroid/app/IAssistDataReceiver;->onHandleAssistScreenshot(Landroid/graphics/Bitmap;)V  Landroid/app/IAssistDataReceiver$Stub;-><init>()V @@ -40,6 +61,8 @@ Landroid/app/TaskStackListener;->onTaskStackChanged()V  Landroid/app/VrStateCallback;-><init>()V  Landroid/app/VrStateCallback;->onPersistentVrStateChanged(Z)V  Landroid/app/WallpaperColors;-><init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;I)V +Landroid/bluetooth/BluetoothHeadset;->phoneStateChanged(IIILjava/lang/String;I)V +Landroid/bluetooth/IBluetooth;->sendConnectionStateChange(Landroid/bluetooth/BluetoothDevice;III)V  Landroid/companion/AssociationRequest;->getDeviceFilters()Ljava/util/List;  Landroid/companion/AssociationRequest;->isSingleDevice()Z  Landroid/companion/BluetoothDeviceFilter;->getAddress()Ljava/lang/String; @@ -53,19 +76,31 @@ Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelected(L  Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelectionCancel()V  Landroid/companion/ICompanionDeviceDiscoveryService$Stub;-><init>()V  Landroid/companion/IFindDeviceCallback;->onSuccess(Landroid/app/PendingIntent;)V +Landroid/content/ContentProvider;->attachInfoForTesting(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +Landroid/content/ContentProvider;->getIContentProvider()Landroid/content/IContentProvider; +Landroid/content/ContentProvider;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V +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;->getOpPackageName()Ljava/lang/String;  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;->onRemoveCompleted(Ljava/lang/String;Z)V  Landroid/content/pm/IPackageDataObserver$Stub;-><init>()V  Landroid/content/pm/IPackageDeleteObserver;->packageDeleted(Ljava/lang/String;I)V  Landroid/content/pm/IPackageDeleteObserver$Stub;-><init>()V  Landroid/content/pm/IPackageManager;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; +Landroid/content/pm/IPackageManager;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;  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/graphics/AvoidXfermode;-><init>(IILandroid/graphics/AvoidXfermode$Mode;)V  Landroid/graphics/Bitmap;->createGraphicBufferHandle()Landroid/graphics/GraphicBuffer;  Landroid/graphics/Bitmap;->createHardwareBitmap(Landroid/graphics/GraphicBuffer;)Landroid/graphics/Bitmap; @@ -74,17 +109,25 @@ Landroid/graphics/Canvas;->clipRegion(Landroid/graphics/Region;)Z  Landroid/graphics/drawable/Drawable;->isProjected()Z  Landroid/graphics/drawable/Drawable;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;  Landroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;)V +Landroid/hardware/display/DisplayManagerGlobal;->getInstance()Landroid/hardware/display/DisplayManagerGlobal; +Landroid/hardware/display/DisplayManagerGlobal;->getRealDisplay(I)Landroid/view/Display;  Landroid/hardware/location/GeofenceHardware;-><init>(Landroid/hardware/location/IGeofenceHardware;)V  Landroid/hardware/location/IActivityRecognitionHardwareClient;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V  Landroid/location/IFusedProvider;->onFusedLocationHardwareChange(Landroid/hardware/location/IFusedLocationHardware;)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;  Landroid/location/IGeofenceProvider;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V +Landroid/location/ILocationManager;->getNetworkProviderPackage()Ljava/lang/String;  Landroid/location/ILocationManager;->reportLocation(Landroid/location/Location;Z)V +Landroid/location/INetInitiatedListener;->sendNiResponse(II)Z +Landroid/location/INetInitiatedListener$Stub;-><init>()V +Landroid/location/Location;->setExtraLocation(Ljava/lang/String;Landroid/location/Location;)V  Landroid/media/AudioManager;->registerAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V  Landroid/media/AudioManager;->unregisterAudioPortUpdateListener(Landroid/media/AudioManager$OnAudioPortUpdateListener;)V  Landroid/media/AudioSystem;->checkAudioFlinger()I +Landroid/media/AudioSystem;->getForceUse(I)I  Landroid/media/AudioSystem;->getParameters(Ljava/lang/String;)Ljava/lang/String; +Landroid/media/AudioSystem;->setForceUse(II)I  Landroid/media/AudioSystem;->setParameters(Ljava/lang/String;)I  Landroid/media/MediaDrm$Certificate;->getContent()[B  Landroid/media/MediaDrm$Certificate;->getWrappedPrivateKey()[B @@ -103,14 +146,18 @@ 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;->getActiveNetworkQuotaInfo()Landroid/net/NetworkQuotaInfo;  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$PacketKeepalive;->stop()V +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;->startUsingNetworkFeature(ILjava/lang/String;)I  Landroid/net/ConnectivityManager;->stopUsingNetworkFeature(ILjava/lang/String;)I +Landroid/net/ConnectivityManager;->tether(Ljava/lang/String;)I +Landroid/net/ConnectivityManager;->untether(Ljava/lang/String;)I  Landroid/net/DhcpResults;-><init>(Landroid/net/DhcpResults;)V  Landroid/net/DhcpResults;-><init>(Landroid/net/StaticIpConfiguration;)V  Landroid/net/DhcpResults;-><init>()V @@ -138,6 +185,8 @@ 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 @@ -226,12 +275,23 @@ Landroid/net/NetworkCapabilities;->getSignalStrength()I  Landroid/net/NetworkCapabilities;->hasSignalStrength()Z  Landroid/net/NetworkCapabilities;->transportNamesOf([I)Ljava/lang/String;  Landroid/net/Network;-><init>(I)V +Landroid/net/Network;->netId:I  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;->combineValues(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats; +Landroid/net/NetworkStats$Entry;->iface:Ljava/lang/String;  Landroid/net/NetworkStats$Entry;-><init>()V +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/NetworkStatsHistory$Entry;->txBytes:J  Landroid/net/NetworkStatsHistory;->getStart()J  Landroid/net/NetworkStatsHistory;->getValues(JJLandroid/net/NetworkStatsHistory$Entry;)Landroid/net/NetworkStatsHistory$Entry; @@ -245,7 +305,10 @@ Landroid/net/NetworkUtils;->netmaskToPrefixLength(Ljava/net/Inet4Address;)I  Landroid/net/NetworkUtils;->protectFromVpn(Ljava/io/FileDescriptor;)Z  Landroid/net/RouteInfo;->hasGateway()Z  Landroid/net/RouteInfo;-><init>(Landroid/net/IpPrefix;Ljava/net/InetAddress;Ljava/lang/String;)V +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; @@ -268,27 +331,36 @@ Landroid/os/BatteryStats$HistoryItem;->cmd:B  Landroid/os/BatteryStats$HistoryItem;-><init>()V  Landroid/os/BatteryStats$HistoryItem;->states:I  Landroid/os/BatteryStats$HistoryItem;->time:J +Landroid/os/BatteryStats$Timer;->getCountLocked(I)I  Landroid/os/BatteryStats$Uid;->getWifiRunningTime(JI)J  Landroid/os/BatteryStats$Uid;-><init>()V  Landroid/os/BatteryStats$Uid$Wakelock;->getWakeTime(I)Landroid/os/BatteryStats$Timer; +Landroid/os/Broadcaster;->broadcast(Landroid/os/Message;)V +Landroid/os/Broadcaster;->cancelRequest(ILandroid/os/Handler;I)V +Landroid/os/Broadcaster;-><init>()V +Landroid/os/Broadcaster;->request(ILandroid/os/Handler;I)V +Landroid/os/Environment;->getLegacyExternalStorageDirectory()Ljava/io/File;  Landroid/os/Handler;->getMain()Landroid/os/Handler;  Landroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V  Landroid/os/HwBinder;->reportSyspropChanged()V  Landroid/os/INetworkManagementService;->clearInterfaceAddresses(Ljava/lang/String;)V  Landroid/os/INetworkManagementService;->disableIpv6(Ljava/lang/String;)V  Landroid/os/INetworkManagementService;->enableIpv6(Ljava/lang/String;)V +Landroid/os/INetworkManagementService;->isBandwidthControlEnabled()Z  Landroid/os/INetworkManagementService;->registerObserver(Landroid/net/INetworkManagementEventObserver;)V  Landroid/os/INetworkManagementService;->setInterfaceConfig(Ljava/lang/String;Landroid/net/InterfaceConfiguration;)V  Landroid/os/INetworkManagementService;->setInterfaceIpv6PrivacyExtensions(Ljava/lang/String;Z)V  Landroid/os/INetworkManagementService;->setIPv6AddrGenMode(Ljava/lang/String;I)V  Landroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;  Landroid/os/INetworkManagementService;->unregisterObserver(Landroid/net/INetworkManagementEventObserver;)V +Landroid/os/IPowerManager;->goToSleep(JII)V  Landroid/os/IPowerManager;->reboot(ZLjava/lang/String;Z)V  Landroid/os/IRemoteCallback$Stub;-><init>()V  Landroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;  Landroid/os/Parcel;->readBlob()[B  Landroid/os/Parcel;->readStringArray()[Ljava/lang/String;  Landroid/os/Parcel;->writeBlob([B)V +Landroid/os/PowerManager;->goToSleep(J)V  Landroid/os/PowerManager;->isScreenBrightnessBoosted()Z  Landroid/os/Registrant;->clear()V  Landroid/os/Registrant;-><init>(Landroid/os/Handler;ILjava/lang/Object;)V @@ -303,10 +375,35 @@ Landroid/os/Registrant;->notifyRegistrant(Landroid/os/AsyncResult;)V  Landroid/os/Registrant;->notifyRegistrant()V  Landroid/os/RemoteException;->rethrowFromSystemServer()Ljava/lang/RuntimeException;  Landroid/os/ServiceSpecificException;->errorCode:I +Landroid/os/storage/DiskInfo;->getId()Ljava/lang/String; +Landroid/os/storage/StorageEventListener;-><init>()V +Landroid/os/storage/StorageManager;->findVolumeById(Ljava/lang/String;)Landroid/os/storage/VolumeInfo; +Landroid/os/storage/StorageManager;->from(Landroid/content/Context;)Landroid/os/storage/StorageManager; +Landroid/os/storage/StorageManager;->registerListener(Landroid/os/storage/StorageEventListener;)V +Landroid/os/storage/StorageManager;->unregisterListener(Landroid/os/storage/StorageEventListener;)V +Landroid/os/storage/StorageVolume;->getId()Ljava/lang/String; +Landroid/os/storage/VolumeInfo;->getId()Ljava/lang/String;  Landroid/os/SystemProperties;->reportSyspropChanged()V +Landroid/os/SystemService;->start(Ljava/lang/String;)V +Landroid/os/SystemService;->stop(Ljava/lang/String;)V +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/print/PrintDocumentAdapter$LayoutResultCallback;-><init>()V  Landroid/print/PrintDocumentAdapter$WriteResultCallback;-><init>()V  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/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 @@ -316,6 +413,11 @@ Landroid/system/Os;->setsockoptIfreq(Ljava/io/FileDescriptor;IILjava/lang/String  Landroid/system/Os;->setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V  Landroid/system/PacketSocketAddress;-><init>(I[B)V  Landroid/system/PacketSocketAddress;-><init>(SI)V +Landroid/telecom/ParcelableCall;->CREATOR:Landroid/os/Parcelable$Creator; +Landroid/telecom/ParcelableCall;->getConnectTimeMillis()J +Landroid/telecom/ParcelableCall;->getDisconnectCause()Landroid/telecom/DisconnectCause; +Landroid/telecom/ParcelableCall;->getHandle()Landroid/net/Uri; +Landroid/telecom/ParcelableCall;->getId()Ljava/lang/String;  Landroid/telecom/TelecomManager;->from(Landroid/content/Context;)Landroid/telecom/TelecomManager;  Landroid/telecom/VideoProfile$CameraCapabilities;-><init>(IIZF)V  Landroid/telephony/ims/compat/feature/MMTelFeature;-><init>()V @@ -329,6 +431,14 @@ Landroid/telephony/ims/ImsExternalCallState;-><init>(ILandroid/net/Uri;ZIIZ)V  Landroid/telephony/ims/ImsReasonInfo;-><init>(IILjava/lang/String;)V  Landroid/telephony/ims/ImsReasonInfo;-><init>(II)V  Landroid/telephony/ims/ImsStreamMediaProfile;-><init>()V +Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V +Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()V +Landroid/telephony/mbms/vendor/IMbmsStreamingService;->getPlaybackUri(ILjava/lang/String;)Landroid/net/Uri; +Landroid/telephony/mbms/vendor/IMbmsStreamingService;->initialize(Landroid/telephony/mbms/IMbmsStreamingSessionCallback;I)I +Landroid/telephony/mbms/vendor/IMbmsStreamingService;->requestUpdateStreamingServices(ILjava/util/List;)I +Landroid/telephony/mbms/vendor/IMbmsStreamingService;->startStreaming(ILjava/lang/String;Landroid/telephony/mbms/IStreamingServiceCallback;)I +Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService; +Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;I)Ljava/lang/String;  Landroid/telephony/PhoneNumberUtils;->isEmergencyNumber(ILjava/lang/String;)Z  Landroid/telephony/PhoneNumberUtils;->isPotentialEmergencyNumber(ILjava/lang/String;)Z  Landroid/telephony/PhoneNumberUtils;->isPotentialLocalEmergencyNumber(Landroid/content/Context;ILjava/lang/String;)Z @@ -342,12 +452,20 @@ Landroid/telephony/Rlog;->d(Ljava/lang/String;Ljava/lang/String;)I  Landroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;)I  Landroid/telephony/Rlog;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I  Landroid/telephony/Rlog;->i(Ljava/lang/String;Ljava/lang/String;)I +Landroid/telephony/ServiceState;->getDataRegState()I  Landroid/telephony/ServiceState;->getDataRoaming()Z  Landroid/telephony/ServiceState;->getRilDataRadioTechnology()I +Landroid/telephony/ServiceState;->getVoiceNetworkType()I  Landroid/telephony/ServiceState;->getVoiceRegState()I  Landroid/telephony/ServiceState;->isCdma(I)Z  Landroid/telephony/ServiceState;->isEmergencyOnly()Z +Landroid/telephony/ServiceState;->isGsm(I)Z  Landroid/telephony/ServiceState;->mergeServiceStates(Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;)Landroid/telephony/ServiceState; +Landroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String; +Landroid/telephony/SubscriptionInfo;->setDisplayName(Ljava/lang/CharSequence;)V +Landroid/telephony/SubscriptionInfo;->setIconTint(I)V +Landroid/telephony/SubscriptionManager;->clearDefaultsForInactiveSubIds()V +Landroid/telephony/SubscriptionManager;->getDefaultVoicePhoneId()I  Landroid/telephony/SubscriptionManager;->getResourcesForSubId(Landroid/content/Context;I)Landroid/content/res/Resources;  Landroid/telephony/SubscriptionManager;->isActiveSubId(I)Z  Landroid/telephony/SubscriptionManager;->isUsableSubIdValue(I)Z @@ -355,9 +473,18 @@ Landroid/telephony/SubscriptionManager;->isValidPhoneId(I)Z  Landroid/telephony/SubscriptionManager;->isValidSlotIndex(I)Z  Landroid/telephony/SubscriptionManager;->isValidSubscriptionId(I)Z  Landroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;II)V +Landroid/telephony/SubscriptionManager;->putPhoneIdAndSubIdExtra(Landroid/content/Intent;I)V +Landroid/telephony/SubscriptionManager;->setDefaultDataSubId(I)V +Landroid/telephony/SubscriptionManager;->setDisplayName(Ljava/lang/String;IJ)I +Landroid/telephony/SubscriptionManager;->setIconTint(II)I  Landroid/telephony/TelephonyManager;->getIntAtIndex(Landroid/content/ContentResolver;Ljava/lang/String;I)I +Landroid/telephony/TelephonyManager;->getNetworkTypeName()Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getVoiceMessageCount()I  Landroid/telephony/TelephonyManager;->getVoiceNetworkType(I)I +Landroid/telephony/TelephonyManager$MultiSimVariants;->DSDA:Landroid/telephony/TelephonyManager$MultiSimVariants; +Landroid/telephony/TelephonyManager$MultiSimVariants;->DSDS:Landroid/telephony/TelephonyManager$MultiSimVariants;  Landroid/telephony/TelephonyManager;->putIntAtIndex(Landroid/content/ContentResolver;Ljava/lang/String;II)Z +Landroid/text/TextUtils;->isPrintableAsciiOnly(Ljava/lang/CharSequence;)Z  Landroid/util/FloatMath;->ceil(F)F  Landroid/util/FloatMath;->cos(F)F  Landroid/util/FloatMath;->exp(F)F @@ -374,6 +501,9 @@ Landroid/util/LongArray;->add(IJ)V  Landroid/util/LongArray;->get(I)J  Landroid/util/LongArray;-><init>()V  Landroid/util/LongArray;->size()I +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 @@ -525,6 +655,19 @@ Lcom/android/ims/internal/uce/uceservice/IUceService;->isServiceStarted()Z  Lcom/android/ims/internal/uce/uceservice/IUceService;->startService(Lcom/android/ims/internal/uce/uceservice/IUceListener;)Z  Lcom/android/ims/internal/uce/uceservice/IUceService;->stopService()Z  Lcom/android/ims/internal/uce/uceservice/IUceService$Stub;-><init>()V +Lcom/android/internal/app/AlertController$AlertParams;->mIconId:I +Lcom/android/internal/app/AlertController$AlertParams;->mMessage:Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mNegativeButtonListener:Landroid/content/DialogInterface$OnClickListener; +Lcom/android/internal/app/AlertController$AlertParams;->mNegativeButtonText:Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mPositiveButtonListener:Landroid/content/DialogInterface$OnClickListener; +Lcom/android/internal/app/AlertController$AlertParams;->mPositiveButtonText:Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mTitle:Ljava/lang/CharSequence; +Lcom/android/internal/app/AlertController$AlertParams;->mView:Landroid/view/View; +Lcom/android/internal/app/AlertController;->getButton(I)Landroid/widget/Button; +Lcom/android/internal/app/IAppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V +Lcom/android/internal/content/PackageMonitor;-><init>()V +Lcom/android/internal/content/PackageMonitor;->register(Landroid/content/Context;Landroid/os/Looper;Landroid/os/UserHandle;Z)V +Lcom/android/internal/content/PackageMonitor;->unregister()V  Lcom/android/internal/location/ILocationProvider;->disable()V  Lcom/android/internal/location/ILocationProvider;->enable()V  Lcom/android/internal/location/ILocationProvider;->getProperties()Lcom/android/internal/location/ProviderProperties; @@ -532,6 +675,11 @@ Lcom/android/internal/location/ILocationProvider;->getStatus(Landroid/os/Bundle;  Lcom/android/internal/location/ILocationProvider;->getStatusUpdateTime()J  Lcom/android/internal/location/ILocationProvider;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)Z  Lcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V +Lcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider; +Lcom/android/internal/location/ProviderRequest;-><init>()V +Lcom/android/internal/location/ProviderRequest;->interval:J +Lcom/android/internal/location/ProviderRequest;->locationRequests:Ljava/util/List; +Lcom/android/internal/location/ProviderRequest;->reportLocation:Z  Lcom/android/internal/os/BatteryStatsImpl;->getDischargeCurrentLevel()I  Lcom/android/internal/os/BatteryStatsImpl;->getDischargeStartLevel()I  Lcom/android/internal/os/BatteryStatsImpl;->getPhoneOnTime(JI)J @@ -541,7 +689,22 @@ Lcom/android/internal/os/BatteryStatsImpl;->getScreenBrightnessTime(IJI)J  Lcom/android/internal/os/BatteryStatsImpl;->getWifiOnTime(JI)J  Lcom/android/internal/os/SomeArgs;->obtain()Lcom/android/internal/os/SomeArgs;  Lcom/android/internal/os/SomeArgs;->recycle()V +Lcom/android/internal/R$styleable;->NumberPicker:[I +Lcom/android/internal/R$styleable;->TwoLineListItem:[I +Lcom/android/internal/telephony/GsmAlphabet;->gsm7BitPackedToString([BII)Ljava/lang/String; +Lcom/android/internal/telephony/GsmAlphabet;->stringToGsm7BitPacked(Ljava/lang/String;)[B  Lcom/android/internal/telephony/ITelephony;->getDataEnabled(I)Z +Lcom/android/internal/telephony/OperatorInfo;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/telephony/OperatorInfo;->getOperatorAlphaLong()Ljava/lang/String; +Lcom/android/internal/telephony/OperatorInfo;->getOperatorAlphaShort()Ljava/lang/String; +Lcom/android/internal/telephony/OperatorInfo;->getOperatorNumeric()Ljava/lang/String; +Lcom/android/internal/telephony/OperatorInfo;->getState()Lcom/android/internal/telephony/OperatorInfo$State; +Lcom/android/internal/telephony/OperatorInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/OperatorInfo$State;->CURRENT:Lcom/android/internal/telephony/OperatorInfo$State; +Lcom/android/internal/telephony/OperatorInfo$State;->FORBIDDEN:Lcom/android/internal/telephony/OperatorInfo$State; +Lcom/android/internal/util/AsyncChannel;->connect(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V +Lcom/android/internal/util/AsyncChannel;-><init>()V +Lcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V  Lcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()Lcom/android/internal/util/IndentingPrintWriter;  Lcom/android/internal/util/IndentingPrintWriter;->increaseIndent()Lcom/android/internal/util/IndentingPrintWriter;  Lcom/android/internal/util/IndentingPrintWriter;-><init>(Ljava/io/Writer;Ljava/lang/String;)V @@ -550,3 +713,4 @@ Lcom/android/internal/util/XmlUtils;->nextElement(Lorg/xmlpull/v1/XmlPullParser;  Ljava/lang/System;->arraycopy([BI[BII)V  Ljava/net/Inet4Address;->ALL:Ljava/net/InetAddress;  Ljava/net/Inet4Address;->ANY:Ljava/net/InetAddress; +Ljava/net/Inet6Address;->ANY:Ljava/net/InetAddress; diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index fde7e961b843..d4ab4265b3fb 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -16,6 +16,15 @@  package com.android.internal.widget; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_MANAGED; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; +  import android.annotation.IntDef;  import android.annotation.Nullable;  import android.app.admin.DevicePolicyManager; @@ -59,7 +68,6 @@ import java.security.SecureRandom;  import java.util.ArrayList;  import java.util.Collection;  import java.util.List; -  /**   * Utilities for the lock pattern and its settings.   */ @@ -585,7 +593,7 @@ public class LockPatternUtils {              return quality;          } -        return DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; +        return PASSWORD_QUALITY_UNSPECIFIED;      }      /** @@ -604,13 +612,16 @@ public class LockPatternUtils {       * Clear any lock pattern or password.       */      public void clearLock(String savedCredential, int userHandle) { -        setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userHandle); +        final int currentQuality = getKeyguardStoredPasswordQuality(userHandle); +        setKeyguardStoredPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED, userHandle);          try{              getLockSettings().setLockCredential(null, CREDENTIAL_TYPE_NONE, savedCredential, -                    DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userHandle); -        } catch (RemoteException e) { -            // well, we tried... +                    PASSWORD_QUALITY_UNSPECIFIED, userHandle); +        } catch (Exception e) { +            Log.e(TAG, "Failed to clear lock", e); +            setKeyguardStoredPasswordQuality(currentQuality, userHandle); +            return;          }          if (userHandle == UserHandle.USER_SYSTEM) { @@ -669,32 +680,34 @@ public class LockPatternUtils {       * @param userId the user whose pattern is to be saved.       */      public void saveLockPattern(List<LockPatternView.Cell> pattern, String savedPattern, int userId) { -        try { -            if (pattern == null || pattern.size() < MIN_LOCK_PATTERN_SIZE) { -                throw new IllegalArgumentException("pattern must not be null and at least " -                        + MIN_LOCK_PATTERN_SIZE + " dots long."); -            } - -            setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, userId); -            getLockSettings().setLockCredential(patternToString(pattern), CREDENTIAL_TYPE_PATTERN, -                    savedPattern, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, userId); +        if (pattern == null || pattern.size() < MIN_LOCK_PATTERN_SIZE) { +            throw new IllegalArgumentException("pattern must not be null and at least " +                    + MIN_LOCK_PATTERN_SIZE + " dots long."); +        } -            // Update the device encryption password. -            if (userId == UserHandle.USER_SYSTEM -                    && LockPatternUtils.isDeviceEncryptionEnabled()) { -                if (!shouldEncryptWithCredentials(true)) { -                    clearEncryptionPassword(); -                } else { -                    String stringPattern = patternToString(pattern); -                    updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern); -                } +        final String stringPattern = patternToString(pattern); +        final int currentQuality = getKeyguardStoredPasswordQuality(userId); +        setKeyguardStoredPasswordQuality(PASSWORD_QUALITY_SOMETHING, userId); +        try { +            getLockSettings().setLockCredential(stringPattern, CREDENTIAL_TYPE_PATTERN, +                    savedPattern, PASSWORD_QUALITY_SOMETHING, userId); +        } catch (Exception e) { +            Log.e(TAG, "Couldn't save lock pattern", e); +            setKeyguardStoredPasswordQuality(currentQuality, userId); +            return; +        } +        // Update the device encryption password. +        if (userId == UserHandle.USER_SYSTEM +                && LockPatternUtils.isDeviceEncryptionEnabled()) { +            if (!shouldEncryptWithCredentials(true)) { +                clearEncryptionPassword(); +            } else { +                updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern);              } - -            reportPatternWasChosen(userId); -            onAfterChangingPassword(userId); -        } catch (RemoteException re) { -            Log.e(TAG, "Couldn't save lock pattern " + re);          } + +        reportPatternWasChosen(userId); +        onAfterChangingPassword(userId);      }      private void updateCryptoUserInfo(int userId) { @@ -796,25 +809,27 @@ public class LockPatternUtils {       */      public void saveLockPassword(String password, String savedPassword, int requestedQuality,              int userHandle) { -        try { -            if (password == null || password.length() < MIN_LOCK_PASSWORD_SIZE) { -                throw new IllegalArgumentException("password must not be null and at least " -                        + "of length " + MIN_LOCK_PASSWORD_SIZE); -            } - -            setLong(PASSWORD_TYPE_KEY, -                    computePasswordQuality(CREDENTIAL_TYPE_PASSWORD, password, requestedQuality), -                    userHandle); -            getLockSettings().setLockCredential(password, CREDENTIAL_TYPE_PASSWORD, savedPassword, -                    requestedQuality, userHandle); +        if (password == null || password.length() < MIN_LOCK_PASSWORD_SIZE) { +            throw new IllegalArgumentException("password must not be null and at least " +                    + "of length " + MIN_LOCK_PASSWORD_SIZE); +        } -            updateEncryptionPasswordIfNeeded(password, -                    PasswordMetrics.computeForPassword(password).quality, userHandle); -            updatePasswordHistory(password, userHandle); -        } catch (RemoteException re) { -            // Cant do much -            Log.e(TAG, "Unable to save lock password " + re); +        final int currentQuality = getKeyguardStoredPasswordQuality(userHandle); +        setKeyguardStoredPasswordQuality( +                computePasswordQuality(CREDENTIAL_TYPE_PASSWORD, password, requestedQuality), +                userHandle); +        try { +            getLockSettings().setLockCredential(password, CREDENTIAL_TYPE_PASSWORD, +                    savedPassword, requestedQuality, userHandle); +        } catch (Exception e) { +            Log.e(TAG, "Unable to save lock password", e); +            setKeyguardStoredPasswordQuality(currentQuality, userHandle); +            return;          } + +        updateEncryptionPasswordIfNeeded(password, +                PasswordMetrics.computeForPassword(password).quality, userHandle); +        updatePasswordHistory(password, userHandle);      }      /** @@ -828,9 +843,8 @@ public class LockPatternUtils {              if (!shouldEncryptWithCredentials(true)) {                  clearEncryptionPassword();              } else { -                boolean numeric = quality == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; -                boolean numericComplex = quality -                        == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; +                boolean numeric = quality == PASSWORD_QUALITY_NUMERIC; +                boolean numericComplex = quality == PASSWORD_QUALITY_NUMERIC_COMPLEX;                  int type = numeric || numericComplex ? StorageManager.CRYPT_TYPE_PIN                          : StorageManager.CRYPT_TYPE_PASSWORD;                  updateEncryptionPassword(type, password); @@ -894,8 +908,11 @@ public class LockPatternUtils {       * @return stored password quality       */      public int getKeyguardStoredPasswordQuality(int userHandle) { -        return (int) getLong(PASSWORD_TYPE_KEY, -                DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, userHandle); +        return (int) getLong(PASSWORD_TYPE_KEY, PASSWORD_QUALITY_UNSPECIFIED, userHandle); +    } + +    private void setKeyguardStoredPasswordQuality(int quality, int userHandle) { +        setLong(PASSWORD_TYPE_KEY, quality, userHandle);      }      /** @@ -909,9 +926,9 @@ public class LockPatternUtils {              int computedQuality = PasswordMetrics.computeForPassword(credential).quality;              quality = Math.max(requestedQuality, computedQuality);          } else if (type == CREDENTIAL_TYPE_PATTERN)  { -            quality = DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; +            quality = PASSWORD_QUALITY_SOMETHING;          } else /* if (type == CREDENTIAL_TYPE_NONE) */ { -            quality = DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; +            quality = PASSWORD_QUALITY_UNSPECIFIED;          }          return quality;      } @@ -1125,12 +1142,12 @@ public class LockPatternUtils {      }      private boolean isLockPasswordEnabled(int mode, int userId) { -        final boolean passwordEnabled = mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC -                || mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC -                || mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX -                || mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC -                || mode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX -                || mode == DevicePolicyManager.PASSWORD_QUALITY_MANAGED; +        final boolean passwordEnabled = mode == PASSWORD_QUALITY_ALPHABETIC +                || mode == PASSWORD_QUALITY_NUMERIC +                || mode == PASSWORD_QUALITY_NUMERIC_COMPLEX +                || mode == PASSWORD_QUALITY_ALPHANUMERIC +                || mode == PASSWORD_QUALITY_COMPLEX +                || mode == PASSWORD_QUALITY_MANAGED;          return passwordEnabled && savedPasswordExists(userId);      } @@ -1155,8 +1172,7 @@ public class LockPatternUtils {      }      private boolean isLockPatternEnabled(int mode, int userId) { -        return mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING -                && savedPatternExists(userId); +        return mode == PASSWORD_QUALITY_SOMETHING && savedPatternExists(userId);      }      /** @@ -1551,7 +1567,7 @@ public class LockPatternUtils {                      token, quality, userId)) {                  return false;              } -            setLong(PASSWORD_TYPE_KEY, quality, userId); +            setKeyguardStoredPasswordQuality(quality, userId);              updateEncryptionPasswordIfNeeded(credential, quality, userId);              updatePasswordHistory(credential, userId); @@ -1560,12 +1576,10 @@ public class LockPatternUtils {                  throw new IllegalArgumentException("password must be emtpy for NONE type");              }              if (!localService.setLockCredentialWithToken(null, CREDENTIAL_TYPE_NONE, -                    tokenHandle, token, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, -                    userId)) { +                    tokenHandle, token, PASSWORD_QUALITY_UNSPECIFIED, userId)) {                  return false;              } -            setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, -                    userId); +            setKeyguardStoredPasswordQuality(PASSWORD_QUALITY_UNSPECIFIED, userId);              if (userId == UserHandle.USER_SYSTEM) {                  // Set the encryption password to default. diff --git a/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml b/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml index 3345f61a3cf2..6a7f18b80b9f 100644 --- a/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml +++ b/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml @@ -20,6 +20,6 @@          android:viewportWidth="24.0"          android:viewportHeight="24.0">      <path -        android:pathData="M20.000000,5.000000L4.000000,5.000000C2.900000,5.000000 2.000000,5.900000 2.000000,7.000000l0.000000,10.000000c0.000000,1.100000 0.900000,2.000000 2.000000,2.000000l16.000000,0.000000c1.100000,0.000000 2.000000,-0.900000 2.000000,-2.000000L22.000000,7.000000C22.000000,5.900000 21.100000,5.000000 20.000000,5.000000zM11.000000,8.000000l2.000000,0.000000l0.000000,2.000000l-2.000000,0.000000L11.000000,8.000000zM11.000000,11.000000l2.000000,0.000000l0.000000,2.000000l-2.000000,0.000000L11.000000,11.000000zM8.000000,8.000000l2.000000,0.000000l0.000000,2.000000L8.000000,10.000000L8.000000,8.000000zM8.000000,11.000000l2.000000,0.000000l0.000000,2.000000L8.000000,13.000000L8.000000,11.000000zM7.000000,13.000000L5.000000,13.000000l0.000000,-2.000000l2.000000,0.000000L7.000000,13.000000zM7.000000,10.000000L5.000000,10.000000L5.000000,8.000000l2.000000,0.000000L7.000000,10.000000zM16.000000,17.000000L8.000000,17.000000l0.000000,-2.000000l8.000000,0.000000L16.000000,17.000000zM16.000000,13.000000l-2.000000,0.000000l0.000000,-2.000000l2.000000,0.000000L16.000000,13.000000zM16.000000,10.000000l-2.000000,0.000000L14.000000,8.000000l2.000000,0.000000L16.000000,10.000000zM19.000000,13.000000l-2.000000,0.000000l0.000000,-2.000000l2.000000,0.000000L19.000000,13.000000zM19.000000,10.000000l-2.000000,0.000000L17.000000,8.000000l2.000000,0.000000L19.000000,10.000000z" +        android:pathData="M21,4H3C1.9,4 1,4.9 1,6v13c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2V6C23,4.9 22.1,4 21,4zM21,19H3V6h18V19zM9,8h2v2H9V8zM5,8h2v2H5V8zM8,16h8v1H8V16zM13,8h2v2h-2V8zM9,12h2v2H9V12zM5,12h2v2H5V12zM13,12h2v2h-2V12zM17,8h2v2h-2V8zM17,12h2v2h-2V12z"          android:fillColor="?attr/singleToneColor"/>  </vector> diff --git a/packages/SystemUI/res/layout/rounded_corners.xml b/packages/SystemUI/res/layout/rounded_corners.xml index 734c877d7829..26cf7920c35b 100644 --- a/packages/SystemUI/res/layout/rounded_corners.xml +++ b/packages/SystemUI/res/layout/rounded_corners.xml @@ -14,7 +14,7 @@  ** See the License for the specific language governing permissions and  ** limitations under the License.  --> -<FrameLayout +<com.android.systemui.RegionInterceptingFrameLayout      xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent"> @@ -32,4 +32,4 @@          android:tint="#ff000000"          android:layout_gravity="right|bottom"          android:src="@drawable/rounded" /> -</FrameLayout> +</com.android.systemui.RegionInterceptingFrameLayout> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index c5b32222e2b1..3c8a69510f45 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1845,7 +1845,7 @@      <string name="right_icon">Right icon</string>      <!-- Label for area where tiles can be dragged out of [CHAR LIMIT=60] --> -    <string name="drag_to_add_tiles">Drag to add tiles</string> +    <string name="drag_to_add_tiles">Hold and drag to add tiles</string>      <!-- Label for area where tiles can be dragged in to [CHAR LIMIT=60] -->      <string name="drag_to_remove_tiles">Drag here to remove</string> diff --git a/packages/SystemUI/src/com/android/systemui/RegionInterceptingFrameLayout.java b/packages/SystemUI/src/com/android/systemui/RegionInterceptingFrameLayout.java new file mode 100644 index 000000000000..646f69eede94 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/RegionInterceptingFrameLayout.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui; + +import android.content.Context; +import android.graphics.Region; +import android.graphics.Region.Op; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.InternalInsetsInfo; +import android.view.ViewTreeObserver.OnComputeInternalInsetsListener; +import android.widget.FrameLayout; + +/** + * Frame layout that will intercept the touches of children if they want to + */ +public class RegionInterceptingFrameLayout extends FrameLayout { +    public RegionInterceptingFrameLayout(Context context) { +        super(context); +    } + +    public RegionInterceptingFrameLayout(Context context, AttributeSet attrs) { +        super(context, attrs); +    } + +    public RegionInterceptingFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { +        super(context, attrs, defStyleAttr); +    } + +    public RegionInterceptingFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, +            int defStyleRes) { +        super(context, attrs, defStyleAttr, defStyleRes); +    } + +    @Override +    protected void onAttachedToWindow() { +        super.onAttachedToWindow(); +        getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsListener); +    } + +    @Override +    protected void onDetachedFromWindow() { +        super.onDetachedFromWindow(); +        getViewTreeObserver().removeOnComputeInternalInsetsListener(mInsetsListener); +    } + +    private final OnComputeInternalInsetsListener mInsetsListener = internalInsetsInfo -> { +        internalInsetsInfo.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_REGION); +        internalInsetsInfo.touchableRegion.setEmpty(); +        for (int i = 0; i < getChildCount(); i++) { +            View child = getChildAt(i); +            if (!(child instanceof RegionInterceptableView)) { +                continue; +            } +            RegionInterceptableView riv = (RegionInterceptableView) child; +            if (!riv.shouldInterceptTouch()) { +                continue; +            } +            Region unionRegion = riv.getInterceptRegion(); +            if (unionRegion == null) { +                continue; +            } + +            internalInsetsInfo.touchableRegion.op(riv.getInterceptRegion(), Op.UNION); +        } +    }; + +    public interface RegionInterceptableView { +        default public boolean shouldInterceptTouch() { +            return false; +        } + +        public Region getInterceptRegion(); +    } +} diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java index 9a20c81c4919..a0fa69e61f20 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java @@ -49,6 +49,7 @@ import android.view.WindowManager;  import android.widget.FrameLayout;  import android.widget.ImageView; +import com.android.systemui.RegionInterceptingFrameLayout.RegionInterceptableView;  import com.android.systemui.fragments.FragmentHostManager;  import com.android.systemui.fragments.FragmentHostManager.FragmentListener;  import com.android.systemui.plugins.qs.QS; @@ -232,8 +233,7 @@ public class ScreenDecorations extends SystemUI implements Tunable {                  ViewGroup.LayoutParams.MATCH_PARENT,                  LayoutParams.WRAP_CONTENT,                  WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, -                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE -                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE +                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE                          | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL                          | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH                          | WindowManager.LayoutParams.FLAG_SLIPPERY @@ -317,7 +317,8 @@ public class ScreenDecorations extends SystemUI implements Tunable {          }      } -    public static class DisplayCutoutView extends View implements DisplayManager.DisplayListener { +    public static class DisplayCutoutView extends View implements DisplayManager.DisplayListener, +            RegionInterceptableView {          private final DisplayInfo mInfo = new DisplayInfo();          private final Paint mPaint = new Paint(); @@ -468,5 +469,19 @@ public class ScreenDecorations extends SystemUI implements Tunable {                  }              }          } + +        @Override +        public boolean shouldInterceptTouch() { +            return mInfo.displayCutout != null && getVisibility() == VISIBLE; +        } + +        @Override +        public Region getInterceptRegion() { +            if (mInfo.displayCutout == null) { +                return null; +            } + +            return mInfo.displayCutout.getBounds(); +        }      }  } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index b493d7a0e7ed..a39800d156c9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -464,7 +464,10 @@ public class NavigationBarFragment extends Fragment implements Callbacks {      private void onRotationSuggestionsDisabled() {          // Immediately hide the rotate button and clear any planned removal          setRotateSuggestionButtonState(false, true); -        getView().removeCallbacks(mRemoveRotationProposal); + +        // This method can be called before view setup is done, ensure getView isn't null +        final View v = getView(); +        if (v != null) v.removeCallbacks(mRemoveRotationProposal);      }      private void showAndLogRotationSuggestion() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 5c91fd5aa70e..6852df65918c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -1146,6 +1146,14 @@ public class NotificationPanelView extends PanelView implements          @Override          public void run() {              mKeyguardStatusViewAnimating = false; +            mKeyguardStatusView.setVisibility(View.INVISIBLE); +        } +    }; + +    private final Runnable mAnimateKeyguardStatusViewGoneEndRunnable = new Runnable() { +        @Override +        public void run() { +            mKeyguardStatusViewAnimating = false;              mKeyguardStatusView.setVisibility(View.GONE);          }      }; @@ -1234,16 +1242,17 @@ public class NotificationPanelView extends PanelView implements      private void setKeyguardStatusViewVisibility(int statusBarState, boolean keyguardFadingAway,              boolean goingToFullShade) { +        mKeyguardStatusView.animate().cancel(); +        mKeyguardStatusViewAnimating = false;          if ((!keyguardFadingAway && mStatusBarState == StatusBarState.KEYGUARD                  && statusBarState != StatusBarState.KEYGUARD) || goingToFullShade) { -            mKeyguardStatusView.animate().cancel();              mKeyguardStatusViewAnimating = true;              mKeyguardStatusView.animate()                      .alpha(0f)                      .setStartDelay(0)                      .setDuration(160)                      .setInterpolator(Interpolators.ALPHA_OUT) -                    .withEndAction(mAnimateKeyguardStatusViewInvisibleEndRunnable); +                    .withEndAction(mAnimateKeyguardStatusViewGoneEndRunnable);              if (keyguardFadingAway) {                  mKeyguardStatusView.animate()                          .setStartDelay(mStatusBar.getKeyguardFadingAwayDelay()) @@ -1252,7 +1261,6 @@ public class NotificationPanelView extends PanelView implements              }          } else if (mStatusBarState == StatusBarState.SHADE_LOCKED                  && statusBarState == StatusBarState.KEYGUARD) { -            mKeyguardStatusView.animate().cancel();              mKeyguardStatusView.setVisibility(View.VISIBLE);              mKeyguardStatusViewAnimating = true;              mKeyguardStatusView.setAlpha(0f); @@ -1263,13 +1271,21 @@ public class NotificationPanelView extends PanelView implements                      .setInterpolator(Interpolators.ALPHA_IN)                      .withEndAction(mAnimateKeyguardStatusViewVisibleEndRunnable);          } else if (statusBarState == StatusBarState.KEYGUARD) { -            mKeyguardStatusView.animate().cancel(); -            mKeyguardStatusViewAnimating = false; -            mKeyguardStatusView.setVisibility(View.VISIBLE); -            mKeyguardStatusView.setAlpha(1f); +            if (keyguardFadingAway) { +                mKeyguardStatusViewAnimating = true; +                mKeyguardStatusView.animate() +                        .alpha(0) +                        .translationYBy(-getHeight() * 0.05f) +                        .setInterpolator(Interpolators.FAST_OUT_LINEAR_IN) +                        .setDuration(125) +                        .setStartDelay(0) +                        .withEndAction(mAnimateKeyguardStatusViewInvisibleEndRunnable) +                        .start(); +            } else { +                mKeyguardStatusView.setVisibility(View.VISIBLE); +                mKeyguardStatusView.setAlpha(1f); +            }          } else { -            mKeyguardStatusView.animate().cancel(); -            mKeyguardStatusViewAnimating = false;              mKeyguardStatusView.setVisibility(View.GONE);              mKeyguardStatusView.setAlpha(1f);          } @@ -2728,4 +2744,13 @@ public class NotificationPanelView extends PanelView implements              HeadsUpAppearanceController headsUpAppearanceController) {          mHeadsUpAppearanceController = headsUpAppearanceController;      } + +    /** +     * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the +     * security view of the bouncer. +     */ +    public void onBouncerPreHideAnimation() { +        setKeyguardStatusViewVisibility(mStatusBarState, true /* keyguardFadingAway */, +                false /* goingToFullShade */); +    }  } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 8b23fdb4c44a..a9c467ece194 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -377,6 +377,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb      public void startPreHideAnimation(Runnable finishRunnable) {          if (mBouncer.isShowing()) {              mBouncer.startPreHideAnimation(finishRunnable); +            mNotificationPanelView.onBouncerPreHideAnimation();          } else if (finishRunnable != null) {              finishRunnable.run();          } diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index d6f6c6cf1fc3..4cac70721128 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -215,13 +215,6 @@ public class BackupManagerService implements BackupManagerServiceInterface {      // Timeout interval for deciding that a bind or clear-data has taken too long      private static final long TIMEOUT_INTERVAL = 10 * 1000; -    // Timeout intervals for agent backup & restore operations -    public static final long TIMEOUT_BACKUP_INTERVAL = 30 * 1000; -    public static final long TIMEOUT_FULL_BACKUP_INTERVAL = 5 * 60 * 1000; -    public static final long TIMEOUT_SHARED_BACKUP_INTERVAL = 30 * 60 * 1000; -    public static final long TIMEOUT_RESTORE_INTERVAL = 60 * 1000; -    public static final long TIMEOUT_RESTORE_FINISHED_INTERVAL = 30 * 1000; -      // User confirmation timeout for a full backup/restore operation.  It's this long in      // order to give them time to enter the backup password.      private static final long TIMEOUT_FULL_CONFIRMATION = 60 * 1000; @@ -232,6 +225,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {      private static final int BUSY_BACKOFF_FUZZ = 1000 * 60 * 60 * 2;  // two hours      private BackupManagerConstants mConstants; +    private BackupAgentTimeoutParameters mAgentTimeoutParameters;      private Context mContext;      private PackageManager mPackageManager;      private IPackageManager mPackageManagerBinder; @@ -315,6 +309,10 @@ public class BackupManagerService implements BackupManagerServiceInterface {          return mConstants;      } +    public BackupAgentTimeoutParameters getAgentTimeoutParameters() { +        return mAgentTimeoutParameters; +    } +      public Context getContext() {          return mContext;      } @@ -856,6 +854,10 @@ public class BackupManagerService implements BackupManagerServiceInterface {          // require frequent starting and stopping.          mConstants.start(); +        mAgentTimeoutParameters = new +                BackupAgentTimeoutParameters(mBackupHandler, mContext.getContentResolver()); +        mAgentTimeoutParameters.start(); +          // Set up the various sorts of package tracking we do          mFullBackupScheduleFile = new File(mBaseStateDir, "fb-schedule");          initPackageTracking(); @@ -3407,7 +3409,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {              }              mActiveRestoreSession = new ActiveRestoreSession(this, packageName, transport);              mBackupHandler.sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, -                    TIMEOUT_RESTORE_INTERVAL); +                    mAgentTimeoutParameters.getRestoreAgentTimeoutMillis());          }          return mActiveRestoreSession;      } diff --git a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java index 7b021c64eaf8..aabe7f611845 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java +++ b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java @@ -191,4 +191,7 @@ public interface BackupManagerServiceInterface {    void dump(FileDescriptor fd, PrintWriter pw, String[] args);    IBackupManager getBackupManagerBinder(); + +  // Gets access to the backup/restore agent timeout parameters. +  BackupAgentTimeoutParameters getAgentTimeoutParameters();  } diff --git a/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java b/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java index 47558775d19e..f08c65597a4b 100644 --- a/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java +++ b/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java @@ -4,8 +4,8 @@ import static android.os.ParcelFileDescriptor.MODE_CREATE;  import static android.os.ParcelFileDescriptor.MODE_READ_ONLY;  import static android.os.ParcelFileDescriptor.MODE_READ_WRITE;  import static android.os.ParcelFileDescriptor.MODE_TRUNCATE; +  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; -import static com.android.server.backup.BackupManagerService.TIMEOUT_BACKUP_INTERVAL;  import android.app.ApplicationThreadConstants;  import android.app.IBackupAgent; @@ -59,6 +59,7 @@ public class KeyValueAdbBackupEngine {      private ParcelFileDescriptor mSavedState;      private ParcelFileDescriptor mBackupData;      private ParcelFileDescriptor mNewState; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      public KeyValueAdbBackupEngine(OutputStream output, PackageInfo packageInfo,              BackupManagerServiceInterface backupManagerService, PackageManager packageManager, @@ -81,6 +82,7 @@ public class KeyValueAdbBackupEngine {                  pkg + BACKUP_KEY_VALUE_NEW_STATE_FILENAME_SUFFIX);          mManifestFile = new File(mDataDir, BackupManagerService.BACKUP_MANIFEST_FILENAME); +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      public void backupOnePackage() throws IOException { @@ -148,8 +150,9 @@ public class KeyValueAdbBackupEngine {      // Return true on backup success, false otherwise      private boolean invokeAgentForAdbBackup(String packageName, IBackupAgent agent) {          int token = mBackupManagerService.generateRandomIntegerToken(); +        long kvBackupAgentTimeoutMillis = mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis();          try { -            mBackupManagerService.prepareOperationTimeout(token, TIMEOUT_BACKUP_INTERVAL, null, +            mBackupManagerService.prepareOperationTimeout(token, kvBackupAgentTimeoutMillis, null,                      OP_TYPE_BACKUP_WAIT);              // Start backup and wait for BackupManagerService to get callback for success or timeout @@ -231,14 +234,14 @@ public class KeyValueAdbBackupEngine {      }      private void writeBackupData() throws IOException { -          int token = mBackupManagerService.generateRandomIntegerToken(); +        long kvBackupAgentTimeoutMillis = mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis();          ParcelFileDescriptor[] pipes = null;          try {              pipes = ParcelFileDescriptor.createPipe(); -            mBackupManagerService.prepareOperationTimeout(token, TIMEOUT_BACKUP_INTERVAL, null, +            mBackupManagerService.prepareOperationTimeout(token, kvBackupAgentTimeoutMillis, null,                      OP_TYPE_BACKUP_WAIT);              // We will have to create a runnable that will read the manifest and backup data we diff --git a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java index 0582abac91d4..597da21c7204 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java +++ b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java @@ -25,9 +25,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT;  import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; -import static com.android.server.backup.BackupManagerService -        .TIMEOUT_SHARED_BACKUP_INTERVAL;  import android.app.ApplicationThreadConstants;  import android.app.IBackupAgent; @@ -45,8 +42,9 @@ import android.util.Slog;  import android.util.StringBuilderPrinter;  import com.android.server.AppWidgetBackupBridge; -import com.android.server.backup.BackupRestoreTask; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService; +import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.utils.FullBackupUtils;  import java.io.BufferedOutputStream; @@ -75,6 +73,7 @@ public class FullBackupEngine {      private final long mQuota;      private final int mOpToken;      private final int mTransportFlags; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      class FullBackupRunner implements Runnable { @@ -137,8 +136,8 @@ public class FullBackupEngine {                  final boolean isSharedStorage =                          mPackage.packageName.equals(SHARED_BACKUP_AGENT_PACKAGE);                  final long timeout = isSharedStorage ? -                        TIMEOUT_SHARED_BACKUP_INTERVAL : -                        TIMEOUT_FULL_BACKUP_INTERVAL; +                        mAgentTimeoutParameters.getSharedBackupAgentTimeoutMillis() : +                        mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();                  if (DEBUG) {                      Slog.d(TAG, "Calling doFullBackup() on " + mPackage.packageName); @@ -180,6 +179,7 @@ public class FullBackupEngine {          mQuota = quota;          mOpToken = opToken;          mTransportFlags = transportFlags; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      public int preflightCheck() throws RemoteException { diff --git a/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java b/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java index 40b6967a729a..d441cf6a78e1 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java +++ b/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java @@ -19,7 +19,6 @@ package com.android.server.backup.fullbackup;  import static com.android.server.backup.BackupManagerService.MORE_DEBUG;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL;  import android.app.backup.IBackupManager;  import android.content.ComponentName; @@ -33,6 +32,7 @@ import android.os.UserHandle;  import android.util.Slog;  import com.android.internal.backup.IObbBackupService; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.utils.FullBackupUtils; @@ -46,10 +46,12 @@ public class FullBackupObbConnection implements ServiceConnection {      private BackupManagerService backupManagerService;      volatile IObbBackupService mService; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      public FullBackupObbConnection(BackupManagerService backupManagerService) {          this.backupManagerService = backupManagerService;          mService = null; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      public void establish() { @@ -75,8 +77,10 @@ public class FullBackupObbConnection implements ServiceConnection {          try {              pipes = ParcelFileDescriptor.createPipe();              int token = backupManagerService.generateRandomIntegerToken(); +            long fullBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();              backupManagerService.prepareOperationTimeout( -                    token, TIMEOUT_FULL_BACKUP_INTERVAL, null, OP_TYPE_BACKUP_WAIT); +                    token, fullBackupAgentTimeoutMillis, null, OP_TYPE_BACKUP_WAIT);              mService.backupObbs(pkg.packageName, pipes[1], token,                      backupManagerService.getBackupManagerBinder());              FullBackupUtils.routeSocketDataToOutput(pipes[0], out); diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java index 2c2dd8528cb1..1ea3eb5fc2e8 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java +++ b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java @@ -22,7 +22,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG;  import static com.android.server.backup.BackupManagerService.OP_PENDING;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL;  import android.annotation.Nullable;  import android.app.IBackupAgent; @@ -44,6 +43,7 @@ import android.util.Slog;  import com.android.internal.backup.IBackupTransport;  import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.FullBackupJob;  import com.android.server.backup.BackupManagerService; @@ -146,6 +146,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba      private volatile boolean mIsDoingBackup;      private volatile boolean mCancelAll;      private final int mCurrentOpToken; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      public PerformFullTransportBackupTask(BackupManagerService backupManagerService,              TransportClient transportClient, @@ -167,6 +168,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba          mUserInitiated = userInitiated;          mCurrentOpToken = backupManagerService.generateRandomIntegerToken();          mBackupRunnerOpToken = backupManagerService.generateRandomIntegerToken(); +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();          if (backupManagerService.isBackupOperationInProgress()) {              if (DEBUG) { @@ -698,9 +700,11 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba          @Override          public int preflightFullBackup(PackageInfo pkg, IBackupAgent agent) {              int result; +            long fullBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();              try {                  backupManagerService.prepareOperationTimeout( -                        mCurrentOpToken, TIMEOUT_FULL_BACKUP_INTERVAL, this, OP_TYPE_BACKUP_WAIT); +                        mCurrentOpToken, fullBackupAgentTimeoutMillis, this, OP_TYPE_BACKUP_WAIT);                  backupManagerService.addBackupTrace("preflighting");                  if (MORE_DEBUG) {                      Slog.d(TAG, "Preflighting full payload of " + pkg.packageName); @@ -713,7 +717,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba                  // timeout had been produced.  In case of a real backstop timeout, mResult                  // will still contain the value it was constructed with, AGENT_ERROR, which                  // intentionaly falls into the "just report failure" code. -                mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); +                mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS);                  long totalSize = mResult.get();                  // If preflight timed out, mResult will contain error code as int. @@ -769,8 +773,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba          @Override          public long getExpectedSizeOrErrorCode() { +            long fullBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();              try { -                mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); +                mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS);                  return mResult.get();              } catch (InterruptedException e) {                  return BackupTransport.NO_MORE_DATA; @@ -863,8 +869,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba          // If preflight succeeded, returns positive number - preflight size,          // otherwise return negative error code.          long getPreflightResultBlocking() { +            long fullBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();              try { -                mPreflightLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); +                mPreflightLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS);                  if (mIsCancelled) {                      return BackupManager.ERROR_BACKUP_CANCELLED;                  } @@ -879,8 +887,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba          }          int getBackupResultBlocking() { +            long fullBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();              try { -                mBackupLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); +                mBackupLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS);                  if (mIsCancelled) {                      return BackupManager.ERROR_BACKUP_CANCELLED;                  } 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 136fada43b1f..58868627ee2b 100644 --- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java +++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java @@ -19,7 +19,6 @@ package com.android.server.backup.internal;  import static com.android.server.backup.BackupManagerService.DEBUG;  import static com.android.server.backup.BackupManagerService.MORE_DEBUG;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL;  import android.app.backup.RestoreSet;  import android.content.Intent; @@ -34,6 +33,7 @@ import android.util.Slog;  import com.android.internal.backup.IBackupTransport;  import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.DataChangedJournal; @@ -81,10 +81,12 @@ public class BackupHandler extends Handler {      public static final int MSG_OP_COMPLETE = 21;      private final BackupManagerService backupManagerService; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      public BackupHandler(BackupManagerService backupManagerService, Looper looper) {          super(looper);          this.backupManagerService = backupManagerService; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      public void handleMessage(Message msg) { @@ -322,7 +324,8 @@ public class BackupHandler extends Handler {                      // Done: reset the session timeout clock                      removeMessages(MSG_RESTORE_SESSION_TIMEOUT); -                    sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, TIMEOUT_RESTORE_INTERVAL); +                    sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, +                            mAgentTimeoutParameters.getRestoreAgentTimeoutMillis());                      params.listener.onFinished(callerLogString);                  } diff --git a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java index 11394e66a0f0..0313066656d8 100644 --- a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java +++ b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java @@ -24,7 +24,6 @@ import static com.android.server.backup.BackupManagerService.OP_PENDING;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP;  import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT;  import static com.android.server.backup.BackupManagerService.PACKAGE_MANAGER_SENTINEL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_BACKUP_INTERVAL;  import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_OPERATION_TIMEOUT;  import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_RESTORE_STEP; @@ -57,6 +56,7 @@ import com.android.internal.annotations.GuardedBy;  import com.android.internal.backup.IBackupTransport;  import com.android.server.AppWidgetBackupBridge;  import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.DataChangedJournal;  import com.android.server.backup.KeyValueBackupJob; @@ -142,6 +142,7 @@ public class PerformBackupTask implements BackupRestoreTask {      private boolean mFinished;      private final boolean mUserInitiated;      private final boolean mNonIncremental; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      private volatile boolean mCancelAll; @@ -162,6 +163,7 @@ public class PerformBackupTask implements BackupRestoreTask {          mPendingFullBackups = pendingFullBackups;          mUserInitiated = userInitiated;          mNonIncremental = nonIncremental; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();          mStateDir = new File(backupManagerService.getBaseStateDir(), dirName);          mCurrentOpToken = backupManagerService.generateRandomIntegerToken(); @@ -711,8 +713,10 @@ public class PerformBackupTask implements BackupRestoreTask {              // Initiate the target's backup pass              backupManagerService.addBackupTrace("setting timeout"); +            long kvBackupAgentTimeoutMillis = +                    mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis();              backupManagerService.prepareOperationTimeout( -                    mEphemeralOpToken, TIMEOUT_BACKUP_INTERVAL, this, OP_TYPE_BACKUP_WAIT); +                    mEphemeralOpToken, kvBackupAgentTimeoutMillis, this, OP_TYPE_BACKUP_WAIT);              backupManagerService.addBackupTrace("calling agent doBackup()");              agent.doBackup( diff --git a/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java b/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java index e4f3a9d5cd0a..6175629d7451 100644 --- a/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java +++ b/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java @@ -18,10 +18,10 @@ package com.android.server.backup.restore;  import static com.android.server.backup.BackupManagerService.DEBUG;  import static com.android.server.backup.BackupManagerService.MORE_DEBUG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL;  import android.util.Slog; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.BackupRestoreTask; @@ -37,18 +37,22 @@ public class AdbRestoreFinishedLatch implements BackupRestoreTask {      private BackupManagerService backupManagerService;      final CountDownLatch mLatch;      private final int mCurrentOpToken; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      public AdbRestoreFinishedLatch(BackupManagerService backupManagerService,              int currentOpToken) {          this.backupManagerService = backupManagerService;          mLatch = new CountDownLatch(1);          mCurrentOpToken = currentOpToken; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      void await() {          boolean latched = false; +        long fullBackupAgentTimeoutMillis = +                mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();          try { -            latched = mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); +            latched = mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS);          } catch (InterruptedException e) {              Slog.w(TAG, "Interrupted!");          } diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java index c1a1c1dc10e7..f168afed55ea 100644 --- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java +++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java @@ -23,9 +23,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG;  import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAIT;  import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; -import static com.android.server.backup.BackupManagerService -        .TIMEOUT_SHARED_BACKUP_INTERVAL;  import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT;  import android.app.ApplicationThreadConstants; @@ -43,10 +40,11 @@ import android.os.RemoteException;  import android.util.Slog;  import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters; +import com.android.server.backup.BackupManagerService;  import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.FileMetadata;  import com.android.server.backup.KeyValueAdbRestoreEngine; -import com.android.server.backup.BackupManagerService;  import com.android.server.backup.fullbackup.FullBackupObbConnection;  import com.android.server.backup.utils.BytesReadListener;  import com.android.server.backup.utils.FullBackupRestoreObserverUtils; @@ -121,6 +119,8 @@ public class FullRestoreEngine extends RestoreEngine {      final int mEphemeralOpToken; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters; +      public FullRestoreEngine(BackupManagerService backupManagerService,              BackupRestoreTask monitorTask, IFullBackupRestoreObserver observer,              IBackupManagerMonitor monitor, PackageInfo onlyPackage, boolean allowApks, @@ -135,6 +135,7 @@ public class FullRestoreEngine extends RestoreEngine {          mAllowObbs = allowObbs;          mBuffer = new byte[32 * 1024];          mBytes = 0; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();      }      public IBackupAgent getAgent() { @@ -381,8 +382,8 @@ public class FullRestoreEngine extends RestoreEngine {                          long toCopy = info.size;                          final boolean isSharedStorage = pkg.equals(SHARED_BACKUP_AGENT_PACKAGE);                          final long timeout = isSharedStorage ? -                                TIMEOUT_SHARED_BACKUP_INTERVAL : -                                TIMEOUT_RESTORE_INTERVAL; +                                mAgentTimeoutParameters.getSharedBackupAgentTimeoutMillis() : +                                mAgentTimeoutParameters.getRestoreAgentTimeoutMillis();                          try {                              mBackupManagerService.prepareOperationTimeout(token,                                      timeout, diff --git a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java index dacde0b9af68..221637cae191 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java @@ -16,8 +16,6 @@  package com.android.server.backup.restore; -import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT; -import static com.android.server.backup.BackupPasswordManager.PBKDF_FALLBACK;  import static com.android.server.backup.BackupManagerService.BACKUP_FILE_HEADER_MAGIC;  import static com.android.server.backup.BackupManagerService.BACKUP_FILE_VERSION;  import static com.android.server.backup.BackupManagerService.BACKUP_MANIFEST_FILENAME; @@ -28,8 +26,8 @@ import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAI  import static com.android.server.backup.BackupManagerService.SETTINGS_PACKAGE;  import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; +import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT; +import static com.android.server.backup.BackupPasswordManager.PBKDF_FALLBACK;  import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT;  import android.app.ApplicationThreadConstants; @@ -49,6 +47,7 @@ import android.util.Slog;  import com.android.internal.annotations.VisibleForTesting;  import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.FileMetadata;  import com.android.server.backup.KeyValueAdbRestoreEngine; @@ -101,6 +100,7 @@ public class PerformAdbRestoreTask implements Runnable {      private byte[] mWidgetData = null;      private long mBytes; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      // Runner that can be placed on a separate thread to do in-process invocation      // of the "restore finished" API asynchronously.  Used by adb restore. @@ -155,6 +155,7 @@ public class PerformAdbRestoreTask implements Runnable {          mAgentPackage = null;          mTargetApp = null;          mObbConnection = new FullBackupObbConnection(backupManagerService); +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();          // Which packages we've already wiped data on.  We prepopulate this          // with a whitelist of packages known to be unclearable. @@ -643,9 +644,11 @@ public class PerformAdbRestoreTask implements Runnable {                      if (okay) {                          boolean agentSuccess = true;                          long toCopy = info.size; +                        long restoreAgentTimeoutMillis = +                                mAgentTimeoutParameters.getRestoreAgentTimeoutMillis();                          try {                              mBackupManagerService.prepareOperationTimeout( -                                    token, TIMEOUT_RESTORE_INTERVAL, null, OP_TYPE_RESTORE_WAIT); +                                    token, restoreAgentTimeoutMillis, null, OP_TYPE_RESTORE_WAIT);                              if (FullBackup.OBB_TREE_TOKEN.equals(info.domain)) {                                  if (DEBUG) { @@ -820,10 +823,12 @@ public class PerformAdbRestoreTask implements Runnable {                  // In the adb restore case, we do restore-finished here                  if (doRestoreFinished) {                      final int token = mBackupManagerService.generateRandomIntegerToken(); +                    long fullBackupAgentTimeoutMillis = +                            mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis();                      final AdbRestoreFinishedLatch latch = new AdbRestoreFinishedLatch(                              mBackupManagerService, token);                      mBackupManagerService.prepareOperationTimeout( -                            token, TIMEOUT_FULL_BACKUP_INTERVAL, latch, OP_TYPE_RESTORE_WAIT); +                            token, fullBackupAgentTimeoutMillis, latch, OP_TYPE_RESTORE_WAIT);                      if (mTargetApp.processName.equals("system")) {                          if (MORE_DEBUG) {                              Slog.d(TAG, "system agent - restoreFinished on thread"); diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index 4b467e5a0399..069e3b6c8247 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -23,9 +23,6 @@ import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAI  import static com.android.server.backup.BackupManagerService.PACKAGE_MANAGER_SENTINEL;  import static com.android.server.backup.BackupManagerService.SETTINGS_PACKAGE;  import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService -        .TIMEOUT_RESTORE_FINISHED_INTERVAL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL;  import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_RESTORE_STEP;  import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT;  import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_SESSION_TIMEOUT; @@ -59,6 +56,7 @@ import com.android.internal.backup.IBackupTransport;  import com.android.server.AppWidgetBackupBridge;  import com.android.server.EventLogTags;  import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupRestoreTask;  import com.android.server.backup.BackupUtils;  import com.android.server.backup.PackageManagerBackupAgent; @@ -160,6 +158,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {      ParcelFileDescriptor mNewState;      private final int mEphemeralOpToken; +    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;      // This task can assume that the wakelock is properly held for it and doesn't have to worry      // about releasing it. @@ -190,6 +189,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {          mFinished = false;          mDidLaunch = false;          mListener = listener; +        mAgentTimeoutParameters = backupManagerService.getAgentTimeoutParameters();          if (targetPackage != null) {              // Single package restore @@ -760,8 +760,9 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {              // Kick off the restore, checking for hung agents.  The timeout or              // the operationComplete() callback will schedule the next step,              // so we do not do that here. +            long restoreAgentTimeoutMillis = mAgentTimeoutParameters.getRestoreAgentTimeoutMillis();              backupManagerService.prepareOperationTimeout( -                    mEphemeralOpToken, TIMEOUT_RESTORE_INTERVAL, this, OP_TYPE_RESTORE_WAIT); +                    mEphemeralOpToken, restoreAgentTimeoutMillis, this, OP_TYPE_RESTORE_WAIT);              mAgent.doRestore(mBackupData, appVersionCode, mNewState,                      mEphemeralOpToken, backupManagerService.getBackupManagerBinder());          } catch (Exception e) { @@ -813,9 +814,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {              Slog.d(TAG, "restoreFinished packageName=" + mCurrentPackage.packageName);          }          try { +            long restoreAgentFinishedTimeoutMillis = +                    mAgentTimeoutParameters.getRestoreAgentFinishedTimeoutMillis();              backupManagerService                      .prepareOperationTimeout(mEphemeralOpToken, -                            TIMEOUT_RESTORE_FINISHED_INTERVAL, this, +                            restoreAgentFinishedTimeoutMillis, this,                              OP_TYPE_RESTORE_WAIT);              mAgent.doRestoreFinished(mEphemeralOpToken,                      backupManagerService.getBackupManagerBinder()); @@ -1109,9 +1112,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {          } else {              // We were invoked via an active restore session, not by the Package              // Manager, so start up the session timeout again. +            long restoreAgentTimeoutMillis = mAgentTimeoutParameters.getRestoreAgentTimeoutMillis();              backupManagerService.getBackupHandler().sendEmptyMessageDelayed(                      MSG_RESTORE_SESSION_TIMEOUT, -                    TIMEOUT_RESTORE_INTERVAL); +                    restoreAgentTimeoutMillis);          }          // Kick off any work that may be needed regarding app widget restores diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 19fffbb73149..e4695b64a070 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -643,7 +643,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D      void setWindowManager(WindowManagerService wm) {          synchronized (mService) {              mWindowManager = wm; -            mKeyguardController.setWindowManager(wm); +            getKeyguardController().setWindowManager(wm);              mDisplayManager =                      (DisplayManager)mService.mContext.getSystemService(Context.DISPLAY_SERVICE); @@ -1312,7 +1312,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D              r.setProcess(app); -            if (mKeyguardController.isKeyguardLocked()) { +            if (getKeyguardController().isKeyguardLocked()) {                  r.notifyUnknownVisibilityLaunched();              } @@ -3377,7 +3377,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D                  } else {                      stack.awakeFromSleepingLocked();                      if (isFocusedStack(stack) -                            && !mKeyguardController.isKeyguardShowing(display.mDisplayId)) { +                            && !getKeyguardController().isKeyguardShowing(display.mDisplayId)) {                          // If the keyguard is unlocked - resume immediately.                          // It is possible that the display will not be awake at the time we                          // process the keyguard going away, which can happen before the sleep token @@ -3501,7 +3501,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D      void ensureActivitiesVisibleLocked(ActivityRecord starting, int configChanges,              boolean preserveWindows) { -        mKeyguardController.beginActivityVisibilityUpdate(); +        getKeyguardController().beginActivityVisibilityUpdate();          try {              // First the front stacks. In case any are not fullscreen and are in front of home.              for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { @@ -3512,7 +3512,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D                  }              }          } finally { -            mKeyguardController.endActivityVisibilityUpdate(); +            getKeyguardController().endActivityVisibilityUpdate();          }      } @@ -3799,7 +3799,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D          pw.print(prefix); pw.print("isHomeRecentsComponent=");          pw.print(mRecentTasks.isRecentsComponentHomeActivity(mCurrentUser)); -        mKeyguardController.dump(pw, prefix); +        getKeyguardController().dump(pw, prefix);          mService.mLockTaskController.dump(pw, prefix);      } @@ -3810,7 +3810,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D              ActivityDisplay activityDisplay = mActivityDisplays.valueAt(displayNdx);              activityDisplay.writeToProto(proto, DISPLAYS);          } -        mKeyguardController.writeToProto(proto, KEYGUARD_CONTROLLER); +        getKeyguardController().writeToProto(proto, KEYGUARD_CONTROLLER);          if (mFocusedStack != null) {              proto.write(FOCUSED_STACK_ID, mFocusedStack.mStackId);              ActivityRecord focusedActivity = getResumedActivityLocked(); diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index bd53eac7fee7..a30a944b44f1 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1834,7 +1834,8 @@ class ActivityStarter {                                      mNoAnimation, mOptions, mStartActivity.appTimeTracker,                                      "bringToFrontInsteadOfAdjacentLaunch");                          } -                        mMovedToFront = true; +                        mMovedToFront = launchStack != launchStack.getDisplay() +                                .getTopStackInWindowingMode(launchStack.getWindowingMode());                      } else if (launchStack.mDisplayId != mTargetStack.mDisplayId) {                          // Target and computed stacks are on different displays and we've                          // found a matching task - move the existing instance to that display and @@ -2393,6 +2394,11 @@ class ActivityStarter {          return this;      } +    @VisibleForTesting +    Intent getIntent() { +        return mRequest.intent; +    } +      ActivityStarter setReason(String reason) {          mRequest.reason = reason;          return this; diff --git a/services/core/java/com/android/server/am/GlobalSettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/GlobalSettingsToPropertiesMapper.java index 690d985ef096..5bf5020c99ee 100644 --- a/services/core/java/com/android/server/am/GlobalSettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/GlobalSettingsToPropertiesMapper.java @@ -43,7 +43,7 @@ class GlobalSettingsToPropertiesMapper {          {Settings.Global.FPS_DEVISOR, ThreadedRenderer.DEBUG_FPS_DIVISOR},          {Settings.Global.DISPLAY_PANEL_LPM, "sys.display_panel_lpm"},          {Settings.Global.SYS_UIDCPUPOWER, "sys.uidcpupower"}, -        {Settings.Global.SYS_TRACED, "persist.traced.enable"}, +        {Settings.Global.SYS_TRACED, "sys.traced.enable_override"},      }; diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 993f8afcb85f..0c2b0757df97 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -225,6 +225,11 @@ class WindowStateAnimator {      // case we need to give the client a new Surface if it lays back out to a visible state.      boolean mChildrenDetached = false; +    // Set to true after the first frame of the Pinned stack animation +    // and reset after the last to ensure we only reset mForceScaleUntilResize +    // once per animation. +    boolean mPipAnimationStarted = false; +      WindowStateAnimator(final WindowState win) {          final WindowManagerService service = win.mService; @@ -983,8 +988,13 @@ class WindowStateAnimator {              // As we are in SCALING_MODE_SCALE_TO_WINDOW, SurfaceFlinger will              // then take over the scaling until the new buffer arrives, and things              // will be seamless. -            mForceScaleUntilResize = true; +            if (mPipAnimationStarted == false) { +                mForceScaleUntilResize = true; +                mPipAnimationStarted = true; +            }          } else { +            mPipAnimationStarted = false; +              if (!w.mSeamlesslyRotated) {                  mSurfaceController.setPositionInTransaction(mXOffset, mYOffset, recoveringMemory);              } diff --git a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java index f603a09baa37..d0398ad539ac 100644 --- a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java +++ b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java @@ -148,16 +148,22 @@ public class PerformBackupTaskTest {          Looper backupLooper = startBackupThreadAndGetLooper();          mShadowBackupLooper = shadowOf(backupLooper);          mBackupHandler = new BackupHandler(mBackupManagerService, backupLooper); +        Handler mainHandler = new Handler(Looper.getMainLooper());          mBackupManager = spy(FakeIBackupManager.class); +        BackupAgentTimeoutParameters agentTimeoutParameters = +                new BackupAgentTimeoutParameters(mainHandler, application.getContentResolver()); +        agentTimeoutParameters.start(); +          setUpBackupManagerServiceBasics(                  mBackupManagerService,                  application,                  mTransportManager,                  packageManager,                  mBackupHandler, -                mWakeLock); +                mWakeLock, +                agentTimeoutParameters);          when(mBackupManagerService.getBaseStateDir()).thenReturn(mBaseStateDir);          when(mBackupManagerService.getDataDir()).thenReturn(dataDir);          when(mBackupManagerService.getBackupManagerBinder()).thenReturn(mBackupManager); diff --git a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java index 03792b1d40ba..869c50b55fe8 100644 --- a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java +++ b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java @@ -41,12 +41,14 @@ import android.app.backup.IRestoreSession;  import android.app.backup.RestoreSet;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageInfo; +import android.os.Handler;  import android.os.Looper;  import android.os.PowerManager;  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit;  import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.TransportManager;  import com.android.server.backup.internal.BackupHandler; @@ -115,6 +117,15 @@ public class ActiveRestoreSessionTest {          Looper backupLooper = startBackupThreadAndGetLooper();          mShadowBackupLooper = shadowOf(backupLooper); + +        Handler mainHandler = new Handler(Looper.getMainLooper()); +        BackupAgentTimeoutParameters agentTimeoutParameters = +                new BackupAgentTimeoutParameters(mainHandler, application.getContentResolver()); +        agentTimeoutParameters.start(); + +        // We need to mock BMS timeout parameters before initializing the BackupHandler since +        // the constructor of BackupHandler relies on the timeout parameters. +        when(mBackupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters);          BackupHandler backupHandler = new BackupHandler(mBackupManagerService, backupLooper);          mWakeLock = createBackupWakeLock(application); @@ -125,7 +136,8 @@ public class ActiveRestoreSessionTest {                  mTransportManager,                  application.getPackageManager(),                  backupHandler, -                mWakeLock); +                mWakeLock, +                agentTimeoutParameters);          when(mBackupManagerService.getPendingRestores()).thenReturn(new ArrayDeque<>());      } 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 c210fdea6e89..5a886e33622f 100644 --- a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java +++ b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java @@ -28,6 +28,7 @@ import android.os.Looper;  import android.os.PowerManager;  import android.util.SparseArray; +import com.android.server.backup.BackupAgentTimeoutParameters;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.TransportManager;  import com.android.server.backup.internal.BackupHandler; @@ -43,7 +44,8 @@ public class BackupManagerServiceTestUtils {              TransportManager transportManager,              PackageManager packageManager,              BackupHandler backupHandler, -            PowerManager.WakeLock wakeLock) { +            PowerManager.WakeLock wakeLock, +            BackupAgentTimeoutParameters agentTimeoutParameters) {          when(backupManagerService.getContext()).thenReturn(context);          when(backupManagerService.getTransportManager()).thenReturn(transportManager);          when(backupManagerService.getPackageManager()).thenReturn(packageManager); @@ -53,6 +55,7 @@ public class BackupManagerServiceTestUtils {          when(backupManagerService.getCurrentOperations()).thenReturn(new SparseArray<>());          when(backupManagerService.getActivityManager()).thenReturn(mock(IActivityManager.class));          when(backupManagerService.getWakelock()).thenReturn(wakeLock); +        when(backupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters);      }      public static PowerManager.WakeLock createBackupWakeLock(Application application) { diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java index 2378e6d49b88..8721d9c28e0e 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java @@ -26,6 +26,12 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue;  import static org.junit.Assert.assertFalse; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify;  import android.app.ActivityManager;  import android.app.WaitResult; @@ -180,4 +186,56 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {              assertEquals(deliverToTopWait.who, firstActivity.realActivity);          }      } + +    @Test +    public void testApplySleepTokensLocked() throws Exception { +        final ActivityDisplay display = mSupervisor.getDefaultDisplay(); +        final KeyguardController keyguard = mSupervisor.getKeyguardController(); +        final ActivityStack stack = mock(ActivityStack.class); +        display.addChild(stack, 0 /* position */); + +        // Make sure we wake and resume in the case the display is turning on and the keyguard is +        // not showing. +        verifySleepTokenBehavior(display, keyguard, stack, true /*displaySleeping*/, +                false /* displayShouldSleep */, true /* isFocusedStack */, +                false /* keyguardShowing */, true /* expectWakeFromSleep */, +                true /* expectResumeTopActivity */); + +        // Make sure we wake and don't resume when the display is turning on and the keyguard is +        // showing. +        verifySleepTokenBehavior(display, keyguard, stack, true /*displaySleeping*/, +                false /* displayShouldSleep */, true /* isFocusedStack */, +                true /* keyguardShowing */, true /* expectWakeFromSleep */, +                false /* expectResumeTopActivity */); + +        // Make sure we wake and don't resume when the display is turning on and the keyguard is +        // not showing as unfocused. +        verifySleepTokenBehavior(display, keyguard, stack, true /*displaySleeping*/, +                false /* displayShouldSleep */, false /* isFocusedStack */, +                false /* keyguardShowing */, true /* expectWakeFromSleep */, +                false /* expectResumeTopActivity */); + +        // Should not do anything if the display state hasn't changed. +        verifySleepTokenBehavior(display, keyguard, stack, false /*displaySleeping*/, +                false /* displayShouldSleep */, true /* isFocusedStack */, +                false /* keyguardShowing */, false /* expectWakeFromSleep */, +                false /* expectResumeTopActivity */); +    } + +    private void verifySleepTokenBehavior(ActivityDisplay display, KeyguardController keyguard, +            ActivityStack stack, boolean displaySleeping, boolean displayShouldSleep, +            boolean isFocusedStack, boolean keyguardShowing, boolean expectWakeFromSleep, +            boolean expectResumeTopActivity) { +        reset(stack); + +        doReturn(displayShouldSleep).when(display).shouldSleep(); +        doReturn(displaySleeping).when(display).isSleeping(); +        doReturn(keyguardShowing).when(keyguard).isKeyguardShowing(anyInt()); + +        mSupervisor.mFocusedStack = isFocusedStack ? stack : null; +        mSupervisor.applySleepTokensLocked(true); +        verify(stack, times(expectWakeFromSleep ? 1 : 0)).awakeFromSleepingLocked(); +        verify(stack, times(expectResumeTopActivity ? 1 : 0)).resumeTopActivityUncheckedLocked( +                null /* target */, null /* targetOptions */); +    }  } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index 5906db306f11..8ff3e4587d00 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -18,13 +18,19 @@ package com.android.server.am;  import static android.app.ActivityManager.START_ABORTED;  import static android.app.ActivityManager.START_CLASS_NOT_FOUND; +import static android.app.ActivityManager.START_DELIVERED_TO_TOP;  import static android.app.ActivityManager.START_FORWARD_AND_REQUEST_CONFLICT; +import static android.app.ActivityManager.START_INTENT_NOT_RESOLVED;  import static android.app.ActivityManager.START_NOT_VOICE_COMPATIBLE; +import static android.app.ActivityManager.START_PERMISSION_DENIED;  import static android.app.ActivityManager.START_SUCCESS;  import static android.app.ActivityManager.START_SWITCHES_CANCELED; +import static android.app.ActivityManager.START_TASK_TO_FRONT;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  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.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;  import android.app.ActivityOptions;  import android.app.IApplicationThread; @@ -45,6 +51,7 @@ import android.view.Gravity;  import org.junit.runner.RunWith;  import org.junit.Test; +import static android.content.Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;  import static com.android.server.am.ActivityManagerService.ANIMATE;  import static org.junit.Assert.assertEquals; @@ -62,9 +69,6 @@ import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.times; -import static android.app.ActivityManager.START_PERMISSION_DENIED; -import static android.app.ActivityManager.START_INTENT_NOT_RESOLVED; -  import com.android.internal.os.BatteryStatsImpl;  import com.android.server.am.ActivityStarter.Factory;  import com.android.server.am.LaunchParamsController.LaunchParamsModifier; @@ -290,7 +294,7 @@ public class ActivityStarterTests extends ActivityTestsBase {          }      } -    private ActivityStarter prepareStarter() { +    private ActivityStarter prepareStarter(int launchFlags) {          // always allow test to start activity.          doReturn(true).when(mService.mStackSupervisor).checkStartAnyActivityPermission(                  any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), @@ -325,8 +329,20 @@ public class ActivityStarterTests extends ActivityTestsBase {          // ignore requests to create window container.          doNothing().when(task).createWindowContainer(anyBoolean(), anyBoolean()); + +        final Intent intent = new Intent(); +        intent.addFlags(launchFlags); +        intent.setComponent(ActivityBuilder.getDefaultComponent()); + +        final ActivityInfo info = new ActivityInfo(); + +        info.applicationInfo = new ApplicationInfo(); +        info.applicationInfo.packageName = ActivityBuilder.getDefaultComponent().getPackageName(); +          return new ActivityStarter(mController, mService, -                mService.mStackSupervisor, mock(ActivityStartInterceptor.class)); +                mService.mStackSupervisor, mock(ActivityStartInterceptor.class)) +                .setIntent(intent) +                .setActivityInfo(info);      }      /** @@ -342,9 +358,6 @@ public class ActivityStarterTests extends ActivityTestsBase {          // add custom values to activity info to make unique.          final ActivityInfo info = new ActivityInfo();          final Rect launchBounds = new Rect(0, 0, 20, 30); -        final Intent intent = new Intent(); - -        intent.setComponent(ActivityBuilder.getDefaultComponent());          final WindowLayout windowLayout =                  new WindowLayout(10, .5f, 20, 1.0f, Gravity.NO_GRAVITY, 1, 1); @@ -354,14 +367,13 @@ public class ActivityStarterTests extends ActivityTestsBase {          info.applicationInfo.packageName = ActivityBuilder.getDefaultComponent().getPackageName();          // create starter. -        final ActivityStarter optionStarter = prepareStarter(); +        final ActivityStarter optionStarter = prepareStarter(0 /* launchFlags */);          final ActivityOptions options = ActivityOptions.makeBasic();          options.setLaunchBounds(launchBounds);          // run starter.          optionStarter -                .setIntent(intent)                  .setReason("testCreateTaskLayout")                  .setActivityInfo(info)                  .setActivityOptions(new SafeActivityOptions(options)) @@ -371,4 +383,69 @@ public class ActivityStarterTests extends ActivityTestsBase {          verify(modifier, times(1)).onCalculate(any(), eq(windowLayout), any(), any(), eq(options),                  any(), any());      } + +    /** +     * This test ensures that if the intent is being delivered to a +     */ +    @Test +    public void testSplitScreenDeliverToTop() { +        final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + +        final ActivityRecord focusActivity = new ActivityBuilder(mService) +                .setCreateTask(true) +                .build(); + +        focusActivity.getStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + +        final ActivityRecord reusableActivity = new ActivityBuilder(mService) +                .setCreateTask(true) +                .build(); + +        // Create reusable activity after entering split-screen so that it is the top secondary +        // stack. +        reusableActivity.getStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); + +        // Set focus back to primary. +        mService.mStackSupervisor.setFocusStackUnchecked("testSplitScreenDeliverToTop", +                focusActivity.getStack()); + +        doReturn(reusableActivity).when(mService.mStackSupervisor).findTaskLocked(any(), anyInt()); + +        final int result = starter.setReason("testSplitScreenDeliverToTop").execute(); + +        // Ensure result is delivering intent to top. +        assertEquals(result, START_DELIVERED_TO_TOP); +    } + +    /** +     * This test ensures that if the intent is being delivered to a split-screen unfocused task +     * reports it is brought to front instead of delivering to top. +     */ +    @Test +    public void testSplitScreenTaskToFront() { +        final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + +        // Create reusable activity here first. Setting the windowing mode of the primary stack +        // will move the existing standard full screen stack to secondary, putting this one on the +        // bottom. +        final ActivityRecord reusableActivity = new ActivityBuilder(mService) +                .setCreateTask(true) +                .build(); + +        reusableActivity.getStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); + +        final ActivityRecord focusActivity = new ActivityBuilder(mService) +                .setCreateTask(true) +                .build(); + +        // Enter split-screen. Primary stack should have focus. +        focusActivity.getStack().setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + +        doReturn(reusableActivity).when(mService.mStackSupervisor).findTaskLocked(any(), anyInt()); + +        final int result = starter.setReason("testSplitScreenMoveToFront").execute(); + +        // Ensure result is moving task to front. +        assertEquals(result, START_TASK_TO_FRONT); +    }  } diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java index c130592b4cd3..6fb1b2e21c47 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java @@ -353,22 +353,29 @@ public class ActivityTestsBase {       */      protected static class TestActivityStackSupervisor extends ActivityStackSupervisor {          private ActivityDisplay mDisplay; +        private KeyguardController mKeyguardController;          public TestActivityStackSupervisor(ActivityManagerService service, Looper looper) {              super(service, looper);              mDisplayManager =                      (DisplayManager) mService.mContext.getSystemService(Context.DISPLAY_SERVICE);              mWindowManager = prepareMockWindowManager(); +            mKeyguardController = mock(KeyguardController.class);          }          @Override          public void initialize() {              super.initialize(); -            mDisplay = new TestActivityDisplay(this, DEFAULT_DISPLAY); +            mDisplay = spy(new TestActivityDisplay(this, DEFAULT_DISPLAY));              attachDisplay(mDisplay);          }          @Override +        public KeyguardController getKeyguardController() { +            return mKeyguardController; +        } + +        @Override          ActivityDisplay getDefaultDisplay() {              return mDisplay;          } |