Merge "Disable bubble experiment; use shortcut info from ranking" into rvc-dev am: b839af1f45

Change-Id: I390de2170e3396f3179dcd9f4c271e77aeadb3fc
This commit is contained in:
TreeHugger Robot
2020-04-16 03:37:52 +00:00
committed by Automerger Merge Worker
4 changed files with 6 additions and 72 deletions

View File

@@ -108,7 +108,6 @@ import java.io.PrintWriter;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
/** /**
@@ -162,14 +161,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
// Used when ranking updates occur and we check if things should bubble / unbubble // Used when ranking updates occur and we check if things should bubble / unbubble
private NotificationListenerService.Ranking mTmpRanking; private NotificationListenerService.Ranking mTmpRanking;
// Saves notification keys of user created "fake" bubbles so that we can allow notifications
// like these to bubble by default. Doesn't persist across reboots, not a long-term solution.
private final HashSet<String> mUserCreatedBubbles;
// If we're auto-bubbling bubbles via a whitelist, we need to track which notifs from that app
// have been "demoted" back to a notification so that we don't auto-bubbles those again.
// Doesn't persist across reboots, not a long-term solution.
private final HashSet<String> mUserBlockedBubbles;
// Bubbles get added to the status bar view // Bubbles get added to the status bar view
private final NotificationShadeWindowController mNotificationShadeWindowController; private final NotificationShadeWindowController mNotificationShadeWindowController;
private final ZenModeController mZenModeController; private final ZenModeController mZenModeController;
@@ -412,9 +403,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
} }
}); });
mUserCreatedBubbles = new HashSet<>();
mUserBlockedBubbles = new HashSet<>();
mBubbleIconFactory = new BubbleIconFactory(context); mBubbleIconFactory = new BubbleIconFactory(context);
} }
@@ -474,8 +462,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
(entry != null && entry.isRowDismissed() && !isAppCancel) (entry != null && entry.isRowDismissed() && !isAppCancel)
|| isClearAll || isUserDimiss || isSummaryCancel; || isClearAll || isUserDimiss || isSummaryCancel;
if (userRemovedNotif || isUserCreatedBubble(key) if (userRemovedNotif) {
|| isSummaryOfUserCreatedBubble(entry)) {
return handleDismissalInterception(entry); return handleDismissalInterception(entry);
} }
@@ -859,27 +846,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
} }
} }
/**
* Whether this bubble was explicitly created by the user via a SysUI affordance.
*/
boolean isUserCreatedBubble(String key) {
return mUserCreatedBubbles.contains(key);
}
boolean isSummaryOfUserCreatedBubble(NotificationEntry entry) {
if (isSummaryOfBubbles(entry)) {
List<Bubble> bubbleChildren =
mBubbleData.getBubblesInGroup(entry.getSbn().getGroupKey());
for (int i = 0; i < bubbleChildren.size(); i++) {
// Check if any are user-created (i.e. experimental bubbles)
if (isUserCreatedBubble(bubbleChildren.get(i).getKey())) {
return true;
}
}
}
return false;
}
/** /**
* Removes the bubble with the given NotificationEntry. * Removes the bubble with the given NotificationEntry.
* <p> * <p>
@@ -893,37 +859,19 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
} }
private void onEntryAdded(NotificationEntry entry) { private void onEntryAdded(NotificationEntry entry) {
boolean previouslyUserCreated = mUserCreatedBubbles.contains(entry.getKey());
boolean userBlocked = mUserBlockedBubbles.contains(entry.getKey());
boolean wasAdjusted = BubbleExperimentConfig.adjustForExperiments(
mContext, entry, previouslyUserCreated, userBlocked);
if (mNotificationInterruptStateProvider.shouldBubbleUp(entry) if (mNotificationInterruptStateProvider.shouldBubbleUp(entry)
&& (canLaunchInActivityView(mContext, entry) || wasAdjusted)) { && canLaunchInActivityView(mContext, entry)) {
if (wasAdjusted && !previouslyUserCreated) {
// Gotta treat the auto-bubbled / whitelisted packaged bubbles as usercreated
mUserCreatedBubbles.add(entry.getKey());
}
updateBubble(entry); updateBubble(entry);
} }
} }
private void onEntryUpdated(NotificationEntry entry) { private void onEntryUpdated(NotificationEntry entry) {
boolean previouslyUserCreated = mUserCreatedBubbles.contains(entry.getKey());
boolean userBlocked = mUserBlockedBubbles.contains(entry.getKey());
boolean wasAdjusted = BubbleExperimentConfig.adjustForExperiments(
mContext, entry, previouslyUserCreated, userBlocked);
boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry) boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry)
&& (canLaunchInActivityView(mContext, entry) || wasAdjusted); && canLaunchInActivityView(mContext, entry);
if (!shouldBubble && mBubbleData.hasBubbleWithKey(entry.getKey())) { if (!shouldBubble && mBubbleData.hasBubbleWithKey(entry.getKey())) {
// It was previously a bubble but no longer a bubble -- lets remove it // It was previously a bubble but no longer a bubble -- lets remove it
removeBubble(entry, DISMISS_NO_LONGER_BUBBLE); removeBubble(entry, DISMISS_NO_LONGER_BUBBLE);
} else if (shouldBubble) { } else if (shouldBubble) {
if (wasAdjusted && !previouslyUserCreated) {
// Gotta treat the auto-bubbled / whitelisted packaged bubbles as usercreated
mUserCreatedBubbles.add(entry.getKey());
}
updateBubble(entry); updateBubble(entry);
} }
} }

View File

@@ -193,7 +193,7 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList
+ " mActivityViewStatus=" + mActivityViewStatus + " mActivityViewStatus=" + mActivityViewStatus
+ " bubble=" + getBubbleKey()); + " bubble=" + getBubbleKey());
} }
if (mBubble != null && !mBubbleController.isUserCreatedBubble(mBubble.getKey())) { if (mBubble != null) {
// Must post because this is called from a binder thread. // Must post because this is called from a binder thread.
post(() -> mBubbleController.removeBubble(mBubble.getEntry(), post(() -> mBubbleController.removeBubble(mBubble.getEntry(),
BubbleController.DISMISS_TASK_FINISHED)); BubbleController.DISMISS_TASK_FINISHED));

View File

@@ -57,16 +57,13 @@ import java.util.List;
public class BubbleExperimentConfig { public class BubbleExperimentConfig {
private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES; private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES;
private static final String SHORTCUT_DUMMY_INTENT = "bubble_experiment_shortcut_intent";
private static PendingIntent sDummyShortcutIntent;
private static final int BUBBLE_HEIGHT = 10000; private static final int BUBBLE_HEIGHT = 10000;
private static final String ALLOW_ANY_NOTIF_TO_BUBBLE = "allow_any_notif_to_bubble"; private static final String ALLOW_ANY_NOTIF_TO_BUBBLE = "allow_any_notif_to_bubble";
private static final boolean ALLOW_ANY_NOTIF_TO_BUBBLE_DEFAULT = false; private static final boolean ALLOW_ANY_NOTIF_TO_BUBBLE_DEFAULT = false;
private static final String ALLOW_MESSAGE_NOTIFS_TO_BUBBLE = "allow_message_notifs_to_bubble"; private static final String ALLOW_MESSAGE_NOTIFS_TO_BUBBLE = "allow_message_notifs_to_bubble";
private static final boolean ALLOW_MESSAGE_NOTIFS_TO_BUBBLE_DEFAULT = true; private static final boolean ALLOW_MESSAGE_NOTIFS_TO_BUBBLE_DEFAULT = false;
private static final String ALLOW_SHORTCUTS_TO_BUBBLE = "allow_shortcuts_to_bubble"; private static final String ALLOW_SHORTCUTS_TO_BUBBLE = "allow_shortcuts_to_bubble";
private static final boolean ALLOW_SHORTCUT_TO_BUBBLE_DEFAULT = false; private static final boolean ALLOW_SHORTCUT_TO_BUBBLE_DEFAULT = false;

View File

@@ -139,22 +139,11 @@ public class BubbleViewInfoTask extends AsyncTask<Void, Void, BubbleViewInfoTask
StatusBarNotification sbn = b.getEntry().getSbn(); StatusBarNotification sbn = b.getEntry().getSbn();
String packageName = sbn.getPackageName(); String packageName = sbn.getPackageName();
// Real shortcut info for this bubble
String bubbleShortcutId = b.getEntry().getBubbleMetadata().getShortcutId(); String bubbleShortcutId = b.getEntry().getBubbleMetadata().getShortcutId();
if (bubbleShortcutId != null) { if (bubbleShortcutId != null) {
info.shortcutInfo = BubbleExperimentConfig.getShortcutInfo(c, packageName, info.shortcutInfo = b.getEntry().getRanking().getShortcutInfo();
sbn.getUser(), bubbleShortcutId);
} else {
// Check for experimental shortcut
String shortcutId = sbn.getNotification().getShortcutId();
if (BubbleExperimentConfig.useShortcutInfoToBubble(c) && shortcutId != null) {
info.shortcutInfo = BubbleExperimentConfig.getShortcutInfo(c,
packageName,
sbn.getUser(), shortcutId);
}
} }
// App name & app icon // App name & app icon
PackageManager pm = c.getPackageManager(); PackageManager pm = c.getPackageManager();
ApplicationInfo appInfo; ApplicationInfo appInfo;