diff options
85 files changed, 953 insertions, 1012 deletions
diff --git a/ApiDocs.bp b/ApiDocs.bp index c1816467146d..a926ddc218a6 100644 --- a/ApiDocs.bp +++ b/ApiDocs.bp @@ -192,6 +192,42 @@ droidstubs { }, } +// This produces the same annotations.zip as framework-doc-stubs, but by using +// outputs from individual modules instead of all the source code. +genrule { + name: "sdk-annotations.zip", + srcs: [ + ":android-non-updatable-doc-stubs{.annotations.zip}", + + // Conscrypt and i18n currently do not enable annotations + // ":conscrypt.module.public.api{.public.annotations.zip}", + // ":i18n.module.public.api{.public.annotations.zip}", + + // Modules that enable annotations below + ":android.net.ipsec.ike{.public.annotations.zip}", + ":art.module.public.api{.public.annotations.zip}", + ":framework-appsearch{.public.annotations.zip}", + ":framework-connectivity{.public.annotations.zip}", + ":framework-graphics{.public.annotations.zip}", + ":framework-media{.public.annotations.zip}", + ":framework-mediaprovider{.public.annotations.zip}", + ":framework-permission{.public.annotations.zip}", + ":framework-permission-s{.public.annotations.zip}", + ":framework-scheduling{.public.annotations.zip}", + ":framework-sdkextensions{.public.annotations.zip}", + ":framework-statsd{.public.annotations.zip}", + ":framework-tethering{.public.annotations.zip}", + ":framework-wifi{.public.annotations.zip}", + ], + out: ["annotations.zip"], + tools: [ + "merge_annotation_zips", + "soong_zip", + ], + cmd: "$(location merge_annotation_zips) $(genDir)/out $(in) && " + + "$(location soong_zip) -o $(out) -C $(genDir)/out -D $(genDir)/out", +} + ///////////////////////////////////////////////////////////////////// // API docs are created from the generated stub source files // using droiddoc diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index 591e8ba859fc..4becc6b7c44a 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -1008,13 +1008,21 @@ public class JobSchedulerService extends com.android.server.SystemService } @Override - public void onUserUnlocked(@NonNull TargetUser user) { + public void onUserStarting(@NonNull TargetUser user) { synchronized (mLock) { - // Note that the user has started after its unlocked instead of when the user - // actually starts because the storage won't be decrypted until unlock. mStartedUsers = ArrayUtils.appendInt(mStartedUsers, user.getUserIdentifier()); } - // Let's kick any outstanding jobs for this user. + // The user is starting but credential encrypted storage is still locked. + // Only direct-boot-aware jobs can safely run. + // Let's kick off any eligible jobs for this user. + mHandler.obtainMessage(MSG_CHECK_JOB).sendToTarget(); + } + + @Override + public void onUserUnlocked(@NonNull TargetUser user) { + // The user is fully unlocked and credential encrypted storage is now decrypted. + // Direct-boot-UNaware jobs can now safely run. + // Let's kick off any outstanding jobs for this user. mHandler.obtainMessage(MSG_CHECK_JOB).sendToTarget(); } diff --git a/apex/media/Android.bp b/apex/media/Android.bp index f2e64ce0b2c5..1a710a98b0a9 100644 --- a/apex/media/Android.bp +++ b/apex/media/Android.bp @@ -28,8 +28,8 @@ package { sdk { name: "media-module-sdk", bootclasspath_fragments: ["com.android.media-bootclasspath-fragment"], + systemserverclasspath_fragments: ["com.android.media-systemserverclasspath-fragment"], java_sdk_libs: [ "framework-media", - "service-media-s", ], } diff --git a/core/api/current.txt b/core/api/current.txt index 738851b78b30..0eba9d75fdfc 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -25516,6 +25516,7 @@ package android.media.tv { field public static final String COLUMN_CONTENT_ID = "content_id"; field public static final String COLUMN_CONTENT_RATING = "content_rating"; field public static final String COLUMN_DURATION_MILLIS = "duration_millis"; + field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; field public static final String COLUMN_EPISODE_TITLE = "episode_title"; field public static final String COLUMN_INTENT_URI = "intent_uri"; @@ -25546,6 +25547,7 @@ package android.media.tv { field public static final String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final String COLUMN_SPLIT_ID = "split_id"; field public static final String COLUMN_STARTING_PRICE = "starting_price"; + field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio"; field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; field public static final String COLUMN_TITLE = "title"; @@ -25708,6 +25710,7 @@ package android.media.tv { field public static final String COLUMN_CONTENT_ID = "content_id"; field public static final String COLUMN_CONTENT_RATING = "content_rating"; field public static final String COLUMN_DURATION_MILLIS = "duration_millis"; + field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; field public static final String COLUMN_EPISODE_TITLE = "episode_title"; field public static final String COLUMN_INTENT_URI = "intent_uri"; @@ -25739,6 +25742,7 @@ package android.media.tv { field public static final String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final String COLUMN_SPLIT_ID = "split_id"; field public static final String COLUMN_STARTING_PRICE = "starting_price"; + field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio"; field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; field public static final String COLUMN_TITLE = "title"; @@ -31423,6 +31427,7 @@ package android.os { method public int dataSize(); method public void enforceInterface(@NonNull String); method public boolean hasFileDescriptors(); + method public boolean hasFileDescriptors(int, int); method public byte[] marshall(); method @NonNull public static android.os.Parcel obtain(); method @NonNull public static android.os.Parcel obtain(@NonNull android.os.IBinder); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 4a732e544722..13f7cfb94124 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -2128,6 +2128,7 @@ package android.bluetooth { field @NonNull public static final android.os.ParcelUuid AVRCP_TARGET; field @NonNull public static final android.os.ParcelUuid BASE_UUID; field @NonNull public static final android.os.ParcelUuid BNEP; + field @NonNull public static final android.os.ParcelUuid CAP; field @NonNull public static final android.os.ParcelUuid COORDINATED_SET; field @NonNull public static final android.os.ParcelUuid DIP; field @NonNull public static final android.os.ParcelUuid GENERIC_MEDIA_CONTROL; diff --git a/core/java/android/app/time/OWNERS b/core/java/android/app/time/OWNERS index 8f8089717e3b..ef357e5a3b6a 100644 --- a/core/java/android/app/time/OWNERS +++ b/core/java/android/app/time/OWNERS @@ -1,3 +1,4 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# The app-facing APIs related to both time and time zone detection. +include /services/core/java/com/android/server/timedetector/OWNERS +include /services/core/java/com/android/server/timezonedetector/OWNERS diff --git a/core/java/android/app/timedetector/OWNERS b/core/java/android/app/timedetector/OWNERS index 941eed8de631..e9dbe4a0007d 100644 --- a/core/java/android/app/timedetector/OWNERS +++ b/core/java/android/app/timedetector/OWNERS @@ -1,4 +1,3 @@ # Bug component: 847766 -mingaleev@google.com -narayan@google.com -nfuller@google.com +# Internal APIs related to time detection. SDK APIs are in android.app.time. +include /services/core/java/com/android/server/timedetector/OWNERS diff --git a/core/java/android/app/timezone/OWNERS b/core/java/android/app/timezone/OWNERS index 8f8089717e3b..04d78f23517f 100644 --- a/core/java/android/app/timezone/OWNERS +++ b/core/java/android/app/timezone/OWNERS @@ -1,3 +1,4 @@ -# Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Bug component: 24949 +# Internal APIs related to APK-based time zone rule updates. +# Deprecated, deletion tracked by b/148144561 +include /services/core/java/com/android/server/timezone/OWNERS diff --git a/core/java/android/app/timezonedetector/OWNERS b/core/java/android/app/timezonedetector/OWNERS index 8f8089717e3b..fa03f1e835fd 100644 --- a/core/java/android/app/timezonedetector/OWNERS +++ b/core/java/android/app/timezonedetector/OWNERS @@ -1,3 +1,3 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Internal APIs related to time zone detection. SDK APIs are in android.app.time. +include /services/core/java/com/android/server/timezonedetector/OWNERS diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 3b744a73e75e..06ce0530d475 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -2099,7 +2099,7 @@ public final class BluetoothAdapter { try { return mManagerService.isBleScanAlwaysAvailable(); } catch (RemoteException e) { - Log.e(TAG, "remote expection when calling isBleScanAlwaysAvailable", e); + Log.e(TAG, "remote exception when calling isBleScanAlwaysAvailable", e); return false; } } @@ -2307,7 +2307,7 @@ public final class BluetoothAdapter { try { return mManagerService.isHearingAidProfileSupported(); } catch (RemoteException e) { - Log.e(TAG, "remote expection when calling isHearingAidProfileSupported", e); + Log.e(TAG, "remote exception when calling isHearingAidProfileSupported", e); return false; } } diff --git a/core/java/android/bluetooth/BluetoothLeAudio.java b/core/java/android/bluetooth/BluetoothLeAudio.java index c30c933b6ef8..d7940eb9d3a4 100644 --- a/core/java/android/bluetooth/BluetoothLeAudio.java +++ b/core/java/android/bluetooth/BluetoothLeAudio.java @@ -156,6 +156,12 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable { "android.bluetooth.action.LE_AUDIO_CONF_CHANGED"; /** + * Indicates unspecified audio content. + * @hide + */ + public static final int CONTEXT_TYPE_UNSPECIFIED = 0x0001; + + /** * Indicates conversation between humans as, for example, in telephony or video calls. * @hide */ @@ -168,6 +174,66 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable { public static final int CONTEXT_TYPE_MEDIA = 0x0004; /** + * Indicates instructional audio as, for example, in navigation, traffic announcements + * or user guidance. + * @hide + */ + public static final int CONTEXT_TYPE_INSTRUCTIONAL = 0x0008; + + /** + * Indicates attention seeking audio as, for example, in beeps signalling arrival of a message + * or keyboard clicks. + * @hide + */ + public static final int CONTEXT_TYPE_ATTENTION_SEEKING = 0x0010; + + /** + * Indicates immediate alerts as, for example, in a low battery alarm, timer expiry or alarm + * clock. + * @hide + */ + public static final int CONTEXT_TYPE_IMMEDIATE_ALERT = 0x0020; + + /** + * Indicates man machine communication as, for example, with voice recognition or virtual + * assistant. + * @hide + */ + public static final int CONTEXT_TYPE_MAN_MACHINE = 0x0040; + + /** + * Indicates emergency alerts as, for example, with fire alarms or other urgent alerts. + * @hide + */ + public static final int CONTEXT_TYPE_EMERGENCY_ALERT = 0x0080; + + /** + * Indicates ringtone as in a call alert. + * @hide + */ + public static final int CONTEXT_TYPE_RINGTONE = 0x0100; + + /** + * Indicates audio associated with a television program and/or with metadata conforming to the + * Bluetooth Broadcast TV profile. + * @hide + */ + public static final int CONTEXT_TYPE_TV = 0x0200; + + /** + * Indicates audio associated with a low latency live audio stream. + * + * @hide + */ + public static final int CONTEXT_TYPE_LIVE = 0x0400; + + /** + * Indicates audio associated with a video game stream. + * @hide + */ + public static final int CONTEXT_TYPE_GAME = 0x0800; + + /** * This represents an invalid group ID. * * @hide @@ -250,6 +316,17 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable { */ public static final int GROUP_STATUS_INACTIVE = IBluetoothLeAudio.GROUP_STATUS_INACTIVE; + /** + * Indicating that node has been added to the group. + * @hide + */ + public static final int GROUP_NODE_ADDED = IBluetoothLeAudio.GROUP_NODE_ADDED; + + /** + * Indicating that node has been removed from the group. + * @hide + */ + public static final int GROUP_NODE_REMOVED = IBluetoothLeAudio.GROUP_NODE_REMOVED; private final BluetoothProfileConnector<IBluetoothLeAudio> mProfileConnector = new BluetoothProfileConnector(this, BluetoothProfile.LE_AUDIO, "BluetoothLeAudio", @@ -546,6 +623,61 @@ public final class BluetoothLeAudio implements BluetoothProfile, AutoCloseable { } /** + * Add device to the given group. + * @param group_id group ID the device is being added to + * @param device the active device + * @return true on success, otherwise false + * @hide + */ + @RequiresBluetoothConnectPermission + @RequiresPermission(allOf = { + android.Manifest.permission.BLUETOOTH_CONNECT, + android.Manifest.permission.BLUETOOTH_PRIVILEGED + }) + public boolean groupAddNode(int group_id, @NonNull BluetoothDevice device) { + if (VDBG) log("groupAddNode()"); + final IBluetoothLeAudio service = getService(); + try { + if (service != null && mAdapter.isEnabled()) { + return service.groupAddNode(group_id, device, mAttributionSource); + } + if (service == null) Log.w(TAG, "Proxy not attached to service"); + return false; + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return false; + } + } + + /** + * Remove device from a given group. + * @param group_id group ID the device is being removed from + * @param device the active device + * @return true on success, otherwise false + * + * @hide + */ + @RequiresBluetoothConnectPermission + @RequiresPermission(allOf = { + android.Manifest.permission.BLUETOOTH_CONNECT, + android.Manifest.permission.BLUETOOTH_PRIVILEGED + }) + public boolean groupRemoveNode(int group_id, @NonNull BluetoothDevice device) { + if (VDBG) log("groupRemoveNode()"); + final IBluetoothLeAudio service = getService(); + try { + if (service != null && mAdapter.isEnabled()) { + return service.groupRemoveNode(group_id, device, mAttributionSource); + } + if (service == null) Log.w(TAG, "Proxy not attached to service"); + return false; + } catch (RemoteException e) { + Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable())); + return false; + } + } + + /** * Set connection policy of the profile * * <p> The device should already be paired. diff --git a/core/java/android/bluetooth/BluetoothUuid.java b/core/java/android/bluetooth/BluetoothUuid.java index 325a77107255..858819e15abc 100644 --- a/core/java/android/bluetooth/BluetoothUuid.java +++ b/core/java/android/bluetooth/BluetoothUuid.java @@ -188,6 +188,11 @@ public final class BluetoothUuid { /** @hide */ @NonNull @SystemApi + public static final ParcelUuid CAP = + ParcelUuid.fromString("EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE"); + /** @hide */ + @NonNull + @SystemApi public static final ParcelUuid BASE_UUID = ParcelUuid.fromString("00000000-0000-1000-8000-00805F9B34FB"); diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index b66f048b829d..755114e0ac67 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1736,35 +1736,9 @@ public final class Configuration implements Parcelable, Comparable<Configuration * object and the given one. Does not change the values of either. Any * undefined fields in <var>delta</var> are ignored. * @return Returns a bit mask indicating which configuration - * values has changed, containing any combination of - * {@link android.content.pm.ActivityInfo#CONFIG_FONT_SCALE - * PackageManager.ActivityInfo.CONFIG_FONT_SCALE}, - * {@link android.content.pm.ActivityInfo#CONFIG_MCC - * PackageManager.ActivityInfo.CONFIG_MCC}, - * {@link android.content.pm.ActivityInfo#CONFIG_MNC - * PackageManager.ActivityInfo.CONFIG_MNC}, - * {@link android.content.pm.ActivityInfo#CONFIG_LOCALE - * PackageManager.ActivityInfo.CONFIG_LOCALE}, - * {@link android.content.pm.ActivityInfo#CONFIG_TOUCHSCREEN - * PackageManager.ActivityInfo.CONFIG_TOUCHSCREEN}, - * {@link android.content.pm.ActivityInfo#CONFIG_KEYBOARD - * PackageManager.ActivityInfo.CONFIG_KEYBOARD}, - * {@link android.content.pm.ActivityInfo#CONFIG_NAVIGATION - * PackageManager.ActivityInfo.CONFIG_NAVIGATION}, - * {@link android.content.pm.ActivityInfo#CONFIG_ORIENTATION - * PackageManager.ActivityInfo.CONFIG_ORIENTATION}, - * {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_LAYOUT - * PackageManager.ActivityInfo.CONFIG_SCREEN_LAYOUT}, or - * {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_SIZE - * PackageManager.ActivityInfo.CONFIG_SCREEN_SIZE}, or - * {@link android.content.pm.ActivityInfo#CONFIG_SMALLEST_SCREEN_SIZE - * PackageManager.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE}. - * {@link android.content.pm.ActivityInfo#CONFIG_LAYOUT_DIRECTION - * PackageManager.ActivityInfo.CONFIG_LAYOUT_DIRECTION}. - * {@link android.content.pm.ActivityInfo#CONFIG_FONT_WEIGHT_ADJUSTMENT - * PackageManager.ActivityInfo.CONFIG_FONT_WEIGHT_ADJUSTMENT. - */ - public int diff(Configuration delta) { + * values have changed. + */ + public @Config int diff(Configuration delta) { return diff(delta, false /* compareUndefined */, false /* publicOnly */); } diff --git a/core/java/android/net/OWNERS b/core/java/android/net/OWNERS index 4ea8a54828b3..f55bcd31feb7 100644 --- a/core/java/android/net/OWNERS +++ b/core/java/android/net/OWNERS @@ -2,4 +2,5 @@ set noparent include platform/frameworks/base:/services/core/java/com/android/server/net/OWNERS -per-file SSL*, Uri*, Url* = prb@google.com, dauletz@google.com, narayan@google.com, ngeoffray@google.com +per-file SSL*,Uri*,Url* = prb@google.com,oth@google.com,narayan@google.com,ngeoffray@google.com +per-file SntpClient* = file:/services/core/java/com/android/server/timedetector/OWNERS diff --git a/core/java/android/net/sntp/OWNERS b/core/java/android/net/sntp/OWNERS new file mode 100644 index 000000000000..9a3e264a067f --- /dev/null +++ b/core/java/android/net/sntp/OWNERS @@ -0,0 +1 @@ +include /services/core/java/com/android/server/timedetector/OWNERS diff --git a/core/java/android/os/OWNERS b/core/java/android/os/OWNERS index e7c3a834f3a6..92861fba40a3 100644 --- a/core/java/android/os/OWNERS +++ b/core/java/android/os/OWNERS @@ -1,18 +1,18 @@ # Haptics -per-file CombinedVibrationEffect.aidl = michaelwr@google.com -per-file CombinedVibrationEffect.java = michaelwr@google.com -per-file ExternalVibration.aidl = michaelwr@google.com -per-file ExternalVibration.java = michaelwr@google.com -per-file IExternalVibrationController.aidl = michaelwr@google.com -per-file IExternalVibratorService.aidl = michaelwr@google.com -per-file IVibratorManagerService.aidl = michaelwr@google.com -per-file NullVibrator.java = michaelwr@google.com -per-file SystemVibrator.java = michaelwr@google.com -per-file SystemVibratorManager.java = michaelwr@google.com -per-file VibrationEffect.aidl = michaelwr@google.com -per-file VibrationEffect.java = michaelwr@google.com -per-file Vibrator.java = michaelwr@google.com -per-file VibratorManager.java = michaelwr@google.com +per-file CombinedVibrationEffect.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file CombinedVibrationEffect.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file ExternalVibration.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file ExternalVibration.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file IExternalVibrationController.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file IExternalVibratorService.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file IVibratorManagerService.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file NullVibrator.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file SystemVibrator.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file SystemVibratorManager.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibrationEffect.aidl = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibrationEffect.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file Vibrator.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibratorManager.java = file:/services/core/java/com/android/server/vibrator/OWNERS # PowerManager per-file IPowerManager.aidl = michaelwr@google.com, santoscordon@google.com diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 44d51db80f86..ab2c8c0e31d3 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -384,6 +384,8 @@ public final class Parcel { long thisNativePtr, long otherNativePtr, int offset, int length); @CriticalNative private static native boolean nativeHasFileDescriptors(long nativePtr); + private static native boolean nativeHasFileDescriptorsInRange( + long nativePtr, int offset, int length); private static native void nativeWriteInterfaceToken(long nativePtr, String interfaceName); private static native void nativeEnforceInterface(long nativePtr, String interfaceName); @@ -399,7 +401,7 @@ public final class Parcel { private static final int WRITE_EXCEPTION_STACK_TRACE_THRESHOLD_MS = 1000; @CriticalNative - private static native long nativeGetBlobAshmemSize(long nativePtr); + private static native long nativeGetOpenAshmemSize(long nativePtr); public final static Parcelable.Creator<String> STRING_CREATOR = new Parcelable.Creator<String>() { @@ -717,11 +719,26 @@ public final class Parcel { /** * Report whether the parcel contains any marshalled file descriptors. */ - public final boolean hasFileDescriptors() { + public boolean hasFileDescriptors() { return nativeHasFileDescriptors(mNativePtr); } /** + * Report whether the parcel contains any marshalled file descriptors in the range defined by + * {@code offset} and {@code length}. + * + * @param offset The offset from which the range starts. Should be between 0 and + * {@link #dataSize()}. + * @param length The length of the range. Should be between 0 and {@link #dataSize()} - {@code + * offset}. + * @return whether there are file descriptors or not. + * @throws IllegalArgumentException if the parameters are out of the permitted ranges. + */ + public boolean hasFileDescriptors(int offset, int length) { + return nativeHasFileDescriptorsInRange(mNativePtr, offset, length); + } + + /** * Check if the object used in {@link #readValue(ClassLoader)} / {@link #writeValue(Object)} * has file descriptors. * @@ -2874,9 +2891,11 @@ public final class Parcel { /** * Same as {@link #readList(List, ClassLoader)} but accepts {@code clazz} parameter as - * the type required for each item. If the item to be deserialized is not an instance - * of that class or any of its children class - * a {@link BadParcelableException} will be thrown. + * the type required for each item. + * + * @throws BadParcelableException Throws BadParcelableException if the item to be deserialized + * is not an instance of that class or any of its children classes or there was an error + * trying to instantiate an element. */ public <T> void readList(@NonNull List<? super T> outVal, @Nullable ClassLoader loader, @NonNull Class<T> clazz) { @@ -3536,15 +3555,26 @@ public final class Parcel { int start = dataPosition(); int type = readInt(); if (isLengthPrefixed(type)) { - int length = readInt(); - setDataPosition(MathUtils.addOrThrow(dataPosition(), length)); - return new LazyValue(this, start, length, type, loader); + int objectLength = readInt(); + int end = MathUtils.addOrThrow(dataPosition(), objectLength); + int valueLength = end - start; + setDataPosition(end); + return new LazyValue(this, start, valueLength, type, loader); } else { return readValue(type, loader, /* clazz */ null); } } + private static final class LazyValue implements Supplier<Object> { + /** + * | 4B | 4B | + * mSource = Parcel{... | type | length | object | ...} + * a b c d + * length = d - c + * mPosition = a + * mLength = d - a + */ private final int mPosition; private final int mLength; private final int mType; @@ -3592,7 +3622,7 @@ public final class Parcel { public void writeToParcel(Parcel out) { Parcel source = mSource; if (source != null) { - out.appendFrom(source, mPosition, mLength + 8); + out.appendFrom(source, mPosition, mLength); } else { out.writeValue(mObject); } @@ -3601,7 +3631,7 @@ public final class Parcel { public boolean hasFileDescriptors() { Parcel source = mSource; return (source != null) - ? getValueParcel(source).hasFileDescriptors() + ? source.hasFileDescriptors(mPosition, mLength) : Parcel.hasFileDescriptors(mObject); } @@ -3662,10 +3692,7 @@ public final class Parcel { Parcel parcel = mValueParcel; if (parcel == null) { parcel = Parcel.obtain(); - // mLength is the length of object representation, excluding the type and length. - // mPosition is the position of the entire value container, right before the type. - // So, we add 4 bytes for the type + 4 bytes for the length written. - parcel.appendFrom(source, mPosition, mLength + 8); + parcel.appendFrom(source, mPosition, mLength); mValueParcel = parcel; } return parcel; @@ -3869,8 +3896,11 @@ public final class Parcel { /** * Same as {@link #readParcelable(ClassLoader)} but accepts {@code clazz} parameter as the type - * required for each item. If the item to be deserialized is not an instance of that class or - * any of its children classes a {@link BadParcelableException} will be thrown. + * required for each item. + * + * @throws BadParcelableException Throws BadParcelableException if the item to be deserialized + * is not an instance of that class or any of its children classes or there was an error + * trying to instantiate an element. */ @Nullable public <T extends Parcelable> T readParcelable(@Nullable ClassLoader loader, @@ -3936,8 +3966,11 @@ public final class Parcel { /** * Same as {@link #readParcelableCreator(ClassLoader)} but accepts {@code clazz} parameter - * as the required type. If the item to be deserialized is not an instance of that class - * or any of its children classes a {@link BadParcelableException} will be thrown. + * as the required type. + * + * @throws BadParcelableException Throws BadParcelableException if the item to be deserialized + * is not an instance of that class or any of its children class or there there was an error + * trying to read the {@link Parcelable.Creator}. */ @Nullable public <T> Parcelable.Creator<T> readParcelableCreator( @@ -4348,8 +4381,8 @@ public final class Parcel { /** * @hide For testing */ - public long getBlobAshmemSize() { - return nativeGetBlobAshmemSize(mNativePtr); + public long getOpenAshmemSize() { + return nativeGetOpenAshmemSize(mNativePtr); } private static String valueTypeToString(int type) { diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index 51f19ebee987..b4acb67d2979 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -706,6 +706,25 @@ public class CallLog { /** * Contains the recent calls. + * <p> + * Note: If you want to query the call log and limit the results to a single value, you should + * append the {@link #LIMIT_PARAM_KEY} parameter to the content URI. For example: + * <pre> + * {@code + * getContentResolver().query( + * Calls.CONTENT_URI.buildUpon().appendQueryParameter(LIMIT_PARAM_KEY, "1") + * .build(), + * null, null, null, null); + * } + * </pre> + * <p> + * The call log provider enforces strict SQL grammar, so you CANNOT append "LIMIT" to the SQL + * query as below: + * <pre> + * {@code + * getContentResolver().query(Calls.CONTENT_URI, null, "LIMIT 1", null, null); + * } + * </pre> */ public static class Calls implements BaseColumns { /** diff --git a/core/java/android/service/timezone/OWNERS b/core/java/android/service/timezone/OWNERS index 28aff188dbd8..b5144d17a14c 100644 --- a/core/java/android/service/timezone/OWNERS +++ b/core/java/android/service/timezone/OWNERS @@ -1,3 +1,3 @@ # Bug component: 847766 -nfuller@google.com -include /core/java/android/app/timedetector/OWNERS +# System APIs for system server time zone detection plugins. +include /services/core/java/com/android/server/timezonedetector/OWNERS diff --git a/core/java/android/timezone/OWNERS b/core/java/android/timezone/OWNERS index 8f8089717e3b..8b5e15635a73 100644 --- a/core/java/android/timezone/OWNERS +++ b/core/java/android/timezone/OWNERS @@ -1,3 +1,5 @@ -# Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Bug component: 24949 +# APIs originally intended to provide a stable API surface to access time zone rules data for use by +# unbundled components like a telephony mainline module and the ART module. Not exposed, potentially +# deletable if callers do not unbundle. +include platform/libcore:/OWNERS diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index aadd320eb2e1..0d338072fa00 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -596,13 +596,10 @@ static jint android_os_Parcel_compareData(JNIEnv* env, jclass clazz, jlong thisN jlong otherNativePtr) { Parcel* thisParcel = reinterpret_cast<Parcel*>(thisNativePtr); - if (thisParcel == NULL) { - return 0; - } + LOG_ALWAYS_FATAL_IF(thisParcel == nullptr, "Should not be null"); + Parcel* otherParcel = reinterpret_cast<Parcel*>(otherNativePtr); - if (otherParcel == NULL) { - return thisParcel->getOpenAshmemSize(); - } + LOG_ALWAYS_FATAL_IF(otherParcel == nullptr, "Should not be null"); return thisParcel->compareData(*otherParcel); } @@ -638,6 +635,22 @@ static jboolean android_os_Parcel_hasFileDescriptors(jlong nativePtr) return ret; } +static jboolean android_os_Parcel_hasFileDescriptorsInRange(JNIEnv* env, jclass clazz, + jlong nativePtr, jint offset, + jint length) { + Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); + if (parcel != NULL) { + bool result; + status_t err = parcel->hasFileDescriptorsInRange(offset, length, result); + if (err != NO_ERROR) { + signalExceptionForError(env, clazz, err); + return JNI_FALSE; + } + return result ? JNI_TRUE : JNI_FALSE; + } + return JNI_FALSE; +} + // String tries to allocate itself on the stack, within a known size, but will // make a heap allocation if not. template <size_t StackReserve> @@ -727,11 +740,11 @@ static jlong android_os_Parcel_getGlobalAllocCount(JNIEnv* env, jclass clazz) return Parcel::getGlobalAllocCount(); } -static jlong android_os_Parcel_getBlobAshmemSize(jlong nativePtr) +static jlong android_os_Parcel_getOpenAshmemSize(jlong nativePtr) { Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr); if (parcel != NULL) { - return parcel->getBlobAshmemSize(); + return parcel->getOpenAshmemSize(); } return 0; } @@ -831,6 +844,7 @@ static const JNINativeMethod gParcelMethods[] = { {"nativeAppendFrom", "(JJII)V", (void*)android_os_Parcel_appendFrom}, // @CriticalNative {"nativeHasFileDescriptors", "(J)Z", (void*)android_os_Parcel_hasFileDescriptors}, + {"nativeHasFileDescriptorsInRange", "(JII)Z", (void*)android_os_Parcel_hasFileDescriptorsInRange}, {"nativeWriteInterfaceToken", "(JLjava/lang/String;)V", (void*)android_os_Parcel_writeInterfaceToken}, {"nativeEnforceInterface", "(JLjava/lang/String;)V", (void*)android_os_Parcel_enforceInterface}, @@ -838,7 +852,7 @@ static const JNINativeMethod gParcelMethods[] = { {"getGlobalAllocCount", "()J", (void*)android_os_Parcel_getGlobalAllocCount}, // @CriticalNative - {"nativeGetBlobAshmemSize", "(J)J", (void*)android_os_Parcel_getBlobAshmemSize}, + {"nativeGetOpenAshmemSize", "(J)J", (void*)android_os_Parcel_getOpenAshmemSize}, // @CriticalNative {"nativeReadCallingWorkSourceUid", "(J)I", (void*)android_os_Parcel_readCallingWorkSourceUid}, diff --git a/core/proto/OWNERS b/core/proto/OWNERS index 44ea23fdf685..78650ed34813 100644 --- a/core/proto/OWNERS +++ b/core/proto/OWNERS @@ -8,9 +8,6 @@ yaochen@google.com yro@google.com zhouwenjie@google.com -# Settings UI -per-file settings_enums.proto=tmfang@google.com - # Frameworks ogunwale@google.com jjaggi@google.com diff --git a/core/tests/coretests/src/android/app/time/OWNERS b/core/tests/coretests/src/android/app/time/OWNERS index 8f8089717e3b..292cb72f2dbe 100644 --- a/core/tests/coretests/src/android/app/time/OWNERS +++ b/core/tests/coretests/src/android/app/time/OWNERS @@ -1,3 +1,2 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +include /core/java/android/app/time/OWNERS diff --git a/core/tests/coretests/src/android/app/timedetector/OWNERS b/core/tests/coretests/src/android/app/timedetector/OWNERS index 8f8089717e3b..c6124734bc5c 100644 --- a/core/tests/coretests/src/android/app/timedetector/OWNERS +++ b/core/tests/coretests/src/android/app/timedetector/OWNERS @@ -1,3 +1,2 @@ # Bug component: 847766 -mingaleev@google.com include /core/java/android/app/timedetector/OWNERS diff --git a/core/tests/coretests/src/android/app/timezone/OWNERS b/core/tests/coretests/src/android/app/timezone/OWNERS index 8f8089717e3b..381ecf1abda5 100644 --- a/core/tests/coretests/src/android/app/timezone/OWNERS +++ b/core/tests/coretests/src/android/app/timezone/OWNERS @@ -1,3 +1,2 @@ -# Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Bug component: 24949 +include /core/java/android/app/timezone/OWNERS diff --git a/core/tests/coretests/src/android/app/timezonedetector/OWNERS b/core/tests/coretests/src/android/app/timezonedetector/OWNERS index 8f8089717e3b..2e9c3246e4fc 100644 --- a/core/tests/coretests/src/android/app/timezonedetector/OWNERS +++ b/core/tests/coretests/src/android/app/timezonedetector/OWNERS @@ -1,3 +1,2 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +include /core/java/android/app/timezonedetector/OWNERS diff --git a/core/tests/coretests/src/android/net/OWNERS b/core/tests/coretests/src/android/net/OWNERS index aa87958f1d53..4e5136f93b94 100644 --- a/core/tests/coretests/src/android/net/OWNERS +++ b/core/tests/coretests/src/android/net/OWNERS @@ -1 +1,3 @@ include /services/core/java/com/android/server/net/OWNERS + +per-file SntpClient* = file:/services/core/java/com/android/server/timedetector/OWNERS diff --git a/core/tests/coretests/src/android/net/sntp/OWNERS b/core/tests/coretests/src/android/net/sntp/OWNERS new file mode 100644 index 000000000000..232c2ebe75e0 --- /dev/null +++ b/core/tests/coretests/src/android/net/sntp/OWNERS @@ -0,0 +1 @@ +include /core/java/android/net/sntp/OWNERS diff --git a/core/tests/coretests/src/android/os/OWNERS b/core/tests/coretests/src/android/os/OWNERS index 9a9b4748d4f1..a42285eedbf4 100644 --- a/core/tests/coretests/src/android/os/OWNERS +++ b/core/tests/coretests/src/android/os/OWNERS @@ -2,11 +2,11 @@ per-file BrightnessLimit.java = michaelwr@google.com, santoscordon@google.com # Haptics -per-file CombinedVibrationEffectTest.java = michaelwr@google.com -per-file ExternalVibrationTest.java = michaelwr@google.com -per-file VibrationEffectTest.java = michaelwr@google.com -per-file VibratorInfoTest.java = michaelwr@google.com -per-file VibratorTest.java = michaelwr@google.com +per-file CombinedVibrationEffectTest.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file ExternalVibrationTest.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibrationEffectTest.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibratorInfoTest.java = file:/services/core/java/com/android/server/vibrator/OWNERS +per-file VibratorTest.java = file:/services/core/java/com/android/server/vibrator/OWNERS # Power -per-file PowerManager*.java = michaelwr@google.com, santoscordon@google.com +per-file PowerManager*.java = michaelwr@google.com, santoscordon@google.com
\ No newline at end of file diff --git a/core/tests/coretests/src/android/service/timezone/OWNERS b/core/tests/coretests/src/android/service/timezone/OWNERS new file mode 100644 index 000000000000..811638805996 --- /dev/null +++ b/core/tests/coretests/src/android/service/timezone/OWNERS @@ -0,0 +1,2 @@ +# Bug component: 847766 +include /core/java/android/service/timezone/OWNERS diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java index 30a14c84b72e..a0f6fb9577c3 100644 --- a/media/java/android/media/tv/TvContract.java +++ b/media/java/android/media/tv/TvContract.java @@ -1658,6 +1658,25 @@ public final class TvContract { */ String COLUMN_CONTENT_ID = "content_id"; + /** + * The start time of this TV program, in milliseconds since the epoch. + * + * <p>Should be empty if this program is not live. + * + * <p>Type: INTEGER (long) + * @see #COLUMN_LIVE + */ + String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; + + /** + * The end time of this TV program, in milliseconds since the epoch. + * + * <p>Should be empty if this program is not live. + * + * <p>Type: INTEGER (long) + * @see #COLUMN_LIVE + */ + String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; } /** Column definitions for the TV channels table. */ diff --git a/packages/SettingsLib/res/drawable/ic_bt_le_audio.xml b/packages/SettingsLib/res/drawable/ic_bt_le_audio.xml new file mode 100644 index 000000000000..5b52a04e1cf6 --- /dev/null +++ b/packages/SettingsLib/res/drawable/ic_bt_le_audio.xml @@ -0,0 +1,31 @@ +<!-- + Copyright 2021 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0" + android:tint="?android:attr/colorControlNormal" > + <path + android:pathData="M18.2,1L9.8,1C8.81,1 8,1.81 8,2.8v14.4c0,0.99 0.81,1.79 1.8,1.79l8.4,0.01c0.99,0 1.8,-0.81 1.8,-1.8L20,2.8c0,-0.99 -0.81,-1.8 -1.8,-1.8zM14,3c1.1,0 2,0.89 2,2s-0.9,2 -2,2 -2,-0.89 -2,-2 0.9,-2 2,-2zM14,16.5c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4z" + android:fillColor="#FFFFFFFF"/> + <path + android:pathData="M14,12.5m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0" + android:fillColor="#FFFFFFFF"/> + <path + android:pathData="M6,5H4v16c0,1.1 0.89,2 2,2h10v-2H6V5z" + android:fillColor="#FFFFFFFF"/> +</vector> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 6b840bd7901d..a56c49088b67 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -257,8 +257,12 @@ <!-- Bluetooth settings. The user-visible string that is used whenever referring to the Hearing Aid profile. --> <string name="bluetooth_profile_hearing_aid">Hearing Aids</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the LE_AUDIO profile. --> + <string name="bluetooth_profile_le_audio">LE_AUDIO</string> <!-- Bluetooth settings. Connection options screen. The summary for the Hearing Aid checkbox preference when Hearing Aid is connected. --> <string name="bluetooth_hearing_aid_profile_summary_connected">Connected to Hearing Aids</string> + <!-- Bluetooth settings. Connection options screen. The summary for the LE_AUDIO checkbox preference when LE_AUDIO is connected. --> + <string name="bluetooth_le_audio_profile_summary_connected">Connected to LE_AUDIO</string> <!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference when A2DP is connected. --> <string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string> @@ -299,6 +303,8 @@ <string name="bluetooth_hid_profile_summary_use_for">Use for input</string> <!-- Bluetooth settings. Connection options screen. The summary for the Hearing Aid checkbox preference that describes how checking it will set the Hearing Aid profile as preferred. --> <string name="bluetooth_hearing_aid_profile_summary_use_for">Use for Hearing Aids</string> + <!-- Bluetooth settings. Connection options screen. The summary for the LE_AUDIO checkbox preference that describes how checking it will set the LE_AUDIO profile as preferred. --> + <string name="bluetooth_le_audio_profile_summary_use_for">Use for LE_AUDIO</string> <!-- Button text for accepting an incoming pairing request. [CHAR LIMIT=20] --> <string name="bluetooth_pairing_accept">Pair</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index 875030949fe8..58d2185ea9e9 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -22,6 +22,7 @@ import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHearingAid; +import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.content.BroadcastReceiver; import android.content.Context; @@ -116,6 +117,8 @@ public class BluetoothEventManager { addHandler(BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED, new ActiveDeviceChangedHandler()); addHandler(BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED, new ActiveDeviceChangedHandler()); + addHandler(BluetoothLeAudio.ACTION_LE_AUDIO_ACTIVE_DEVICE_CHANGED, + new ActiveDeviceChangedHandler()); // Headset state changed broadcasts addHandler(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED, @@ -127,9 +130,6 @@ public class BluetoothEventManager { addHandler(BluetoothDevice.ACTION_ACL_CONNECTED, new AclStateChangedHandler()); addHandler(BluetoothDevice.ACTION_ACL_DISCONNECTED, new AclStateChangedHandler()); - addHandler(BluetoothCsipSetCoordinator.ACTION_CSIS_SET_MEMBER_AVAILABLE, - new SetMemberAvailableHandler()); - registerAdapterIntentReceiver(); } @@ -455,6 +455,9 @@ public class BluetoothEventManager { bluetoothProfile = BluetoothProfile.HEADSET; } else if (Objects.equals(action, BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED)) { bluetoothProfile = BluetoothProfile.HEARING_AID; + } else if (Objects.equals(action, + BluetoothLeAudio.ACTION_LE_AUDIO_ACTIVE_DEVICE_CHANGED)) { + bluetoothProfile = BluetoothProfile.LE_AUDIO; } else { Log.w(TAG, "ActiveDeviceChangedHandler: unknown action " + action); return; @@ -515,29 +518,4 @@ public class BluetoothEventManager { dispatchAudioModeChanged(); } } - - private class SetMemberAvailableHandler implements Handler { - @Override - public void onReceive(Context context, Intent intent, BluetoothDevice device) { - final String action = intent.getAction(); - if (device == null) { - Log.e(TAG, "SetMemberAvailableHandler: device is null"); - return; - } - - if (action == null) { - Log.e(TAG, "SetMemberAvailableHandler: action is null"); - return; - } - - final int groupId = intent.getIntExtra(BluetoothCsipSetCoordinator.EXTRA_CSIS_GROUP_ID, - BluetoothCsipSetCoordinator.GROUP_ID_INVALID); - if (groupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) { - Log.e(TAG, "SetMemberAvailableHandler: Invalid group id"); - return; - } - - mDeviceManager.onSetMemberAppear(device, groupId); - } - } } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 7ce9b516990e..021ba2247e67 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -21,6 +21,7 @@ import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothCsipSetCoordinator; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHearingAid; +import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothUuid; import android.content.Context; @@ -69,6 +70,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> // Some Hearing Aids (especially the 2nd device) needs more time to do service discovery private static final long MAX_HEARING_AIDS_DELAY_FOR_AUTO_CONNECT = 15000; private static final long MAX_HOGP_DELAY_FOR_AUTO_CONNECT = 30000; + private static final long MAX_LEAUDIO_DELAY_FOR_AUTO_CONNECT = 30000; private static final long MAX_MEDIA_PROFILE_CONNECT_DELAY = 60000; private final Context mContext; @@ -108,10 +110,12 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private boolean mIsActiveDeviceA2dp = false; private boolean mIsActiveDeviceHeadset = false; private boolean mIsActiveDeviceHearingAid = false; + private boolean mIsActiveDeviceLeAudio = false; // Media profile connect state private boolean mIsA2dpProfileConnectedFail = false; private boolean mIsHeadsetProfileConnectedFail = false; private boolean mIsHearingAidProfileConnectedFail = false; + private boolean mIsLeAudioProfileConnectedFail = false; // Group second device for Hearing Aid private CachedBluetoothDevice mSubDevice; // Group member devices for the coordinated set @@ -132,6 +136,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> case BluetoothProfile.HEARING_AID: mIsHearingAidProfileConnectedFail = true; break; + case BluetoothProfile.LE_AUDIO: + mIsLeAudioProfileConnectedFail = true; + break; default: Log.w(TAG, "handleMessage(): unknown message : " + msg.what); break; @@ -265,6 +272,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> case BluetoothProfile.HEARING_AID: mIsHearingAidProfileConnectedFail = isFailed; break; + case BluetoothProfile.LE_AUDIO: + mIsLeAudioProfileConnectedFail = isFailed; + break; default: Log.w(TAG, "setProfileConnectedStatus(): unknown profile id : " + profileId); break; @@ -540,6 +550,13 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> result = true; } } + LeAudioProfile leAudioProfile = mProfileManager.getLeAudioProfile(); + if ((leAudioProfile != null) && isConnectedProfile(leAudioProfile)) { + if (leAudioProfile.setActiveDevice(getDevice())) { + Log.i(TAG, "OnPreferenceClickListener: LeAudio active device=" + this); + result = true; + } + } return result; } @@ -618,6 +635,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> changed = (mIsActiveDeviceHearingAid != isActive); mIsActiveDeviceHearingAid = isActive; break; + case BluetoothProfile.LE_AUDIO: + changed = (mIsActiveDeviceLeAudio != isActive); + mIsActiveDeviceLeAudio = isActive; + break; default: Log.w(TAG, "onActiveDeviceChanged: unknown profile " + bluetoothProfile + " isActive " + isActive); @@ -649,6 +670,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> return mIsActiveDeviceHeadset; case BluetoothProfile.HEARING_AID: return mIsActiveDeviceHearingAid; + case BluetoothProfile.LE_AUDIO: + return mIsActiveDeviceLeAudio; default: Log.w(TAG, "getActiveDevice: unknown profile " + bluetoothProfile); break; @@ -743,6 +766,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> if (hearingAidProfile != null) { mIsActiveDeviceHearingAid = hearingAidProfile.getActiveDevices().contains(mDevice); } + LeAudioProfile leAudio = mProfileManager.getLeAudioProfile(); + if (leAudio != null) { + mIsActiveDeviceLeAudio = leAudio.getActiveDevices().contains(mDevice); + } } /** @@ -757,6 +784,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> timeout = MAX_HOGP_DELAY_FOR_AUTO_CONNECT; } else if (ArrayUtils.contains(uuids, BluetoothUuid.HEARING_AID)) { timeout = MAX_HEARING_AIDS_DELAY_FOR_AUTO_CONNECT; + } else if (ArrayUtils.contains(uuids, BluetoothUuid.LE_AUDIO)) { + timeout = MAX_LEAUDIO_DELAY_FOR_AUTO_CONNECT; } if (BluetoothUtils.D) { @@ -981,6 +1010,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> boolean a2dpConnected = true; // A2DP is connected boolean hfpConnected = true; // HFP is connected boolean hearingAidConnected = true; // Hearing Aid is connected + boolean leAudioConnected = true; // LeAudio is connected int leftBattery = -1; int rightBattery = -1; @@ -1012,6 +1042,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> hfpConnected = false; } else if (profile instanceof HearingAidProfile) { hearingAidConnected = false; + } else if (profile instanceof LeAudioProfile) { + leAudioConnected = false; } } break; @@ -1054,7 +1086,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> // 1. Hearing Aid device active. // 2. Headset device active with in-calling state. // 3. A2DP device active without in-calling state. - if (a2dpConnected || hfpConnected || hearingAidConnected) { + // 4. Le Audio device active + if (a2dpConnected || hfpConnected || hearingAidConnected || leAudioConnected) { final boolean isOnCall = Utils.isAudioModeOngoingCall(mContext); if ((mIsActiveDeviceHearingAid) || (mIsActiveDeviceHeadset && isOnCall) @@ -1089,7 +1122,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private boolean isProfileConnectedFail() { return mIsA2dpProfileConnectedFail || mIsHearingAidProfileConnectedFail - || (!isConnectedSapDevice() && mIsHeadsetProfileConnectedFail); + || (!isConnectedSapDevice() && mIsHeadsetProfileConnectedFail) + || mIsLeAudioProfileConnectedFail; } /** @@ -1100,6 +1134,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> boolean a2dpNotConnected = false; // A2DP is preferred but not connected boolean hfpNotConnected = false; // HFP is preferred but not connected boolean hearingAidNotConnected = false; // Hearing Aid is preferred but not connected + boolean leAudioNotConnected = false; // LeAudio is preferred but not connected synchronized (mProfileLock) { for (LocalBluetoothProfile profile : getProfiles()) { @@ -1125,6 +1160,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> hfpNotConnected = true; } else if (profile instanceof HearingAidProfile) { hearingAidNotConnected = true; + } else if (profile instanceof LeAudioProfile) { + leAudioNotConnected = true; } } break; @@ -1163,6 +1200,11 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> return mContext.getString(R.string.bluetooth_connected, activeDeviceString); } + if (!leAudioNotConnected && mIsActiveDeviceLeAudio) { + activeDeviceString = activeDeviceStringsArray[1]; + return mContext.getString(R.string.bluetooth_connected, activeDeviceString); + } + if (profileConnected) { if (a2dpNotConnected && hfpNotConnected) { if (batteryLevelPercentageString != null) { @@ -1232,6 +1274,15 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> BluetoothProfile.STATE_CONNECTED; } + /** + * @return {@code true} if {@code cachedBluetoothDevice} is LeAudio device + */ + public boolean isConnectedLeAudioDevice() { + LeAudioProfile leAudio = mProfileManager.getLeAudioProfile(); + return leAudio != null && leAudio.getConnectionStatus(mDevice) == + BluetoothProfile.STATE_CONNECTED; + } + private boolean isConnectedSapDevice() { SapProfile sapProfile = mProfileManager.getSapProfile(); return sapProfile != null && sapProfile.getConnectionStatus(mDevice) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java index 1f75ae329f4a..b429fe6d4939 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java @@ -340,22 +340,24 @@ public class CachedBluetoothDeviceManager { /** * Called when we found a set member of a group. The function will check the {@code groupId} if - * it exists and if there is a ongoing pair, the device would be ignored. + * it exists and the bond state of the device is BOND_NOE, and if there isn't any ongoing pair + * , and then return {@code true} to pair the device automatically. * * @param device The found device * @param groupId The group id of the found device + * + * @return {@code true}, if the device should pair automatically; Otherwise, return + * {@code false}. */ - public synchronized void onSetMemberAppear(BluetoothDevice device, int groupId) { - Log.d(TAG, "onSetMemberAppear, groupId: " + groupId + " device: " + device.toString()); - - if (mOngoingSetMemberPair != null) { - Log.d(TAG, "Ongoing set memberPairing in process, drop it!"); - return; + public synchronized boolean shouldPairByCsip(BluetoothDevice device, int groupId) { + if (mOngoingSetMemberPair != null || device.getBondState() != BluetoothDevice.BOND_NONE + || !mCsipDeviceManager.isExistedGroupId(groupId)) { + return false; } - if (mCsipDeviceManager.onSetMemberAppear(device, groupId)) { - mOngoingSetMemberPair = device; - } + Log.d(TAG, "Bond " + device.getName() + " by CSIP"); + mOngoingSetMemberPair = device; + return true; } /** diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java index 347e14b91656..1d29966838d3 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CsipDeviceManager.java @@ -240,22 +240,15 @@ public class CsipDeviceManager { } /** - * Called when we found a set member of a group. The function will check bond state, and - * the {@code groupId} if it exists, and then create the bond. + * Check if the {@code groupId} is existed. * - * @param device The found device - * @param groupId The group id of the found device + * @param groupId The group id * - * @return {@code true}, if the we create bond with the device. Otherwise, return - * {@code false}. + * @return {@code true}, if we could find a device with this {@code groupId}; Otherwise, + * return {@code false}. */ - public boolean onSetMemberAppear(BluetoothDevice device, int groupId) { - if (device.getBondState() != BluetoothDevice.BOND_NONE) { - return false; - } - + public boolean isExistedGroupId(int groupId) { if (getCachedDevice(groupId) != null) { - device.createBond(BluetoothDevice.TRANSPORT_LE); return true; } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java new file mode 100644 index 000000000000..209507ac7088 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LeAudioProfile.java @@ -0,0 +1,264 @@ +/* Copyright 2021 HIMSA II K/S - www.himsa.com. Represented by EHIMA +- www.ehima.com +*/ + +/* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.settingslib.bluetooth; + +import static android.bluetooth.BluetoothAdapter.ACTIVE_DEVICE_ALL; +import static android.bluetooth.BluetoothProfile.CONNECTION_POLICY_ALLOWED; +import static android.bluetooth.BluetoothProfile.CONNECTION_POLICY_FORBIDDEN; + +import android.bluetooth.BluetoothLeAudio; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothCodecConfig; +import android.bluetooth.BluetoothCodecStatus; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.Build; +import android.os.ParcelUuid; +import android.util.Log; + +import androidx.annotation.RequiresApi; + +import com.android.internal.annotations.VisibleForTesting; +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class LeAudioProfile implements LocalBluetoothProfile { + private static final String TAG = "LeAudioProfile"; + private static boolean DEBUG = true; + + private Context mContext; + + private BluetoothLeAudio mService; + private boolean mIsProfileReady; + + private final CachedBluetoothDeviceManager mDeviceManager; + + static final String NAME = "LE_AUDIO"; + private final LocalBluetoothProfileManager mProfileManager; + private final BluetoothAdapter mBluetoothAdapter; + + // Order of this profile in device profiles list + private static final int ORDINAL = 1; + + // These callbacks run on the main thread. + private final class LeAudioServiceListener + implements BluetoothProfile.ServiceListener { + + @RequiresApi(Build.VERSION_CODES.S) + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (DEBUG) { + Log.d(TAG,"Bluetooth service connected"); + } + mService = (BluetoothLeAudio) proxy; + // We just bound to the service, so refresh the UI for any connected LeAudio devices. + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + if (DEBUG) { + Log.d(TAG, "LeAudioProfile found new device: " + nextDevice); + } + device = mDeviceManager.addDevice(nextDevice); + } + device.onProfileStateChanged(LeAudioProfile.this, + BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + + mProfileManager.callServiceConnectedListeners(); + mIsProfileReady = true; + } + + public void onServiceDisconnected(int profile) { + if (DEBUG) { + Log.d(TAG,"Bluetooth service disconnected"); + } + mProfileManager.callServiceDisconnectedListeners(); + mIsProfileReady = false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + @Override + public int getProfileId() { + return BluetoothProfile.LE_AUDIO; + } + + LeAudioProfile(Context context, CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mContext = context; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + + mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + mBluetoothAdapter.getProfileProxy( + context, new LeAudioServiceListener(), + BluetoothProfile.LE_AUDIO); + } + + public boolean accessProfileEnabled() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) { + return new ArrayList<BluetoothDevice>(0); + } + return mService.getDevicesMatchingConnectionStates( + new int[] {BluetoothProfile.STATE_CONNECTED, + BluetoothProfile.STATE_CONNECTING, + BluetoothProfile.STATE_DISCONNECTING}); + } + + /* + * @hide + */ + public boolean connect(BluetoothDevice device) { + if (mService == null) { + return false; + } + return mService.connect(device); + } + + /* + * @hide + */ + public boolean disconnect(BluetoothDevice device) { + if (mService == null) { + return false; + } + return mService.disconnect(device); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + return mService.getConnectionState(device); + } + + public boolean setActiveDevice(BluetoothDevice device) { + if (mBluetoothAdapter == null) { + return false; + } + return device == null + ? mBluetoothAdapter.removeActiveDevice(ACTIVE_DEVICE_ALL) + : mBluetoothAdapter.setActiveDevice(device, ACTIVE_DEVICE_ALL); + } + + public List<BluetoothDevice> getActiveDevices() { + if (mService == null) { + return new ArrayList<>(); + } + return mService.getActiveDevices(); + } + + @Override + public boolean isEnabled(BluetoothDevice device) { + if (mService == null || device == null) { + return false; + } + return mService.getConnectionPolicy(device) > CONNECTION_POLICY_FORBIDDEN; + } + + @Override + public int getConnectionPolicy(BluetoothDevice device) { + if (mService == null || device == null) { + return CONNECTION_POLICY_FORBIDDEN; + } + return mService.getConnectionPolicy(device); + } + + @Override + public boolean setEnabled(BluetoothDevice device, boolean enabled) { + boolean isEnabled = false; + if (mService == null || device == null) { + return false; + } + if (enabled) { + if (mService.getConnectionPolicy(device) < CONNECTION_POLICY_ALLOWED) { + isEnabled = mService.setConnectionPolicy(device, CONNECTION_POLICY_ALLOWED); + } + } else { + isEnabled = mService.setConnectionPolicy(device, CONNECTION_POLICY_FORBIDDEN); + } + + return isEnabled; + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_le_audio; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_le_audio_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_le_audio_profile_summary_connected; + + default: + return BluetoothUtils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_le_audio; + } + + @RequiresApi(Build.VERSION_CODES.S) + protected void finalize() { + if (DEBUG) { + Log.d(TAG, "finalize()"); + } + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.LE_AUDIO, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up LeAudio proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java index bcb345584ff3..334792048105 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -24,6 +24,7 @@ import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothHeadsetClient; import android.bluetooth.BluetoothHearingAid; +import android.bluetooth.BluetoothLeAudio; import android.bluetooth.BluetoothHidDevice; import android.bluetooth.BluetoothHidHost; import android.bluetooth.BluetoothMap; @@ -102,6 +103,7 @@ public class LocalBluetoothProfileManager { private PbapServerProfile mPbapProfile; private HearingAidProfile mHearingAidProfile; private CsipSetCoordinatorProfile mCsipSetCoordinatorProfile; + private LeAudioProfile mLeAudioProfile; private SapProfile mSapProfile; private VolumeControlProfile mVolumeControlProfile; @@ -232,6 +234,14 @@ public class LocalBluetoothProfileManager { // Note: no event handler for VCP, only for being connectable. mProfileNameMap.put(VolumeControlProfile.NAME, mVolumeControlProfile); } + if (mLeAudioProfile == null && supportedList.contains(BluetoothProfile.LE_AUDIO)) { + if (DEBUG) { + Log.d(TAG, "Adding local LE_AUDIO profile"); + } + mLeAudioProfile = new LeAudioProfile(mContext, mDeviceManager, this); + addProfile(mLeAudioProfile, LeAudioProfile.NAME, + BluetoothLeAudio.ACTION_LE_AUDIO_CONNECTION_STATE_CHANGED); + } if (mCsipSetCoordinatorProfile == null && supportedList.contains(BluetoothProfile.CSIP_SET_COORDINATOR)) { if (DEBUG) { @@ -487,6 +497,10 @@ public class LocalBluetoothProfileManager { return mHearingAidProfile; } + public LeAudioProfile getLeAudioProfile() { + return mLeAudioProfile; + } + SapProfile getSapProfile() { return mSapProfile; } @@ -614,6 +628,11 @@ public class LocalBluetoothProfileManager { removedProfiles.remove(mHearingAidProfile); } + if (ArrayUtils.contains(uuids, BluetoothUuid.LE_AUDIO) && mLeAudioProfile != null) { + profiles.add(mLeAudioProfile); + removedProfiles.remove(mLeAudioProfile); + } + if (mSapProfile != null && ArrayUtils.contains(uuids, BluetoothUuid.SAP)) { profiles.add(mSapProfile); removedProfiles.remove(mSapProfile); diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java index 46bda06d0e04..27d4ea71dfc0 100644 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java +++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java @@ -21,6 +21,7 @@ import android.os.Binder; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; +import android.os.UserManager; import android.util.Log; import android.webkit.PacProcessor; @@ -33,16 +34,44 @@ import java.net.URL; public class PacService extends Service { private static final String TAG = "PacService"; - private Object mLock = new Object(); + private final Object mLock = new Object(); + // Webkit PacProcessor cannot be instantiated before the user is unlocked, so this field is + // initialized lazily. @GuardedBy("mLock") - private final PacProcessor mPacProcessor = PacProcessor.getInstance(); + private PacProcessor mPacProcessor; + + // Stores PAC script when setPacFile is called before mPacProcessor is available. In case the + // script was already fed to the PacProcessor, it should be null. + @GuardedBy("mLock") + private String mPendingScript; private ProxyServiceStub mStub = new ProxyServiceStub(); @Override public void onCreate() { super.onCreate(); + + synchronized (mLock) { + checkPacProcessorLocked(); + } + } + + /** + * Initializes PacProcessor if it hasn't been initialized yet and if the system user is + * unlocked, e.g. after the user has entered their PIN after a reboot. + * Returns whether PacProcessor is available. + */ + private boolean checkPacProcessorLocked() { + if (mPacProcessor != null) { + return true; + } + UserManager um = getSystemService(UserManager.class); + if (um.isUserUnlocked()) { + mPacProcessor = PacProcessor.getInstance(); + return true; + } + return false; } @Override @@ -74,7 +103,20 @@ public class PacService extends Service { } synchronized (mLock) { - return mPacProcessor.findProxyForUrl(url); + if (checkPacProcessorLocked()) { + // Apply pending script in case it was set before processor was ready. + if (mPendingScript != null) { + if (!mPacProcessor.setProxyScript(mPendingScript)) { + Log.e(TAG, "Unable to parse proxy script."); + } + mPendingScript = null; + } + return mPacProcessor.findProxyForUrl(url); + } else { + Log.e(TAG, "PacProcessor isn't ready during early boot," + + " request will be direct"); + return null; + } } } catch (MalformedURLException e) { throw new IllegalArgumentException("Invalid URL was passed"); @@ -88,8 +130,13 @@ public class PacService extends Service { throw new SecurityException(); } synchronized (mLock) { - if (!mPacProcessor.setProxyScript(script)) { - Log.e(TAG, "Unable to parse proxy script."); + if (checkPacProcessorLocked()) { + if (!mPacProcessor.setProxyScript(script)) { + Log.e(TAG, "Unable to parse proxy script."); + } + } else { + Log.d(TAG, "PAC processor isn't ready, saving script for later."); + mPendingScript = script; } } } diff --git a/services/companion/OWNERS b/services/companion/OWNERS new file mode 100644 index 000000000000..cb4cc56ca17b --- /dev/null +++ b/services/companion/OWNERS @@ -0,0 +1,4 @@ +evanxinchen@google.com +ewol@google.com +guojing@google.com +svetoslavganov@google.com
\ No newline at end of file diff --git a/services/core/java/com/android/server/BootReceiver.java b/services/core/java/com/android/server/BootReceiver.java index fdba098e6b80..469f465d7c9a 100644 --- a/services/core/java/com/android/server/BootReceiver.java +++ b/services/core/java/com/android/server/BootReceiver.java @@ -476,7 +476,11 @@ public class BootReceiver extends BroadcastReceiver { */ public static void addTombstoneToDropBox(Context ctx, File tombstone, boolean proto) { final DropBoxManager db = ctx.getSystemService(DropBoxManager.class); - final String bootReason = SystemProperties.get("ro.boot.bootreason", null); + if (db == null) { + Slog.e(TAG, "Can't log tombstone: DropBoxManager not available"); + return; + } + HashMap<String, Long> timestamps = readTimestamps(); try { if (proto) { diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index edf832f0fc22..c11c4def1b50 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -385,6 +385,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { private int[] mAllowedNetworkTypeReason; private long[] mAllowedNetworkTypeValue; + private static final List<LinkCapacityEstimate> INVALID_LCE_LIST = + new ArrayList<LinkCapacityEstimate>(Arrays.asList(new LinkCapacityEstimate( + LinkCapacityEstimate.LCE_TYPE_COMBINED, + LinkCapacityEstimate.INVALID, LinkCapacityEstimate.INVALID))); private List<List<LinkCapacityEstimate>> mLinkCapacityEstimateLists; /** @@ -719,7 +723,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mPhysicalChannelConfigs.add(i, new ArrayList<>()); mAllowedNetworkTypeReason[i] = -1; mAllowedNetworkTypeValue[i] = -1; - mLinkCapacityEstimateLists.add(i, new ArrayList<>()); + mLinkCapacityEstimateLists.add(i, INVALID_LCE_LIST); } } @@ -819,7 +823,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mPhysicalChannelConfigs.add(i, new ArrayList<>()); mAllowedNetworkTypeReason[i] = -1; mAllowedNetworkTypeValue[i] = -1; - mLinkCapacityEstimateLists.add(i, new ArrayList<>()); + mLinkCapacityEstimateLists.add(i, INVALID_LCE_LIST); } mAppOps = mContext.getSystemService(AppOpsManager.class); diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index 503b3a93b31f..94bf62f8b9b7 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -1568,17 +1568,23 @@ public final class BroadcastQueue { perm = PackageManager.PERMISSION_DENIED; } - if (perm == PackageManager.PERMISSION_GRANTED) { - skip = true; - break; - } - int appOp = AppOpsManager.permissionToOpCode(excludedPermission); if (appOp != AppOpsManager.OP_NONE) { - if (mService.getAppOpsManager().checkOpNoThrow(appOp, + // When there is an app op associated with the permission, + // skip when both the permission and the app op are + // granted. + if ((perm == PackageManager.PERMISSION_GRANTED) && ( + mService.getAppOpsManager().checkOpNoThrow(appOp, info.activityInfo.applicationInfo.uid, info.activityInfo.packageName) - == AppOpsManager.MODE_ALLOWED) { + == AppOpsManager.MODE_ALLOWED)) { + skip = true; + break; + } + } else { + // When there is no app op associated with the permission, + // skip when permission is granted. + if (perm == PackageManager.PERMISSION_GRANTED) { skip = true; break; } diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java index 38f71bae3004..ddbb32041a81 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java +++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java @@ -1714,10 +1714,12 @@ import java.util.concurrent.atomic.AtomicBoolean; MESSAGES_MUTE_MUSIC = new HashSet<>(); MESSAGES_MUTE_MUSIC.add(MSG_IL_SET_A2DP_SINK_CONNECTION_STATE_CONNECTED); MESSAGES_MUTE_MUSIC.add(MSG_IL_SET_A2DP_SINK_CONNECTION_STATE_DISCONNECTED); + MESSAGES_MUTE_MUSIC.add(MSG_IL_SET_LE_AUDIO_OUT_CONNECTION_STATE); MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONFIG_CHANGE); MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_ACTIVE_DEVICE_CHANGE); MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_CONNECTION); MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT_DISCONNECTION); + MESSAGES_MUTE_MUSIC.add(MSG_L_LE_AUDIO_DEVICE_OUT_CONNECTION_CHANGE_EXT); MESSAGES_MUTE_MUSIC.add(MSG_IIL_SET_FORCE_BT_A2DP_USE); MESSAGES_MUTE_MUSIC.add(MSG_REPORT_NEW_ROUTES_A2DP); } diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 84be7f5809e6..20687c6764db 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -4073,7 +4073,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { if (hasRestrictedModeAccess(uid)) { uidBlockedState.allowedReasons |= ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS; } else { - uidBlockedState.allowedReasons &= ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS; + uidBlockedState.allowedReasons &= ~ALLOWED_REASON_RESTRICTED_MODE_PERMISSIONS; } uidBlockedState.updateEffectiveBlockedReasons(); if (oldEffectiveBlockedReasons != uidBlockedState.effectiveBlockedReasons) { diff --git a/services/core/java/com/android/server/pm/dex/OWNERS b/services/core/java/com/android/server/pm/dex/OWNERS index 5a4431ee8c89..052a4ca52afd 100644 --- a/services/core/java/com/android/server/pm/dex/OWNERS +++ b/services/core/java/com/android/server/pm/dex/OWNERS @@ -1,2 +1,3 @@ -calin@google.com +alanstokes@google.com +jiakaiz@google.com ngeoffray@google.com diff --git a/services/core/java/com/android/server/timedetector/OWNERS b/services/core/java/com/android/server/timedetector/OWNERS index 8f8089717e3b..67fc9d66d69d 100644 --- a/services/core/java/com/android/server/timedetector/OWNERS +++ b/services/core/java/com/android/server/timedetector/OWNERS @@ -1,3 +1,3 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# This code is maintained by the same OWNERS as timezonedetector. +include /services/core/java/com/android/server/timezonedetector/OWNERS diff --git a/services/core/java/com/android/server/timezone/OWNERS b/services/core/java/com/android/server/timezone/OWNERS index 8f8089717e3b..2d365747473a 100644 --- a/services/core/java/com/android/server/timezone/OWNERS +++ b/services/core/java/com/android/server/timezone/OWNERS @@ -1,3 +1,2 @@ -# Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Bug component: 24949 +include platform/libcore:/OWNERS diff --git a/services/core/java/com/android/server/timezonedetector/OWNERS b/services/core/java/com/android/server/timezonedetector/OWNERS index 8f8089717e3b..029324246c91 100644 --- a/services/core/java/com/android/server/timezonedetector/OWNERS +++ b/services/core/java/com/android/server/timezonedetector/OWNERS @@ -1,3 +1,7 @@ # Bug component: 847766 +# This is the main list for platform time / time zone detection maintainers, for this dir and +# ultimately referenced by other OWNERS files for components maintained by the same team. +nfuller@google.com +jmorace@google.com mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +narayan@google.com diff --git a/services/core/java/com/android/server/vibrator/OWNERS b/services/core/java/com/android/server/vibrator/OWNERS index 7e7335d68d3b..08f0a90485cc 100644 --- a/services/core/java/com/android/server/vibrator/OWNERS +++ b/services/core/java/com/android/server/vibrator/OWNERS @@ -1 +1,3 @@ +lsandrade@google.com michaelwr@google.com +sbowden@google.com
\ No newline at end of file diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index f3ba56a03aef..08f3b1a8c6e0 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -3387,9 +3387,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final List<RemoteAction> actions = r.pictureInPictureArgs.getActions(); mRootWindowContainer.moveActivityToPinnedRootTask( r, "enterPictureInPictureMode"); - final Task rootTask = r.getRootTask(); - rootTask.setPictureInPictureAspectRatio(aspectRatio); - rootTask.setPictureInPictureActions(actions); + final Task task = r.getTask(); + task.setPictureInPictureAspectRatio(aspectRatio); + task.setPictureInPictureActions(actions); + + // Continue the pausing process after entering pip. + if (task.getPausingActivity() == r) { + task.schedulePauseActivity(r, false /* userLeaving */, + false /* pauseImmediately */, "auto-pip"); + } } }; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index ced5af126e49..516be553d5f8 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5771,23 +5771,8 @@ class Task extends WindowContainer<WindowContainer> { + "directly: %s", prev); didAutoPip = mAtmService.enterPictureInPictureMode(prev, prev.pictureInPictureArgs); - mPausingActivity = null; } else { - ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); - try { - EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), - prev.shortComponentName, "userLeaving=" + userLeaving, reason); - - mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), - prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, - prev.configChangeFlags, pauseImmediately)); - } catch (Exception e) { - // Ignore exception, if process died other code will cleanup. - Slog.w(TAG, "Exception thrown during pause", e); - mPausingActivity = null; - mLastPausedActivity = null; - mTaskSupervisor.mNoHistoryActivities.remove(prev); - } + schedulePauseActivity(prev, userLeaving, pauseImmediately, reason); } } else { mPausingActivity = null; @@ -5802,7 +5787,7 @@ class Task extends WindowContainer<WindowContainer> { } // If already entered PIP mode, no need to keep pausing. - if (mPausingActivity != null && !didAutoPip) { + if (mPausingActivity != null) { // Have the window manager pause its key dispatching until the new // activity has started. If we're pausing the activity just because // the screen is being turned off and the UI is sleeping, don't interrupt @@ -5835,6 +5820,25 @@ class Task extends WindowContainer<WindowContainer> { } } + void schedulePauseActivity(ActivityRecord prev, boolean userLeaving, + boolean pauseImmediately, String reason) { + ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); + try { + EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), + prev.shortComponentName, "userLeaving=" + userLeaving, reason); + + mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), + prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, + prev.configChangeFlags, pauseImmediately)); + } catch (Exception e) { + // Ignore exception, if process died other code will cleanup. + Slog.w(TAG, "Exception thrown during pause", e); + mPausingActivity = null; + mLastPausedActivity = null; + mTaskSupervisor.mNoHistoryActivities.remove(prev); + } + } + @VisibleForTesting void completePauseLocked(boolean resumeNext, ActivityRecord resuming) { // Complete the pausing process of a pausing activity, so it doesn't make sense to diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp index 7fea547459bc..fe86ff1ef7ef 100644 --- a/services/core/jni/com_android_server_power_PowerManagerService.cpp +++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp @@ -178,9 +178,10 @@ sp<system::suspend::internal::ISuspendControlServiceInternal> getSuspendControlI void enableAutoSuspend() { static bool enabled = false; if (!enabled) { + static sp<IBinder> autosuspendClientToken = new BBinder(); sp<system::suspend::internal::ISuspendControlServiceInternal> suspendControl = getSuspendControlInternal(); - suspendControl->enableAutosuspend(&enabled); + suspendControl->enableAutosuspend(autosuspendClientToken, &enabled); } { diff --git a/services/tests/servicestests/src/com/android/server/timedetector/OWNERS b/services/tests/servicestests/src/com/android/server/timedetector/OWNERS index 8f8089717e3b..a0f46e172da6 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/OWNERS +++ b/services/tests/servicestests/src/com/android/server/timedetector/OWNERS @@ -1,3 +1,2 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +include /services/core/java/com/android/server/timedetector/OWNERS diff --git a/services/tests/servicestests/src/com/android/server/timezone/OWNERS b/services/tests/servicestests/src/com/android/server/timezone/OWNERS index 8f8089717e3b..61652604ee9f 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/OWNERS +++ b/services/tests/servicestests/src/com/android/server/timezone/OWNERS @@ -1,3 +1,2 @@ -# Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +# Bug component: 24949 +include /services/core/java/com/android/server/timezone/OWNERS diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/OWNERS b/services/tests/servicestests/src/com/android/server/timezonedetector/OWNERS index 8f8089717e3b..a6ff1ba8a8cb 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/OWNERS +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/OWNERS @@ -1,3 +1,2 @@ # Bug component: 847766 -mingaleev@google.com -include /core/java/android/app/timedetector/OWNERS +include /services/core/java/com/android/server/timezonedetector/OWNERS diff --git a/startop/OWNERS b/startop/OWNERS index 2d1eb38952ed..11d5ad0f000a 100644 --- a/startop/OWNERS +++ b/startop/OWNERS @@ -1,7 +1,2 @@ -# mailing list: startop-eng@google.com -calin@google.com -chriswailes@google.com -eholk@google.com -iam@google.com -mathieuc@google.com -yawanng@google.com +include platform/art:/OWNERS +keunyoung@google.com diff --git a/telephony/java/android/telephony/BarringInfo.java b/telephony/java/android/telephony/BarringInfo.java index e9698adc0356..0aa4b5805cd6 100644 --- a/telephony/java/android/telephony/BarringInfo.java +++ b/telephony/java/android/telephony/BarringInfo.java @@ -28,7 +28,6 @@ import android.util.SparseArray; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.List; import java.util.Objects; /** @@ -269,42 +268,6 @@ public final class BarringInfo implements Parcelable { mBarringServiceInfos = barringServiceInfos; } - /** @hide */ - public static BarringInfo create( - @NonNull android.hardware.radio.V1_5.CellIdentity halBarringCellId, - @NonNull List<android.hardware.radio.V1_5.BarringInfo> halBarringInfos) { - CellIdentity ci = CellIdentity.create(halBarringCellId); - SparseArray<BarringServiceInfo> serviceInfos = new SparseArray<>(); - - for (android.hardware.radio.V1_5.BarringInfo halBarringInfo : halBarringInfos) { - if (halBarringInfo.barringType - == android.hardware.radio.V1_5.BarringInfo.BarringType.CONDITIONAL) { - if (halBarringInfo.barringTypeSpecificInfo.getDiscriminator() - != android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo - .hidl_discriminator.conditional) { - // this is an error case where the barring info is conditional but the - // conditional barring fields weren't included - continue; - } - android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo - .Conditional conditionalInfo = - halBarringInfo.barringTypeSpecificInfo.conditional(); - serviceInfos.put( - halBarringInfo.serviceType, new BarringServiceInfo( - halBarringInfo.barringType, // will always be CONDITIONAL here - conditionalInfo.isBarred, - conditionalInfo.factor, - conditionalInfo.timeSeconds)); - } else { - // Barring type is either NONE or UNCONDITIONAL - serviceInfos.put( - halBarringInfo.serviceType, new BarringServiceInfo( - halBarringInfo.barringType, false, 0, 0)); - } - } - return new BarringInfo(ci, serviceInfos); - } - /** * Get the BarringServiceInfo for a specified service. * diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 8e910c999c07..73e6c76fe214 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -1312,9 +1312,14 @@ public class CarrierConfigManager { /** * Determines whether a maximum size limit for IMS conference calls is enforced on the device. * When {@code true}, IMS conference calls will be limited to at most - * {@link #KEY_IMS_CONFERENCE_SIZE_LIMIT_INT} participants. When {@code false}, no attempt is made - * to limit the number of participants in a conference (the carrier will raise an error when an - * attempt is made to merge too many participants into a conference). + * {@link #KEY_IMS_CONFERENCE_SIZE_LIMIT_INT} participants. When {@code false}, no attempt is + * made to limit the number of participants in a conference (the carrier will raise an error + * when an attempt is made to merge too many participants into a conference). + * <p> + * Note: The maximum size of a conference can ONLY be supported where + * {@link #KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL} is {@code true} since the platform + * needs conference event package data to accurately know the number of participants in the + * conference. */ public static final String KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL = "is_ims_conference_size_enforced_bool"; diff --git a/telephony/java/android/telephony/CellConfigLte.java b/telephony/java/android/telephony/CellConfigLte.java index 4b57d71d84ba..3e4e244a3dc6 100644 --- a/telephony/java/android/telephony/CellConfigLte.java +++ b/telephony/java/android/telephony/CellConfigLte.java @@ -34,11 +34,6 @@ public class CellConfigLte implements Parcelable { } /** @hide */ - public CellConfigLte(android.hardware.radio.V1_4.CellConfigLte cellConfig) { - mIsEndcAvailable = cellConfig.isEndcAvailable; - } - - /** @hide */ public CellConfigLte(boolean isEndcAvailable) { mIsEndcAvailable = isEndcAvailable; } diff --git a/telephony/java/android/telephony/CellIdentity.java b/telephony/java/android/telephony/CellIdentity.java index 15147da925b8..06cfd6718664 100644 --- a/telephony/java/android/telephony/CellIdentity.java +++ b/telephony/java/android/telephony/CellIdentity.java @@ -20,7 +20,6 @@ import android.annotation.CallSuper; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; -import android.hardware.radio.V1_0.CellInfoType; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -359,104 +358,4 @@ public abstract class CellIdentity implements Parcelable { return true; } - - /** @hide */ - public static CellIdentity create(android.hardware.radio.V1_0.CellIdentity cellIdentity) { - if (cellIdentity == null) return null; - switch(cellIdentity.cellInfoType) { - case CellInfoType.GSM: { - if (cellIdentity.cellIdentityGsm.size() == 1) { - return new CellIdentityGsm(cellIdentity.cellIdentityGsm.get(0)); - } - break; - } - case CellInfoType.WCDMA: { - if (cellIdentity.cellIdentityWcdma.size() == 1) { - return new CellIdentityWcdma(cellIdentity.cellIdentityWcdma.get(0)); - } - break; - } - case CellInfoType.TD_SCDMA: { - if (cellIdentity.cellIdentityTdscdma.size() == 1) { - return new CellIdentityTdscdma(cellIdentity.cellIdentityTdscdma.get(0)); - } - break; - } - case CellInfoType.LTE: { - if (cellIdentity.cellIdentityLte.size() == 1) { - return new CellIdentityLte(cellIdentity.cellIdentityLte.get(0)); - } - break; - } - case CellInfoType.CDMA: { - if (cellIdentity.cellIdentityCdma.size() == 1) { - return new CellIdentityCdma(cellIdentity.cellIdentityCdma.get(0)); - } - break; - } - case CellInfoType.NONE: break; - default: break; - } - return null; - } - - /** @hide */ - public static CellIdentity create(android.hardware.radio.V1_2.CellIdentity cellIdentity) { - if (cellIdentity == null) return null; - switch(cellIdentity.cellInfoType) { - case CellInfoType.GSM: { - if (cellIdentity.cellIdentityGsm.size() == 1) { - return new CellIdentityGsm(cellIdentity.cellIdentityGsm.get(0)); - } - break; - } - case CellInfoType.WCDMA: { - if (cellIdentity.cellIdentityWcdma.size() == 1) { - return new CellIdentityWcdma(cellIdentity.cellIdentityWcdma.get(0)); - } - break; - } - case CellInfoType.TD_SCDMA: { - if (cellIdentity.cellIdentityTdscdma.size() == 1) { - return new CellIdentityTdscdma(cellIdentity.cellIdentityTdscdma.get(0)); - } - break; - } - case CellInfoType.LTE: { - if (cellIdentity.cellIdentityLte.size() == 1) { - return new CellIdentityLte(cellIdentity.cellIdentityLte.get(0)); - } - break; - } - case CellInfoType.CDMA: { - if (cellIdentity.cellIdentityCdma.size() == 1) { - return new CellIdentityCdma(cellIdentity.cellIdentityCdma.get(0)); - } - break; - } - case CellInfoType.NONE: break; - default: break; - } - return null; - } - - /** @hide */ - public static CellIdentity create(android.hardware.radio.V1_5.CellIdentity ci) { - if (ci == null) return null; - switch (ci.getDiscriminator()) { - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.gsm: - return new CellIdentityGsm(ci.gsm()); - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.cdma: - return new CellIdentityCdma(ci.cdma()); - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.lte: - return new CellIdentityLte(ci.lte()); - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.wcdma: - return new CellIdentityWcdma(ci.wcdma()); - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.tdscdma: - return new CellIdentityTdscdma(ci.tdscdma()); - case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.nr: - return new CellIdentityNr(ci.nr()); - default: return null; - } - } } diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java index 58a01e9d01af..ba3a192074bc 100644 --- a/telephony/java/android/telephony/CellIdentityCdma.java +++ b/telephony/java/android/telephony/CellIdentityCdma.java @@ -112,17 +112,6 @@ public final class CellIdentityCdma extends CellIdentity { updateGlobalCellId(); } - /** @hide */ - public CellIdentityCdma(@NonNull android.hardware.radio.V1_0.CellIdentityCdma cid) { - this(cid.networkId, cid.systemId, cid.baseStationId, cid.longitude, cid.latitude, "", ""); - } - - /** @hide */ - public CellIdentityCdma(@NonNull android.hardware.radio.V1_2.CellIdentityCdma cid) { - this(cid.base.networkId, cid.base.systemId, cid.base.baseStationId, cid.base.longitude, - cid.base.latitude, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort); - } - private CellIdentityCdma(@NonNull CellIdentityCdma cid) { this(cid.mNetworkId, cid.mSystemId, cid.mBasestationId, cid.mLongitude, cid.mLatitude, cid.mAlphaLong, cid.mAlphaShort); diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java index a3bec339794b..2516a79546f8 100644 --- a/telephony/java/android/telephony/CellIdentityGsm.java +++ b/telephony/java/android/telephony/CellIdentityGsm.java @@ -101,30 +101,6 @@ public final class CellIdentityGsm extends CellIdentity { updateGlobalCellId(); } - /** @hide */ - public CellIdentityGsm(@NonNull android.hardware.radio.V1_0.CellIdentityGsm cid) { - this(cid.lac, cid.cid, cid.arfcn, - cid.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : cid.bsic, - cid.mcc, cid.mnc, "", "", new ArraySet<>()); - } - - /** @hide */ - public CellIdentityGsm(@NonNull android.hardware.radio.V1_2.CellIdentityGsm cid) { - this(cid.base.lac, cid.base.cid, cid.base.arfcn, - cid.base.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : cid.base.bsic, cid.base.mcc, - cid.base.mnc, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort, - new ArraySet<>()); - } - - /** @hide */ - public CellIdentityGsm(@NonNull android.hardware.radio.V1_5.CellIdentityGsm cid) { - this(cid.base.base.lac, cid.base.base.cid, cid.base.base.arfcn, - cid.base.base.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE - : cid.base.base.bsic, cid.base.base.mcc, - cid.base.base.mnc, cid.base.operatorNames.alphaLong, - cid.base.operatorNames.alphaShort, cid.additionalPlmns); - } - private CellIdentityGsm(@NonNull CellIdentityGsm cid) { this(cid.mLac, cid.mCid, cid.mArfcn, cid.mBsic, cid.mMccStr, cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort, cid.mAdditionalPlmns); diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index bd92d00a0321..4db00cf258e5 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -136,31 +136,6 @@ public final class CellIdentityLte extends CellIdentity { updateGlobalCellId(); } - /** @hide */ - public CellIdentityLte(@NonNull android.hardware.radio.V1_0.CellIdentityLte cid) { - this(cid.ci, cid.pci, cid.tac, cid.earfcn, new int[] {}, - CellInfo.UNAVAILABLE, cid.mcc, cid.mnc, "", "", new ArraySet<>(), null); - } - - /** @hide */ - public CellIdentityLte(@NonNull android.hardware.radio.V1_2.CellIdentityLte cid) { - this(cid.base.ci, cid.base.pci, cid.base.tac, cid.base.earfcn, new int[] {}, - cid.bandwidth, cid.base.mcc, cid.base.mnc, cid.operatorNames.alphaLong, - cid.operatorNames.alphaShort, new ArraySet<>(), null); - } - - /** @hide */ - public CellIdentityLte(@NonNull android.hardware.radio.V1_5.CellIdentityLte cid) { - this(cid.base.base.ci, cid.base.base.pci, cid.base.base.tac, cid.base.base.earfcn, - cid.bands.stream().mapToInt(Integer::intValue).toArray(), cid.base.bandwidth, - cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong, - cid.base.operatorNames.alphaShort, cid.additionalPlmns, - cid.optionalCsgInfo.getDiscriminator() - == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) - : null); - } - private CellIdentityLte(@NonNull CellIdentityLte cid) { this(cid.mCi, cid.mPci, cid.mTac, cid.mEarfcn, cid.mBands, cid.mBandwidth, cid.mMccStr, cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort, cid.mAdditionalPlmns, cid.mCsgInfo); diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java index 4f5052151af5..6aeb482fb236 100644 --- a/telephony/java/android/telephony/CellIdentityNr.java +++ b/telephony/java/android/telephony/CellIdentityNr.java @@ -65,7 +65,6 @@ public final class CellIdentityNr extends CellIdentity { } /** - * * @param pci Physical Cell Id in range [0, 1007]. * @param tac 24-bit Tracking Area Code. * @param nrArfcn NR Absolute Radio Frequency Channel Number, in range [0, 3279165]. @@ -100,21 +99,6 @@ public final class CellIdentityNr extends CellIdentity { } /** @hide */ - public CellIdentityNr(@NonNull android.hardware.radio.V1_4.CellIdentityNr cid) { - this(cid.pci, cid.tac, cid.nrarfcn, new int[] {}, cid.mcc, cid.mnc, cid.nci, - cid.operatorNames.alphaLong, cid.operatorNames.alphaShort, - new ArraySet<>()); - } - - /** @hide */ - public CellIdentityNr(@NonNull android.hardware.radio.V1_5.CellIdentityNr cid) { - this(cid.base.pci, cid.base.tac, cid.base.nrarfcn, - cid.bands.stream().mapToInt(Integer::intValue).toArray(), cid.base.mcc, - cid.base.mnc, cid.base.nci, cid.base.operatorNames.alphaLong, - cid.base.operatorNames.alphaShort, cid.additionalPlmns); - } - - /** @hide */ @Override public @NonNull CellIdentityNr sanitizeLocationInfo() { return new CellIdentityNr(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, mNrArfcn, diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java index ec07d5494849..13d93737f751 100644 --- a/telephony/java/android/telephony/CellIdentityTdscdma.java +++ b/telephony/java/android/telephony/CellIdentityTdscdma.java @@ -113,31 +113,6 @@ public final class CellIdentityTdscdma extends CellIdentity { } /** @hide */ - public CellIdentityTdscdma(@NonNull android.hardware.radio.V1_0.CellIdentityTdscdma cid) { - this(cid.mcc, cid.mnc, cid.lac, cid.cid, cid.cpid, CellInfo.UNAVAILABLE, "", "", - Collections.emptyList(), null); - } - - /** @hide */ - public CellIdentityTdscdma(@NonNull android.hardware.radio.V1_2.CellIdentityTdscdma cid) { - this(cid.base.mcc, cid.base.mnc, cid.base.lac, cid.base.cid, cid.base.cpid, - cid.uarfcn, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort, - Collections.emptyList(), null); - } - - /** @hide */ - public CellIdentityTdscdma(@NonNull android.hardware.radio.V1_5.CellIdentityTdscdma cid) { - this(cid.base.base.mcc, cid.base.base.mnc, cid.base.base.lac, cid.base.base.cid, - cid.base.base.cpid, cid.base.uarfcn, cid.base.operatorNames.alphaLong, - cid.base.operatorNames.alphaShort, - cid.additionalPlmns, - cid.optionalCsgInfo.getDiscriminator() - == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) - : null); - } - - /** @hide */ @Override public @NonNull CellIdentityTdscdma sanitizeLocationInfo() { return new CellIdentityTdscdma(mMccStr, mMncStr, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java index b04a51d238c1..9b463da14f16 100644 --- a/telephony/java/android/telephony/CellIdentityWcdma.java +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -107,30 +107,6 @@ public final class CellIdentityWcdma extends CellIdentity { updateGlobalCellId(); } - /** @hide */ - public CellIdentityWcdma(@NonNull android.hardware.radio.V1_0.CellIdentityWcdma cid) { - this(cid.lac, cid.cid, cid.psc, cid.uarfcn, cid.mcc, cid.mnc, "", "", - new ArraySet<>(), null); - } - - /** @hide */ - public CellIdentityWcdma(@NonNull android.hardware.radio.V1_2.CellIdentityWcdma cid) { - this(cid.base.lac, cid.base.cid, cid.base.psc, cid.base.uarfcn, - cid.base.mcc, cid.base.mnc, cid.operatorNames.alphaLong, - cid.operatorNames.alphaShort, new ArraySet<>(), null); - } - - /** @hide */ - public CellIdentityWcdma(@NonNull android.hardware.radio.V1_5.CellIdentityWcdma cid) { - this(cid.base.base.lac, cid.base.base.cid, cid.base.base.psc, cid.base.base.uarfcn, - cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong, - cid.base.operatorNames.alphaShort, cid.additionalPlmns, - cid.optionalCsgInfo.getDiscriminator() - == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo - ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo()) - : null); - } - private CellIdentityWcdma(@NonNull CellIdentityWcdma cid) { this(cid.mLac, cid.mCid, cid.mPsc, cid.mUarfcn, cid.mMccStr, cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort, cid.mAdditionalPlmns, cid.mCsgInfo); diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java index 189a4b898886..2b2df24bb268 100644 --- a/telephony/java/android/telephony/CellInfo.java +++ b/telephony/java/android/telephony/CellInfo.java @@ -20,7 +20,6 @@ import android.annotation.ElapsedRealtimeLong; import android.annotation.IntDef; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; -import android.hardware.radio.V1_4.CellInfo.Info; import android.os.Parcel; import android.os.Parcelable; @@ -150,6 +149,13 @@ public abstract class CellInfo implements Parcelable { private long mTimeStamp; /** @hide */ + protected CellInfo(int cellConnectionStatus, boolean registered, long timestamp) { + mCellConnectionStatus = cellConnectionStatus; + mRegistered = registered; + mTimeStamp = timestamp; + } + + /** @hide */ protected CellInfo() { this.mRegistered = false; this.mTimeStamp = Long.MAX_VALUE; @@ -321,131 +327,4 @@ public abstract class CellInfo implements Parcelable { return new CellInfo[size]; } }; - - /** @hide */ - protected CellInfo(android.hardware.radio.V1_0.CellInfo ci) { - this.mRegistered = ci.registered; - this.mTimeStamp = ci.timeStamp; - this.mCellConnectionStatus = CONNECTION_UNKNOWN; - } - - /** @hide */ - protected CellInfo(android.hardware.radio.V1_2.CellInfo ci) { - this.mRegistered = ci.registered; - this.mTimeStamp = ci.timeStamp; - this.mCellConnectionStatus = ci.connectionStatus; - } - - /** @hide */ - protected CellInfo(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - this.mRegistered = ci.isRegistered; - this.mTimeStamp = timeStamp; - this.mCellConnectionStatus = ci.connectionStatus; - } - - /** @hide */ - protected CellInfo(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - this.mRegistered = ci.registered; - this.mTimeStamp = timeStamp; - this.mCellConnectionStatus = ci.connectionStatus; - } - - /** @hide */ - protected CellInfo(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - this.mRegistered = ci.registered; - this.mTimeStamp = timeStamp; - this.mCellConnectionStatus = ci.connectionStatus; - } - - /** @hide */ - public static CellInfo create(android.hardware.radio.V1_0.CellInfo ci) { - if (ci == null) return null; - switch(ci.cellInfoType) { - case android.hardware.radio.V1_0.CellInfoType.GSM: return new CellInfoGsm(ci); - case android.hardware.radio.V1_0.CellInfoType.CDMA: return new CellInfoCdma(ci); - case android.hardware.radio.V1_0.CellInfoType.LTE: return new CellInfoLte(ci); - case android.hardware.radio.V1_0.CellInfoType.WCDMA: return new CellInfoWcdma(ci); - case android.hardware.radio.V1_0.CellInfoType.TD_SCDMA: return new CellInfoTdscdma(ci); - default: return null; - } - } - - /** @hide */ - public static CellInfo create(android.hardware.radio.V1_2.CellInfo ci) { - if (ci == null) return null; - switch(ci.cellInfoType) { - case android.hardware.radio.V1_0.CellInfoType.GSM: return new CellInfoGsm(ci); - case android.hardware.radio.V1_0.CellInfoType.CDMA: return new CellInfoCdma(ci); - case android.hardware.radio.V1_0.CellInfoType.LTE: return new CellInfoLte(ci); - case android.hardware.radio.V1_0.CellInfoType.WCDMA: return new CellInfoWcdma(ci); - case android.hardware.radio.V1_0.CellInfoType.TD_SCDMA: return new CellInfoTdscdma(ci); - default: return null; - } - } - - /** @hide */ - public static CellInfo create(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - if (ci == null) return null; - switch (ci.info.getDiscriminator()) { - case Info.hidl_discriminator.gsm: return new CellInfoGsm(ci, timeStamp); - case Info.hidl_discriminator.cdma: return new CellInfoCdma(ci, timeStamp); - case Info.hidl_discriminator.lte: return new CellInfoLte(ci, timeStamp); - case Info.hidl_discriminator.wcdma: return new CellInfoWcdma(ci, timeStamp); - case Info.hidl_discriminator.tdscdma: return new CellInfoTdscdma(ci, timeStamp); - case Info.hidl_discriminator.nr: return new CellInfoNr(ci, timeStamp); - default: return null; - } - } - - /** @hide */ - public static CellInfo create(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - if (ci == null) return null; - switch (ci.ratSpecificInfo.getDiscriminator()) { - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.gsm: - return new CellInfoGsm(ci, timeStamp); - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.cdma: - return new CellInfoCdma(ci, timeStamp); - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.lte: - return new CellInfoLte(ci, timeStamp); - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.wcdma: - return new CellInfoWcdma(ci, timeStamp); - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.tdscdma: - return new CellInfoTdscdma(ci, timeStamp); - case android.hardware.radio.V1_5.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.nr: - return new CellInfoNr(ci, timeStamp); - default: return null; - } - } - - /** @hide */ - public static CellInfo create(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - if (ci == null) return null; - switch (ci.ratSpecificInfo.getDiscriminator()) { - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.gsm: - return new CellInfoGsm(ci, timeStamp); - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.cdma: - return new CellInfoCdma(ci, timeStamp); - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.lte: - return new CellInfoLte(ci, timeStamp); - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.wcdma: - return new CellInfoWcdma(ci, timeStamp); - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.tdscdma: - return new CellInfoTdscdma(ci, timeStamp); - case android.hardware.radio.V1_6.CellInfo - .CellInfoRatSpecificInfo.hidl_discriminator.nr: - return new CellInfoNr(ci, timeStamp); - default: return null; - } - } } diff --git a/telephony/java/android/telephony/CellInfoCdma.java b/telephony/java/android/telephony/CellInfoCdma.java index dbb30d29eb87..aa8cff52bcaf 100644 --- a/telephony/java/android/telephony/CellInfoCdma.java +++ b/telephony/java/android/telephony/CellInfoCdma.java @@ -52,48 +52,11 @@ public final class CellInfoCdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_0.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_0.CellInfoCdma cic = ci.cdma.get(0); - mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); - mCellSignalStrengthCdma = - new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo); - } - - /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_2.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_2.CellInfoCdma cic = ci.cdma.get(0); - mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); - mCellSignalStrengthCdma = - new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo); - } - - /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoCdma cic = ci.info.cdma(); - mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); - mCellSignalStrengthCdma = - new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo); - } - - /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoCdma cic = ci.ratSpecificInfo.cdma(); - mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); - mCellSignalStrengthCdma = - new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo); - } - - /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoCdma cic = ci.ratSpecificInfo.cdma(); - mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); - mCellSignalStrengthCdma = - new CellSignalStrengthCdma(cic.signalStrengthCdma, cic.signalStrengthEvdo); + public CellInfoCdma(int connectionStatus, boolean registered, long timeStamp, + CellIdentityCdma cellIdentityCdma, CellSignalStrengthCdma cellSignalStrengthCdma) { + super(connectionStatus, registered, timeStamp); + mCellIdentityCdma = cellIdentityCdma; + mCellSignalStrengthCdma = cellSignalStrengthCdma; } /** diff --git a/telephony/java/android/telephony/CellInfoGsm.java b/telephony/java/android/telephony/CellInfoGsm.java index e1d996e87fcf..76e825bf426c 100644 --- a/telephony/java/android/telephony/CellInfoGsm.java +++ b/telephony/java/android/telephony/CellInfoGsm.java @@ -51,43 +51,11 @@ public final class CellInfoGsm extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_0.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_0.CellInfoGsm cig = ci.gsm.get(0); - mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); - mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); - } - - /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_2.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_2.CellInfoGsm cig = ci.gsm.get(0); - mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); - mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); - } - - /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoGsm cig = ci.info.gsm(); - mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); - mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); - } - - /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoGsm cig = ci.ratSpecificInfo.gsm(); - mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); - mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); - } - - /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoGsm cig = ci.ratSpecificInfo.gsm(); - mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); - mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); + public CellInfoGsm(int cellConnectionStatus, boolean registered, long timeStamp, + CellIdentityGsm cellIdentityGsm, CellSignalStrengthGsm cellSignalStrengthGsm) { + super(cellConnectionStatus, registered, timeStamp); + mCellIdentityGsm = cellIdentityGsm; + mCellSignalStrengthGsm = cellSignalStrengthGsm; } /** diff --git a/telephony/java/android/telephony/CellInfoLte.java b/telephony/java/android/telephony/CellInfoLte.java index 39b320afdac9..2d176d52c05c 100644 --- a/telephony/java/android/telephony/CellInfoLte.java +++ b/telephony/java/android/telephony/CellInfoLte.java @@ -56,48 +56,13 @@ public final class CellInfoLte extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoLte(android.hardware.radio.V1_0.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_0.CellInfoLte cil = ci.lte.get(0); - mCellIdentityLte = new CellIdentityLte(cil.cellIdentityLte); - mCellSignalStrengthLte = new CellSignalStrengthLte(cil.signalStrengthLte); - mCellConfig = new CellConfigLte(); - } - - /** @hide */ - public CellInfoLte(android.hardware.radio.V1_2.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_2.CellInfoLte cil = ci.lte.get(0); - mCellIdentityLte = new CellIdentityLte(cil.cellIdentityLte); - mCellSignalStrengthLte = new CellSignalStrengthLte(cil.signalStrengthLte); - mCellConfig = new CellConfigLte(); - } - - /** @hide */ - public CellInfoLte(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_4.CellInfoLte cil = ci.info.lte(); - mCellIdentityLte = new CellIdentityLte(cil.base.cellIdentityLte); - mCellSignalStrengthLte = new CellSignalStrengthLte(cil.base.signalStrengthLte); - mCellConfig = new CellConfigLte(cil.cellConfig); - } - - /** @hide */ - public CellInfoLte(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoLte cil = ci.ratSpecificInfo.lte(); - mCellIdentityLte = new CellIdentityLte(cil.cellIdentityLte); - mCellSignalStrengthLte = new CellSignalStrengthLte(cil.signalStrengthLte); - mCellConfig = new CellConfigLte(); - } - - /** @hide */ - public CellInfoLte(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_6.CellInfoLte cil = ci.ratSpecificInfo.lte(); - mCellIdentityLte = new CellIdentityLte(cil.cellIdentityLte); - mCellSignalStrengthLte = new CellSignalStrengthLte(cil.signalStrengthLte); - mCellConfig = new CellConfigLte(); + public CellInfoLte(int connectionStatus, boolean registered, long timeStamp, + CellIdentityLte cellIdentityLte, CellSignalStrengthLte cellSignalStrengthLte, + CellConfigLte cellConfig) { + super(connectionStatus, registered, timeStamp); + mCellIdentityLte = cellIdentityLte; + mCellSignalStrengthLte = cellSignalStrengthLte; + mCellConfig = cellConfig; } /** diff --git a/telephony/java/android/telephony/CellInfoNr.java b/telephony/java/android/telephony/CellInfoNr.java index 12e6a38bfdc0..37fac24ab5e7 100644 --- a/telephony/java/android/telephony/CellInfoNr.java +++ b/telephony/java/android/telephony/CellInfoNr.java @@ -53,27 +53,11 @@ public final class CellInfoNr extends CellInfo { } /** @hide */ - public CellInfoNr(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_4.CellInfoNr cil = ci.info.nr(); - mCellIdentity = new CellIdentityNr(cil.cellidentity); - mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrength); - } - - /** @hide */ - public CellInfoNr(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoNr cil = ci.ratSpecificInfo.nr(); - mCellIdentity = new CellIdentityNr(cil.cellIdentityNr); - mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrengthNr); - } - - /** @hide */ - public CellInfoNr(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_6.CellInfoNr cil = ci.ratSpecificInfo.nr(); - mCellIdentity = new CellIdentityNr(cil.cellIdentityNr); - mCellSignalStrength = new CellSignalStrengthNr(cil.signalStrengthNr); + public CellInfoNr(int connectionStatus, boolean registered, long timeStamp, + CellIdentityNr cellIdentityNr, CellSignalStrengthNr cellSignalStrengthNr) { + super(connectionStatus, registered, timeStamp); + mCellIdentity = cellIdentityNr; + mCellSignalStrength = cellSignalStrengthNr; } /** diff --git a/telephony/java/android/telephony/CellInfoTdscdma.java b/telephony/java/android/telephony/CellInfoTdscdma.java index 994b317a47fd..d8db4295f374 100644 --- a/telephony/java/android/telephony/CellInfoTdscdma.java +++ b/telephony/java/android/telephony/CellInfoTdscdma.java @@ -54,43 +54,12 @@ public final class CellInfoTdscdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_0.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_0.CellInfoTdscdma cit = ci.tdscdma.get(0); - mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); - mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); - } - - /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_2.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_2.CellInfoTdscdma cit = ci.tdscdma.get(0); - mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); - mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); - } - - /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoTdscdma cit = ci.info.tdscdma(); - mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); - mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); - } - - /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoTdscdma cit = ci.ratSpecificInfo.tdscdma(); - mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); - mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); - } - - /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoTdscdma cit = ci.ratSpecificInfo.tdscdma(); - mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); - mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); + public CellInfoTdscdma(int connectionStatus, boolean registered, long timeStamp, + CellIdentityTdscdma cellIdentityTdscdma, + CellSignalStrengthTdscdma cellSignalStrengthTdscdma) { + super(connectionStatus, registered, timeStamp); + mCellIdentityTdscdma = cellIdentityTdscdma; + mCellSignalStrengthTdscdma = cellSignalStrengthTdscdma; } /** diff --git a/telephony/java/android/telephony/CellInfoWcdma.java b/telephony/java/android/telephony/CellInfoWcdma.java index 62ac0b8ae04e..dc8e1fed1392 100644 --- a/telephony/java/android/telephony/CellInfoWcdma.java +++ b/telephony/java/android/telephony/CellInfoWcdma.java @@ -49,43 +49,11 @@ public final class CellInfoWcdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_0.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_0.CellInfoWcdma ciw = ci.wcdma.get(0); - mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); - mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); - } - - /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_2.CellInfo ci) { - super(ci); - final android.hardware.radio.V1_2.CellInfoWcdma ciw = ci.wcdma.get(0); - mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); - mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); - } - - /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_2.CellInfoWcdma ciw = ci.info.wcdma(); - mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); - mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); - } - - /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_5.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoWcdma ciw = ci.ratSpecificInfo.wcdma(); - mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); - mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); - } - - /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_6.CellInfo ci, long timeStamp) { - super(ci, timeStamp); - final android.hardware.radio.V1_5.CellInfoWcdma ciw = ci.ratSpecificInfo.wcdma(); - mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); - mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); + public CellInfoWcdma(int connectionStatus, boolean registered, long timeStamp, + CellIdentityWcdma cellIdentityWcdma, CellSignalStrengthWcdma cellSignalStrengthWcdma) { + super(connectionStatus, registered, timeStamp); + mCellIdentityWcdma = cellIdentityWcdma; + mCellSignalStrengthWcdma = cellSignalStrengthWcdma; } /** diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java index e0896570d3ed..9727ab7d23e2 100644 --- a/telephony/java/android/telephony/CellSignalStrength.java +++ b/telephony/java/android/telephony/CellSignalStrength.java @@ -108,7 +108,7 @@ public abstract class CellSignalStrength { // Range for RSSI in ASU (0-31, 99) as defined in TS 27.007 8.69 /** @hide */ - protected static final int getRssiDbmFromAsu(int asu) { + public static final int getRssiDbmFromAsu(int asu) { if (asu > 31 || asu < 0) return CellInfo.UNAVAILABLE; return -113 + (2 * asu); } @@ -122,7 +122,7 @@ public abstract class CellSignalStrength { // Range for RSCP in ASU (0-96, 255) as defined in TS 27.007 8.69 /** @hide */ - protected static final int getRscpDbmFromAsu(int asu) { + public static final int getRscpDbmFromAsu(int asu) { if (asu > 96 || asu < 0) return CellInfo.UNAVAILABLE; return asu - 120; } @@ -136,7 +136,7 @@ public abstract class CellSignalStrength { // Range for SNR in ASU (0-49, 255) as defined in TS 27.007 8.69 /** @hide */ - protected static final int getEcNoDbFromAsu(int asu) { + public static final int getEcNoDbFromAsu(int asu) { if (asu > 49 || asu < 0) return CellInfo.UNAVAILABLE; return -24 + (asu / 2); } diff --git a/telephony/java/android/telephony/CellSignalStrengthCdma.java b/telephony/java/android/telephony/CellSignalStrengthCdma.java index d00049c1ebe5..5298e67bdf80 100644 --- a/telephony/java/android/telephony/CellSignalStrengthCdma.java +++ b/telephony/java/android/telephony/CellSignalStrengthCdma.java @@ -78,13 +78,6 @@ public final class CellSignalStrengthCdma extends CellSignalStrength implements } /** @hide */ - public CellSignalStrengthCdma(android.hardware.radio.V1_0.CdmaSignalStrength cdma, - android.hardware.radio.V1_0.EvdoSignalStrength evdo) { - // Convert from HAL values as part of construction. - this(-cdma.dbm, -cdma.ecio, -evdo.dbm, -evdo.ecio, evdo.signalNoiseRatio); - } - - /** @hide */ public CellSignalStrengthCdma(CellSignalStrengthCdma s) { copyFrom(s); } diff --git a/telephony/java/android/telephony/CellSignalStrengthGsm.java b/telephony/java/android/telephony/CellSignalStrengthGsm.java index 51e1ebc63cf2..7b780843061b 100644 --- a/telephony/java/android/telephony/CellSignalStrengthGsm.java +++ b/telephony/java/android/telephony/CellSignalStrengthGsm.java @@ -67,16 +67,6 @@ public final class CellSignalStrengthGsm extends CellSignalStrength implements P } /** @hide */ - public CellSignalStrengthGsm(android.hardware.radio.V1_0.GsmSignalStrength gsm) { - // Convert from HAL values as part of construction. - this(getRssiDbmFromAsu(gsm.signalStrength), gsm.bitErrorRate, gsm.timingAdvance); - - if (mRssi == CellInfo.UNAVAILABLE) { - setDefaultValues(); - } - } - - /** @hide */ public CellSignalStrengthGsm(CellSignalStrengthGsm s) { copyFrom(s); } diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java index 9211482fc067..e8633dd4b7bd 100644 --- a/telephony/java/android/telephony/CellSignalStrengthLte.java +++ b/telephony/java/android/telephony/CellSignalStrengthLte.java @@ -166,25 +166,6 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P } /** @hide */ - public CellSignalStrengthLte(android.hardware.radio.V1_0.LteSignalStrength lte) { - // Convert from HAL values as part of construction. - this(convertRssiAsuToDBm(lte.signalStrength), - lte.rsrp != CellInfo.UNAVAILABLE ? -lte.rsrp : lte.rsrp, - lte.rsrq != CellInfo.UNAVAILABLE ? -lte.rsrq : lte.rsrq, - convertRssnrUnitFromTenDbToDB(lte.rssnr), lte.cqi, lte.timingAdvance); - } - - /** @hide */ - public CellSignalStrengthLte(android.hardware.radio.V1_6.LteSignalStrength lte) { - // Convert from HAL values as part of construction. - this(convertRssiAsuToDBm(lte.base.signalStrength), - lte.base.rsrp != CellInfo.UNAVAILABLE ? -lte.base.rsrp : lte.base.rsrp, - lte.base.rsrq != CellInfo.UNAVAILABLE ? -lte.base.rsrq : lte.base.rsrq, - convertRssnrUnitFromTenDbToDB(lte.base.rssnr), lte.cqiTableIndex, lte.base.cqi, - lte.base.timingAdvance); - } - - /** @hide */ public CellSignalStrengthLte(CellSignalStrengthLte s) { copyFrom(s); } @@ -617,11 +598,13 @@ public final class CellSignalStrengthLte extends CellSignalStrength implements P Rlog.w(LOG_TAG, s); } - private static int convertRssnrUnitFromTenDbToDB(int rssnr) { + /** @hide */ + public static int convertRssnrUnitFromTenDbToDB(int rssnr) { return rssnr / 10; } - private static int convertRssiAsuToDBm(int rssiAsu) { + /** @hide */ + public static int convertRssiAsuToDBm(int rssiAsu) { if (rssiAsu == SIGNAL_STRENGTH_LTE_RSSI_ASU_UNKNOWN) { return CellInfo.UNAVAILABLE; } diff --git a/telephony/java/android/telephony/CellSignalStrengthNr.java b/telephony/java/android/telephony/CellSignalStrengthNr.java index 6ada32e1a86d..cd22abddd3a7 100644 --- a/telephony/java/android/telephony/CellSignalStrengthNr.java +++ b/telephony/java/android/telephony/CellSignalStrengthNr.java @@ -202,29 +202,12 @@ public final class CellSignalStrengthNr extends CellSignalStrength implements Pa } /** - * @hide - * @param ss signal strength from modem. - */ - public CellSignalStrengthNr(android.hardware.radio.V1_4.NrSignalStrength ss) { - this(flip(ss.csiRsrp), flip(ss.csiRsrq), ss.csiSinr, flip(ss.ssRsrp), flip(ss.ssRsrq), - ss.ssSinr); - } - - /** - * @hide - * @param ss signal strength from modem. - */ - public CellSignalStrengthNr(android.hardware.radio.V1_6.NrSignalStrength ss) { - this(flip(ss.base.csiRsrp), flip(ss.base.csiRsrq), ss.base.csiSinr, ss.csiCqiTableIndex, - ss.csiCqiReport, flip(ss.base.ssRsrp), flip(ss.base.ssRsrq), ss.base.ssSinr); - } - - /** * Flip sign cell strength value when taking in the value from hal * @param val cell strength value * @return flipped value + * @hide */ - private static int flip(int val) { + public static int flip(int val) { return val != CellInfo.UNAVAILABLE ? -val : val; } diff --git a/telephony/java/android/telephony/CellSignalStrengthTdscdma.java b/telephony/java/android/telephony/CellSignalStrengthTdscdma.java index e96f200280b6..8a7c70ec5ea9 100644 --- a/telephony/java/android/telephony/CellSignalStrengthTdscdma.java +++ b/telephony/java/android/telephony/CellSignalStrengthTdscdma.java @@ -75,28 +75,6 @@ public final class CellSignalStrengthTdscdma extends CellSignalStrength implemen } /** @hide */ - public CellSignalStrengthTdscdma(android.hardware.radio.V1_0.TdScdmaSignalStrength tdscdma) { - // Convert from HAL values as part of construction. - this(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, - tdscdma.rscp != CellInfo.UNAVAILABLE ? -tdscdma.rscp : tdscdma.rscp); - - if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) { - setDefaultValues(); - } - } - - /** @hide */ - public CellSignalStrengthTdscdma(android.hardware.radio.V1_2.TdscdmaSignalStrength tdscdma) { - // Convert from HAL values as part of construction. - this(getRssiDbmFromAsu(tdscdma.signalStrength), - tdscdma.bitErrorRate, getRscpDbmFromAsu(tdscdma.rscp)); - - if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) { - setDefaultValues(); - } - } - - /** @hide */ public CellSignalStrengthTdscdma(CellSignalStrengthTdscdma s) { copyFrom(s); } diff --git a/telephony/java/android/telephony/CellSignalStrengthWcdma.java b/telephony/java/android/telephony/CellSignalStrengthWcdma.java index 8b14b7490679..f30440d95158 100644 --- a/telephony/java/android/telephony/CellSignalStrengthWcdma.java +++ b/telephony/java/android/telephony/CellSignalStrengthWcdma.java @@ -95,30 +95,6 @@ public final class CellSignalStrengthWcdma extends CellSignalStrength implements } /** @hide */ - public CellSignalStrengthWcdma(android.hardware.radio.V1_0.WcdmaSignalStrength wcdma) { - // Convert from HAL values as part of construction. - this(getRssiDbmFromAsu(wcdma.signalStrength), wcdma.bitErrorRate, - CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE); - - if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) { - setDefaultValues(); - } - } - - /** @hide */ - public CellSignalStrengthWcdma(android.hardware.radio.V1_2.WcdmaSignalStrength wcdma) { - // Convert from HAL values as part of construction. - this(getRssiDbmFromAsu(wcdma.base.signalStrength), - wcdma.base.bitErrorRate, - getRscpDbmFromAsu(wcdma.rscp), - getEcNoDbFromAsu(wcdma.ecno)); - - if (mRssi == CellInfo.UNAVAILABLE && mRscp == CellInfo.UNAVAILABLE) { - setDefaultValues(); - } - } - - /** @hide */ public CellSignalStrengthWcdma(CellSignalStrengthWcdma s) { copyFrom(s); } diff --git a/telephony/java/android/telephony/ClosedSubscriberGroupInfo.java b/telephony/java/android/telephony/ClosedSubscriberGroupInfo.java index e9262725d232..bf418ab38648 100644 --- a/telephony/java/android/telephony/ClosedSubscriberGroupInfo.java +++ b/telephony/java/android/telephony/ClosedSubscriberGroupInfo.java @@ -44,12 +44,6 @@ public final class ClosedSubscriberGroupInfo implements Parcelable { mCsgIdentity = csgIdentity; } - /** @hide */ - public ClosedSubscriberGroupInfo( - @NonNull android.hardware.radio.V1_5.ClosedSubscriberGroupInfo csgInfo) { - this(csgInfo.csgIndication, csgInfo.homeNodebName, csgInfo.csgIdentity); - } - /** * Indicates whether the cell is restricted to only CSG members. * diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index b317c5557108..b7bc46736e18 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -144,64 +144,6 @@ public class SignalStrength implements Parcelable { mTimestampMillis = SystemClock.elapsedRealtime(); } - /** - * Constructor for Radio HAL V1.0 - * - * @hide - */ - public SignalStrength(android.hardware.radio.V1_0.SignalStrength signalStrength) { - this(new CellSignalStrengthCdma(signalStrength.cdma, signalStrength.evdo), - new CellSignalStrengthGsm(signalStrength.gw), - new CellSignalStrengthWcdma(), - new CellSignalStrengthTdscdma(signalStrength.tdScdma), - new CellSignalStrengthLte(signalStrength.lte), - new CellSignalStrengthNr()); - } - - /** - * Constructor for Radio HAL V1.2 - * - * @hide - */ - public SignalStrength(android.hardware.radio.V1_2.SignalStrength signalStrength) { - this(new CellSignalStrengthCdma(signalStrength.cdma, signalStrength.evdo), - new CellSignalStrengthGsm(signalStrength.gsm), - new CellSignalStrengthWcdma(signalStrength.wcdma), - new CellSignalStrengthTdscdma(signalStrength.tdScdma), - new CellSignalStrengthLte(signalStrength.lte), - new CellSignalStrengthNr()); - } - - /** - * Constructor for Radio HAL V1.4. - * - * @param signalStrength signal strength reported from modem. - * @hide - */ - public SignalStrength(android.hardware.radio.V1_4.SignalStrength signalStrength) { - this(new CellSignalStrengthCdma(signalStrength.cdma, signalStrength.evdo), - new CellSignalStrengthGsm(signalStrength.gsm), - new CellSignalStrengthWcdma(signalStrength.wcdma), - new CellSignalStrengthTdscdma(signalStrength.tdscdma), - new CellSignalStrengthLte(signalStrength.lte), - new CellSignalStrengthNr(signalStrength.nr)); - } - - /** - * Constructor for Radio HAL V1.6. - * - * @param signalStrength signal strength reported from modem. - * @hide - */ - public SignalStrength(android.hardware.radio.V1_6.SignalStrength signalStrength) { - this(new CellSignalStrengthCdma(signalStrength.cdma, signalStrength.evdo), - new CellSignalStrengthGsm(signalStrength.gsm), - new CellSignalStrengthWcdma(signalStrength.wcdma), - new CellSignalStrengthTdscdma(signalStrength.tdscdma), - new CellSignalStrengthLte(signalStrength.lte), - new CellSignalStrengthNr(signalStrength.nr)); - } - private CellSignalStrength getPrimary() { // This behavior is intended to replicate the legacy behavior of getLevel() by prioritizing // newer faster RATs for default/for display purposes. diff --git a/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java b/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java index 7cda977d2115..5d639f6f6266 100644 --- a/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java +++ b/tests/notification/src/com/android/frameworks/tests/notification/NotificationTests.java @@ -409,10 +409,10 @@ public class NotificationTests extends AndroidTestCase { sleepIfYouCan(500); L("Parceling notifications..."); - // we want to be able to use this test on older OSes that do not have getBlobAshmemSize - Method getBlobAshmemSize = null; + // we want to be able to use this test on older OSes that do not have getOpenAshmemSize + Method getOpenAshmemSize = null; try { - getBlobAshmemSize = Parcel.class.getMethod("getBlobAshmemSize"); + getOpenAshmemSize = Parcel.class.getMethod("getOpenAshmemSize"); } catch (NoSuchMethodException ex) { } for (int i=0; i<mNotifications.size(); i++) { @@ -424,8 +424,8 @@ public class NotificationTests extends AndroidTestCase { time = SystemClock.currentThreadTimeMillis() - time; L(" %s: write parcel=%dms size=%d ashmem=%s", summarize(n), time, p.dataPosition(), - (getBlobAshmemSize != null) - ? getBlobAshmemSize.invoke(p) + (getOpenAshmemSize != null) + ? getOpenAshmemSize.invoke(p) : "???"); p.setDataPosition(0); } |