Merge changes I6b52e378,I1699e6bf into nyc-dev

* changes:
  Phone call vibrate should obey user preference.
  Adjustment bundles are defusable.
This commit is contained in:
Julia Reynolds
2016-04-14 14:42:52 +00:00
committed by Android (Google) Code Review
3 changed files with 82 additions and 48 deletions

View File

@@ -454,6 +454,12 @@ public class VibratorService extends IVibratorService.Stub
return;
}
if (vib.mUsageHint == AudioAttributes.USAGE_NOTIFICATION_RINGTONE
&& Settings.System.getInt(
mContext.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0) == 0) {
return;
}
int mode = mAppOpsService.checkAudioOperation(AppOpsManager.OP_VIBRATE,
vib.mUsageHint, vib.mUid, vib.mOpPkg);
if (mode == AppOpsManager.MODE_ALLOWED) {

View File

@@ -2186,16 +2186,18 @@ public class NotificationManagerService extends SystemService {
// Clears the 'fake' auto-bunding summary.
private void maybeClearAutobundleSummaryLocked(Adjustment adjustment) {
if (adjustment.getSignals() != null
&& adjustment.getSignals().containsKey(Adjustment.NEEDS_AUTOGROUPING_KEY)
if (adjustment.getSignals() != null) {
Bundle.setDefusable(adjustment.getSignals(), true);
if (adjustment.getSignals().containsKey(Adjustment.NEEDS_AUTOGROUPING_KEY)
&& !adjustment.getSignals().getBoolean(Adjustment.NEEDS_AUTOGROUPING_KEY, false)) {
if (mAutobundledSummaries.containsKey(adjustment.getPackage())) {
// Clear summary.
final NotificationRecord removed = mNotificationsByKey.get(
mAutobundledSummaries.remove(adjustment.getPackage()));
if (removed != null) {
mNotificationList.remove(removed);
cancelNotificationLocked(removed, false, REASON_UNAUTOBUNDLED);
if (mAutobundledSummaries.containsKey(adjustment.getPackage())) {
// Clear summary.
final NotificationRecord removed = mNotificationsByKey.get(
mAutobundledSummaries.remove(adjustment.getPackage()));
if (removed != null) {
mNotificationList.remove(removed);
cancelNotificationLocked(removed, false, REASON_UNAUTOBUNDLED);
}
}
}
}
@@ -2203,47 +2205,50 @@ public class NotificationManagerService extends SystemService {
// Posts a 'fake' summary for a package that has exceeded the solo-notification limit.
private void maybeAddAutobundleSummary(Adjustment adjustment) {
if (adjustment.getSignals() != null
&& adjustment.getSignals().getBoolean(Adjustment.NEEDS_AUTOGROUPING_KEY, false)) {
final String newAutoBundleKey =
adjustment.getSignals().getString(Adjustment.GROUP_KEY_OVERRIDE_KEY, null);
int userId = -1;
NotificationRecord summaryRecord = null;
synchronized (mNotificationList) {
if (!mAutobundledSummaries.containsKey(adjustment.getPackage())
&& newAutoBundleKey != null) {
// Add summary
final StatusBarNotification adjustedSbn
= mNotificationsByKey.get(adjustment.getKey()).sbn;
if (adjustment.getSignals() != null) {
Bundle.setDefusable(adjustment.getSignals(), true);
if (adjustment.getSignals().getBoolean(Adjustment.NEEDS_AUTOGROUPING_KEY, false)) {
final String newAutoBundleKey =
adjustment.getSignals().getString(Adjustment.GROUP_KEY_OVERRIDE_KEY, null);
int userId = -1;
NotificationRecord summaryRecord = null;
synchronized (mNotificationList) {
if (!mAutobundledSummaries.containsKey(adjustment.getPackage())
&& newAutoBundleKey != null) {
// Add summary
final StatusBarNotification adjustedSbn
= mNotificationsByKey.get(adjustment.getKey()).sbn;
final ApplicationInfo appInfo =
adjustedSbn.getNotification().extras.getParcelable(
Notification.EXTRA_BUILDER_APPLICATION_INFO);
final Bundle extras = new Bundle();
extras.putParcelable(Notification.EXTRA_BUILDER_APPLICATION_INFO, appInfo);
final Notification summaryNotification =
new Notification.Builder(getContext()).setSmallIcon(
adjustedSbn.getNotification().getSmallIcon())
.setGroupSummary(true)
.setGroup(newAutoBundleKey)
.setFlag(Notification.FLAG_AUTOGROUP_SUMMARY, true)
.setFlag(Notification.FLAG_GROUP_SUMMARY, true)
.build();
summaryNotification.extras.putAll(extras);
final StatusBarNotification summarySbn =
new StatusBarNotification(adjustedSbn.getPackageName(),
adjustedSbn.getOpPkg(),
Integer.MAX_VALUE, Adjustment.GROUP_KEY_OVERRIDE_KEY,
adjustedSbn.getUid(), adjustedSbn.getInitialPid(),
summaryNotification, adjustedSbn.getUser(), newAutoBundleKey,
System.currentTimeMillis());
summaryRecord = new NotificationRecord(getContext(), summarySbn);
mAutobundledSummaries.put(adjustment.getPackage(), summarySbn.getKey());
userId = adjustedSbn.getUser().getIdentifier();
final ApplicationInfo appInfo =
adjustedSbn.getNotification().extras.getParcelable(
Notification.EXTRA_BUILDER_APPLICATION_INFO);
final Bundle extras = new Bundle();
extras.putParcelable(Notification.EXTRA_BUILDER_APPLICATION_INFO, appInfo);
final Notification summaryNotification =
new Notification.Builder(getContext()).setSmallIcon(
adjustedSbn.getNotification().getSmallIcon())
.setGroupSummary(true)
.setGroup(newAutoBundleKey)
.setFlag(Notification.FLAG_AUTOGROUP_SUMMARY, true)
.setFlag(Notification.FLAG_GROUP_SUMMARY, true)
.build();
summaryNotification.extras.putAll(extras);
final StatusBarNotification summarySbn =
new StatusBarNotification(adjustedSbn.getPackageName(),
adjustedSbn.getOpPkg(),
Integer.MAX_VALUE, Adjustment.GROUP_KEY_OVERRIDE_KEY,
adjustedSbn.getUid(), adjustedSbn.getInitialPid(),
summaryNotification, adjustedSbn.getUser(),
newAutoBundleKey,
System.currentTimeMillis());
summaryRecord = new NotificationRecord(getContext(), summarySbn);
mAutobundledSummaries.put(adjustment.getPackage(), summarySbn.getKey());
userId = adjustedSbn.getUser().getIdentifier();
}
}
if (summaryRecord != null) {
mHandler.post(new EnqueueNotificationRunnable(userId, summaryRecord));
}
}
if (summaryRecord != null) {
mHandler.post(new EnqueueNotificationRunnable(userId, summaryRecord));
}
}
}

View File

@@ -25,6 +25,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioAttributes;
import android.os.Bundle;
import android.os.Vibrator;
import android.os.Handler;
@@ -86,6 +87,28 @@ public class NotificationTestList extends TestActivity
}
private Test[] mTests = new Test[] {
new Test("Phone call") {
public void run()
{
Notification n = new Notification.Builder(NotificationTestList.this)
.setSmallIcon(R.drawable.icon2)
.setContentTitle("phone call")
.setLights(0xff0000ff, 1, 0)
.setDefaults(Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
getPackageName() + "/raw/ringer"),
new AudioAttributes.Builder().setUsage(
AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build())
.setPriority(Notification.PRIORITY_MAX)
.setVibrate(new long[] {
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400,
300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400 })
.setFullScreenIntent(makeIntent2(), true)
.build();
mNM.notify(7001, n);
}
},
new Test("Post a group") {
public void run()
{