Merge "Ensure members are non-null in callback" into pi-dev
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 9bfbd38..8ba35b7 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -23,6 +23,7 @@
import "frameworks/base/cmds/statsd/src/atom_field_options.proto";
import "frameworks/base/core/proto/android/app/enums.proto";
+import "frameworks/base/core/proto/android/bluetooth/enums.proto";
import "frameworks/base/core/proto/android/os/enums.proto";
import "frameworks/base/core/proto/android/server/enums.proto";
import "frameworks/base/core/proto/android/telecomm/enums.proto";
@@ -106,6 +107,9 @@
KeyguardBouncerPasswordEntered keyguard_bouncer_password_entered = 64;
AppDied app_died=65;
ResourceConfigurationChanged resource_configuration_changed = 66;
+ BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67;
+ BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68;
+ BluetoothA2dpAudioStateChanged bluetooth_a2dp_audio_state_changed = 69;
// TODO: Reorder the numbering so that the most frequent occur events occur in the first 15.
}
@@ -904,6 +908,63 @@
}
/**
+ * Logs when Bluetooth is enabled and disabled.
+ *
+ * Logged from:
+ * services/core/java/com/android/server/BluetoothManagerService.java
+ */
+message BluetoothEnabledStateChanged {
+ repeated AttributionNode attribution_node = 1;
+ // Whether or not bluetooth is enabled on the device.
+ enum State {
+ UNKNOWN = 0;
+ ENABLED = 1;
+ DISABLED = 2;
+ }
+ optional State state = 2;
+ // The reason for being enabled/disabled.
+ // Eg. Airplane mode, crash, application request.
+ optional android.bluetooth.EnableDisableReasonEnum reason = 3;
+ // If the reason is an application request, this will be the package name.
+ optional string pkgName = 4;
+}
+
+/**
+ * Logs when a Bluetooth device connects and disconnects.
+ *
+ * Logged from:
+ * packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterProperties.java
+ */
+message BluetoothConnectionStateChanged {
+ // The state of the connection.
+ // Eg: CONNECTING, CONNECTED, DISCONNECTING, DISCONNECTED.
+ optional android.bluetooth.ConnectionStateEnum state = 1;
+ // An identifier that can be used to match connect and disconnect events.
+ // Currently is last two bytes of a hash of a device level ID and
+ // the mac address of the bluetooth device that is connected.
+ optional int32 obfuscated_id = 2;
+ // The profile that is connected. Eg. GATT, A2DP, HEADSET.
+ // From android.bluetooth.BluetoothAdapter.java
+ optional int32 bt_profile = 3;
+}
+
+/**
+ * Logs when Bluetooth A2dp audio streaming state changes.
+ *
+ * Logged from:
+ * TODO(b/73971848)
+ */
+message BluetoothA2dpAudioStateChanged {
+ // Whether or not audio is being played using Bluetooth A2dp.
+ enum State {
+ UNKNOWN = 0;
+ PLAY = 1;
+ STOP = 2;
+ }
+ optional State state = 1;
+}
+
+/**
* Logs the duration of a davey (jank of >=700ms) when it occurs
*
* Logged from:
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 5498a93..ce4e384 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -921,6 +921,28 @@
SkBitmap skbitmap;
bitmap->getSkBitmap(&skbitmap);
+ if (skbitmap.colorType() == kRGBA_F16_SkColorType) {
+ // Convert to P3 before encoding. This matches SkAndroidCodec::computeOutputColorSpace
+ // for wide gamuts.
+ auto cs = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
+ SkColorSpace::kDCIP3_D65_Gamut);
+ auto info = skbitmap.info().makeColorType(kRGBA_8888_SkColorType)
+ .makeColorSpace(std::move(cs));
+ SkBitmap p3;
+ if (!p3.tryAllocPixels(info)) {
+ return JNI_FALSE;
+ }
+ auto xform = SkColorSpaceXform::New(skbitmap.colorSpace(), info.colorSpace());
+ if (!xform) {
+ return JNI_FALSE;
+ }
+ if (!xform->apply(SkColorSpaceXform::kRGBA_8888_ColorFormat, p3.getPixels(),
+ SkColorSpaceXform::kRGBA_F16_ColorFormat, skbitmap.getPixels(),
+ info.width() * info.height(), kUnpremul_SkAlphaType)) {
+ return JNI_FALSE;
+ }
+ skbitmap = p3;
+ }
return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE;
}
diff --git a/core/res/res/drawable/ic_corp_user_badge.xml b/core/res/res/drawable/ic_corp_user_badge.xml
index 6a0d902..a08f2d4 100644
--- a/core/res/res/drawable/ic_corp_user_badge.xml
+++ b/core/res/res/drawable/ic_corp_user_badge.xml
@@ -2,7 +2,8 @@
android:width="36dp"
android:height="36dp"
android:viewportWidth="36.0"
- android:viewportHeight="36.0">
+ android:viewportHeight="36.0"
+ android:tint="?attr/colorControlNormal">
<path
android:pathData="M16.3,11.3h3.4v1.7h-3.4z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index 61e113b..56a242a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -1,7 +1,6 @@
package com.android.settingslib;
import android.annotation.ColorInt;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
@@ -142,7 +141,7 @@
public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
final int iconSize = UserIconDrawable.getSizeForList(context);
if (user.isManagedProfile()) {
- Drawable drawable = UserIconDrawable.getManagedUserBadgeDrawable(context);
+ Drawable drawable = UserIconDrawable.getManagedUserDrawable(context);
drawable.setBounds(0, 0, iconSize, iconSize);
return drawable;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
index 7f469b5..54d1aba 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawable/UserIconDrawable.java
@@ -16,6 +16,7 @@
package com.android.settingslib.drawable;
+import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -36,6 +37,7 @@
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
import com.android.settingslib.R;
@@ -69,15 +71,23 @@
private float mBadgeMargin;
/**
- * Gets the system default managed-user badge as a drawable
+ * Gets the system default managed-user badge as a drawable. This drawable is tint-able.
+ * For badging purpose, consider
+ * {@link android.content.pm.PackageManager#getUserBadgedDrawableForDensity(Drawable, UserHandle, Rect, int)}.
+ *
* @param context
* @return drawable containing just the badge
*/
- public static Drawable getManagedUserBadgeDrawable(Context context) {
- int displayDensity = context.getResources().getDisplayMetrics().densityDpi;
+ public static Drawable getManagedUserDrawable(Context context) {
+ return getDrawableForDisplayDensity
+ (context, com.android.internal.R.drawable.ic_corp_user_badge);
+ }
+
+ private static Drawable getDrawableForDisplayDensity(
+ Context context, @DrawableRes int drawable) {
+ int density = context.getResources().getDisplayMetrics().densityDpi;
return context.getResources().getDrawableForDensity(
- com.android.internal.R.drawable.ic_corp_user_badge,
- displayDensity, context.getTheme());
+ drawable, density, context.getTheme());
}
/**
@@ -164,7 +174,8 @@
boolean isManaged = context.getSystemService(DevicePolicyManager.class)
.getProfileOwnerAsUser(userId) != null;
if (isManaged) {
- badge = getManagedUserBadgeDrawable(context);
+ badge = getDrawableForDisplayDensity(
+ context, com.android.internal.R.drawable.ic_corp_badge_case);
}
return setBadge(badge);
}
@@ -322,7 +333,6 @@
mIntrinsicRadius, mIconPaint);
canvas.restoreToCount(saveId);
}
-
if (mFrameColor != null) {
mFramePaint.setColor(mFrameColor.getColorForState(getState(), Color.TRANSPARENT));
}
@@ -343,7 +353,6 @@
final float borderRadius = mBadge.getBounds().width() * 0.5f + mBadgeMargin;
canvas.drawCircle(badgeLeft + mBadgeRadius, badgeTop + mBadgeRadius,
borderRadius, mClearPaint);
-
mBadge.draw(canvas);
}
}