Merge "Fixed a bug with auto cancelling" into nyc-dev
am: a35d9b3ee0
* commit 'a35d9b3ee055d591249a30c58285fe2be5a45c43':
Fixed a bug with auto cancelling
Change-Id: I46be6f420c4ad89ffc7cd88f621aed173ba130d1
This commit is contained in:
@@ -956,32 +956,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) {
|
||||
@@ -1826,6 +1833,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)) {
|
||||
@@ -1875,6 +1889,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() {
|
||||
@@ -1930,6 +1953,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();
|
||||
|
||||
@@ -1943,6 +1988,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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -3828,10 +3828,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user