Merge "Wificond: transfer implementation to android.net.wifi"
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 8fac394..f94de29 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -256,6 +256,7 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/ext.jar)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/telephony/java/com/google/android/mms)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/*-service.jar)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework/service-statsd.jar)
# ******************************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER
# ******************************************************************
diff --git a/apex/statsd/Android.bp b/apex/statsd/Android.bp
index 8327f31..5c46e1f 100644
--- a/apex/statsd/Android.bp
+++ b/apex/statsd/Android.bp
@@ -16,15 +16,13 @@
name: "com.android.os.statsd",
defaults: ["com.android.os.statsd-defaults"],
manifest: "apex_manifest.json",
-
-
}
apex_defaults {
// libc.so and libcutils.so are included in the apex
// native_shared_libs: ["libc", "libcutils"],
// binaries: ["vold"],
- // java_libs: ["core-all"],
+ java_libs: ["service-statsd"],
// prebuilts: ["my_prebuilt"],
name: "com.android.os.statsd-defaults",
key: "com.android.os.statsd.key",
diff --git a/apex/statsd/service/Android.bp b/apex/statsd/service/Android.bp
index f71d74f..f3a8989 100644
--- a/apex/statsd/service/Android.bp
+++ b/apex/statsd/service/Android.bp
@@ -1,5 +1,5 @@
// Statsd Service jar, which will eventually be put in the statsd mainline apex.
-// service-statsd needs to be added to PRODUCT_SYSTEM_SERVER_JARS.
+// service-statsd needs to be added to PRODUCT_UPDATABLE_SYSTEM_SERVER_JARS.
// This jar will contain StatsCompanionService
java_library {
name: "service-statsd",
@@ -8,9 +8,9 @@
srcs: [
"java/**/*.java",
],
-
+ // TODO: link against the proper stubs (b/146084685).
libs: [
- "framework",
+ "framework-minus-apex",
"services.core",
],
}
diff --git a/api/current.txt b/api/current.txt
index 6cbdf73..b61917d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1061,7 +1061,6 @@
field public static final int popupWindowStyle = 16842870; // 0x1010076
field public static final int port = 16842793; // 0x1010029
field public static final int positiveButtonText = 16843253; // 0x10101f5
- field public static final int preferMinimalPostProcessing = 16844300; // 0x101060c
field public static final int preferenceCategoryStyle = 16842892; // 0x101008c
field public static final int preferenceFragmentStyle = 16844038; // 0x1010506
field public static final int preferenceInformationStyle = 16842893; // 0x101008d
@@ -11186,7 +11185,6 @@
field public String parentActivityName;
field public String permission;
field public int persistableMode;
- field public boolean preferMinimalPostProcessing;
field public int screenOrientation;
field public int softInputMode;
field public String targetActivity;
@@ -49525,7 +49523,6 @@
method @Deprecated public float[] getSupportedRefreshRates();
method @Deprecated public int getWidth();
method public boolean isHdr();
- method public boolean isMinimalPostProcessingSupported();
method public boolean isValid();
method public boolean isWideColorGamut();
field public static final int DEFAULT_DISPLAY = 0; // 0x0
@@ -52551,7 +52548,6 @@
method public abstract void setNavigationBarColor(@ColorInt int);
method public void setNavigationBarContrastEnforced(boolean);
method public void setNavigationBarDividerColor(@ColorInt int);
- method public void setPreferMinimalPostProcessing(boolean);
method public void setReenterTransition(android.transition.Transition);
method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
method public final void setRestrictedCaptionAreaListener(android.view.Window.OnRestrictedCaptionAreaChangedListener);
@@ -52869,7 +52865,6 @@
field public int layoutInDisplayCutoutMode;
field @Deprecated public int memoryType;
field public String packageName;
- field public boolean preferMinimalPostProcessing;
field public int preferredDisplayModeId;
field @Deprecated public float preferredRefreshRate;
field public int rotationAnimation;
diff --git a/api/system-current.txt b/api/system-current.txt
index 678f4f5..507c4df 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -1305,6 +1305,7 @@
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getAppStandbyBucket(String);
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public java.util.Map<java.lang.String,java.lang.Integer> getAppStandbyBuckets();
method public int getUsageSource();
+ method @RequiresPermission(android.Manifest.permission.BIND_CARRIER_SERVICES) public void onCarrierPrivilegedAppsChanged();
method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @Nullable android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerAppUsageObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, @NonNull android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerUsageSessionObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @NonNull android.app.PendingIntent, @Nullable android.app.PendingIntent);
@@ -1475,7 +1476,9 @@
}
public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
+ method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH) public java.util.List<android.bluetooth.BluetoothDevice> getActiveDevices();
method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+ method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public long getHiSyncId(@Nullable android.bluetooth.BluetoothDevice);
method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
}
@@ -5669,7 +5672,6 @@
method public boolean isApMacRandomizationSupported();
method public boolean isConnectedMacRandomizationSupported();
method @Deprecated public boolean isDeviceToDeviceRttSupported();
- method public boolean isDualBandSupported();
method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean isDualModeSupported();
method public boolean isPortableHotspotSupported();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
@@ -6637,6 +6639,21 @@
field public static final int STATUS_WAITING_REBOOT = 5; // 0x5
}
+ public class TelephonyServiceManager {
+ method @NonNull public android.os.TelephonyServiceManager.ServiceRegisterer getTelephonyServiceRegisterer();
+ }
+
+ public static class TelephonyServiceManager.ServiceNotFoundException extends java.lang.Exception {
+ ctor public TelephonyServiceManager.ServiceNotFoundException(@NonNull String);
+ }
+
+ public final class TelephonyServiceManager.ServiceRegisterer {
+ method @Nullable public android.os.IBinder get();
+ method @NonNull public android.os.IBinder getOrThrow() throws android.os.TelephonyServiceManager.ServiceNotFoundException;
+ method public void register(@NonNull android.os.IBinder);
+ method @Nullable public android.os.IBinder tryGet();
+ }
+
public class UpdateEngine {
ctor public UpdateEngine();
method public void applyPayload(String, long, long, String[]);
@@ -9578,6 +9595,7 @@
public class TelephonyFrameworkInitializer {
method public static void registerServiceWrappers();
+ method public static void setTelephonyServiceManager(@NonNull android.os.TelephonyServiceManager);
}
public final class TelephonyHistogram implements android.os.Parcelable {
@@ -9708,6 +9726,7 @@
method public void updateServiceLocation();
method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateTestOtaEmergencyNumberDbFilePath(@NonNull String);
field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final String ACTION_ANOMALY_REPORTED = "android.telephony.action.ANOMALY_REPORTED";
+ field public static final String ACTION_EMERGENCY_ASSISTANCE = "android.telephony.action.EMERGENCY_ASSISTANCE";
field public static final String ACTION_SIM_APPLICATION_STATE_CHANGED = "android.telephony.action.SIM_APPLICATION_STATE_CHANGED";
field public static final String ACTION_SIM_CARD_STATE_CHANGED = "android.telephony.action.SIM_CARD_STATE_CHANGED";
field public static final String ACTION_SIM_SLOT_STATUS_CHANGED = "android.telephony.action.SIM_SLOT_STATUS_CHANGED";
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 9711e06..577272e 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -7855,7 +7855,6 @@
mCurrentConfig = config;
mWindow.setColorMode(info.colorMode);
- mWindow.setPreferMinimalPostProcessing(info.preferMinimalPostProcessing);
setAutofillOptions(application.getAutofillOptions());
setContentCaptureOptions(application.getContentCaptureOptions());
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 93b6454..5278ab2 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -112,6 +112,7 @@
import android.os.StrictMode;
import android.os.SystemClock;
import android.os.SystemProperties;
+import android.os.TelephonyServiceManager;
import android.os.Trace;
import android.os.UserHandle;
import android.permission.IPermissionManager;
@@ -128,6 +129,7 @@
import android.system.ErrnoException;
import android.system.OsConstants;
import android.system.StructStat;
+import android.telephony.TelephonyFrameworkInitializer;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
@@ -7432,6 +7434,9 @@
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
+ // Call per-process mainline module initialization.
+ initializeMainlineModules();
+
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
@@ -7466,6 +7471,14 @@
throw new RuntimeException("Main thread loop unexpectedly exited");
}
+ /**
+ * Call various initializer APIs in mainline modules that need to be called when each process
+ * starts.
+ */
+ public static void initializeMainlineModules() {
+ TelephonyFrameworkInitializer.setTelephonyServiceManager(new TelephonyServiceManager());
+ }
+
private void purgePendingResources() {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "purgePendingResources");
nPurgePendingResources();
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index fb5645a..419377c 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -1125,8 +1125,11 @@
/**
* Inform usage stats that the carrier privileged apps access rules have changed.
+ * <p> The caller must have {@link android.Manifest.permission#BIND_CARRIER_SERVICES} </p>
* @hide
*/
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.BIND_CARRIER_SERVICES)
public void onCarrierPrivilegedAppsChanged() {
try {
mService.onCarrierPrivilegedAppsChanged();
diff --git a/core/java/android/bluetooth/BluetoothHearingAid.java b/core/java/android/bluetooth/BluetoothHearingAid.java
index ead8429..b4521c6 100644
--- a/core/java/android/bluetooth/BluetoothHearingAid.java
+++ b/core/java/android/bluetooth/BluetoothHearingAid.java
@@ -335,9 +335,9 @@
* is not active, it will be null on that position. Returns empty list on error.
* @hide
*/
- @UnsupportedAppUsage
+ @SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH)
- public List<BluetoothDevice> getActiveDevices() {
+ public @NonNull List<BluetoothDevice> getActiveDevices() {
if (VDBG) log("getActiveDevices()");
final IBluetoothHearingAid service = getService();
try {
@@ -559,8 +559,9 @@
* @return the CustomerId of the device
* @hide
*/
+ @SystemApi
@RequiresPermission(Manifest.permission.BLUETOOTH)
- public long getHiSyncId(BluetoothDevice device) {
+ public long getHiSyncId(@Nullable BluetoothDevice device) {
if (VDBG) {
log("getCustomerId(" + device + ")");
}
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index fe59f05..26193f6 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -290,34 +290,6 @@
public int colorMode = COLOR_MODE_DEFAULT;
/**
- * Indicates whether the activity wants the connected display to do minimal post processing on
- * the produced image or video frames. This will only be requested if this activity's main
- * window is visible on the screen.
- *
- * <p>This setting should be used when low latency has a higher priority than image enhancement
- * processing (e.g. for games or video conferencing).
- *
- * <p>If the Display sink is connected via HDMI, the device will begin to send infoframes with
- * Auto Low Latency Mode enabled and Game Content Type. This will switch the connected display
- * to a minimal image processing mode (if available), which reduces latency, improving the user
- * experience for gaming or video conferencing applications. For more information, see HDMI 2.1
- * specification.
- *
- * <p>If the Display sink has an internal connection or uses some other protocol than HDMI,
- * effects may be similar but implementation-defined.
- *
- * <p>The ability to switch to a mode with minimal post proessing may be disabled by a user
- * setting in the system settings menu. In that case, this field is ignored and the display will
- * remain in its current mode.
- *
- * <p>Set from attribute {@link android.R.attr#preferMinimalPostProcessing}.
- *
- * @see android.view.WindowManager.LayoutParams#preferMinimalPostProcessing
- * @see android.view.Display#isMinimalPostProcessingSupported
- */
- public boolean preferMinimalPostProcessing = false;
-
- /**
* Bit in {@link #flags} indicating whether this activity is able to
* run in multiple processes. If
* true, the system may instantiate it in the some process as the
@@ -1032,7 +1004,6 @@
requestedVrComponent = orig.requestedVrComponent;
rotationAnimation = orig.rotationAnimation;
colorMode = orig.colorMode;
- preferMinimalPostProcessing = orig.preferMinimalPostProcessing;
maxAspectRatio = orig.maxAspectRatio;
minAspectRatio = orig.minAspectRatio;
}
@@ -1260,7 +1231,6 @@
dest.writeInt(colorMode);
dest.writeFloat(maxAspectRatio);
dest.writeFloat(minAspectRatio);
- dest.writeBoolean(preferMinimalPostProcessing);
}
/**
@@ -1379,7 +1349,6 @@
colorMode = source.readInt();
maxAspectRatio = source.readFloat();
minAspectRatio = source.readFloat();
- preferMinimalPostProcessing = source.readBoolean();
}
/**
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index df2d0dd..c955137 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -24,6 +24,7 @@
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
+import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
@@ -150,14 +151,11 @@
* has a preference.
* @param requestedModeId The preferred mode id for the top-most visible window that has a
* preference.
- * @param preferMinimalPostProcessing Whether there is a visible window on the screen that wants
- * minimal post processing.
* @param inTraversal True if called from WindowManagerService during a window traversal
* prior to call to performTraversalInTransactionFromWindowManager.
*/
public abstract void setDisplayProperties(int displayId, boolean hasContent,
- float requestedRefreshRate, int requestedModeId, boolean preferMinimalPostProcessing,
- boolean inTraversal);
+ float requestedRefreshRate, int requestedModeId, boolean inTraversal);
/**
* Applies an offset to the contents of a display, for example to avoid burn-in.
diff --git a/core/java/android/os/ServiceManager.java b/core/java/android/os/ServiceManager.java
index bf9225a..3c0997b 100644
--- a/core/java/android/os/ServiceManager.java
+++ b/core/java/android/os/ServiceManager.java
@@ -140,7 +140,7 @@
/**
* Returns a reference to a service with the given name, or throws
- * {@link NullPointerException} if none is found.
+ * {@link ServiceNotFoundException} if none is found.
*
* @hide
*/
diff --git a/core/java/android/os/TelephonyServiceManager.java b/core/java/android/os/TelephonyServiceManager.java
new file mode 100644
index 0000000..1211dd6
--- /dev/null
+++ b/core/java/android/os/TelephonyServiceManager.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.os;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+
+/**
+ * Provides a way to register and obtain the system service binder objects managed by the telephony
+ * service.
+ *
+ * <p>Only the telephony mainline module will be able to access an instance of this class.
+ *
+ * @hide
+ */
+@SystemApi
+public class TelephonyServiceManager {
+ /**
+ * @hide
+ */
+ public TelephonyServiceManager() {
+ }
+
+ /**
+ * A class that exposes the methods to register and obtain each system service.
+ */
+ public final class ServiceRegisterer {
+ private final String mServiceName;
+
+ /**
+ * @hide
+ */
+ public ServiceRegisterer(String serviceName) {
+ mServiceName = serviceName;
+ }
+
+ /**
+ * Register a system server binding object for a service.
+ */
+ public void register(@NonNull IBinder binder) {
+ ServiceManager.addService(mServiceName, binder);
+ }
+
+ /**
+ * Get the system server binding object for a service.
+ *
+ * <p>This blocks until the service instance is ready,
+ * or a timeout happens, in which case it returns null.
+ */
+ @Nullable
+ public IBinder get() {
+ return ServiceManager.getService(mServiceName);
+ }
+
+ /**
+ * Get the system server binding object for a service.
+ *
+ * <p>This blocks until the service instance is ready,
+ * or a timeout happens, in which case it throws {@link ServiceNotFoundException}.
+ */
+ @NonNull
+ public IBinder getOrThrow() throws ServiceNotFoundException {
+ try {
+ return ServiceManager.getServiceOrThrow(mServiceName);
+ } catch (ServiceManager.ServiceNotFoundException e) {
+ throw new ServiceNotFoundException(mServiceName);
+ }
+ }
+
+ /**
+ * Get the system server binding object for a service. If the specified service is
+ * not available, it returns null.
+ */
+ @Nullable
+ public IBinder tryGet() {
+ return ServiceManager.checkService(mServiceName);
+ }
+ }
+
+ /**
+ * See {@link ServiceRegisterer#getOrThrow}.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static class ServiceNotFoundException extends ServiceManager.ServiceNotFoundException {
+ /**
+ * Constructor.
+ *
+ * @param name the name of the binder service that cannot be found.
+ *
+ */
+ public ServiceNotFoundException(@NonNull String name) {
+ super(name);
+ }
+ }
+
+ /**
+ * Returns {@link ServiceRegisterer} for the "telephony" service.
+ */
+ @NonNull
+ public ServiceRegisterer getTelephonyServiceRegisterer() {
+ return new ServiceRegisterer("phone");
+ }
+
+
+// TODO: Add more services...
+//
+// /**
+// * Returns {@link ServiceRegisterer} for the "subscription" service.
+// */
+// @NonNull
+// public ServiceRegisterer getSubscriptionServiceRegisterer() {
+// return new ServiceRegisterer("isub");
+// }
+//
+// /**
+// * Returns {@link ServiceRegisterer} for the "SMS" service.
+// */
+// @NonNull
+// public ServiceRegisterer getSmsServiceRegisterer() {
+// return new ServiceRegisterer("isms");
+// }
+}
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 117b971..ba25093 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -21,7 +21,6 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
-import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.app.KeyguardManager;
@@ -858,31 +857,6 @@
}
/**
- * <p> Returns true if the connected display can be switched into a mode with minimal
- * post processing. </p>
- *
- * <p> If the Display sink is connected via HDMI, this method will return true if the
- * display supports either Auto Low Latency Mode or Game Content Type.
- *
- * <p> If the Display sink has an internal connection or uses some other protocol than
- * HDMI, this method will return true if the sink can be switched into an
- * implementation-defined low latency image processing mode. </p>
- *
- * <p> The ability to switch to a mode with minimal post processing may be disabled
- * by a user setting in the system settings menu. In that case, this method returns
- * false. </p>
- *
- * @see android.view.Window#setPreferMinimalPostProcessing
- */
- @SuppressLint("VisiblySynchronized")
- public boolean isMinimalPostProcessingSupported() {
- synchronized (this) {
- updateDisplayInfoLocked();
- return mDisplayInfo.minimalPostProcessingSupported;
- }
- }
-
- /**
* Request the display applies a color mode.
* @hide
*/
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index b84a7b5..04e82c7 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -184,14 +184,6 @@
public Display.HdrCapabilities hdrCapabilities;
/**
- * Indicates whether the display can be switched into a mode with minimal post
- * processing.
- *
- * @see android.view.Display#isMinimalPostProcessingSupported
- */
- public boolean minimalPostProcessingSupported;
-
- /**
* The logical display density which is the basis for density-independent
* pixels.
*/
@@ -313,7 +305,6 @@
&& colorMode == other.colorMode
&& Arrays.equals(supportedColorModes, other.supportedColorModes)
&& Objects.equals(hdrCapabilities, other.hdrCapabilities)
- && minimalPostProcessingSupported == other.minimalPostProcessingSupported
&& logicalDensityDpi == other.logicalDensityDpi
&& physicalXDpi == other.physicalXDpi
&& physicalYDpi == other.physicalYDpi
@@ -355,7 +346,6 @@
supportedColorModes = Arrays.copyOf(
other.supportedColorModes, other.supportedColorModes.length);
hdrCapabilities = other.hdrCapabilities;
- minimalPostProcessingSupported = other.minimalPostProcessingSupported;
logicalDensityDpi = other.logicalDensityDpi;
physicalXDpi = other.physicalXDpi;
physicalYDpi = other.physicalYDpi;
@@ -398,7 +388,6 @@
supportedColorModes[i] = source.readInt();
}
hdrCapabilities = source.readParcelable(null);
- minimalPostProcessingSupported = source.readBoolean();
logicalDensityDpi = source.readInt();
physicalXDpi = source.readFloat();
physicalYDpi = source.readFloat();
@@ -441,7 +430,6 @@
dest.writeInt(supportedColorModes[i]);
}
dest.writeParcelable(hdrCapabilities, flags);
- dest.writeBoolean(minimalPostProcessingSupported);
dest.writeInt(logicalDensityDpi);
dest.writeFloat(physicalXDpi);
dest.writeFloat(physicalYDpi);
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index db83ede..87628da 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -170,8 +170,6 @@
private static native int nativeGetActiveColorMode(IBinder displayToken);
private static native boolean nativeSetActiveColorMode(IBinder displayToken,
int colorMode);
- private static native void nativeSetAutoLowLatencyMode(IBinder displayToken, boolean on);
- private static native void nativeSetGameContentType(IBinder displayToken, boolean on);
private static native void nativeSetDisplayPowerMode(
IBinder displayToken, int mode);
private static native void nativeDeferTransactionUntil(long transactionObj, long nativeObject,
@@ -189,9 +187,6 @@
private static native Display.HdrCapabilities nativeGetHdrCapabilities(IBinder displayToken);
- private static native boolean nativeGetAutoLowLatencyModeSupport(IBinder displayToken);
- private static native boolean nativeGetGameContentTypeSupport(IBinder displayToken);
-
private static native void nativeSetInputWindowInfo(long transactionObj, long nativeObject,
InputWindowHandle handle);
@@ -1675,28 +1670,6 @@
/**
* @hide
*/
- public static void setAutoLowLatencyMode(IBinder displayToken, boolean on) {
- if (displayToken == null) {
- throw new IllegalArgumentException("displayToken must not be null");
- }
-
- nativeSetAutoLowLatencyMode(displayToken, on);
- }
-
- /**
- * @hide
- */
- public static void setGameContentType(IBinder displayToken, boolean on) {
- if (displayToken == null) {
- throw new IllegalArgumentException("displayToken must not be null");
- }
-
- nativeSetGameContentType(displayToken, on);
- }
-
- /**
- * @hide
- */
@UnsupportedAppUsage
public static void setDisplayProjection(IBinder displayToken,
int orientation, Rect layerStackRect, Rect displayRect) {
@@ -1748,28 +1721,6 @@
/**
* @hide
*/
- public static boolean getAutoLowLatencyModeSupport(IBinder displayToken) {
- if (displayToken == null) {
- throw new IllegalArgumentException("displayToken must not be null");
- }
-
- return nativeGetAutoLowLatencyModeSupport(displayToken);
- }
-
- /**
- * @hide
- */
- public static boolean getGameContentTypeSupport(IBinder displayToken) {
- if (displayToken == null) {
- throw new IllegalArgumentException("displayToken must not be null");
- }
-
- return nativeGetGameContentTypeSupport(displayToken);
- }
-
- /**
- * @hide
- */
@UnsupportedAppUsage
public static IBinder createDisplay(String name, boolean secure) {
if (name == null) {
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index a168c07..d79abc2 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -1197,44 +1197,6 @@
}
/**
- * If {@code isPreferred} is true, this method requests that the connected display does minimal
- * post processing when this window is visible on the screen. Otherwise, it requests that the
- * display switches back to standard image processing.
- *
- * <p> By default, the display does not do minimal post processing and if this is desired, this
- * method should not be used. It should be used with {@code isPreferred=true} when low
- * latency has a higher priority than image enhancement processing (e.g. for games or video
- * conferencing). The display will automatically go back into standard image processing mode
- * when no window requesting minimal posst processing is visible on screen anymore.
- * {@code setPreferMinimalPostProcessing(false)} can be used if
- * {@code setPreferMinimalPostProcessing(true)} was previously called for this window and
- * minimal post processing is no longer required.
- *
- * <p>If the Display sink is connected via HDMI, the device will begin to send infoframes with
- * Auto Low Latency Mode enabled and Game Content Type. This will switch the connected display
- * to a minimal image processing mode (if available), which reduces latency, improving the user
- * experience for gaming or video conferencing applications. For more information, see HDMI 2.1
- * specification.
- *
- * <p>If the Display sink has an internal connection or uses some other protocol than HDMI,
- * effects may be similar but implementation-defined.
- *
- * <p>The ability to switch to a mode with minimal post proessing may be disabled by a user
- * setting in the system settings menu. In that case, this method does nothing.
- *
- * @see android.content.pm.ActivityInfo#preferMinimalPostProcessing
- * @see android.view.Display#isMinimalPostProcessingSupported
- * @see android.view.WindowManager.LayoutParams#preferMinimalPostProcessing
- *
- * @param isPreferred Indicates whether minimal post processing is preferred for this window
- * ({@code isPreferred=true}) or not ({@code isPreferred=false}).
- */
- public void setPreferMinimalPostProcessing(boolean isPreferred) {
- mWindowAttributes.preferMinimalPostProcessing = isPreferred;
- dispatchWindowAttributesChanged(mWindowAttributes);
- }
-
- /**
* Returns the requested color mode of the window, one of
* {@link ActivityInfo#COLOR_MODE_DEFAULT}, {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
* or {@link ActivityInfo#COLOR_MODE_HDR}. If {@link ActivityInfo#COLOR_MODE_WIDE_COLOR_GAMUT}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index cbfe52b..9d5f98e 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -2573,33 +2573,6 @@
public long hideTimeoutMilliseconds = -1;
/**
- * Indicates whether this window wants the connected display to do minimal post processing
- * on the produced image or video frames. This will only be requested if the window is
- * visible on the screen.
- *
- * <p>This setting should be used when low latency has a higher priority than image
- * enhancement processing (e.g. for games or video conferencing).
- *
- * <p>If the Display sink is connected via HDMI, the device will begin to send infoframes
- * with Auto Low Latency Mode enabled and Game Content Type. This will switch the connected
- * display to a minimal image processing mode (if available), which reduces latency,
- * improving the user experience for gaming or video conferencing applications. For more
- * information, see HDMI 2.1 specification.
- *
- * <p>If the Display sink has an internal connection or uses some other protocol than HDMI,
- * effects may be similar but implementation-defined.
- *
- * <p>The ability to switch to a mode with minimal post proessing may be disabled by a user
- * setting in the system settings menu. In that case, this field is ignored and the display
- * will remain in its current mode.
- *
- * @see android.content.pm.ActivityInfo#preferMinimalPostProcessing
- * @see android.view.Display#isMinimalPostProcessingSupported
- * @see android.view.Window#setPreferMinimalPostProcessing
- */
- public boolean preferMinimalPostProcessing = false;
-
- /**
* The color mode requested by this window. The target display may
* not be able to honor the request. When the color mode is not set
* to {@link ActivityInfo#COLOR_MODE_DEFAULT}, it might override the
@@ -2781,7 +2754,6 @@
out.writeLong(hideTimeoutMilliseconds);
out.writeInt(insetsFlags.appearance);
out.writeInt(insetsFlags.behavior);
- out.writeBoolean(preferMinimalPostProcessing);
}
public static final @android.annotation.NonNull Parcelable.Creator<LayoutParams> CREATOR
@@ -2839,7 +2811,6 @@
hideTimeoutMilliseconds = in.readLong();
insetsFlags.appearance = in.readInt();
insetsFlags.behavior = in.readInt();
- preferMinimalPostProcessing = in.readBoolean();
}
@SuppressWarnings({"PointlessBitwiseExpression"})
@@ -2885,8 +2856,6 @@
public static final int COLOR_MODE_CHANGED = 1 << 26;
/** {@hide} */
public static final int INSET_FLAGS_CHANGED = 1 << 27;
- /** {@hide} */
- public static final int MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED = 1 << 28;
// internal buffer to backup/restore parameters under compatibility mode.
private int[] mCompatibilityParamsBackup = null;
@@ -3067,11 +3036,6 @@
changes |= COLOR_MODE_CHANGED;
}
- if (preferMinimalPostProcessing != o.preferMinimalPostProcessing) {
- preferMinimalPostProcessing = o.preferMinimalPostProcessing;
- changes |= MINIMAL_POST_PROCESSING_PREFERENCE_CHANGED;
- }
-
// This can't change, it's only set at window creation time.
hideTimeoutMilliseconds = o.hideTimeoutMilliseconds;
@@ -3211,10 +3175,6 @@
if (mColorMode != COLOR_MODE_DEFAULT) {
sb.append(" colorMode=").append(ActivityInfo.colorModeToString(mColorMode));
}
- if (preferMinimalPostProcessing) {
- sb.append(" preferMinimalPostProcessing=");
- sb.append(preferMinimalPostProcessing);
- }
sb.append(System.lineSeparator());
sb.append(prefix).append(" fl=").append(
ViewDebug.flagsToString(LayoutParams.class, "flags", flags));
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index ec8d4ab..c6e678ab 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -1199,34 +1199,6 @@
capabilities.getDesiredMaxAverageLuminance(), capabilities.getDesiredMinLuminance());
}
-static jboolean nativeGetAutoLowLatencyModeSupport(JNIEnv* env, jclass clazz, jobject tokenObject) {
- sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
- if (token == NULL) return NULL;
-
- return SurfaceComposerClient::getAutoLowLatencyModeSupport(token);
-}
-
-static jboolean nativeGetGameContentTypeSupport(JNIEnv* env, jclass clazz, jobject tokenObject) {
- sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
- if (token == NULL) return NULL;
-
- return SurfaceComposerClient::getGameContentTypeSupport(token);
-}
-
-static void nativeSetAutoLowLatencyMode(JNIEnv* env, jclass clazz, jobject tokenObject, jboolean on) {
- sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
- if (token == NULL) return;
-
- SurfaceComposerClient::setAutoLowLatencyMode(token, on);
-}
-
-static void nativeSetGameContentType(JNIEnv* env, jclass clazz, jobject tokenObject, jboolean on) {
- sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
- if (token == NULL) return;
-
- SurfaceComposerClient::setGameContentType(token, on);
-}
-
static jlong nativeReadFromParcel(JNIEnv* env, jclass clazz, jobject parcelObj) {
Parcel* parcel = parcelForJavaObject(env, parcelObj);
if (parcel == NULL) {
@@ -1430,14 +1402,6 @@
(void*)nativeGetActiveColorMode},
{"nativeSetActiveColorMode", "(Landroid/os/IBinder;I)Z",
(void*)nativeSetActiveColorMode},
- {"nativeGetAutoLowLatencyModeSupport", "(Landroid/os/IBinder;)Z",
- (void*)nativeGetAutoLowLatencyModeSupport },
- {"nativeSetAutoLowLatencyMode", "(Landroid/os/IBinder;Z)V",
- (void*)nativeSetAutoLowLatencyMode },
- {"nativeGetGameContentTypeSupport", "(Landroid/os/IBinder;)Z",
- (void*)nativeGetGameContentTypeSupport },
- {"nativeSetGameContentType", "(Landroid/os/IBinder;Z)V",
- (void*)nativeSetGameContentType },
{"nativeGetCompositionDataspaces", "()[I",
(void*)nativeGetCompositionDataspaces},
{"nativeGetHdrCapabilities", "(Landroid/os/IBinder;)Landroid/view/Display$HdrCapabilities;",
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 1025f81..166cde0 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -2494,30 +2494,6 @@
<enum name="hdr" value="2" />
</attr>
<attr name="forceQueryable" format="boolean" />
- <!-- Indicates whether the activity wants the connected display to do minimal
- post processing on the produced image or video frames. This will only be
- requested if this activity's main window is visible on the screen.
-
- <p> This setting should be used when low latency has a higher priority than
- image enhancement processing (e.g. for games or video conferencing).
-
- <p> If the Display sink is connected via HDMI, the device will begin to
- send infoframes with Auto Low Latency Mode enabled and Game Content Type.
- This will switch the connected display to a minimal image processing mode
- (if available), which reduces latency, improving the user experience for
- gaming or video conferencing applications. For more information,
- see HDMI 2.1 specification.
-
- <p> If the Display sink has an internal connection or uses some other
- protocol than HDMI, effects may be similar but implementation-defined.
-
- <p> The ability to switch to a mode with minimal post proessing may be
- disabled by a user setting in the system settings menu. In that case,
- this field is ignored and the display will remain in its current
- mode.
-
- <p> See {@link android.content.pm.ActivityInfo #preferMinimalPostProcessing} -->
- <attr name="preferMinimalPostProcessing" format="boolean"/>
</declare-styleable>
<!-- The <code>activity-alias</code> tag declares a new
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index d753630..78c4efe 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3051,10 +3051,6 @@
<public name="accessibilitySystemActionLockScreen" />
<public name="accessibilitySystemActionTakeScreenshot" />
</public-group>
-
- <public-group type="attr" first-id="0x0101060c">
- <public name="preferMinimalPostProcessing"/>
- </public-group>
<!-- ===============================================================
DO NOT ADD UN-GROUPED ITEMS HERE
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 066bf25..df799fd 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -25,6 +25,7 @@
import android.content.pm.PackageManager;
import android.media.audiofx.AudioEffect;
import android.media.audiopolicy.AudioMix;
+import android.telephony.TelephonyManager;
import android.util.Log;
import java.lang.annotation.Retention;
@@ -1288,7 +1289,8 @@
* </ul>
*/
public static int getPlatformType(Context context) {
- if (context.getResources().getBoolean(com.android.internal.R.bool.config_voice_capable)) {
+ if (((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
+ .isVoiceCapable()) {
return PLATFORM_VOICE;
} else if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) {
return PLATFORM_TELEVISION;
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 2027345..375a650 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -951,8 +951,7 @@
(1 << AudioManager.STREAM_NOTIFICATION) |
(1 << AudioManager.STREAM_SYSTEM) |
(1 << AudioManager.STREAM_SYSTEM_ENFORCED);
- if (!mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable)) {
+ if (!getTelephonyManager().isVoiceCapable()) {
ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
}
db.execSQL("DELETE FROM system WHERE name='"
@@ -2548,7 +2547,7 @@
StringBuilder val = new StringBuilder();
List<Integer> defaultNetworks = TelephonyProperties.default_network();
int phoneCount = 1;
- TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class);
+ TelephonyManager telephonyManager = getTelephonyManager();
if (telephonyManager != null) {
phoneCount = telephonyManager.getSupportedModemCount();
}
@@ -2663,4 +2662,8 @@
private String getDefaultDeviceName() {
return mContext.getResources().getString(R.string.def_device_name_simple, Build.MODEL);
}
+
+ private TelephonyManager getTelephonyManager() {
+ return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
index d66a53c..caf5ee0 100644
--- a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
+++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java
@@ -163,8 +163,7 @@
public CarrierTextController(Context context, CharSequence separator, boolean showAirplaneMode,
boolean showMissingSim) {
mContext = context;
- mIsEmergencyCallCapable = context.getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable);
+ mIsEmergencyCallCapable = getTelephonyManager().isVoiceCapable();
mShowAirplaneMode = showAirplaneMode;
mShowMissingSim = showMissingSim;
diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyButton.java b/packages/SystemUI/src/com/android/keyguard/EmergencyButton.java
index 867014b6..5d084e7 100644
--- a/packages/SystemUI/src/com/android/keyguard/EmergencyButton.java
+++ b/packages/SystemUI/src/com/android/keyguard/EmergencyButton.java
@@ -28,6 +28,7 @@
import android.os.SystemClock;
import android.os.UserHandle;
import android.telecom.TelecomManager;
+import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.MotionEvent;
@@ -86,13 +87,16 @@
public EmergencyButton(Context context, AttributeSet attrs) {
super(context, attrs);
- mIsVoiceCapable = context.getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable);
+ mIsVoiceCapable = getTelephonyManager().isVoiceCapable();
mEnableEmergencyCallWhileSimLocked = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_enable_emergency_call_while_sim_locked);
mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
}
+ private TelephonyManager getTelephonyManager() {
+ return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ }
+
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index feb10a2..db52e7d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -177,7 +177,7 @@
record.tile.removeCallback(record.callback);
}
mTileLayout = mMediaTileLayout;
- setTiles(mHost.getTiles());
+ if (mHost != null) setTiles(mHost.getTiles());
mTileLayout.setListening(mListening);
return true;
} else if (!mMediaPlayer.hasMediaSession()
@@ -190,7 +190,7 @@
record.tile.removeCallback(record.callback);
}
mTileLayout = mRegularTileLayout;
- setTiles(mHost.getTiles());
+ if (mHost != null) setTiles(mHost.getTiles());
mTileLayout.setListening(mListening);
return true;
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 87b1bdf..b719435 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -5864,19 +5864,6 @@
return INetd.PERMISSION_NONE;
}
- private void updateNetworkPermissions(@NonNull final NetworkAgentInfo nai,
- @NonNull final NetworkCapabilities newNc) {
- final int oldPermission = getNetworkPermission(nai.networkCapabilities);
- final int newPermission = getNetworkPermission(newNc);
- if (oldPermission != newPermission && nai.created && !nai.isVPN()) {
- try {
- mNMS.setNetworkPermission(nai.network.netId, newPermission);
- } catch (RemoteException e) {
- loge("Exception in setNetworkPermission: " + e);
- }
- }
- }
-
/**
* Augments the NetworkCapabilities passed in by a NetworkAgent with capabilities that are
* maintained here that the NetworkAgent is not aware of (e.g., validated, captive portal,
@@ -5948,11 +5935,21 @@
* @param nai the network having its capabilities updated.
* @param nc the new network capabilities.
*/
- private void updateCapabilities(final int oldScore, @NonNull final NetworkAgentInfo nai,
- @NonNull final NetworkCapabilities nc) {
+ private void updateCapabilities(int oldScore, NetworkAgentInfo nai, NetworkCapabilities nc) {
NetworkCapabilities newNc = mixInCapabilities(nai, nc);
+
if (Objects.equals(nai.networkCapabilities, newNc)) return;
- updateNetworkPermissions(nai, nc);
+
+ final int oldPermission = getNetworkPermission(nai.networkCapabilities);
+ final int newPermission = getNetworkPermission(newNc);
+ if (oldPermission != newPermission && nai.created && !nai.isVPN()) {
+ try {
+ mNMS.setNetworkPermission(nai.network.netId, newPermission);
+ } catch (RemoteException e) {
+ loge("Exception in setNetworkPermission: " + e);
+ }
+ }
+
final NetworkCapabilities prevNc = nai.getAndSetNetworkCapabilities(newNc);
updateUids(nai, prevNc, newNc);
@@ -6299,52 +6296,6 @@
}
}
- // An accumulator class to gather the list of changes that result from a rematch.
- // TODO : enrich to represent an entire set of changes to apply.
- private static class NetworkReassignment {
- static class NetworkBgStatePair {
- @NonNull final NetworkAgentInfo mNetwork;
- final boolean mOldBackground;
- NetworkBgStatePair(@NonNull final NetworkAgentInfo network,
- final boolean oldBackground) {
- mNetwork = network;
- mOldBackground = oldBackground;
- }
- }
-
- static class RequestReassignment {
- @NonNull public final NetworkRequestInfo mRequest;
- @Nullable public final NetworkAgentInfo mOldNetwork;
- @Nullable public final NetworkAgentInfo mNewNetwork;
- RequestReassignment(@NonNull final NetworkRequestInfo request,
- @Nullable final NetworkAgentInfo oldNetwork,
- @Nullable final NetworkAgentInfo newNetwork) {
- mRequest = request;
- mOldNetwork = oldNetwork;
- mNewNetwork = newNetwork;
- }
- }
-
- @NonNull private final Set<NetworkBgStatePair> mRematchedNetworks = new ArraySet<>();
- @NonNull private final List<RequestReassignment> mReassignments = new ArrayList<>();
-
- @NonNull Iterable<NetworkBgStatePair> getRematchedNetworks() {
- return mRematchedNetworks;
- }
-
- @NonNull Iterable<RequestReassignment> getRequestReassignments() {
- return mReassignments;
- }
-
- void addRequestReassignment(@NonNull final RequestReassignment reassignment) {
- mReassignments.add(reassignment);
- }
-
- void addRematchedNetwork(@NonNull final NetworkBgStatePair network) {
- mRematchedNetworks.add(network);
- }
- }
-
private ArrayMap<NetworkRequestInfo, NetworkAgentInfo> computeRequestReassignmentForNetwork(
@NonNull final NetworkAgentInfo newNetwork) {
final int score = newNetwork.getCurrentScore();
@@ -6390,8 +6341,8 @@
// needed. A network is needed if it is the best network for
// one or more NetworkRequests, or if it is a VPN.
//
- // - Writes into the passed reassignment object all changes that should be done for
- // rematching this network with all requests, to be applied later.
+ // - Tears down newNetwork if it just became validated
+ // but turns out to be unneeded.
//
// NOTE: This function only adds NetworkRequests that "newNetwork" could satisfy,
// it does not remove NetworkRequests that other Networks could better satisfy.
@@ -6399,29 +6350,29 @@
// This function should be used when possible instead of {@code rematchAllNetworksAndRequests}
// as it performs better by a factor of the number of Networks.
//
- // TODO : stop writing to the passed reassignment. This is temporarily more useful, but
- // it's unidiomatic Java and it's hard to read.
- //
- // @param changes a currently-building list of changes to write to
// @param newNetwork is the network to be matched against NetworkRequests.
// @param now the time the rematch starts, as returned by SystemClock.elapsedRealtime();
- private void rematchNetworkAndRequests(@NonNull final NetworkReassignment changes,
- @NonNull final NetworkAgentInfo newNetwork, final long now) {
+ private void rematchNetworkAndRequests(NetworkAgentInfo newNetwork, long now) {
ensureRunningOnConnectivityServiceThread();
if (!newNetwork.everConnected) return;
boolean isNewDefault = false;
NetworkAgentInfo oldDefaultNetwork = null;
- changes.addRematchedNetwork(new NetworkReassignment.NetworkBgStatePair(newNetwork,
- newNetwork.isBackgroundNetwork()));
+ final boolean wasBackgroundNetwork = newNetwork.isBackgroundNetwork();
+ final int score = newNetwork.getCurrentScore();
if (VDBG || DDBG) log("rematching " + newNetwork.name());
final ArrayMap<NetworkRequestInfo, NetworkAgentInfo> reassignedRequests =
computeRequestReassignmentForNetwork(newNetwork);
+ NetworkCapabilities nc = newNetwork.networkCapabilities;
+ if (VDBG) log(" network has: " + nc);
+
// Find and migrate to this Network any NetworkRequests for
// which this network is now the best.
+ final ArrayList<NetworkAgentInfo> removedRequests = new ArrayList<>();
+ final ArrayList<NetworkRequestInfo> addedRequests = new ArrayList<>();
for (final Map.Entry<NetworkRequestInfo, NetworkAgentInfo> entry :
reassignedRequests.entrySet()) {
final NetworkRequestInfo nri = entry.getKey();
@@ -6435,6 +6386,7 @@
}
previousSatisfier.removeRequest(nri.request.requestId);
previousSatisfier.lingerRequest(nri.request, now, mLingerDelayMs);
+ removedRequests.add(previousSatisfier);
} else {
if (VDBG || DDBG) log(" accepting network in place of null");
}
@@ -6443,8 +6395,7 @@
if (!newSatisfier.addRequest(nri.request)) {
Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request);
}
- changes.addRequestReassignment(new NetworkReassignment.RequestReassignment(
- nri, previousSatisfier, newSatisfier));
+ addedRequests.add(nri);
// Tell NetworkFactories about the new score, so they can stop
// trying to connect if they know they cannot match it.
// TODO - this could get expensive if we have a lot of requests for this
@@ -6501,6 +6452,48 @@
// Have a new default network, release the transition wakelock in
scheduleReleaseNetworkTransitionWakelock();
}
+
+ if (!newNetwork.networkCapabilities.equalRequestableCapabilities(nc)) {
+ Slog.wtf(TAG, String.format(
+ "BUG: %s changed requestable capabilities during rematch: %s -> %s",
+ newNetwork.name(), nc, newNetwork.networkCapabilities));
+ }
+ if (newNetwork.getCurrentScore() != score) {
+ Slog.wtf(TAG, String.format(
+ "BUG: %s changed score during rematch: %d -> %d",
+ newNetwork.name(), score, newNetwork.getCurrentScore()));
+ }
+
+ // Notify requested networks are available after the default net is switched, but
+ // before LegacyTypeTracker sends legacy broadcasts
+ for (NetworkRequestInfo nri : addedRequests) notifyNetworkAvailable(newNetwork, nri);
+
+ // Finally, process listen requests and update capabilities if the background state has
+ // changed for this network. For consistency with previous behavior, send onLost callbacks
+ // before onAvailable.
+ processNewlyLostListenRequests(newNetwork);
+
+ // Maybe the network changed background states. Update its capabilities.
+ final boolean backgroundChanged = wasBackgroundNetwork != newNetwork.isBackgroundNetwork();
+ if (backgroundChanged) {
+ final NetworkCapabilities newNc = mixInCapabilities(newNetwork,
+ newNetwork.networkCapabilities);
+
+ final int oldPermission = getNetworkPermission(newNetwork.networkCapabilities);
+ final int newPermission = getNetworkPermission(newNc);
+ if (oldPermission != newPermission) {
+ try {
+ mNMS.setNetworkPermission(newNetwork.network.netId, newPermission);
+ } catch (RemoteException e) {
+ loge("Exception in setNetworkPermission: " + e);
+ }
+ }
+
+ newNetwork.getAndSetNetworkCapabilities(newNc);
+ notifyNetworkCallbacks(newNetwork, ConnectivityManager.CALLBACK_CAP_CHANGED);
+ }
+
+ processNewlySatisfiedListenRequests(newNetwork);
}
/**
@@ -6522,33 +6515,12 @@
// scoring network and then a higher scoring network, which could produce multiple
// callbacks.
Arrays.sort(nais);
- final NetworkReassignment changes = new NetworkReassignment();
for (final NetworkAgentInfo nai : nais) {
- rematchNetworkAndRequests(changes, nai, now);
+ rematchNetworkAndRequests(nai, now);
}
final NetworkAgentInfo newDefaultNetwork = getDefaultNetwork();
- // Notify requested networks are available after the default net is switched, but
- // before LegacyTypeTracker sends legacy broadcasts
- for (final NetworkReassignment.RequestReassignment event :
- changes.getRequestReassignments()) {
- if (null != event.mNewNetwork) {
- notifyNetworkAvailable(event.mNewNetwork, event.mRequest);
- }
- }
-
- for (final NetworkReassignment.NetworkBgStatePair event : changes.getRematchedNetworks()) {
- // Process listen requests and update capabilities if the background state has
- // changed for this network. For consistency with previous behavior, send onLost
- // callbacks before onAvailable.
- processNewlyLostListenRequests(event.mNetwork);
- if (event.mOldBackground != event.mNetwork.isBackgroundNetwork()) {
- applyBackgroundChangeForRematch(event.mNetwork);
- }
- processNewlySatisfiedListenRequests(event.mNetwork);
- }
-
for (final NetworkAgentInfo nai : nais) {
// Rematching may have altered the linger state of some networks, so update all linger
// timers. updateLingerState reads the state from the network agent and does nothing
@@ -6580,24 +6552,6 @@
}
}
- /**
- * Apply a change in background state resulting from rematching networks with requests.
- *
- * During rematch, a network may change background states by starting to satisfy or stopping
- * to satisfy a foreground request. Listens don't count for this. When a network changes
- * background states, its capabilities need to be updated and callbacks fired for the
- * capability change.
- *
- * @param nai The network that changed background states
- */
- private void applyBackgroundChangeForRematch(@NonNull final NetworkAgentInfo nai) {
- final NetworkCapabilities newNc = mixInCapabilities(nai, nai.networkCapabilities);
- if (Objects.equals(nai.networkCapabilities, newNc)) return;
- updateNetworkPermissions(nai, newNc);
- nai.getAndSetNetworkCapabilities(newNc);
- notifyNetworkCallbacks(nai, ConnectivityManager.CALLBACK_CAP_CHANGED);
- }
-
private void updateLegacyTypeTrackerAndVpnLockdownForRematch(
@Nullable final NetworkAgentInfo oldDefaultNetwork,
@Nullable final NetworkAgentInfo newDefaultNetwork,
diff --git a/services/core/java/com/android/server/MmsServiceBroker.java b/services/core/java/com/android/server/MmsServiceBroker.java
index c0f10a3..92d1da5 100644
--- a/services/core/java/com/android/server/MmsServiceBroker.java
+++ b/services/core/java/com/android/server/MmsServiceBroker.java
@@ -16,6 +16,8 @@
package com.android.server;
+import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
+
import android.Manifest;
import android.app.AppOpsManager;
import android.app.PendingIntent;
@@ -37,6 +39,7 @@
import android.os.UserHandle;
import android.service.carrier.CarrierMessagingService;
import android.telephony.SmsManager;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Slog;
@@ -523,11 +526,11 @@
// Grant permission for the carrier app.
Intent intent = new Intent(action);
- TelephonyManager telephonyManager =
- (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
- List<String> carrierPackages =
- telephonyManager.getCarrierPackageNamesForIntentAndPhone(
- intent, SubscriptionManager.getPhoneId(subId));
+ TelephonyManager telephonyManager = (TelephonyManager)
+ mContext.getSystemService(Context.TELEPHONY_SERVICE);
+ List<String> carrierPackages = telephonyManager
+ .getCarrierPackageNamesForIntentAndPhone(
+ intent, getPhoneIdFromSubId(subId));
if (carrierPackages != null && carrierPackages.size() == 1) {
LocalServices.getService(UriGrantsManagerInternal.class)
.grantUriPermissionFromIntent(callingUid, carrierPackages.get(0),
@@ -539,4 +542,13 @@
return contentUri;
}
}
+
+ private int getPhoneIdFromSubId(int subId) {
+ SubscriptionManager subManager = (SubscriptionManager)
+ mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ if (subManager == null) return INVALID_SIM_SLOT_INDEX;
+ SubscriptionInfo info = subManager.getActiveSubscriptionInfo(subId);
+ if (info == null) return INVALID_SIM_SLOT_INDEX;
+ return info.getSimSlotIndex();
+ }
}
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 6bc117b..7f62747 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -16,6 +16,7 @@
package com.android.server;
+import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX;
import static android.telephony.TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED;
import static android.telephony.TelephonyRegistryManager.SIM_ACTIVATION_TYPE_DATA;
import static android.telephony.TelephonyRegistryManager.SIM_ACTIVATION_TYPE_VOICE;
@@ -59,6 +60,7 @@
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
@@ -97,7 +99,7 @@
* and 15973975 by saving the phoneId of the registrant and then using the
* phoneId when deciding to to make a callback. This is necessary because
* a subId changes from to a dummy value when a SIM is removed and thus won't
- * compare properly. Because SubscriptionManager.getPhoneId(int subId) handles
+ * compare properly. Because getPhoneIdFromSubId(int subId) handles
* the dummy value conversion we properly do the callbacks.
*
* Eventually we may want to remove the notion of dummy value but for now this
@@ -131,7 +133,7 @@
int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- int phoneId = SubscriptionManager.INVALID_PHONE_INDEX;
+ int phoneId = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
boolean matchPhoneStateListenerEvent(int events) {
return (callback != null) && ((events & this.events) != 0);
@@ -231,7 +233,7 @@
private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- private int mDefaultPhoneId = SubscriptionManager.INVALID_PHONE_INDEX;
+ private int mDefaultPhoneId = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
private int[] mRingingCallState;
@@ -358,7 +360,7 @@
SubscriptionManager.getDefaultSubscriptionId());
int newDefaultPhoneId = intent.getIntExtra(
SubscriptionManager.EXTRA_SLOT_INDEX,
- SubscriptionManager.getPhoneId(newDefaultSubId));
+ getPhoneIdFromSubId(newDefaultSubId));
if (DBG) {
log("onReceive:current mDefaultSubId=" + mDefaultSubId
+ " current mDefaultPhoneId=" + mDefaultPhoneId
@@ -768,7 +770,7 @@
return;
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
// register
IBinder b = callback.asBinder();
@@ -1099,7 +1101,7 @@
// Called only by Telecomm to communicate call state across different phone accounts. So
// there is no need to add a valid subId or slotId.
broadcastCallStateChanged(state, phoneNumber,
- SubscriptionManager.INVALID_PHONE_INDEX,
+ SubscriptionManager.INVALID_SIM_SLOT_INDEX,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
}
@@ -1324,7 +1326,7 @@
synchronized (mRecords) {
mCarrierNetworkChangeState = active;
for (int subId : subIds) {
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
if (VDBG) {
log("notifyCarrierNetworkChange: active=" + active + "subId: " + subId);
@@ -1357,7 +1359,7 @@
log("notifyCellInfoForSubscriber: subId=" + subId
+ " cellInfo=" + cellInfo);
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mCellInfo.set(phoneId, cellInfo);
@@ -1448,7 +1450,7 @@
log("notifyCallForwardingChangedForSubscriber: subId=" + subId
+ " cfi=" + cfi);
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mCallForwarding[phoneId] = cfi;
@@ -1476,7 +1478,7 @@
if (!checkNotifyPermission("notifyDataActivity()" )) {
return;
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mDataActivity[phoneId] = state;
@@ -1627,7 +1629,7 @@
log("notifyCellLocationForSubscriber: subId=" + subId
+ " cellLocation=" + cellLocation);
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mCellLocation[phoneId] = cellLocation;
@@ -1655,7 +1657,7 @@
if (!checkNotifyPermission("notifyOtaspChanged()" )) {
return;
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mOtaspMode[phoneId] = otaspMode;
@@ -1759,7 +1761,7 @@
if (!checkNotifyPermission("notifyImsCallDisconnectCause()")) {
return;
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mImsReasonInfo.set(phoneId, imsReasonInfo);
@@ -1819,7 +1821,7 @@
if (VDBG) {
log("notifySrvccStateChanged: subId=" + subId + " srvccState=" + state);
}
- int phoneId = SubscriptionManager.getPhoneId(subId);
+ int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mSrvccState[phoneId] = state;
@@ -2227,7 +2229,7 @@
intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
}
// If the phoneId is invalid, the broadcast is for overall call state.
- if (phoneId != SubscriptionManager.INVALID_PHONE_INDEX) {
+ if (phoneId != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
intent.putExtra(PHONE_CONSTANTS_SLOT_KEY, phoneId);
intent.putExtra(SubscriptionManager.EXTRA_SLOT_INDEX, phoneId);
}
@@ -2700,4 +2702,18 @@
private static CallQuality createCallQuality() {
return new CallQuality(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
+
+ private int getPhoneIdFromSubId(int subId) {
+ SubscriptionManager subManager = (SubscriptionManager)
+ mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ if (subManager == null) return INVALID_SIM_SLOT_INDEX;
+
+ if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
+ subId = SubscriptionManager.getDefaultSubscriptionId();
+ }
+
+ SubscriptionInfo info = subManager.getActiveSubscriptionInfo(subId);
+ if (info == null) return INVALID_SIM_SLOT_INDEX;
+ return info.getSimSlotIndex();
+ }
}
diff --git a/services/core/java/com/android/server/display/DisplayDevice.java b/services/core/java/com/android/server/display/DisplayDevice.java
index af68403..7ce63c5 100644
--- a/services/core/java/com/android/server/display/DisplayDevice.java
+++ b/services/core/java/com/android/server/display/DisplayDevice.java
@@ -157,24 +157,6 @@
public void setRequestedColorModeLocked(int colorMode) {
}
- /**
- * Sends the Auto Low Latency Mode (ALLM) signal over HDMI, or requests an internal display to
- * switch to a low-latency mode.
- *
- * @param on Whether to set ALLM on or off.
- */
- public void setAutoLowLatencyModeLocked(boolean on) {
- }
-
- /**
- * Sends a ContentType=Game signal over HDMI, or requests an internal display to switch to a
- * game mode (generally lower latency).
- *
- * @param on Whether to send a ContentType=Game signal or not
- */
- public void setGameContentTypeLocked(boolean on) {
- }
-
public void onOverlayChangedLocked() {
}
diff --git a/services/core/java/com/android/server/display/DisplayDeviceInfo.java b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
index ac41434..729ea17 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceInfo.java
@@ -207,16 +207,6 @@
public Display.HdrCapabilities hdrCapabilities;
/**
- * Indicates whether this display supports Auto Low Latency Mode.
- */
- public boolean allmSupported;
-
- /**
- * Indicates whether this display suppors Game content type.
- */
- public boolean gameContentTypeSupported;
-
- /**
* The nominal apparent density of the display in DPI used for layout calculations.
* This density is sensitive to the viewing distance. A big TV and a tablet may have
* the same apparent density even though the pixels on the TV are much bigger than
@@ -347,8 +337,6 @@
|| !Arrays.equals(supportedModes, other.supportedModes)
|| !Arrays.equals(supportedColorModes, other.supportedColorModes)
|| !Objects.equals(hdrCapabilities, other.hdrCapabilities)
- || allmSupported != other.allmSupported
- || gameContentTypeSupported != other.gameContentTypeSupported
|| densityDpi != other.densityDpi
|| xDpi != other.xDpi
|| yDpi != other.yDpi
@@ -383,8 +371,6 @@
colorMode = other.colorMode;
supportedColorModes = other.supportedColorModes;
hdrCapabilities = other.hdrCapabilities;
- allmSupported = other.allmSupported;
- gameContentTypeSupported = other.gameContentTypeSupported;
densityDpi = other.densityDpi;
xDpi = other.xDpi;
yDpi = other.yDpi;
@@ -414,8 +400,6 @@
sb.append(", colorMode ").append(colorMode);
sb.append(", supportedColorModes ").append(Arrays.toString(supportedColorModes));
sb.append(", HdrCapabilities ").append(hdrCapabilities);
- sb.append(", allmSupported ").append(allmSupported);
- sb.append(", gameContentTypeSupported ").append(gameContentTypeSupported);
sb.append(", density ").append(densityDpi);
sb.append(", ").append(xDpi).append(" x ").append(yDpi).append(" dpi");
sb.append(", appVsyncOff ").append(appVsyncOffsetNanos);
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 3e8a726..d20191d 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -569,23 +569,6 @@
}
}
- private void setPreferMinimalPostProcessingLocked(int displayId, boolean isPreferred) {
- LogicalDisplay display = mLogicalDisplays.get(displayId);
- if (display != null) {
- DisplayDeviceInfo info =
- display.getPrimaryDisplayDeviceLocked().getDisplayDeviceInfoLocked();
-
- if (info.allmSupported) {
- display.setAutoLowLatencyMode(isPreferred);
- }
- if (info.gameContentTypeSupported) {
- display.setGameContentType(isPreferred);
- }
-
- scheduleTraversalLocked(false);
- }
- }
-
private DisplayInfo getDisplayInfoInternal(int displayId, int callingUid) {
synchronized (mSyncRoot) {
LogicalDisplay display = mLogicalDisplays.get(displayId);
@@ -1209,8 +1192,7 @@
}
private void setDisplayPropertiesInternal(int displayId, boolean hasContent,
- float requestedRefreshRate, int requestedModeId, boolean preferMinimalPostProcessing,
- boolean inTraversal) {
+ float requestedRefreshRate, int requestedModeId, boolean inTraversal) {
synchronized (mSyncRoot) {
LogicalDisplay display = mLogicalDisplays.get(displayId);
if (display == null) {
@@ -1233,8 +1215,6 @@
}
mDisplayModeDirector.getAppRequestObserver().setAppRequestedMode(
displayId, requestedModeId);
-
- setPreferMinimalPostProcessingLocked(displayId, preferMinimalPostProcessing);
}
}
@@ -2363,7 +2343,6 @@
}
private final class LocalService extends DisplayManagerInternal {
-
@Override
public void initPowerManagement(final DisplayPowerCallbacks callbacks, Handler handler,
SensorManager sensorManager) {
@@ -2452,10 +2431,9 @@
@Override
public void setDisplayProperties(int displayId, boolean hasContent,
- float requestedRefreshRate, int requestedMode, boolean preferMinimalPostProcessing,
- boolean inTraversal) {
+ float requestedRefreshRate, int requestedMode, boolean inTraversal) {
setDisplayPropertiesInternal(displayId, hasContent, requestedRefreshRate,
- requestedMode, preferMinimalPostProcessing, inTraversal);
+ requestedMode, inTraversal);
}
@Override
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 86ba845..308c755 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -181,10 +181,6 @@
private int mActiveColorMode;
private boolean mActiveColorModeInvalid;
private Display.HdrCapabilities mHdrCapabilities;
- private boolean mAllmSupported;
- private boolean mGameContentTypeSupported;
- private boolean mAllmRequested;
- private boolean mGameContentTypeRequested;
private boolean mSidekickActive;
private SidekickInternal mSidekickInternal;
@@ -208,8 +204,6 @@
mBacklight = null;
}
mHdrCapabilities = SurfaceControl.getHdrCapabilities(displayToken);
- mAllmSupported = SurfaceControl.getAutoLowLatencyModeSupport(displayToken);
- mGameContentTypeSupported = SurfaceControl.getGameContentTypeSupport(displayToken);
}
@Override
@@ -403,8 +397,6 @@
mInfo.defaultModeId = mDefaultModeId;
mInfo.supportedModes = getDisplayModes(mSupportedModes);
mInfo.colorMode = mActiveColorMode;
- mInfo.allmSupported = mAllmSupported;
- mInfo.gameContentTypeSupported = mGameContentTypeSupported;
mInfo.supportedColorModes =
new int[mSupportedColorModes.size()];
for (int i = 0; i < mSupportedColorModes.size(); i++) {
@@ -775,40 +767,6 @@
}
@Override
- public void setAutoLowLatencyModeLocked(boolean on) {
- if (mAllmRequested == on) {
- return;
- }
-
- mAllmRequested = on;
-
- if (!mAllmSupported) {
- Slog.d(TAG, "Unable to set ALLM because the connected display "
- + "does not support ALLM.");
- return;
- }
-
- SurfaceControl.setAutoLowLatencyMode(getDisplayTokenLocked(), on);
- }
-
- @Override
- public void setGameContentTypeLocked(boolean on) {
- if (mGameContentTypeRequested == on) {
- return;
- }
-
- mGameContentTypeRequested = on;
-
- if (!mGameContentTypeSupported) {
- Slog.d(TAG, "Unable to set game content type because the connected "
- + "display does not support game content type.");
- return;
- }
-
- SurfaceControl.setGameContentType(getDisplayTokenLocked(), on);
- }
-
- @Override
public void dumpLocked(PrintWriter pw) {
super.dumpLocked(pw);
pw.println("mPhysicalDisplayId=" + mPhysicalDisplayId);
@@ -824,10 +782,6 @@
pw.println("mState=" + Display.stateToString(mState));
pw.println("mBrightness=" + mBrightness);
pw.println("mBacklight=" + mBacklight);
- pw.println("mAllmSupported=" + mAllmSupported);
- pw.println("mAllmRequested=" + mAllmRequested);
- pw.println("mGameContentTypeSupported" + mGameContentTypeSupported);
- pw.println("mGameContentTypeRequested" + mGameContentTypeRequested);
pw.println("mDisplayInfos=");
for (int i = 0; i < mDisplayInfos.length; i++) {
pw.println(" " + mDisplayInfos[i]);
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 4649374..f4b2dc8 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -89,8 +89,6 @@
private int[] mAllowedDisplayModes = new int[0];
private int mRequestedColorMode;
- private boolean mShouldSetAllm;
- private boolean mShouldSetGameContentType;
// The display offsets to apply to the display projection.
private int mDisplayOffsetX;
@@ -284,8 +282,6 @@
deviceInfo.supportedColorModes,
deviceInfo.supportedColorModes.length);
mBaseDisplayInfo.hdrCapabilities = deviceInfo.hdrCapabilities;
- mBaseDisplayInfo.minimalPostProcessingSupported =
- deviceInfo.allmSupported || deviceInfo.gameContentTypeSupported;
mBaseDisplayInfo.logicalDensityDpi = deviceInfo.densityDpi;
mBaseDisplayInfo.physicalXDpi = deviceInfo.xDpi;
mBaseDisplayInfo.physicalYDpi = deviceInfo.yDpi;
@@ -365,9 +361,6 @@
device.setRequestedColorModeLocked(0);
}
- device.setAutoLowLatencyModeLocked(mShouldSetAllm);
- device.setGameContentTypeLocked(mShouldSetGameContentType);
-
// Only grab the display info now as it may have been changed based on the requests above.
final DisplayInfo displayInfo = getDisplayInfoLocked();
final DisplayDeviceInfo displayDeviceInfo = device.getDisplayDeviceInfoLocked();
@@ -489,26 +482,6 @@
mRequestedColorMode = colorMode;
}
- /**
- * Sends the Auto Low Latency Mode (ALLM) signal over HDMI, or requests an internal display to
- * switch to a low-latency mode.
- *
- * @param on Whether to set ALLM on or off.
- */
- public void setAutoLowLatencyMode(boolean on) {
- mShouldSetAllm = on;
- }
-
- /**
- * Sends a ContentType=Game signal over HDMI, or requests an internal display to switch to a
- * game mode (generally lower latency).
- *
- * @param on Whether to send a ContentType=Game signal or not
- */
- public void setGameContentType(boolean on) {
- mShouldSetGameContentType = on;
- }
-
/** Returns the pending requested color mode. */
public int getRequestedColorModeLocked() {
return mRequestedColorMode;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index fb84832..9e5734b 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -744,7 +744,6 @@
// Update effect.
w.mObscured = mTmpApplySurfaceChangesTransactionState.obscured;
-
if (!mTmpApplySurfaceChangesTransactionState.obscured) {
final boolean isDisplayed = w.isDisplayedLw();
@@ -775,10 +774,6 @@
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate
= w.mAttrs.preferredRefreshRate;
}
-
- mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing
- |= w.mAttrs.preferMinimalPostProcessing;
-
final int preferredModeId = getDisplayPolicy().getRefreshRatePolicy()
.getPreferredModeId(w);
if (mTmpApplySurfaceChangesTransactionState.preferredModeId == 0
@@ -3625,7 +3620,6 @@
mLastHasContent,
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate,
mTmpApplySurfaceChangesTransactionState.preferredModeId,
- mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing,
true /* inTraversal, must call performTraversalInTrans... below */);
final boolean wallpaperVisible = mWallpaperController.isWallpaperVisible();
@@ -3929,7 +3923,6 @@
boolean displayHasContent;
boolean obscured;
boolean syswin;
- boolean preferMinimalPostProcessing;
float preferredRefreshRate;
int preferredModeId;
@@ -3937,7 +3930,6 @@
displayHasContent = false;
obscured = false;
syswin = false;
- preferMinimalPostProcessing = false;
preferredRefreshRate = 0;
preferredModeId = 0;
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 6e29b63..401a094 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -495,6 +495,9 @@
// Initialize the system context.
createSystemContext();
+ // Call per-process mainline module initialization.
+ ActivityThread.initializeMainlineModules();
+
// Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
mSystemServiceManager.setStartInfo(mRuntimeRestart,
diff --git a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
index 4d01e33..fbb1380 100644
--- a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
+++ b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
@@ -604,9 +604,14 @@
}
private static int getCarrierPrivilegeStatus(Context context, int subId, int uid) {
- TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
- return telephonyManager.createForSubscriptionId(subId).getCarrierPrivilegeStatus(uid);
+ return telephonyManager.createForSubscriptionId(subId).getCarrierPrivilegeStatus(uid);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
/**
diff --git a/telephony/java/android/telephony/TelephonyFrameworkInitializer.java b/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
index b75d533..407ad19 100644
--- a/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
+++ b/telephony/java/android/telephony/TelephonyFrameworkInitializer.java
@@ -16,12 +16,16 @@
package android.telephony;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.app.SystemServiceRegistry;
import android.content.Context;
+import android.os.TelephonyServiceManager;
import android.telephony.euicc.EuiccCardManager;
import android.telephony.euicc.EuiccManager;
+import com.android.internal.util.Preconditions;
+
/**
* Class for performing registration for all telephony services.
@@ -34,6 +38,23 @@
private TelephonyFrameworkInitializer() {
}
+ private static volatile TelephonyServiceManager sTelephonyServiceManager;
+
+ /**
+ * Sets an instance of {@link TelephonyServiceManager} that allows
+ * the telephony mainline module to register/obtain telephony binder services. This is called
+ * by the platform during the system initialization.
+ *
+ * @param telephonyServiceManager instance of {@link TelephonyServiceManager} that allows
+ * the telephony mainline module to register/obtain telephony binder services.
+ */
+ public static void setTelephonyServiceManager(
+ @NonNull TelephonyServiceManager telephonyServiceManager) {
+ Preconditions.checkState(sTelephonyServiceManager == null,
+ "setTelephonyServiceManager called twice!");
+ sTelephonyServiceManager = Preconditions.checkNotNull(telephonyServiceManager);
+ }
+
/**
* Called by {@link SystemServiceRegistry}'s static initializer and registers all telephony
* services to {@link Context}, so that {@link Context#getSystemService} can return them.
@@ -68,4 +89,9 @@
context -> new EuiccCardManager(context)
);
}
+
+ /** @hide */
+ public static TelephonyServiceManager getTelephonyServiceManager() {
+ return sTelephonyServiceManager;
+ }
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 5b7ad12..a121974 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -605,6 +605,7 @@
*
* @hide
*/
+ @SystemApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_EMERGENCY_ASSISTANCE =
"android.telephony.action.EMERGENCY_ASSISTANCE";
@@ -5161,7 +5162,8 @@
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private ITelephony getITelephony() {
- return ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
+ return ITelephony.Stub.asInterface(TelephonyFrameworkInitializer
+ .getTelephonyServiceManager().getTelephonyServiceRegisterer().get());
}
private ITelephonyRegistry getTelephonyRegistry() {
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 46efdd6..1678d5a 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -108,7 +108,9 @@
String getCountryCode();
- boolean isDualBandSupported();
+ boolean is5GHzBandSupported();
+
+ boolean is6GHzBandSupported();
boolean needs5GHzToAnyApBandConversion();
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 4678067..9691bda 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -2156,8 +2156,6 @@
/** @hide */
public static final long WIFI_FEATURE_INFRA = 0x0001L; // Basic infrastructure mode
/** @hide */
- public static final long WIFI_FEATURE_INFRA_5G = 0x0002L; // Support for 5 GHz Band
- /** @hide */
public static final long WIFI_FEATURE_PASSPOINT = 0x0004L; // Support for GAS/ANQP
/** @hide */
public static final long WIFI_FEATURE_P2P = 0x0008L; // Wifi-Direct
@@ -2227,8 +2225,6 @@
public static final long WIFI_FEATURE_MBO = 0x800000000L; // MBO Support
/** @hide */
public static final long WIFI_FEATURE_OCE = 0x1000000000L; // OCE Support
- /** @hide */
- public static final long WIFI_FEATURE_INFRA_6G = 0x2000000000L; // Support 6 GHz band
private long getSupportedFeatures() {
try {
@@ -2242,22 +2238,7 @@
return (getSupportedFeatures() & feature) == feature;
}
- /**
- * @return true if this adapter supports 5 GHz band
- */
- public boolean is5GHzBandSupported() {
- return isFeatureSupported(WIFI_FEATURE_INFRA_5G);
- }
-
- /**
- * @return true if the device supports operating in the 6 GHz band and Wi-Fi is enabled,
- * false otherwise.
- */
- public boolean is6GHzBandSupported() {
- return isFeatureSupported(WIFI_FEATURE_INFRA_6G);
- }
-
- /**
+ /**
* @return true if this adapter supports Passpoint
* @hide
*/
@@ -2379,6 +2360,30 @@
}
/**
+ * Check if the chipset supports 5GHz band.
+ * @return {@code true} if supported, {@code false} otherwise.
+ */
+ public boolean is5GHzBandSupported() {
+ try {
+ return mService.is5GHzBandSupported();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Check if the chipset supports 6GHz band.
+ * @return {@code true} if supported, {@code false} otherwise.
+ */
+ public boolean is6GHzBandSupported() {
+ try {
+ return mService.is6GHzBandSupported();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Interface for Wi-Fi activity energy info listener. Should be implemented by applications and
* set when calling {@link WifiManager#getWifiActivityEnergyInfoAsync}.
*
@@ -2592,21 +2597,6 @@
}
/**
- * Check if the chipset supports dual frequency band (2.4 GHz and 5 GHz).
- * No permissions are required to call this method.
- * @return {@code true} if supported, {@code false} otherwise.
- * @hide
- */
- @SystemApi
- public boolean isDualBandSupported() {
- try {
- return mService.isDualBandSupported();
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
* Check if the device is dual mode capable i.e. supports concurrent STA + Soft AP.
*
* If the device is dual mode capable, it may require conversion of the user's Soft AP band
diff --git a/wifi/java/com/android/server/wifi/BaseWifiService.java b/wifi/java/com/android/server/wifi/BaseWifiService.java
index 86392fa..d58083c 100644
--- a/wifi/java/com/android/server/wifi/BaseWifiService.java
+++ b/wifi/java/com/android/server/wifi/BaseWifiService.java
@@ -226,12 +226,23 @@
throw new UnsupportedOperationException();
}
- @Override
+ /** @deprecated use {@link #is5GHzBandSupported} instead */
+ @Deprecated
public boolean isDualBandSupported() {
throw new UnsupportedOperationException();
}
@Override
+ public boolean is5GHzBandSupported() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean is6GHzBandSupported() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public boolean needs5GHzToAnyApBandConversion() {
throw new UnsupportedOperationException();
}
diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
index f92d38c..62ff9f6 100644
--- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
@@ -1696,8 +1696,6 @@
assertTrue(mWifiManager.isPasspointSupported());
assertTrue(mWifiManager.isP2pSupported());
assertFalse(mWifiManager.isPortableHotspotSupported());
- assertFalse(mWifiManager.is5GHzBandSupported());
- assertFalse(mWifiManager.is6GHzBandSupported());
assertFalse(mWifiManager.isDeviceToDeviceRttSupported());
assertFalse(mWifiManager.isDeviceToApRttSupported());
assertFalse(mWifiManager.isPreferredNetworkOffloadSupported());
@@ -1782,13 +1780,23 @@
}
/**
- * Test behavior of {@link WifiManager#isDualBandSupported()}
+ * Test behavior of {@link WifiManager#is5GHzBandSupported()}
*/
@Test
- public void testIsDualBandSupported() throws Exception {
- when(mWifiService.isDualBandSupported()).thenReturn(true);
- assertTrue(mWifiManager.isDualBandSupported());
- verify(mWifiService).isDualBandSupported();
+ public void testIs5GHzBandSupported() throws Exception {
+ when(mWifiService.is5GHzBandSupported()).thenReturn(true);
+ assertTrue(mWifiManager.is5GHzBandSupported());
+ verify(mWifiService).is5GHzBandSupported();
+ }
+
+ /**
+ * Test behavior of {@link WifiManager#is6GHzBandSupported()}
+ */
+ @Test
+ public void testIs6GHzBandSupported() throws Exception {
+ when(mWifiService.is6GHzBandSupported()).thenReturn(true);
+ assertTrue(mWifiManager.is6GHzBandSupported());
+ verify(mWifiService).is6GHzBandSupported();
}
/**