Merge "Show conversation guts when HUNing" into rvc-dev

This commit is contained in:
Steve Elliott
2020-04-03 14:57:24 +00:00
committed by Android (Google) Code Review
7 changed files with 78 additions and 31 deletions

View File

@@ -89,6 +89,7 @@ import com.android.systemui.statusbar.notification.NotificationUtils;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.logging.NotificationCounters;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.notification.stack.AmbientState;
@@ -148,6 +149,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
private KeyguardBypassController mBypassController;
private LayoutListener mLayoutListener;
private RowContentBindStage mRowContentBindStage;
private PeopleNotificationIdentifier mPeopleNotificationIdentifier;
private int mIconTransformContentShift;
private int mMaxHeadsUpHeightBeforeN;
private int mMaxHeadsUpHeightBeforeP;
@@ -1145,7 +1147,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
public void onPluginDisconnected(NotificationMenuRowPlugin plugin) {
boolean existed = mMenuRow.getMenuView() != null;
mMenuRow = new NotificationMenuRow(mContext);
mMenuRow = new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
if (existed) {
createMenu();
}
@@ -1582,7 +1584,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
public ExpandableNotificationRow(Context context, AttributeSet attrs) {
super(context, attrs);
mMenuRow = new NotificationMenuRow(mContext);
mImageResolver = new NotificationInlineImageResolver(context,
new NotificationInlineImageCache());
initDimens();
@@ -1603,9 +1604,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
NotificationMediaManager notificationMediaManager,
OnAppOpsClickListener onAppOpsClickListener,
FalsingManager falsingManager,
StatusBarStateController statusBarStateController) {
StatusBarStateController statusBarStateController,
PeopleNotificationIdentifier peopleNotificationIdentifier) {
mAppName = appName;
if (mMenuRow != null && mMenuRow.getMenuView() != null) {
if (mMenuRow == null) {
mMenuRow = new NotificationMenuRow(mContext, peopleNotificationIdentifier);
}
if (mMenuRow.getMenuView() != null) {
mMenuRow.setAppName(mAppName);
}
mLogger = logger;
@@ -1620,6 +1625,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
setAppOpsOnClickListener(onAppOpsClickListener);
mFalsingManager = falsingManager;
mStatusbarStateController = statusBarStateController;
mPeopleNotificationIdentifier = peopleNotificationIdentifier;
}
private void initDimens() {

View File

@@ -28,6 +28,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.dagger.AppName;
import com.android.systemui.statusbar.notification.row.dagger.DismissRunnable;
import com.android.systemui.statusbar.notification.row.dagger.NotificationKey;
@@ -68,6 +69,7 @@ public class ExpandableNotificationRowController {
private Runnable mOnDismissRunnable;
private final FalsingManager mFalsingManager;
private final boolean mAllowLongPress;
private final PeopleNotificationIdentifier mPeopleNotificationIdentifier;
@Inject
public ExpandableNotificationRowController(ExpandableNotificationRow view,
@@ -83,7 +85,8 @@ public class ExpandableNotificationRowController {
NotificationRowContentBinder.InflationCallback inflationCallback,
NotificationGutsManager notificationGutsManager,
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
@DismissRunnable Runnable onDismissRunnable, FalsingManager falsingManager) {
@DismissRunnable Runnable onDismissRunnable, FalsingManager falsingManager,
PeopleNotificationIdentifier peopleNotificationIdentifier) {
mView = view;
mActivatableNotificationViewController = activatableNotificationViewController;
mMediaManager = mediaManager;
@@ -104,6 +107,7 @@ public class ExpandableNotificationRowController {
mOnAppOpsClickListener = mNotificationGutsManager::openGuts;
mAllowLongPress = allowLongPress;
mFalsingManager = falsingManager;
mPeopleNotificationIdentifier = peopleNotificationIdentifier;
}
/**
@@ -123,7 +127,8 @@ public class ExpandableNotificationRowController {
mMediaManager,
mOnAppOpsClickListener,
mFalsingManager,
mStatusBarStateController
mStatusBarStateController,
mPeopleNotificationIdentifier
);
mView.setOnDismissRunnable(mOnDismissRunnable);
mView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

View File

@@ -45,8 +45,9 @@ import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.AlphaOptimizedImageView;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent;
import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import java.util.ArrayList;
@@ -114,12 +115,16 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
private boolean mIsUserTouching;
public NotificationMenuRow(Context context) {
private final PeopleNotificationIdentifier mPeopleNotificationIdentifier;
public NotificationMenuRow(Context context,
PeopleNotificationIdentifier peopleNotificationIdentifier) {
mContext = context;
mShouldShowMenu = context.getResources().getBoolean(R.bool.config_showNotificationGear);
mHandler = new Handler(Looper.getMainLooper());
mLeftMenuItems = new ArrayList<>();
mRightMenuItems = new ArrayList<>();
mPeopleNotificationIdentifier = peopleNotificationIdentifier;
}
@Override
@@ -260,7 +265,10 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
mSnoozeItem = createSnoozeItem(mContext);
}
mAppOpsItem = createAppOpsItem(mContext);
if (mParent.getEntry().getBucket() == NotificationSectionsManager.BUCKET_PEOPLE) {
NotificationEntry entry = mParent.getEntry();
int personNotifType = mPeopleNotificationIdentifier
.getPeopleNotificationType(entry.getSbn(), entry.getRanking());
if (personNotifType != PeopleNotificationIdentifier.TYPE_NON_PERSON) {
mInfoItem = createConversationItem(mContext);
} else {
mInfoItem = createInfoItem(mContext);

View File

@@ -131,6 +131,7 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
@Mock private ActivatableNotificationViewController mActivatableNotificationViewController;
@Mock private NotificationRowComponent.Builder mNotificationRowComponentBuilder;
@Mock private PeopleNotificationIdentifier mPeopleNotificationIdentifier;
private StatusBarNotification mSbn;
private NotificationListenerService.RankingMap mRankingMap;
@@ -239,7 +240,8 @@ public class NotificationEntryManagerInflationTest extends SysuiTestCase {
mGutsManager,
true,
null,
mFalsingManager
mFalsingManager,
mPeopleNotificationIdentifier
));
when(mNotificationRowComponentBuilder.activatableNotificationView(any()))

View File

@@ -72,6 +72,7 @@ import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager.OnSettingsClickListener;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -118,6 +119,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
@Mock private INotificationManager mINotificationManager;
@Mock private LauncherApps mLauncherApps;
@Mock private ShortcutManager mShortcutManager;
@Mock private PeopleNotificationIdentifier mPeopleNotificationIdentifier;
@Before
public void setUp() {
@@ -465,7 +467,8 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
}
private NotificationMenuRowPlugin.MenuItem createTestMenuItem(ExpandableNotificationRow row) {
NotificationMenuRowPlugin menuRow = new NotificationMenuRow(mContext);
NotificationMenuRowPlugin menuRow =
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
menuRow.createMenu(row, row.getEntry().getSbn());
NotificationMenuRowPlugin.MenuItem menuItem = menuRow.getLongpressMenuItem(mContext);

View File

@@ -40,6 +40,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.utils.leaks.LeakCheckedTest;
import org.junit.After;
@@ -54,11 +55,13 @@ import org.mockito.Mockito;
public class NotificationMenuRowTest extends LeakCheckedTest {
private ExpandableNotificationRow mRow;
private PeopleNotificationIdentifier mPeopleNotificationIdentifier;
@Before
public void setup() {
injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
mRow = mock(ExpandableNotificationRow.class);
mPeopleNotificationIdentifier = mock(PeopleNotificationIdentifier.class);
NotificationEntry entry = new NotificationEntryBuilder().build();
when(mRow.getEntry()).thenReturn(entry);
}
@@ -71,7 +74,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testAttachDetach() {
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
NotificationMenuRowPlugin row =
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.createMenu(mRow, null);
ViewUtils.attachView(row.getMenuView());
TestableLooper.get(this).processAllMessages();
@@ -81,7 +85,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testRecreateMenu() {
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
NotificationMenuRowPlugin row =
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.createMenu(mRow, null);
assertTrue(row.getMenuView() != null);
row.createMenu(mRow, null);
@@ -90,7 +95,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testResetUncreatedMenu() {
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
NotificationMenuRowPlugin row =
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.resetMenu();
}
@@ -99,7 +105,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
public void testNoAppOpsInSlowSwipe() {
Settings.Secure.putInt(mContext.getContentResolver(), SHOW_NOTIFICATION_SNOOZE, 0);
NotificationMenuRow row = new NotificationMenuRow(mContext);
NotificationMenuRow row = new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.createMenu(mRow, null);
ViewGroup container = (ViewGroup) row.getMenuView();
@@ -111,7 +117,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
public void testNoSnoozeInSlowSwipe() {
Settings.Secure.putInt(mContext.getContentResolver(), SHOW_NOTIFICATION_SNOOZE, 0);
NotificationMenuRow row = new NotificationMenuRow(mContext);
NotificationMenuRow row = new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.createMenu(mRow, null);
ViewGroup container = (ViewGroup) row.getMenuView();
@@ -123,7 +129,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
public void testSnoozeInSlowSwipe() {
Settings.Secure.putInt(mContext.getContentResolver(), SHOW_NOTIFICATION_SNOOZE, 1);
NotificationMenuRow row = new NotificationMenuRow(mContext);
NotificationMenuRow row = new NotificationMenuRow(mContext, mPeopleNotificationIdentifier);
row.createMenu(mRow, null);
ViewGroup container = (ViewGroup) row.getMenuView();
@@ -133,7 +139,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testIsSnappedAndOnSameSide() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
when(row.isMenuVisible()).thenReturn(true);
when(row.isMenuSnapped()).thenReturn(true);
@@ -165,7 +172,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testGetMenuSnapTarget() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
when(row.isMenuOnLeft()).thenReturn(true);
doReturn(30).when(row).getSpaceForMenu();
@@ -179,7 +187,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testIsSwipedEnoughToShowMenu() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
when(row.isMenuVisible()).thenReturn(true);
when(row.isMenuOnLeft()).thenReturn(true);
doReturn(40f).when(row).getMinimumSwipeDistance();
@@ -205,7 +214,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testIsWithinSnapMenuThreshold() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
doReturn(30f).when(row).getSnapBackThreshold();
doReturn(50f).when(row).getDismissThreshold();
@@ -238,7 +248,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testShouldSnapBack() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
doReturn(40f).when(row).getSnapBackThreshold();
when(row.isMenuVisible()).thenReturn(false);
when(row.isMenuOnLeft()).thenReturn(true);
@@ -259,7 +270,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testCanBeDismissed() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
ExpandableNotificationRow parent = mock(ExpandableNotificationRow.class);
when(row.getParent()).thenReturn(parent);
@@ -274,7 +286,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testIsTowardsMenu() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
when(row.isMenuVisible()).thenReturn(true);
when(row.isMenuOnLeft()).thenReturn(true);
@@ -294,7 +307,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void onSnapBack() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
NotificationMenuRowPlugin.OnMenuEventListener listener = mock(NotificationMenuRowPlugin
.OnMenuEventListener.class);
row.setMenuClickListener(listener);
@@ -315,7 +329,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testOnSnap() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
when(row.isMenuOnLeft()).thenReturn(true);
NotificationMenuRowPlugin.OnMenuEventListener listener = mock(NotificationMenuRowPlugin
.OnMenuEventListener.class);
@@ -335,7 +350,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testOnDismiss() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
doNothing().when(row).cancelDrag();
row.onSnapOpen();
@@ -351,7 +367,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testOnDown() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
doNothing().when(row).beginDrag();
row.onTouchStart();
@@ -361,7 +378,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testOnUp() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
row.onTouchStart();
assertTrue("before onTouchEnd, isUserTouching is true", row.isUserTouching());
@@ -373,7 +391,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testIsMenuVisible() {
NotificationMenuRow row = Mockito.spy(new NotificationMenuRow((mContext)));
NotificationMenuRow row = Mockito.spy(
new NotificationMenuRow(mContext, mPeopleNotificationIdentifier));
row.setMenuAlpha(0);
assertFalse("when alpha is 0, menu is not visible", row.isMenuVisible());

View File

@@ -57,6 +57,7 @@ import com.android.systemui.statusbar.notification.collection.notifcollection.Co
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.icon.IconBuilder;
import com.android.systemui.statusbar.notification.icon.IconManager;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.ExpansionLogger;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow.OnExpandClickListener;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
@@ -100,6 +101,7 @@ public class NotificationTestHelper {
private final RowContentBindStage mBindStage;
private final IconManager mIconManager;
private StatusBarStateController mStatusBarStateController;
private final PeopleNotificationIdentifier mPeopleNotificationIdentifier;
public NotificationTestHelper(Context context, TestableDependency dependency) {
mContext = context;
@@ -138,6 +140,7 @@ public class NotificationTestHelper {
ArgumentCaptor.forClass(NotifCollectionListener.class);
verify(collection).addCollectionListener(collectionListenerCaptor.capture());
mBindPipelineEntryListener = collectionListenerCaptor.getValue();
mPeopleNotificationIdentifier = mock(PeopleNotificationIdentifier.class);
}
/**
@@ -407,7 +410,8 @@ public class NotificationTestHelper {
mock(NotificationMediaManager.class),
mock(ExpandableNotificationRow.OnAppOpsClickListener.class),
mock(FalsingManager.class),
mStatusBarStateController);
mStatusBarStateController,
mPeopleNotificationIdentifier);
row.setAboveShelfChangedListener(aboveShelf -> { });
mBindStage.getStageParams(entry).requireContentViews(extraInflationFlags);
inflateAndWait(entry, mBindStage);