Merge "Add tethering event callback API"
diff --git a/api/current.txt b/api/current.txt
index e19a7af..8a57693 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1204,6 +1204,7 @@
field public static final int secondaryProgress = 16843064; // 0x1010138
field public static final int secondaryProgressTint = 16843879; // 0x1010467
field public static final int secondaryProgressTintMode = 16843880; // 0x1010468
+ field public static final int secureElementName = 16844200; // 0x10105a8
field public static final int seekBarStyle = 16842875; // 0x101007b
field public static final int segmentedButtonStyle = 16843568; // 0x1010330
field public static final int selectAllOnFocus = 16843102; // 0x101015e
@@ -3946,7 +3947,7 @@
method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException;
method @Deprecated public java.util.List<android.app.ActivityManager.RunningServiceInfo> getRunningServices(int) throws java.lang.SecurityException;
method @Deprecated public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRunningTasks(int) throws java.lang.SecurityException;
- method public boolean isActivityStartAllowedOnDisplay(android.content.Context, int, android.content.Intent);
+ method public boolean isActivityStartAllowedOnDisplay(@NonNull android.content.Context, int, @NonNull android.content.Intent);
method public boolean isBackgroundRestricted();
method @Deprecated public boolean isInLockTaskMode();
method public boolean isLowRamDevice();
diff --git a/api/system-current.txt b/api/system-current.txt
index cecb104..7d6ef85 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -1561,23 +1561,25 @@
public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
method public boolean getAllocateAggressive();
- method public boolean getAllowDowngrade();
+ method @Deprecated public boolean getAllowDowngrade();
method public boolean getDontKillApp();
method @Nullable public String[] getGrantedRuntimePermissions();
method public boolean getInstallAsFullApp(boolean);
method public boolean getInstallAsInstantApp(boolean);
method public boolean getInstallAsVirtualPreload();
+ method public boolean getRequestDowngrade();
}
public static class PackageInstaller.SessionParams implements android.os.Parcelable {
method @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public void setAllocateAggressive(boolean);
- method public void setAllowDowngrade(boolean);
+ method @Deprecated public void setAllowDowngrade(boolean);
method public void setDontKillApp(boolean);
method public void setEnableRollback();
method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]);
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
method public void setInstallAsInstantApp(boolean);
method public void setInstallAsVirtualPreload();
+ method public void setRequestDowngrade(boolean);
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index c067f9d..023371d 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -2018,7 +2018,8 @@
* @return {@code true} if a call to start an activity on the target display is allowed for the
* provided context and no {@link SecurityException} will be thrown, {@code false} otherwise.
*/
- public boolean isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) {
+ public boolean isActivityStartAllowedOnDisplay(@NonNull Context context, int displayId,
+ @NonNull Intent intent) {
try {
return getTaskService().isActivityStartAllowedOnDisplay(displayId, intent,
intent.resolveTypeIfNeeded(context.getContentResolver()), context.getUserId());
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 7de8105..d758c4d 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -1342,8 +1342,8 @@
* @hide
*/
public boolean areHiddenOptionsSet() {
- return (installFlags & (PackageManager.INSTALL_ALLOW_DOWNGRADE
- | PackageManager.INSTALL_RESPECT_ALLOW_DOWNGRADE
+ return (installFlags & (PackageManager.INSTALL_REQUEST_DOWNGRADE
+ | PackageManager.INSTALL_ALLOW_DOWNGRADE
| PackageManager.INSTALL_DONT_KILL_APP
| PackageManager.INSTALL_INSTANT_APP
| PackageManager.INSTALL_FULL_APP
@@ -1455,13 +1455,23 @@
installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK;
}
+ /**
+ * @deprecated use {@link #setRequestDowngrade(boolean)}.
+ * {@hide}
+ */
+ @SystemApi
+ @Deprecated
+ public void setAllowDowngrade(boolean allowDowngrade) {
+ setRequestDowngrade(allowDowngrade);
+ }
+
/** {@hide} */
@SystemApi
- public void setAllowDowngrade(boolean allowDowngrade) {
- if (allowDowngrade) {
- installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
+ public void setRequestDowngrade(boolean requestDowngrade) {
+ if (requestDowngrade) {
+ installFlags |= PackageManager.INSTALL_REQUEST_DOWNGRADE;
} else {
- installFlags &= ~PackageManager.INSTALL_ALLOW_DOWNGRADE;
+ installFlags &= ~PackageManager.INSTALL_REQUEST_DOWNGRADE;
}
}
@@ -1982,11 +1992,23 @@
/**
* Get the value set in {@link SessionParams#setAllowDowngrade(boolean)}.
*
+ * @deprecated use {@link #getRequestDowngrade()}.
* @hide
*/
@SystemApi
+ @Deprecated
public boolean getAllowDowngrade() {
- return (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
+ return getRequestDowngrade();
+ }
+
+ /**
+ * Get the value set in {@link SessionParams#setRequestDowngrade(boolean)}.
+ *
+ * @hide
+ */
+ @SystemApi
+ public boolean getRequestDowngrade() {
+ return (installFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0;
}
/**
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c133fba..b488d6797 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -710,7 +710,7 @@
INSTALL_INTERNAL,
INSTALL_FROM_ADB,
INSTALL_ALL_USERS,
- INSTALL_ALLOW_DOWNGRADE,
+ INSTALL_REQUEST_DOWNGRADE,
INSTALL_GRANT_RUNTIME_PERMISSIONS,
INSTALL_FORCE_VOLUME_UUID,
INSTALL_FORCE_PERMISSION_PROMPT,
@@ -721,7 +721,7 @@
INSTALL_VIRTUAL_PRELOAD,
INSTALL_APEX,
INSTALL_ENABLE_ROLLBACK,
- INSTALL_RESPECT_ALLOW_DOWNGRADE,
+ INSTALL_ALLOW_DOWNGRADE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface InstallFlags {}
@@ -768,14 +768,21 @@
public static final int INSTALL_ALL_USERS = 0x00000040;
/**
- * Flag parameter for {@link #installPackage} to indicate that it is okay
- * to install an update to an app where the newly installed app has a lower
- * version code than the currently installed app. This is permitted only if
- * the currently installed app is marked debuggable.
+ * Flag parameter for {@link #installPackage} to indicate that an upgrade to a lower version
+ * of a package than currently installed has been requested.
+ *
+ * <p>Note that this flag doesn't guarantee that downgrade will be performed. That decision
+ * depends
+ * on whenever:
+ * <ul>
+ * <li>An app is debuggable.
+ * <li>Or a build is debuggable.
+ * <li>Or {@link #INSTALL_ALLOW_DOWNGRADE} is set.
+ * </ul>
*
* @hide
*/
- public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
+ public static final int INSTALL_REQUEST_DOWNGRADE = 0x00000080;
/**
* Flag parameter for {@link #installPackage} to indicate that all runtime
@@ -868,12 +875,11 @@
/**
* Flag parameter for {@link #installPackage} to indicate that
- * {@link #INSTALL_ALLOW_DOWNGRADE} should be respected.
+ * {@link #INSTALL_REQUEST_DOWNGRADE} should be allowed.
*
* @hide
*/
- // TODO(b/127322579): rename
- public static final int INSTALL_RESPECT_ALLOW_DOWNGRADE = 0x00100000;
+ public static final int INSTALL_ALLOW_DOWNGRADE = 0x00100000;
/** @hide */
@IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = {
diff --git a/core/java/android/view/contentcapture/ContentCaptureHelper.java b/core/java/android/view/contentcapture/ContentCaptureHelper.java
index 6e84ff0..6bc3829 100644
--- a/core/java/android/view/contentcapture/ContentCaptureHelper.java
+++ b/core/java/android/view/contentcapture/ContentCaptureHelper.java
@@ -20,7 +20,6 @@
import static android.view.contentcapture.ContentCaptureManager.LOGGING_LEVEL_OFF;
import static android.view.contentcapture.ContentCaptureManager.LOGGING_LEVEL_VERBOSE;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Build;
import android.provider.DeviceConfig;
@@ -48,21 +47,6 @@
}
/**
- * Gets the value of a device config property from the Content Capture namespace.
- */
- public static int getIntDeviceConfigProperty(@NonNull String key, int defaultValue) {
- final String value = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_CONTENT_CAPTURE, key);
- if (value == null) return defaultValue;
-
- try {
- return Integer.parseInt(value);
- } catch (Exception e) {
- Log.w(TAG, "error parsing value (" + value + ") of property " + key + ": " + e);
- return defaultValue;
- }
- }
-
- /**
* Gets the default logging level for the device.
*/
@LoggingLevel
@@ -75,8 +59,8 @@
*/
public static void setLoggingLevel() {
final int defaultLevel = getDefaultLoggingLevel();
- final int level = getIntDeviceConfigProperty(DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL,
- defaultLevel);
+ final int level = DeviceConfig.getInt(DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
+ DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL, defaultLevel);
setLoggingLevel(level);
}
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index b48c6b0..840cd63 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2941,6 +2941,7 @@
<!-- @hide @SystemApi -->
<public name="allowClearUserDataOnFailedRestore"/>
<public name="allowAudioPlaybackCapture"/>
+ <public name="secureElementName" />
</public-group>
<public-group type="drawable" first-id="0x010800b4">
diff --git a/media/apex/java/android/media/MediaSession2.java b/media/apex/java/android/media/MediaSession2.java
index 148e16c..09ac9ca 100644
--- a/media/apex/java/android/media/MediaSession2.java
+++ b/media/apex/java/android/media/MediaSession2.java
@@ -749,6 +749,10 @@
* You can reject the connection by returning {@code null}. In that case, controller
* receives {@link MediaController2.ControllerCallback#onDisconnected(MediaController2)}
* and cannot be used.
+ * <p>
+ * The controller hasn't connected yet in this method, so calls to the controller
+ * (e.g. {@link #sendSessionCommand}) would be ignored. Override {@link #onPostConnect} for
+ * the custom initialization for the controller instead.
*
* @param session the session for this event
* @param controller controller information.
@@ -763,6 +767,10 @@
/**
* Called immediately after a controller is connected. This is a convenient method to add
* custom initialization between the session and a controller.
+ * <p>
+ * Note that calls to the controller (e.g. {@link #sendSessionCommand}) work here but don't
+ * work in {@link #onConnect} because the controller hasn't connected yet in
+ * {@link #onConnect}.
*
* @param session the session for this event
* @param controller controller information.
diff --git a/native/android/choreographer.cpp b/native/android/choreographer.cpp
index 3fecd53..63e0734 100644
--- a/native/android/choreographer.cpp
+++ b/native/android/choreographer.cpp
@@ -37,6 +37,7 @@
struct FrameCallback {
AChoreographer_frameCallback callback;
+ AChoreographer_frameCallback64 callback64;
void* data;
nsecs_t dueTime;
@@ -50,8 +51,8 @@
class Choreographer : public DisplayEventDispatcher, public MessageHandler {
public:
- void postFrameCallback(AChoreographer_frameCallback cb, void* data);
- void postFrameCallbackDelayed(AChoreographer_frameCallback cb, void* data, nsecs_t delay);
+ void postFrameCallbackDelayed(AChoreographer_frameCallback cb,
+ AChoreographer_frameCallback64 cb64, void* data, nsecs_t delay);
enum {
MSG_SCHEDULE_CALLBACKS = 0,
@@ -107,14 +108,10 @@
DisplayEventDispatcher(looper), mLooper(looper), mThreadId(std::this_thread::get_id()) {
}
-void Choreographer::postFrameCallback(AChoreographer_frameCallback cb, void* data) {
- postFrameCallbackDelayed(cb, data, 0);
-}
-
void Choreographer::postFrameCallbackDelayed(
- AChoreographer_frameCallback cb, void* data, nsecs_t delay) {
+ AChoreographer_frameCallback cb, AChoreographer_frameCallback64 cb64, void* data, nsecs_t delay) {
nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
- FrameCallback callback{cb, data, now + delay};
+ FrameCallback callback{cb, cb64, data, now + delay};
{
AutoMutex _l{mLock};
mCallbacks.push(callback);
@@ -156,7 +153,11 @@
}
}
for (const auto& cb : callbacks) {
- cb.callback(timestamp, cb.data);
+ if (cb.callback64 != nullptr) {
+ cb.callback64(timestamp, cb.data);
+ } else if (cb.callback != nullptr) {
+ cb.callback(timestamp, cb.data);
+ }
}
}
@@ -204,10 +205,21 @@
void AChoreographer_postFrameCallback(AChoreographer* choreographer,
AChoreographer_frameCallback callback, void* data) {
- AChoreographer_to_Choreographer(choreographer)->postFrameCallback(callback, data);
+ AChoreographer_to_Choreographer(choreographer)->postFrameCallbackDelayed(
+ callback, nullptr, data, 0);
}
void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer,
AChoreographer_frameCallback callback, void* data, long delayMillis) {
AChoreographer_to_Choreographer(choreographer)->postFrameCallbackDelayed(
- callback, data, ms2ns(delayMillis));
+ callback, nullptr, data, ms2ns(delayMillis));
+}
+void AChoreographer_postFrameCallback64(AChoreographer* choreographer,
+ AChoreographer_frameCallback64 callback, void* data) {
+ AChoreographer_to_Choreographer(choreographer)->postFrameCallbackDelayed(
+ nullptr, callback, data, 0);
+}
+void AChoreographer_postFrameCallbackDelayed64(AChoreographer* choreographer,
+ AChoreographer_frameCallback64 callback, void* data, uint32_t delayMillis) {
+ AChoreographer_to_Choreographer(choreographer)->postFrameCallbackDelayed(
+ nullptr, callback, data, ms2ns(delayMillis));
}
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index a3db2d6..e1dc406 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -21,6 +21,8 @@
AChoreographer_getInstance; # introduced=24
AChoreographer_postFrameCallback; # introduced=24
AChoreographer_postFrameCallbackDelayed; # introduced=24
+ AChoreographer_postFrameCallback64; # introduced=29
+ AChoreographer_postFrameCallbackDelayed64; # introduced=29
AConfiguration_copy;
AConfiguration_delete;
AConfiguration_diff;
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
index 245e2c9..0e852f8 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
@@ -479,13 +479,16 @@
private void setDeviceConfigProperties() {
synchronized (mLock) {
- mAugmentedServiceIdleUnbindTimeoutMs = Helper.getIntDeviceConfigProperty(
+ mAugmentedServiceIdleUnbindTimeoutMs = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_AUTOFILL,
AutofillManager.DEVICE_CONFIG_AUGMENTED_SERVICE_IDLE_UNBIND_TIMEOUT,
(int) AbstractRemoteService.PERMANENT_BOUND_TIMEOUT_MS);
- mAugmentedServiceRequestTimeoutMs = Helper.getIntDeviceConfigProperty(
+ mAugmentedServiceRequestTimeoutMs = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_AUTOFILL,
AutofillManager.DEVICE_CONFIG_AUGMENTED_SERVICE_REQUEST_TIMEOUT,
DEFAULT_AUGMENTED_AUTOFILL_REQUEST_TIMEOUT_MILLIS);
- mSupportedSmartSuggestionModes = Helper.getIntDeviceConfigProperty(
+ mSupportedSmartSuggestionModes = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_AUTOFILL,
AutofillManager.DEVICE_CONFIG_AUTOFILL_SMART_SUGGESTION_SUPPORTED_MODES,
AutofillManager.FLAG_SMART_SUGGESTION_SYSTEM);
if (verbose) {
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index d300bf2..3c0da7d 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -22,11 +22,9 @@
import android.app.assist.AssistStructure.ViewNode;
import android.content.ComponentName;
import android.metrics.LogMaker;
-import android.provider.DeviceConfig;
import android.service.autofill.Dataset;
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.Log;
import android.util.Slog;
import android.view.WindowManager;
import android.view.autofill.AutofillId;
@@ -207,21 +205,6 @@
}
}
- /**
- * Gets the value of a device config property from the Autofill namespace.
- */
- static int getIntDeviceConfigProperty(@NonNull String key, int defaultValue) {
- final String value = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_AUTOFILL, key);
- if (value == null) return defaultValue;
-
- try {
- return Integer.parseInt(value);
- } catch (Exception e) {
- Log.w(TAG, "error parsing value (" + value + ") of property " + key + ": " + e);
- return defaultValue;
- }
- }
-
private interface ViewNodeFilter {
boolean matches(ViewNode node);
}
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
index 0205ad8..c75b4c6 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
@@ -234,18 +234,23 @@
private void setFineTuneParamsFromDeviceConfig() {
synchronized (mLock) {
- mDevCfgMaxBufferSize = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgMaxBufferSize = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_MAX_BUFFER_SIZE,
ContentCaptureManager.DEFAULT_MAX_BUFFER_SIZE);
- mDevCfgIdleFlushingFrequencyMs = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgIdleFlushingFrequencyMs = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_IDLE_FLUSH_FREQUENCY,
ContentCaptureManager.DEFAULT_IDLE_FLUSHING_FREQUENCY_MS);
- mDevCfgTextChangeFlushingFrequencyMs = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgTextChangeFlushingFrequencyMs = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_TEXT_CHANGE_FLUSH_FREQUENCY,
ContentCaptureManager.DEFAULT_TEXT_CHANGE_FLUSHING_FREQUENCY_MS);
- mDevCfgLogHistorySize = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgLogHistorySize = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_LOG_HISTORY_SIZE, 20);
- mDevCfgIdleUnbindTimeoutMs = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgIdleUnbindTimeoutMs = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_IDLE_UNBIND_TIMEOUT,
(int) AbstractRemoteService.PERMANENT_BOUND_TIMEOUT_MS);
if (verbose) {
@@ -260,7 +265,8 @@
}
private void setLoggingLevelFromDeviceConfig() {
- mDevCfgLoggingLevel = ContentCaptureHelper.getIntDeviceConfigProperty(
+ mDevCfgLoggingLevel = DeviceConfig.getInt(
+ DeviceConfig.NAMESPACE_CONTENT_CAPTURE,
ContentCaptureManager.DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL,
ContentCaptureHelper.getDefaultLoggingLevel());
ContentCaptureHelper.setLoggingLevel(mDevCfgLoggingLevel);
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index b4a93d3..3052330 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -953,11 +953,7 @@
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
- if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
- hideInputMethodMenu();
- // No need to update mIsInteractive
- return;
- } else if (Intent.ACTION_USER_ADDED.equals(action)
+ if (Intent.ACTION_USER_ADDED.equals(action)
|| Intent.ACTION_USER_REMOVED.equals(action)) {
updateCurrentProfileIds();
return;
@@ -1549,12 +1545,35 @@
mSettingsObserver.registerContentObserverLocked(currentUserId);
final IntentFilter broadcastFilter = new IntentFilter();
- broadcastFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
broadcastFilter.addAction(Intent.ACTION_USER_ADDED);
broadcastFilter.addAction(Intent.ACTION_USER_REMOVED);
broadcastFilter.addAction(Intent.ACTION_LOCALE_CHANGED);
broadcastFilter.addAction(ACTION_SHOW_INPUT_METHOD_PICKER);
mContext.registerReceiver(new ImmsBroadcastReceiver(), broadcastFilter);
+ mContext.registerReceiverAsUser(
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Intent is guaranteed to be ACTION_CLOSE_SYSTEM_DIALOGS here.
+ final PendingResult pendingResult = getPendingResult();
+ if (pendingResult == null) {
+ return;
+ }
+ // sender userId can be a real user ID or USER_ALL.
+ final int senderUserId = pendingResult.getSendingUserId();
+ if (senderUserId != UserHandle.USER_ALL) {
+ final int resolvedUserId = PER_PROFILE_IME_ENABLED
+ ? senderUserId
+ : mUserManagerInternal.getProfileParentId(senderUserId);
+ if (resolvedUserId != mSettings.getCurrentUserId()) {
+ // A background user is trying to hide the dialog. Ignore.
+ return;
+ }
+ }
+ hideInputMethodMenu();
+ }
+ }, UserHandle.ALL, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS),
+ null, null);
final String defaultImiId = mSettings.getSelectedInputMethod();
final boolean imeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId);
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index a3b72fd..3a4bcca 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -482,9 +482,9 @@
}
if (callingUid == Process.SYSTEM_UID) {
- params.installFlags |= PackageManager.INSTALL_RESPECT_ALLOW_DOWNGRADE;
+ params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
} else {
- params.installFlags &= ~PackageManager.INSTALL_RESPECT_ALLOW_DOWNGRADE;
+ params.installFlags &= ~PackageManager.INSTALL_ALLOW_DOWNGRADE;
}
boolean isApex = (params.installFlags & PackageManager.INSTALL_APEX) != 0;
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index ff81ad5..a12005b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -820,9 +820,9 @@
// platform builds.
//
// In case of user builds, downgrade is permitted only for the system server initiated
- // sessions. This is enforced by INSTALL_RESPECT_ALLOW_DOWNGRADE flag parameter.
+ // sessions. This is enforced by INSTALL_ALLOW_DOWNGRADE flag parameter.
final boolean downgradeRequested =
- (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
+ (installFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0;
if (!downgradeRequested) {
return false;
}
@@ -832,7 +832,7 @@
if (isDebuggable) {
return true;
}
- return (installFlags & PackageManager.INSTALL_RESPECT_ALLOW_DOWNGRADE) != 0;
+ return (installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) != 0;
}
/**
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 114810d..912a50e 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -2337,7 +2337,7 @@
sessionParams.installFlags |= PackageManager.INSTALL_INTERNAL;
break;
case "-d":
- sessionParams.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
+ sessionParams.installFlags |= PackageManager.INSTALL_REQUEST_DOWNGRADE;
break;
case "-g":
sessionParams.installFlags |= PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS;
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
index d3e1a05..ffdfe57 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
@@ -356,7 +356,7 @@
PackageInstaller packageInstaller = pm.getPackageInstaller();
PackageInstaller.SessionParams parentParams = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
- parentParams.setAllowDowngrade(true);
+ parentParams.setRequestDowngrade(true);
parentParams.setMultiPackage();
if (data.isStaged()) {
parentParams.setStaged();
@@ -377,7 +377,7 @@
params.setInstallerPackageName(installerPackageName);
}
}
- params.setAllowDowngrade(true);
+ params.setRequestDowngrade(true);
if (data.isStaged()) {
params.setStaged();
}