Merge "Merge "Fixed a bug with auto cancelling" into nyc-dev am: a35d9b3ee0 am: d61b5b655e" into nyc-mr1-dev-plus-aosp

am: 03e3a1f308

* commit '03e3a1f308bf18ff3f96053c772d2e91929346d6':
  Fixed a bug with auto cancelling

Change-Id: I93c2eac94085aae363562159a15beb730df96302
This commit is contained in:
Selim Cinek
2016-05-17 22:36:55 +00:00
committed by android-build-merger
3 changed files with 78 additions and 16 deletions

View File

@@ -960,32 +960,39 @@ public abstract class BaseStatusBar extends SystemUI implements
protected View bindVetoButtonClickListener(View row, final StatusBarNotification n) {
View vetoButton = row.findViewById(R.id.veto);
final String _pkg = n.getPackageName();
final String _tag = n.getTag();
final int _id = n.getId();
final int _userId = n.getUserId();
vetoButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Accessibility feedback
v.announceForAccessibility(
mContext.getString(R.string.accessibility_notification_dismissed));
try {
mBarService.onNotificationClear(_pkg, _tag, _id, _userId);
if (FORCE_REMOTE_INPUT_HISTORY
&& mKeysKeptForRemoteInput.contains(n.getKey())) {
removeNotification(n.getKey(), null);
mKeysKeptForRemoteInput.remove(n.getKey());
}
} catch (RemoteException ex) {
// system process is dead if we're here.
}
performRemoveNotification(n, false /* removeView */);
}
});
vetoButton.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
return vetoButton;
}
private void performRemoveNotification(StatusBarNotification n, boolean removeView) {
final String pkg = n.getPackageName();
final String tag = n.getTag();
final int id = n.getId();
final int userId = n.getUserId();
try {
mBarService.onNotificationClear(pkg, tag, id, userId);
if (FORCE_REMOTE_INPUT_HISTORY
&& mKeysKeptForRemoteInput.contains(n.getKey())) {
mKeysKeptForRemoteInput.remove(n.getKey());
removeView = true;
}
if (removeView) {
removeNotification(n.getKey(), null);
}
} catch (RemoteException ex) {
// system process is dead if we're here.
}
}
protected void applyColorsAndBackgrounds(StatusBarNotification sbn,
NotificationData.Entry entry) {
@@ -1830,6 +1837,13 @@ public abstract class BaseStatusBar extends SystemUI implements
}, afterKeyguardGone);
}
public void addPostCollapseAction(Runnable r) {
}
public boolean isCollapsing() {
return false;
}
private final class NotificationClicker implements View.OnClickListener {
public void onClick(final View v) {
if (!(v instanceof ExpandableNotificationRow)) {
@@ -1879,6 +1893,15 @@ public abstract class BaseStatusBar extends SystemUI implements
HeadsUpManager.setIsClickedNotification(row, true);
mHeadsUpManager.releaseImmediately(notificationKey);
}
StatusBarNotification parentToCancel = null;
if (shouldAutoCancel(sbn) && mGroupManager.isOnlyChildInGroup(sbn)) {
StatusBarNotification summarySbn = mGroupManager.getLogicalGroupSummary(sbn)
.getStatusBarNotification();
if (shouldAutoCancel(summarySbn)) {
parentToCancel = summarySbn;
}
}
final StatusBarNotification parentToCancelFinal = parentToCancel;
new Thread() {
@Override
public void run() {
@@ -1934,6 +1957,28 @@ public abstract class BaseStatusBar extends SystemUI implements
} catch (RemoteException ex) {
// system process is dead if we're here.
}
if (parentToCancelFinal != null) {
// We have to post it to the UI thread for synchronization
mHandler.post(new Runnable() {
@Override
public void run() {
Runnable removeRunnable = new Runnable() {
@Override
public void run() {
performRemoveNotification(parentToCancelFinal,
true);
}
};
if (isCollapsing()) {
// To avoid lags we're only performing the remove
// after the shade was collapsed
addPostCollapseAction(removeRunnable);
} else {
removeRunnable.run();
}
}
});
}
}
}.start();
@@ -1947,6 +1992,17 @@ public abstract class BaseStatusBar extends SystemUI implements
}, afterKeyguardGone);
}
private boolean shouldAutoCancel(StatusBarNotification sbn) {
int flags = sbn.getNotification().flags;
if ((flags & Notification.FLAG_AUTO_CANCEL) != Notification.FLAG_AUTO_CANCEL) {
return false;
}
if ((flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
return false;
}
return true;
}
public void register(ExpandableNotificationRow row, StatusBarNotification sbn) {
Notification notification = sbn.getNotification();
if (notification.contentIntent != null || notification.fullScreenIntent != null) {

View File

@@ -215,7 +215,11 @@ public class NotificationGroupManager implements HeadsUpManager.OnHeadsUpChanged
public boolean isOnlyChildInSuppressedGroup(StatusBarNotification sbn) {
return isGroupSuppressed(sbn.getGroupKey())
&& !sbn.getNotification().isGroupSummary()
&& isOnlyChildInGroup(sbn);
}
public boolean isOnlyChildInGroup(StatusBarNotification sbn) {
return !sbn.getNotification().isGroupSummary()
&& getTotalNumberOfChildren(sbn) == 1;
}

View File

@@ -3833,10 +3833,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
updateMediaMetaData(true /* metaDataChanged */, true);
}
@Override
public boolean isCollapsing() {
return mNotificationPanel.isCollapsing();
}
@Override
public void addPostCollapseAction(Runnable r) {
mPostCollapseRunnables.add(r);
}