diff options
24 files changed, 486 insertions, 531 deletions
diff --git a/api/current.txt b/api/current.txt index ebeadddb49e0..9a56a299aaa2 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5094,7 +5094,7 @@ package android.app { ctor public Notification(android.os.Parcel); method public android.app.Notification clone(); method public int describeContents(); - method public int getBadgeIcon(); + method public int getBadgeIconType(); method public java.lang.String getChannel(); method public java.lang.String getGroup(); method public android.graphics.drawable.Icon getLargeIcon(); @@ -5138,7 +5138,7 @@ package android.app { field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_HISTORIC_MESSAGES = "android.messages.historic"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; - field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; + field public static final deprecated java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession"; field public static final java.lang.String EXTRA_MESSAGES = "android.messages"; @@ -5151,7 +5151,7 @@ package android.app { field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName"; field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen"; - field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon"; + field public static final deprecated java.lang.String EXTRA_SMALL_ICON = "android.icon"; field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText"; field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText"; field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; @@ -5287,7 +5287,7 @@ package android.app { method public android.app.Notification.Builder addExtras(android.os.Bundle); method public android.app.Notification.Builder addPerson(java.lang.String); method public android.app.Notification build(); - method public android.app.Notification.Builder chooseBadgeIcon(int); + method public android.app.Notification.Builder chooseBadgeIconType(int); method public android.widget.RemoteViews createBigContentView(); method public android.widget.RemoteViews createContentView(); method public android.widget.RemoteViews createHeadsUpContentView(); @@ -7520,9 +7520,7 @@ package android.bluetooth { public final class BluetoothDevice implements android.os.Parcelable { method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback); method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int, int); + method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int); method public boolean createBond(); method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; @@ -7618,12 +7616,8 @@ package android.bluetooth { field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3 } - public abstract deprecated class BluetoothGattCallback extends android.bluetooth.BluetoothGattCallbackExt { + public abstract class BluetoothGattCallback { ctor public BluetoothGattCallback(); - } - - public abstract class BluetoothGattCallbackExt { - ctor public BluetoothGattCallbackExt(); method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); @@ -7732,12 +7726,8 @@ package android.bluetooth { method public void setPreferredPhy(android.bluetooth.BluetoothDevice, int, int, int); } - public abstract deprecated class BluetoothGattServerCallback extends android.bluetooth.BluetoothGattServerCallbackExt { + public abstract class BluetoothGattServerCallback { ctor public BluetoothGattServerCallback(); - } - - public abstract class BluetoothGattServerCallbackExt { - ctor public BluetoothGattServerCallbackExt(); method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]); method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int); diff --git a/api/removed.txt b/api/removed.txt index 04c9c35428b3..6feafacb4944 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -1,9 +1,14 @@ package android.app { public class Notification implements android.os.Parcelable { + method public deprecated int getBadgeIcon(); method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent); } + public static class Notification.Builder { + method public deprecated android.app.Notification.Builder chooseBadgeIcon(int); + } + public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable { method public deprecated void showAsNotification(android.content.Context); } diff --git a/api/system-current.txt b/api/system-current.txt index f520420eafa4..d160c5e7c9d3 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5264,7 +5264,7 @@ package android.app { ctor public Notification(android.os.Parcel); method public android.app.Notification clone(); method public int describeContents(); - method public int getBadgeIcon(); + method public int getBadgeIconType(); method public java.lang.String getChannel(); method public java.lang.String getGroup(); method public android.graphics.drawable.Icon getLargeIcon(); @@ -5309,7 +5309,7 @@ package android.app { field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_HISTORIC_MESSAGES = "android.messages.historic"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; - field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; + field public static final deprecated java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession"; field public static final java.lang.String EXTRA_MESSAGES = "android.messages"; @@ -5322,7 +5322,7 @@ package android.app { field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName"; field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen"; - field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon"; + field public static final deprecated java.lang.String EXTRA_SMALL_ICON = "android.icon"; field public static final java.lang.String EXTRA_SUBSTITUTE_APP_NAME = "android.substName"; field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText"; field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText"; @@ -5460,7 +5460,7 @@ package android.app { method public android.app.Notification.Builder addExtras(android.os.Bundle); method public android.app.Notification.Builder addPerson(java.lang.String); method public android.app.Notification build(); - method public android.app.Notification.Builder chooseBadgeIcon(int); + method public android.app.Notification.Builder chooseBadgeIconType(int); method public android.widget.RemoteViews createBigContentView(); method public android.widget.RemoteViews createContentView(); method public android.widget.RemoteViews createHeadsUpContentView(); @@ -7982,9 +7982,7 @@ package android.bluetooth { public final class BluetoothDevice implements android.os.Parcelable { method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback); method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int, int); + method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int); method public boolean createBond(); method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; @@ -8082,12 +8080,8 @@ package android.bluetooth { field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3 } - public abstract deprecated class BluetoothGattCallback extends android.bluetooth.BluetoothGattCallbackExt { + public abstract class BluetoothGattCallback { ctor public BluetoothGattCallback(); - } - - public abstract class BluetoothGattCallbackExt { - ctor public BluetoothGattCallbackExt(); method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); @@ -8196,12 +8190,8 @@ package android.bluetooth { method public void setPreferredPhy(android.bluetooth.BluetoothDevice, int, int, int); } - public abstract deprecated class BluetoothGattServerCallback extends android.bluetooth.BluetoothGattServerCallbackExt { + public abstract class BluetoothGattServerCallback { ctor public BluetoothGattServerCallback(); - } - - public abstract class BluetoothGattServerCallbackExt { - ctor public BluetoothGattServerCallbackExt(); method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]); method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int); diff --git a/api/system-removed.txt b/api/system-removed.txt index 640dc81877a1..294751a94f23 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -1,9 +1,14 @@ package android.app { public class Notification implements android.os.Parcelable { + method public deprecated int getBadgeIcon(); method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent); } + public static class Notification.Builder { + method public deprecated android.app.Notification.Builder chooseBadgeIcon(int); + } + public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable { method public deprecated void showAsNotification(android.content.Context); } diff --git a/api/test-current.txt b/api/test-current.txt index 01428293b080..d42d4f1fd30b 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5104,7 +5104,7 @@ package android.app { ctor public Notification(android.os.Parcel); method public android.app.Notification clone(); method public int describeContents(); - method public int getBadgeIcon(); + method public int getBadgeIconType(); method public java.lang.String getChannel(); method public java.lang.String getGroup(); method public android.graphics.drawable.Icon getLargeIcon(); @@ -5148,7 +5148,7 @@ package android.app { field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle"; field public static final java.lang.String EXTRA_HISTORIC_MESSAGES = "android.messages.historic"; field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText"; - field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; + field public static final deprecated java.lang.String EXTRA_LARGE_ICON = "android.largeIcon"; field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big"; field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession"; field public static final java.lang.String EXTRA_MESSAGES = "android.messages"; @@ -5161,7 +5161,7 @@ package android.app { field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName"; field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen"; - field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon"; + field public static final deprecated java.lang.String EXTRA_SMALL_ICON = "android.icon"; field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText"; field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText"; field public static final java.lang.String EXTRA_TEMPLATE = "android.template"; @@ -5297,7 +5297,7 @@ package android.app { method public android.app.Notification.Builder addExtras(android.os.Bundle); method public android.app.Notification.Builder addPerson(java.lang.String); method public android.app.Notification build(); - method public android.app.Notification.Builder chooseBadgeIcon(int); + method public android.app.Notification.Builder chooseBadgeIconType(int); method public android.widget.RemoteViews createBigContentView(); method public android.widget.RemoteViews createContentView(); method public android.widget.RemoteViews createHeadsUpContentView(); @@ -7547,9 +7547,7 @@ package android.bluetooth { public final class BluetoothDevice implements android.os.Parcelable { method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback); method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int); - method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallbackExt, int, int); + method public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int); method public boolean createBond(); method public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; method public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException; @@ -7645,12 +7643,8 @@ package android.bluetooth { field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3 } - public abstract deprecated class BluetoothGattCallback extends android.bluetooth.BluetoothGattCallbackExt { + public abstract class BluetoothGattCallback { ctor public BluetoothGattCallback(); - } - - public abstract class BluetoothGattCallbackExt { - ctor public BluetoothGattCallbackExt(); method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int); @@ -7759,12 +7753,8 @@ package android.bluetooth { method public void setPreferredPhy(android.bluetooth.BluetoothDevice, int, int, int); } - public abstract deprecated class BluetoothGattServerCallback extends android.bluetooth.BluetoothGattServerCallbackExt { + public abstract class BluetoothGattServerCallback { ctor public BluetoothGattServerCallback(); - } - - public abstract class BluetoothGattServerCallbackExt { - ctor public BluetoothGattServerCallbackExt(); method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic); method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]); method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int); diff --git a/api/test-removed.txt b/api/test-removed.txt index 04c9c35428b3..6feafacb4944 100644 --- a/api/test-removed.txt +++ b/api/test-removed.txt @@ -1,9 +1,14 @@ package android.app { public class Notification implements android.os.Parcelable { + method public deprecated int getBadgeIcon(); method public deprecated void setLatestEventInfo(android.content.Context, java.lang.CharSequence, java.lang.CharSequence, android.app.PendingIntent); } + public static class Notification.Builder { + method public deprecated android.app.Notification.Builder chooseBadgeIcon(int); + } + public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable { method public deprecated void showAsNotification(android.content.Context); } diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 8d769305e9e3..c78b3cde6fbe 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -880,14 +880,20 @@ public class Notification implements Parcelable /** * {@link #extras} key: this is the resource ID of the notification's main small icon, as * supplied to {@link Builder#setSmallIcon(int)}. + * + * @deprecated Use {@link #getSmallIcon()}, which supports a wider variety of icon sources. */ + @Deprecated public static final String EXTRA_SMALL_ICON = "android.icon"; /** * {@link #extras} key: this is a bitmap to be used instead of the small icon when showing the * notification payload, as * supplied to {@link Builder#setLargeIcon(android.graphics.Bitmap)}. + * + * @deprecated Use {@link #getLargeIcon()}, which supports a wider variety of icon sources. */ + @Deprecated public static final String EXTRA_LARGE_ICON = "android.largeIcon"; /** @@ -1029,13 +1035,6 @@ public class Notification implements Parcelable public static final String EXTRA_COLORIZED = "android.colorized"; /** - * {@link #extras} key: the user that built the notification. - * - * @hide - */ - public static final String EXTRA_ORIGINATING_USERID = "android.originatingUserId"; - - /** * @hide */ public static final String EXTRA_BUILDER_APPLICATION_INFO = "android.appInfo"; @@ -2298,16 +2297,14 @@ public class Notification implements Parcelable * @hide */ public static void addFieldsFromContext(Context context, Notification notification) { - addFieldsFromContext(context.getApplicationInfo(), context.getUserId(), notification); + addFieldsFromContext(context.getApplicationInfo(), notification); } /** * @hide */ - public static void addFieldsFromContext(ApplicationInfo ai, int userId, - Notification notification) { + public static void addFieldsFromContext(ApplicationInfo ai, Notification notification) { notification.extras.putParcelable(EXTRA_BUILDER_APPLICATION_INFO, ai); - notification.extras.putInt(EXTRA_ORIGINATING_USERID, userId); } @Override @@ -2434,15 +2431,26 @@ public class Notification implements Parcelable } /** + * @removed * Returns what icon should be shown for this notification if it is being displayed in a * Launcher that supports badging. Will be one of {@link #BADGE_ICON_NONE}, * {@link #BADGE_ICON_SMALL}, or {@link #BADGE_ICON_LARGE}. */ + @Deprecated public int getBadgeIcon() { return mBadgeIcon; } /** + * Returns what icon should be shown for this notification if it is being displayed in a + * Launcher that supports badging. Will be one of {@link #BADGE_ICON_NONE}, + * {@link #BADGE_ICON_SMALL}, or {@link #BADGE_ICON_LARGE}. + */ + public int getBadgeIconType() { + return mBadgeIcon; + } + + /** * Returns the {@link ShortcutInfo#getId() id} that this notification supersedes, if any. */ public String getShortcutId() { @@ -2684,6 +2692,7 @@ public class Notification implements Parcelable } /** + * @removed * Sets which icon to display as a badge for this notification. * * Must be one of {@link #BADGE_ICON_NONE}, {@link #BADGE_ICON_SMALL}, @@ -2691,12 +2700,26 @@ public class Notification implements Parcelable * * Note: This value might be ignored, for launchers that don't support badge icons. */ + @Deprecated public Builder chooseBadgeIcon(int icon) { mN.mBadgeIcon = icon; return this; } /** + * Sets which icon to display as a badge for this notification. + * + * Must be one of {@link #BADGE_ICON_NONE}, {@link #BADGE_ICON_SMALL}, + * {@link #BADGE_ICON_LARGE}. + * + * Note: This value might be ignored, for launchers that don't support badge icons. + */ + public Builder chooseBadgeIconType(int icon) { + mN.mBadgeIcon = icon; + return this; + } + + /** * Specifies the channel the notification should be delivered on. */ public Builder setChannel(String channelId) { @@ -3272,7 +3295,9 @@ public class Notification implements Parcelable * * <P> * Depending on user preferences, this annotation may allow the notification to pass - * through interruption filters, and to appear more prominently in the user interface. + * through interruption filters, if this notification is of category {@link #CATEGORY_CALL} + * or {@link #CATEGORY_MESSAGE}. The addition of people may also cause this notification to + * appear more prominently in the user interface. * </P> * * <P> diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 31fc294e3181..cb6fa052ddac 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1664,43 +1664,6 @@ public final class BluetoothDevice implements Parcelable { * @param autoConnect Whether to directly connect to the remote device (false) * or to automatically connect as soon as the remote * device becomes available (true). - * @throws IllegalArgumentException if callback is null - */ - public BluetoothGatt connectGatt(Context context, boolean autoConnect, - BluetoothGattCallbackExt callback) { - return (connectGatt(context, autoConnect,callback, TRANSPORT_AUTO)); - } - - /** - * Connect to GATT Server hosted by this device. Caller acts as GATT client. - * The callback is used to deliver results to Caller, such as connection status as well - * as any further GATT client operations. - * The method returns a BluetoothGatt instance. You can use BluetoothGatt to conduct - * GATT client operations. - * @param callback GATT callback handler that will receive asynchronous callbacks. - * @param autoConnect Whether to directly connect to the remote device (false) - * or to automatically connect as soon as the remote - * device becomes available (true). - * @param transport preferred transport for GATT connections to remote dual-mode devices - * {@link BluetoothDevice#TRANSPORT_AUTO} or - * {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE} - * @throws IllegalArgumentException if callback is null - */ - public BluetoothGatt connectGatt(Context context, boolean autoConnect, - BluetoothGattCallbackExt callback, int transport) { - return (connectGatt(context, autoConnect,callback, TRANSPORT_AUTO, PHY_LE_1M)); - } - - /** - * Connect to GATT Server hosted by this device. Caller acts as GATT client. - * The callback is used to deliver results to Caller, such as connection status as well - * as any further GATT client operations. - * The method returns a BluetoothGatt instance. You can use BluetoothGatt to conduct - * GATT client operations. - * @param callback GATT callback handler that will receive asynchronous callbacks. - * @param autoConnect Whether to directly connect to the remote device (false) - * or to automatically connect as soon as the remote - * device becomes available (true). * @param transport preferred transport for GATT connections to remote dual-mode devices * {@link BluetoothDevice#TRANSPORT_AUTO} or * {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE} @@ -1711,7 +1674,7 @@ public final class BluetoothDevice implements Parcelable { * @throws IllegalArgumentException if callback is null */ public BluetoothGatt connectGatt(Context context, boolean autoConnect, - BluetoothGattCallbackExt callback, int transport, int phy) { + BluetoothGattCallback callback, int transport, int phy) { // TODO(Bluetooth) check whether platform support BLE // Do the check here or in GattServer? BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java index 11dbf70e1f30..6b3ef4a05895 100644 --- a/core/java/android/bluetooth/BluetoothGatt.java +++ b/core/java/android/bluetooth/BluetoothGatt.java @@ -31,7 +31,7 @@ import java.util.UUID; * <p>This class provides Bluetooth GATT functionality to enable communication * with Bluetooth Smart or Smart Ready devices. * - * <p>To connect to a remote peripheral device, create a {@link BluetoothGattCallbackExt} + * <p>To connect to a remote peripheral device, create a {@link BluetoothGattCallback} * and call {@link BluetoothDevice#connectGatt} to get a instance of this class. * GATT capable devices can be discovered using the Bluetooth device discovery or BLE * scan process. @@ -42,7 +42,7 @@ public final class BluetoothGatt implements BluetoothProfile { private static final boolean VDBG = false; private IBluetoothGatt mService; - private BluetoothGattCallbackExt mCallback; + private BluetoothGattCallback mCallback; private int mClientIf; private BluetoothDevice mDevice; private boolean mAutoConnect; @@ -133,9 +133,9 @@ public final class BluetoothGatt implements BluetoothProfile { /*package*/ static final int AUTHENTICATION_MITM = 2; /** - * Bluetooth GATT callbacks. Overrides the default BluetoothGattCallbackExt implementation. + * Bluetooth GATT callbacks. Overrides the default BluetoothGattCallback implementation. */ - private final IBluetoothGattCallbackExt mBluetoothGattCallbackExt = + private final IBluetoothGattCallbackExt mBluetoothGattCallback = new IBluetoothGattCallbackExt.Stub() { /** * Application interface registered - app is ready to go @@ -618,7 +618,7 @@ public final class BluetoothGatt implements BluetoothProfile { /** * Register an application callback to start using GATT. * - * <p>This is an asynchronous call. The callback {@link BluetoothGattCallbackExt#onAppRegistered} + * <p>This is an asynchronous call. The callback {@link BluetoothGattCallback#onAppRegistered} * is used to notify success or failure if the function returns true. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -627,7 +627,7 @@ public final class BluetoothGatt implements BluetoothProfile { * @return If true, the callback will be called to notify success or failure, * false on immediate error */ - private boolean registerApp(BluetoothGattCallbackExt callback) { + private boolean registerApp(BluetoothGattCallback callback) { if (DBG) Log.d(TAG, "registerApp()"); if (mService == null) return false; @@ -636,7 +636,7 @@ public final class BluetoothGatt implements BluetoothProfile { if (DBG) Log.d(TAG, "registerApp() - UUID=" + uuid); try { - mService.registerClient(new ParcelUuid(uuid), mBluetoothGattCallbackExt); + mService.registerClient(new ParcelUuid(uuid), mBluetoothGattCallback); } catch (RemoteException e) { Log.e(TAG,"",e); return false; @@ -666,7 +666,7 @@ public final class BluetoothGatt implements BluetoothProfile { * * <p>The connection may not be established right away, but will be * completed when the remote device is available. A - * {@link BluetoothGattCallbackExt#onConnectionStateChange} callback will be + * {@link BluetoothGattCallback#onConnectionStateChange} callback will be * invoked when the connection state changes as a result of this function. * * <p>The autoConnect parameter determines whether to actively connect to @@ -684,7 +684,7 @@ public final class BluetoothGatt implements BluetoothProfile { * device becomes available (true). * @return true, if the connection attempt was initiated successfully */ - /*package*/ boolean connect(Boolean autoConnect, BluetoothGattCallbackExt callback) { + /*package*/ boolean connect(Boolean autoConnect, BluetoothGattCallback callback) { if (DBG) Log.d(TAG, "connect() - device: " + mDevice.getAddress() + ", auto: " + autoConnect); synchronized(mStateLock) { if (mConnState != CONN_STATE_IDLE) { @@ -749,7 +749,7 @@ public final class BluetoothGatt implements BluetoothProfile { * recommendation, wether the PHY change will happen depends on other applications peferences, * local and remote controller capabilities. Controller can override these settings. * <p> - * {@link BluetoothGattCallbackExt#onPhyUpdate} will be triggered as a result of this call, even + * {@link BluetoothGattCallback#onPhyUpdate} will be triggered as a result of this call, even * if no PHY change happens. It is also triggered when remote device updates the PHY. * * @param txPhy preferred transmitter PHY. Bitwise OR of any of @@ -773,7 +773,7 @@ public final class BluetoothGatt implements BluetoothProfile { /** * Read the current transmitter PHY and receiver PHY of the connection. The values are returned - * in {@link BluetoothGattCallbackExt#onPhyRead} + * in {@link BluetoothGattCallback#onPhyRead} */ public void readPhy() { try { @@ -797,7 +797,7 @@ public final class BluetoothGatt implements BluetoothProfile { * characteristics and descriptors. * * <p>This is an asynchronous operation. Once service discovery is completed, - * the {@link BluetoothGattCallbackExt#onServicesDiscovered} callback is + * the {@link BluetoothGattCallback#onServicesDiscovered} callback is * triggered. If the discovery was successful, the remote services can be * retrieved using the {@link #getServices} function. * @@ -876,7 +876,7 @@ public final class BluetoothGatt implements BluetoothProfile { * Reads the requested characteristic from the associated remote device. * * <p>This is an asynchronous operation. The result of the read operation - * is reported by the {@link BluetoothGattCallbackExt#onCharacteristicRead} + * is reported by the {@link BluetoothGattCallback#onCharacteristicRead} * callback. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -918,7 +918,7 @@ public final class BluetoothGatt implements BluetoothProfile { * Writes a given characteristic and its values to the associated remote device. * * <p>Once the write operation has been completed, the - * {@link BluetoothGattCallbackExt#onCharacteristicWrite} callback is invoked, + * {@link BluetoothGattCallback#onCharacteristicWrite} callback is invoked, * reporting the result of the operation. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -962,7 +962,7 @@ public final class BluetoothGatt implements BluetoothProfile { * Reads the value for a given descriptor from the associated remote device. * * <p>Once the read operation has been completed, the - * {@link BluetoothGattCallbackExt#onDescriptorRead} callback is + * {@link BluetoothGattCallback#onDescriptorRead} callback is * triggered, signaling the result of the operation. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -1003,7 +1003,7 @@ public final class BluetoothGatt implements BluetoothProfile { /** * Write the value of a given descriptor to the associated remote device. * - * <p>A {@link BluetoothGattCallbackExt#onDescriptorWrite} callback is + * <p>A {@link BluetoothGattCallback#onDescriptorWrite} callback is * triggered to report the result of the write operation. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -1047,7 +1047,7 @@ public final class BluetoothGatt implements BluetoothProfile { * <p>Once a reliable write transaction has been initiated, all calls * to {@link #writeCharacteristic} are sent to the remote device for * verification and queued up for atomic execution. The application will - * receive an {@link BluetoothGattCallbackExt#onCharacteristicWrite} callback + * receive an {@link BluetoothGattCallback#onCharacteristicWrite} callback * in response to every {@link #writeCharacteristic} call and is responsible * for verifying if the value has been transmitted accurately. * @@ -1081,7 +1081,7 @@ public final class BluetoothGatt implements BluetoothProfile { * <p>This function will commit all queued up characteristic write * operations for a given remote device. * - * <p>A {@link BluetoothGattCallbackExt#onReliableWriteCompleted} callback is + * <p>A {@link BluetoothGattCallback#onReliableWriteCompleted} callback is * invoked to indicate whether the transaction has been executed correctly. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -1139,7 +1139,7 @@ public final class BluetoothGatt implements BluetoothProfile { * Enable or disable notifications/indications for a given characteristic. * * <p>Once notifications are enabled for a characteristic, a - * {@link BluetoothGattCallbackExt#onCharacteristicChanged} callback will be + * {@link BluetoothGattCallback#onCharacteristicChanged} callback will be * triggered if the remote device indicates that the given characteristic * has changed. * @@ -1194,7 +1194,7 @@ public final class BluetoothGatt implements BluetoothProfile { /** * Read the RSSI for a connected remote device. * - * <p>The {@link BluetoothGattCallbackExt#onReadRemoteRssi} callback will be + * <p>The {@link BluetoothGattCallback#onReadRemoteRssi} callback will be * invoked when the RSSI value has been read. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. @@ -1222,7 +1222,7 @@ public final class BluetoothGatt implements BluetoothProfile { * the data sent is truncated to the MTU size. This function may be used * to request a larger MTU size to be able to send more data at once. * - * <p>A {@link BluetoothGattCallbackExt#onMtuChanged} callback will indicate + * <p>A {@link BluetoothGattCallback#onMtuChanged} callback will indicate * whether this operation was successful. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. diff --git a/core/java/android/bluetooth/BluetoothGattCallback.java b/core/java/android/bluetooth/BluetoothGattCallback.java index 4da106df610c..be69df928e17 100644 --- a/core/java/android/bluetooth/BluetoothGattCallback.java +++ b/core/java/android/bluetooth/BluetoothGattCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Android Open Source Project + * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,22 +18,165 @@ package android.bluetooth; /** * This abstract class is used to implement {@link BluetoothGatt} callbacks. - * @deprecated use {@link BluetoothGattCallbackExt} */ -public abstract class BluetoothGattCallback extends BluetoothGattCallbackExt { +public abstract class BluetoothGattCallback{ /** - * @hide + * Callback triggered as result of {@link BluetoothGatt#setPreferredPhy}, or as a result of + * remote device changing the PHY. + * + * @param gatt GATT client + * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. + * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. + * @param status status of the operation */ - @Override public void onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) { } /** - * @hide + * Callback triggered as result of {@link BluetoothGatt#readPhy} + * + * @param gatt GATT client + * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. + * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. + * @param status status of the operation */ - @Override public void onPhyRead(BluetoothGatt gatt, int txPhy, int rxPhy, int status) { } + /** + * Callback indicating when GATT client has connected/disconnected to/from a remote + * GATT server. + * + * @param gatt GATT client + * @param status Status of the connect or disconnect operation. + * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. + * @param newState Returns the new connection state. Can be one of + * {@link BluetoothProfile#STATE_DISCONNECTED} or + * {@link BluetoothProfile#STATE_CONNECTED} + */ + public void onConnectionStateChange(BluetoothGatt gatt, int status, + int newState) { + } + + /** + * Callback invoked when the list of remote services, characteristics and descriptors + * for the remote device have been updated, ie new services have been discovered. + * + * @param gatt GATT client invoked {@link BluetoothGatt#discoverServices} + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the remote device + * has been explored successfully. + */ + public void onServicesDiscovered(BluetoothGatt gatt, int status) { + } + + /** + * Callback reporting the result of a characteristic read operation. + * + * @param gatt GATT client invoked {@link BluetoothGatt#readCharacteristic} + * @param characteristic Characteristic that was read from the associated + * remote device. + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the read operation + * was completed successfully. + */ + public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, + int status) { + } + + /** + * Callback indicating the result of a characteristic write operation. + * + * <p>If this callback is invoked while a reliable write transaction is + * in progress, the value of the characteristic represents the value + * reported by the remote device. An application should compare this + * value to the desired value to be written. If the values don't match, + * the application must abort the reliable write transaction. + * + * @param gatt GATT client invoked {@link BluetoothGatt#writeCharacteristic} + * @param characteristic Characteristic that was written to the associated + * remote device. + * @param status The result of the write operation + * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. + */ + public void onCharacteristicWrite(BluetoothGatt gatt, + BluetoothGattCharacteristic characteristic, int status) { + } + + /** + * Callback triggered as a result of a remote characteristic notification. + * + * @param gatt GATT client the characteristic is associated with + * @param characteristic Characteristic that has been updated as a result + * of a remote notification event. + */ + public void onCharacteristicChanged(BluetoothGatt gatt, + BluetoothGattCharacteristic characteristic) { + } + + /** + * Callback reporting the result of a descriptor read operation. + * + * @param gatt GATT client invoked {@link BluetoothGatt#readDescriptor} + * @param descriptor Descriptor that was read from the associated + * remote device. + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the read operation + * was completed successfully + */ + public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, + int status) { + } + + /** + * Callback indicating the result of a descriptor write operation. + * + * @param gatt GATT client invoked {@link BluetoothGatt#writeDescriptor} + * @param descriptor Descriptor that was writte to the associated + * remote device. + * @param status The result of the write operation + * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. + */ + public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, + int status) { + } + + /** + * Callback invoked when a reliable write transaction has been completed. + * + * @param gatt GATT client invoked {@link BluetoothGatt#executeReliableWrite} + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the reliable write + * transaction was executed successfully + */ + public void onReliableWriteCompleted(BluetoothGatt gatt, int status) { + } + + /** + * Callback reporting the RSSI for a remote device connection. + * + * This callback is triggered in response to the + * {@link BluetoothGatt#readRemoteRssi} function. + * + * @param gatt GATT client invoked {@link BluetoothGatt#readRemoteRssi} + * @param rssi The RSSI value for the remote device + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the RSSI was read successfully + */ + public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { + } + + /** + * Callback indicating the MTU for a given device connection has changed. + * + * This callback is triggered in response to the + * {@link BluetoothGatt#requestMtu} function, or in response to a connection + * event. + * + * @param gatt GATT client invoked {@link BluetoothGatt#requestMtu} + * @param mtu The new MTU size + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the MTU has been changed successfully + */ + public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { + } } diff --git a/core/java/android/bluetooth/BluetoothGattCallbackExt.java b/core/java/android/bluetooth/BluetoothGattCallbackExt.java deleted file mode 100644 index 63774c8fbb65..000000000000 --- a/core/java/android/bluetooth/BluetoothGattCallbackExt.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.bluetooth; - -/** - * This abstract class is used to implement {@link BluetoothGatt} callbacks. - */ -public abstract class BluetoothGattCallbackExt { - - /** - * Callback triggered as result of {@link BluetoothGatt#setPreferredPhy}, or as a result of - * remote device changing the PHY. - * - * @param gatt GATT client - * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. - * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. - * @param status status of the operation - */ - public void onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) { - } - - /** - * Callback triggered as result of {@link BluetoothGatt#readPhy} - * - * @param gatt GATT client - * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. - * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED}. - * @param status status of the operation - */ - public void onPhyRead(BluetoothGatt gatt, int txPhy, int rxPhy, int status) { - } - - /** - * Callback indicating when GATT client has connected/disconnected to/from a remote - * GATT server. - * - * @param gatt GATT client - * @param status Status of the connect or disconnect operation. - * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. - * @param newState Returns the new connection state. Can be one of - * {@link BluetoothProfile#STATE_DISCONNECTED} or - * {@link BluetoothProfile#STATE_CONNECTED} - */ - public void onConnectionStateChange(BluetoothGatt gatt, int status, - int newState) { - } - - /** - * Callback invoked when the list of remote services, characteristics and descriptors - * for the remote device have been updated, ie new services have been discovered. - * - * @param gatt GATT client invoked {@link BluetoothGatt#discoverServices} - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the remote device - * has been explored successfully. - */ - public void onServicesDiscovered(BluetoothGatt gatt, int status) { - } - - /** - * Callback reporting the result of a characteristic read operation. - * - * @param gatt GATT client invoked {@link BluetoothGatt#readCharacteristic} - * @param characteristic Characteristic that was read from the associated - * remote device. - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the read operation - * was completed successfully. - */ - public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, - int status) { - } - - /** - * Callback indicating the result of a characteristic write operation. - * - * <p>If this callback is invoked while a reliable write transaction is - * in progress, the value of the characteristic represents the value - * reported by the remote device. An application should compare this - * value to the desired value to be written. If the values don't match, - * the application must abort the reliable write transaction. - * - * @param gatt GATT client invoked {@link BluetoothGatt#writeCharacteristic} - * @param characteristic Characteristic that was written to the associated - * remote device. - * @param status The result of the write operation - * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. - */ - public void onCharacteristicWrite(BluetoothGatt gatt, - BluetoothGattCharacteristic characteristic, int status) { - } - - /** - * Callback triggered as a result of a remote characteristic notification. - * - * @param gatt GATT client the characteristic is associated with - * @param characteristic Characteristic that has been updated as a result - * of a remote notification event. - */ - public void onCharacteristicChanged(BluetoothGatt gatt, - BluetoothGattCharacteristic characteristic) { - } - - /** - * Callback reporting the result of a descriptor read operation. - * - * @param gatt GATT client invoked {@link BluetoothGatt#readDescriptor} - * @param descriptor Descriptor that was read from the associated - * remote device. - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the read operation - * was completed successfully - */ - public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, - int status) { - } - - /** - * Callback indicating the result of a descriptor write operation. - * - * @param gatt GATT client invoked {@link BluetoothGatt#writeDescriptor} - * @param descriptor Descriptor that was writte to the associated - * remote device. - * @param status The result of the write operation - * {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds. - */ - public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, - int status) { - } - - /** - * Callback invoked when a reliable write transaction has been completed. - * - * @param gatt GATT client invoked {@link BluetoothGatt#executeReliableWrite} - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the reliable write - * transaction was executed successfully - */ - public void onReliableWriteCompleted(BluetoothGatt gatt, int status) { - } - - /** - * Callback reporting the RSSI for a remote device connection. - * - * This callback is triggered in response to the - * {@link BluetoothGatt#readRemoteRssi} function. - * - * @param gatt GATT client invoked {@link BluetoothGatt#readRemoteRssi} - * @param rssi The RSSI value for the remote device - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the RSSI was read successfully - */ - public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { - } - - /** - * Callback indicating the MTU for a given device connection has changed. - * - * This callback is triggered in response to the - * {@link BluetoothGatt#requestMtu} function, or in response to a connection - * event. - * - * @param gatt GATT client invoked {@link BluetoothGatt#requestMtu} - * @param mtu The new MTU size - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the MTU has been changed successfully - */ - public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { - } -} diff --git a/core/java/android/bluetooth/BluetoothGattServer.java b/core/java/android/bluetooth/BluetoothGattServer.java index 9ee739f04bf8..1bd7bd4dc6f3 100644 --- a/core/java/android/bluetooth/BluetoothGattServer.java +++ b/core/java/android/bluetooth/BluetoothGattServer.java @@ -46,7 +46,7 @@ public final class BluetoothGattServer implements BluetoothProfile { private BluetoothAdapter mAdapter; private IBluetoothGatt mService; - private BluetoothGattServerCallbackExt mCallback; + private BluetoothGattServerCallback mCallback; private Object mServerIfLock = new Object(); private int mServerIf; @@ -396,7 +396,7 @@ public final class BluetoothGattServer implements BluetoothProfile { * @return true, the callback will be called to notify success or failure, * false on immediate error */ - /*package*/ boolean registerCallback(BluetoothGattServerCallbackExt callback) { + /*package*/ boolean registerCallback(BluetoothGattServerCallback callback) { if (DBG) Log.d(TAG, "registerCallback()"); if (mService == null) { Log.e(TAG, "GATT service not available"); @@ -472,7 +472,7 @@ public final class BluetoothGattServer implements BluetoothProfile { * * <p>The connection may not be established right away, but will be * completed when the remote device is available. A - * {@link BluetoothGattServerCallbackExt#onConnectionStateChange} callback will be + * {@link BluetoothGattServerCallback#onConnectionStateChange} callback will be * invoked when the connection state changes as a result of this function. * * <p>The autoConnect paramter determines whether to actively connect to @@ -528,7 +528,7 @@ public final class BluetoothGattServer implements BluetoothProfile { * recommendation, wether the PHY change will happen depends on other applications peferences, * local and remote controller capabilities. Controller can override these settings. * <p> - * {@link BluetoothGattServerCallbackExt#onPhyUpdate} will be triggered as a result of this call, even + * {@link BluetoothGattServerCallback#onPhyUpdate} will be triggered as a result of this call, even * if no PHY change happens. It is also triggered when remote device updates the PHY. * * @param device The remote device to send this response to @@ -553,7 +553,7 @@ public final class BluetoothGattServer implements BluetoothProfile { /** * Read the current transmitter PHY and receiver PHY of the connection. The values are returned - * in {@link BluetoothGattServerCallbackExt#onPhyRead} + * in {@link BluetoothGattServerCallback#onPhyRead} * * @param device The remote device to send this response to */ @@ -572,10 +572,10 @@ public final class BluetoothGattServer implements BluetoothProfile { * is received by one of these callback methods: * * <ul> - * <li>{@link BluetoothGattServerCallbackExt#onCharacteristicReadRequest} - * <li>{@link BluetoothGattServerCallbackExt#onCharacteristicWriteRequest} - * <li>{@link BluetoothGattServerCallbackExt#onDescriptorReadRequest} - * <li>{@link BluetoothGattServerCallbackExt#onDescriptorWriteRequest} + * <li>{@link BluetoothGattServerCallback#onCharacteristicReadRequest} + * <li>{@link BluetoothGattServerCallback#onCharacteristicWriteRequest} + * <li>{@link BluetoothGattServerCallback#onDescriptorReadRequest} + * <li>{@link BluetoothGattServerCallback#onDescriptorWriteRequest} * </ul> * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. diff --git a/core/java/android/bluetooth/BluetoothGattServerCallback.java b/core/java/android/bluetooth/BluetoothGattServerCallback.java index 75ceb52c2d50..0a890721de66 100644 --- a/core/java/android/bluetooth/BluetoothGattServerCallback.java +++ b/core/java/android/bluetooth/BluetoothGattServerCallback.java @@ -20,21 +20,168 @@ import android.bluetooth.BluetoothDevice; /** * This abstract class is used to implement {@link BluetoothGattServer} callbacks. - * @deprecated please use {@link BluetoothGattServerCallbackExt} */ -public abstract class BluetoothGattServerCallback extends BluetoothGattServerCallbackExt { +public abstract class BluetoothGattServerCallback { /** - * @hide + * Callback indicating when a remote device has been connected or disconnected. + * + * @param device Remote device that has been connected or disconnected. + * @param status Status of the connect or disconnect operation. + * @param newState Returns the new connection state. Can be one of + * {@link BluetoothProfile#STATE_DISCONNECTED} or + * {@link BluetoothProfile#STATE_CONNECTED} + */ + public void onConnectionStateChange(BluetoothDevice device, int status, + int newState) { + } + + /** + * Indicates whether a local service has been added successfully. + * + * @param status Returns {@link BluetoothGatt#GATT_SUCCESS} if the service + * was added successfully. + * @param service The service that has been added + */ + public void onServiceAdded(int status, BluetoothGattService service) { + } + + /** + * A remote client has requested to read a local characteristic. + * + * <p>An application must call {@link BluetoothGattServer#sendResponse} + * to complete the request. + * + * @param device The remote device that has requested the read operation + * @param requestId The Id of the request + * @param offset Offset into the value of the characteristic + * @param characteristic Characteristic to be read + */ + public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, + int offset, BluetoothGattCharacteristic characteristic) { + } + + /** + * A remote client has requested to write to a local characteristic. + * + * <p>An application must call {@link BluetoothGattServer#sendResponse} + * to complete the request. + * + * @param device The remote device that has requested the write operation + * @param requestId The Id of the request + * @param characteristic Characteristic to be written to. + * @param preparedWrite true, if this write operation should be queued for + * later execution. + * @param responseNeeded true, if the remote device requires a response + * @param offset The offset given for the value + * @param value The value the client wants to assign to the characteristic + */ + public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, + BluetoothGattCharacteristic characteristic, + boolean preparedWrite, boolean responseNeeded, + int offset, byte[] value) { + } + + /** + * A remote client has requested to read a local descriptor. + * + * <p>An application must call {@link BluetoothGattServer#sendResponse} + * to complete the request. + * + * @param device The remote device that has requested the read operation + * @param requestId The Id of the request + * @param offset Offset into the value of the characteristic + * @param descriptor Descriptor to be read + */ + public void onDescriptorReadRequest(BluetoothDevice device, int requestId, + int offset, BluetoothGattDescriptor descriptor) { + } + + /** + * A remote client has requested to write to a local descriptor. + * + * <p>An application must call {@link BluetoothGattServer#sendResponse} + * to complete the request. + * + * @param device The remote device that has requested the write operation + * @param requestId The Id of the request + * @param descriptor Descriptor to be written to. + * @param preparedWrite true, if this write operation should be queued for + * later execution. + * @param responseNeeded true, if the remote device requires a response + * @param offset The offset given for the value + * @param value The value the client wants to assign to the descriptor + */ + public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, + BluetoothGattDescriptor descriptor, + boolean preparedWrite, boolean responseNeeded, + int offset, byte[] value) { + } + + /** + * Execute all pending write operations for this device. + * + * <p>An application must call {@link BluetoothGattServer#sendResponse} + * to complete the request. + * + * @param device The remote device that has requested the write operations + * @param requestId The Id of the request + * @param execute Whether the pending writes should be executed (true) or + * cancelled (false) + */ + public void onExecuteWrite(BluetoothDevice device, int requestId, boolean execute) { + } + + /** + * Callback invoked when a notification or indication has been sent to + * a remote device. + * + * <p>When multiple notifications are to be sent, an application must + * wait for this callback to be received before sending additional + * notifications. + * + * @param device The remote device the notification has been sent to + * @param status {@link BluetoothGatt#GATT_SUCCESS} if the operation was successful + */ + public void onNotificationSent(BluetoothDevice device, int status) { + } + + /** + * Callback indicating the MTU for a given device connection has changed. + * + * <p>This callback will be invoked if a remote client has requested to change + * the MTU for a given connection. + * + * @param device The remote device that requested the MTU change + * @param mtu The new MTU size + */ + public void onMtuChanged(BluetoothDevice device, int mtu) { + } + + /** + * Callback triggered as result of {@link BluetoothGattServer#setPreferredPhy}, or as a result + * of remote device changing the PHY. + * + * @param device The remote device + * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} + * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} + * @param status status of the operation */ - @Override public void onPhyUpdate(BluetoothDevice device, int txPhy, int rxPhy, int status) { } /** - * @hide + * Callback triggered as result of {@link BluetoothGattServer#readPhy} + * + * @param device The remote device that requested the PHY read + * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} + * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, + * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} + * @param status status of the operation */ - @Override public void onPhyRead(BluetoothDevice device, int txPhy, int rxPhy, int status) { } } diff --git a/core/java/android/bluetooth/BluetoothGattServerCallbackExt.java b/core/java/android/bluetooth/BluetoothGattServerCallbackExt.java deleted file mode 100644 index 455cce04c58c..000000000000 --- a/core/java/android/bluetooth/BluetoothGattServerCallbackExt.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.bluetooth; - -import android.bluetooth.BluetoothDevice; - -/** - * This abstract class is used to implement {@link BluetoothGattServer} callbacks. - */ -public abstract class BluetoothGattServerCallbackExt { - - /** - * Callback indicating when a remote device has been connected or disconnected. - * - * @param device Remote device that has been connected or disconnected. - * @param status Status of the connect or disconnect operation. - * @param newState Returns the new connection state. Can be one of - * {@link BluetoothProfile#STATE_DISCONNECTED} or - * {@link BluetoothProfile#STATE_CONNECTED} - */ - public void onConnectionStateChange(BluetoothDevice device, int status, - int newState) { - } - - /** - * Indicates whether a local service has been added successfully. - * - * @param status Returns {@link BluetoothGatt#GATT_SUCCESS} if the service - * was added successfully. - * @param service The service that has been added - */ - public void onServiceAdded(int status, BluetoothGattService service) { - } - - /** - * A remote client has requested to read a local characteristic. - * - * <p>An application must call {@link BluetoothGattServer#sendResponse} - * to complete the request. - * - * @param device The remote device that has requested the read operation - * @param requestId The Id of the request - * @param offset Offset into the value of the characteristic - * @param characteristic Characteristic to be read - */ - public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, - int offset, BluetoothGattCharacteristic characteristic) { - } - - /** - * A remote client has requested to write to a local characteristic. - * - * <p>An application must call {@link BluetoothGattServer#sendResponse} - * to complete the request. - * - * @param device The remote device that has requested the write operation - * @param requestId The Id of the request - * @param characteristic Characteristic to be written to. - * @param preparedWrite true, if this write operation should be queued for - * later execution. - * @param responseNeeded true, if the remote device requires a response - * @param offset The offset given for the value - * @param value The value the client wants to assign to the characteristic - */ - public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, - BluetoothGattCharacteristic characteristic, - boolean preparedWrite, boolean responseNeeded, - int offset, byte[] value) { - } - - /** - * A remote client has requested to read a local descriptor. - * - * <p>An application must call {@link BluetoothGattServer#sendResponse} - * to complete the request. - * - * @param device The remote device that has requested the read operation - * @param requestId The Id of the request - * @param offset Offset into the value of the characteristic - * @param descriptor Descriptor to be read - */ - public void onDescriptorReadRequest(BluetoothDevice device, int requestId, - int offset, BluetoothGattDescriptor descriptor) { - } - - /** - * A remote client has requested to write to a local descriptor. - * - * <p>An application must call {@link BluetoothGattServer#sendResponse} - * to complete the request. - * - * @param device The remote device that has requested the write operation - * @param requestId The Id of the request - * @param descriptor Descriptor to be written to. - * @param preparedWrite true, if this write operation should be queued for - * later execution. - * @param responseNeeded true, if the remote device requires a response - * @param offset The offset given for the value - * @param value The value the client wants to assign to the descriptor - */ - public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, - BluetoothGattDescriptor descriptor, - boolean preparedWrite, boolean responseNeeded, - int offset, byte[] value) { - } - - /** - * Execute all pending write operations for this device. - * - * <p>An application must call {@link BluetoothGattServer#sendResponse} - * to complete the request. - * - * @param device The remote device that has requested the write operations - * @param requestId The Id of the request - * @param execute Whether the pending writes should be executed (true) or - * cancelled (false) - */ - public void onExecuteWrite(BluetoothDevice device, int requestId, boolean execute) { - } - - /** - * Callback invoked when a notification or indication has been sent to - * a remote device. - * - * <p>When multiple notifications are to be sent, an application must - * wait for this callback to be received before sending additional - * notifications. - * - * @param device The remote device the notification has been sent to - * @param status {@link BluetoothGatt#GATT_SUCCESS} if the operation was successful - */ - public void onNotificationSent(BluetoothDevice device, int status) { - } - - /** - * Callback indicating the MTU for a given device connection has changed. - * - * <p>This callback will be invoked if a remote client has requested to change - * the MTU for a given connection. - * - * @param device The remote device that requested the MTU change - * @param mtu The new MTU size - */ - public void onMtuChanged(BluetoothDevice device, int mtu) { - } - - /** - * Callback triggered as result of {@link BluetoothGattServer#setPreferredPhy}, or as a result - * of remote device changing the PHY. - * - * @param device The remote device - * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} - * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} - * @param status status of the operation - */ - public void onPhyUpdate(BluetoothDevice device, int txPhy, int rxPhy, int status) { - } - - /** - * Callback triggered as result of {@link BluetoothGattServer#readPhy} - * - * @param device The remote device that requested the PHY read - * @param txPhy the transmitter PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} - * @param rxPhy the receiver PHY in use. One of {@link BluetoothDevice#PHY_LE_1M}, - * {@link BluetoothDevice#PHY_LE_2M}, and {@link BluetoothDevice#PHY_LE_CODED} - * @param status status of the operation - */ - public void onPhyRead(BluetoothDevice device, int txPhy, int rxPhy, int status) { - } -} diff --git a/core/java/android/os/IBatteryPropertiesRegistrar.aidl b/core/java/android/os/IBatteryPropertiesRegistrar.aidl index fd01802a4216..468b58b101e5 100644 --- a/core/java/android/os/IBatteryPropertiesRegistrar.aidl +++ b/core/java/android/os/IBatteryPropertiesRegistrar.aidl @@ -27,4 +27,5 @@ interface IBatteryPropertiesRegistrar { void registerListener(IBatteryPropertiesListener listener); void unregisterListener(IBatteryPropertiesListener listener); int getProperty(in int id, out BatteryProperty prop); + oneway void scheduleUpdate(); } diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java index ad8ad69cb2b8..f409e5b74d23 100644 --- a/core/java/android/security/keymaster/KeymasterDefs.java +++ b/core/java/android/security/keymaster/KeymasterDefs.java @@ -89,6 +89,8 @@ public final class KeymasterDefs { public static final int KM_TAG_ATTESTATION_ID_SERIAL = KM_BYTES | 713; public static final int KM_TAG_ATTESTATION_ID_IMEI = KM_BYTES | 714; public static final int KM_TAG_ATTESTATION_ID_MEID = KM_BYTES | 715; + public static final int KM_TAG_ATTESTATION_ID_MANUFACTURER = KM_BYTES | 716; + public static final int KM_TAG_ATTESTATION_ID_MODEL = KM_BYTES | 717; public static final int KM_TAG_ASSOCIATED_DATA = KM_BYTES | 1000; public static final int KM_TAG_NONCE = KM_BYTES | 1001; diff --git a/keystore/java/android/security/keystore/AttestationUtils.java b/keystore/java/android/security/keystore/AttestationUtils.java index e36632a591eb..2ec8d33ca530 100644 --- a/keystore/java/android/security/keystore/AttestationUtils.java +++ b/keystore/java/android/security/keystore/AttestationUtils.java @@ -81,9 +81,9 @@ public abstract class AttestationUtils { /** * Performs attestation of the device's identifiers. This method returns a certificate chain * whose first element contains the requested device identifiers in an extension. The device's - * brand, device and product are always also included in the attestation. If the device supports - * attestation in secure hardware, the chain will be rooted at a trustworthy CA key. Otherwise, - * the chain will be rooted at an untrusted certificate. See + * manufacturer, model, brand, device and product are always also included in the attestation. + * If the device supports attestation in secure hardware, the chain will be rooted at a + * trustworthy CA key. Otherwise, the chain will be rooted at an untrusted certificate. See * <a href="https://developer.android.com/training/articles/security-key-attestation.html"> * Key Attestation</a> for the format of the certificate extension. * <p> @@ -169,6 +169,10 @@ public abstract class AttestationUtils { Build.DEVICE.getBytes(StandardCharsets.UTF_8)); attestArgs.addBytes(KeymasterDefs.KM_TAG_ATTESTATION_ID_PRODUCT, Build.PRODUCT.getBytes(StandardCharsets.UTF_8)); + attestArgs.addBytes(KeymasterDefs.KM_TAG_ATTESTATION_ID_MANUFACTURER, + Build.MANUFACTURER.getBytes(StandardCharsets.UTF_8)); + attestArgs.addBytes(KeymasterDefs.KM_TAG_ATTESTATION_ID_MODEL, + Build.MODEL.getBytes(StandardCharsets.UTF_8)); final KeyStore keyStore = KeyStore.getInstance(); final String keyAlias = "android_internal_device_id_attestation-" diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java index 29783e4165c7..c9420d13a6e5 100644 --- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java +++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java @@ -388,7 +388,7 @@ public class MtpDocumentsProviderTest extends AndroidTestCase { assertEquals(DocumentsContract.Document.MIME_TYPE_DIR, cursor.getString(1)); assertEquals("Storage A", cursor.getString(2)); assertTrue(cursor.isNull(3)); - assertEquals(0, cursor.getInt(4)); + assertEquals(DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE, cursor.getInt(4)); assertEquals(3072, cursor.getInt(5)); } diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index df6148e653d7..58e86318e80e 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -77,15 +77,21 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private static final String BLUETOOTH_ADMIN_PERM = android.Manifest.permission.BLUETOOTH_ADMIN; private static final String BLUETOOTH_PERM = android.Manifest.permission.BLUETOOTH; - private static final String ACTION_SERVICE_STATE_CHANGED="com.android.bluetooth.btservice.action.STATE_CHANGED"; - private static final String EXTRA_ACTION="action"; + private static final String SECURE_SETTINGS_BLUETOOTH_ADDR_VALID="bluetooth_addr_valid"; private static final String SECURE_SETTINGS_BLUETOOTH_ADDRESS="bluetooth_address"; private static final String SECURE_SETTINGS_BLUETOOTH_NAME="bluetooth_name"; + + private static final int ACTIVE_LOG_MAX_SIZE = 20; + private static final int CRASH_LOG_MAX_SIZE = 100; private static final String REASON_AIRPLANE_MODE = "airplane mode"; + private static final String REASON_RESTARTED = "automatic restart"; + private static final String REASON_START_CRASH = "turn-on crash"; private static final String REASON_SYSTEM_BOOT = "system boot"; + private static final String REASON_UNEXPECTED = "unexpected crash"; + private static final String REASON_USER_SWITCH = "user switch"; + private static final int TIMEOUT_BIND_MS = 3000; //Maximum msec to wait for a bind - private static final int TIMEOUT_SAVE_MS = 500; //Maximum msec to wait for a save //Maximum msec to wait for service restart private static final int SERVICE_RESTART_TIME_MS = 200; //Maximum msec to wait for restart due to error @@ -150,6 +156,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private boolean mQuietEnable = false; private boolean mEnable; + private CharSequence timeToLog(long timestamp) { + return android.text.format.DateFormat.format("MM-dd HH:mm:ss", timestamp); + } + /** * Used for tracking apps that enabled / disabled Bluetooth. */ @@ -169,13 +179,15 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } public String toString() { - return android.text.format.DateFormat.format("MM-dd HH:mm:ss ", mTimestamp) + - (mEnable ? " Enabled " : " Disabled ") + " by " + mPackageName; + return timeToLog(mTimestamp) + (mEnable ? " Enabled " : " Disabled ") + " by " + + mPackageName; } } private LinkedList<ActiveLog> mActiveLogs; + private LinkedList<Long> mCrashTimestamps; + private int mCrashes; // configuration from external IBinder call which is used to // synchronize with broadcast receiver. @@ -308,6 +320,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub { com.android.internal.R.bool.config_permissionReviewRequired); mActiveLogs = new LinkedList<ActiveLog>(); + mCrashTimestamps = new LinkedList<Long>(); + mCrashes = 0; mBluetooth = null; mBluetoothBinder = null; mBluetoothGatt = null; @@ -1580,6 +1594,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mBluetoothLock.writeLock().unlock(); } + // log the unexpected crash + addCrashLog(); + addActiveLog(REASON_UNEXPECTED, false); if (mEnable) { mEnable = false; // Send a Bluetooth Restart message @@ -1615,6 +1632,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { it doesnt change when IBluetooth service restarts */ mEnable = true; + addActiveLog(REASON_RESTARTED, true); handleEnable(mQuietEnable); break; } @@ -1669,6 +1687,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { unbindAllBluetoothProfileServices(); // disable + addActiveLog(REASON_USER_SWITCH, false); handleDisable(); // Pbap service need receive STATE_TURNING_OFF intent to close bluetoothStateChangeHandler(BluetoothAdapter.STATE_ON, @@ -1706,6 +1725,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mHandler.removeMessages(MESSAGE_BLUETOOTH_STATE_CHANGE); mState = BluetoothAdapter.STATE_OFF; // enable + addActiveLog(REASON_USER_SWITCH, true); handleEnable(mQuietEnable); } else if (mBinding || mBluetooth != null) { Message userMsg = mHandler.obtainMessage(MESSAGE_USER_SWITCHED); @@ -1960,13 +1980,21 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private void addActiveLog(String packageName, boolean enable) { synchronized (mActiveLogs) { - if (mActiveLogs.size() > 10) { + if (mActiveLogs.size() > ACTIVE_LOG_MAX_SIZE) { mActiveLogs.remove(); } mActiveLogs.add(new ActiveLog(packageName, enable, System.currentTimeMillis())); } } + private void addCrashLog() { + synchronized (mCrashTimestamps) { + if (mCrashTimestamps.size() == CRASH_LOG_MAX_SIZE) mCrashTimestamps.removeFirst(); + mCrashTimestamps.add(System.currentTimeMillis()); + mCrashes++; + } + } + private void recoverBluetoothServiceFromError(boolean clearBle) { Slog.e(TAG,"recoverBluetoothServiceFromError"); try { @@ -1984,6 +2012,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { SystemClock.sleep(500); // disable + addActiveLog(REASON_START_CRASH, false); handleDisable(); waitForOnOff(false, true); @@ -2085,6 +2114,12 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } } + writer.println("Bluetooth crashed " + mCrashes + " time" + (mCrashes == 1 ? "" : "s")); + if (mCrashes == CRASH_LOG_MAX_SIZE) writer.println("(last " + CRASH_LOG_MAX_SIZE + ")"); + for (Long time : mCrashTimestamps) { + writer.println(" " + timeToLog(time.longValue())); + } + String bleAppString = "No BLE Apps registered."; if (mBleApps.size() == 1) { bleAppString = "1 BLE App registered:"; diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index 14e2ba3896d8..11cc52df180d 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -31,6 +31,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; @@ -43,6 +44,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.IInterface; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -82,6 +84,7 @@ abstract public class ManagedServices { protected final Object mMutex; private final UserProfiles mUserProfiles; private final SettingsObserver mSettingsObserver; + private final IPackageManager mPm; private final Config mConfig; private ArraySet<String> mRestored; @@ -114,6 +117,7 @@ abstract public class ManagedServices { mContext = context; mMutex = mutex; mUserProfiles = userProfiles; + mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); mConfig = getConfig(); mSettingsObserver = new SettingsObserver(handler); @@ -575,8 +579,21 @@ abstract public class ManagedServices { for (int i = 0; i < nUserIds; ++i) { final Set<ComponentName> add = toAdd.get(userIds[i]); for (ComponentName component : add) { - Slog.v(TAG, "enabling " + getCaption() + " for " + userIds[i] + ": " + component); - registerService(component, userIds[i]); + try { + ServiceInfo info = mPm.getServiceInfo(component, + PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userIds[i]); + if (!mConfig.bindPermission.equals(info.permission)) { + Slog.w(TAG, "Skipping " + getCaption() + " service " + component + + ": it does not require the permission " + mConfig.bindPermission); + continue; + } + Slog.v(TAG, + "enabling " + getCaption() + " for " + userIds[i] + ": " + component); + registerService(component, userIds[i]); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 53a403603a5b..3727a5b79440 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -3099,7 +3099,7 @@ public class NotificationManagerService extends SystemService { final ApplicationInfo ai = mPackageManagerClient.getApplicationInfoAsUser( pkg, PackageManager.MATCH_DEBUG_TRIAGED_MISSING, (userId == UserHandle.USER_ALL) ? UserHandle.USER_SYSTEM : userId); - Notification.addFieldsFromContext(ai, userId, notification); + Notification.addFieldsFromContext(ai, notification); } catch (NameNotFoundException e) { Slog.e(TAG, "Cannot create a context for sending app", e); return; @@ -4938,7 +4938,7 @@ public class NotificationManagerService extends SystemService { private void notifyPosted(final ManagedServiceInfo info, final StatusBarNotification sbn, NotificationRankingUpdate rankingUpdate) { - final INotificationListener listener = (INotificationListener)info.service; + final INotificationListener listener = (INotificationListener) info.service; StatusBarNotificationHolder sbnHolder = new StatusBarNotificationHolder(sbn); try { listener.onNotificationPosted(sbnHolder, rankingUpdate); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 25f9c30547ba..3efe56a4a9f1 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6295,7 +6295,7 @@ public class PackageManagerService extends IPackageManager.Stub { } else { final PackageParser.Package pkg = mPackages.get(pkgName); if (pkg != null) { - result = applyPostResolutionFilter(filterIfNotSystemUser( + return applyPostResolutionFilter(filterIfNotSystemUser( mActivities.queryIntentForPackage( intent, resolvedType, flags, pkg.activities, userId), userId), instantAppPkgName); diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java index 0639eeed42e4..ba160bac650c 100644 --- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java +++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java @@ -385,10 +385,12 @@ public class DeviceStorageMonitorService extends SystemService { mDataFileStats.getBlockSize(); mStorageLowIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_LOW); mStorageLowIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT - | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); + | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND + | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS); mStorageOkIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_OK); mStorageOkIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT - | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); + | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND + | Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS); mStorageFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_FULL); mStorageFullIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mStorageNotFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_NOT_FULL); diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java index 5bcdd4cd036e..e1df0ba287e1 100644 --- a/services/core/java/com/android/server/vr/VrManagerService.java +++ b/services/core/java/com/android/server/vr/VrManagerService.java @@ -725,10 +725,10 @@ public class VrManagerService extends SystemService implements EnabledComponentC } } - mCurrentVrModeComponent = calling; if (calling != null && !Objects.equals(calling, mCurrentVrModeComponent)) { sendUpdatedCaller = true; } + mCurrentVrModeComponent = calling; if (mCurrentVrModeUser != userId) { mCurrentVrModeUser = userId; |