diff options
| author | 2020-04-29 23:04:12 +0000 | |
|---|---|---|
| committer | 2020-04-29 23:04:12 +0000 | |
| commit | 5093c5816b7ff7228cd28fa056811368d3d4086f (patch) | |
| tree | e9f1eb45d81231595ee65a6488d7a96b3f613b4a | |
| parent | 636f2a0eb02df0abefff615a784d15ec5982535f (diff) | |
| parent | 4368932b93a444ec9c51d52de8f7cfc14daaf62b (diff) | |
Merge "Fix history task stack" into rvc-dev
6 files changed, 48 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java index ba1b23bd80ed..5748c4aa0b13 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationActivityStarter.java @@ -33,6 +33,8 @@ public interface NotificationActivityStarter { void startNotificationGutsIntent(Intent intent, int appUid, ExpandableNotificationRow row); + void startHistoryIntent(boolean showHistory); + default boolean isCollapsingToShowActivityOverLockscreen() { return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java index c4a720cb659f..09ab1d89473e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationListContainer.java @@ -23,6 +23,7 @@ import android.view.View; import android.view.ViewGroup; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.VisibilityLocationProvider; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.SimpleNotificationListContainer; @@ -194,4 +195,6 @@ public interface NotificationListContainer extends ExpandableView.OnHeightChange * @param v the item to remove */ void removeListItem(@NonNull NotificationListItem v); + + void setNotificationActivityStarter(NotificationActivityStarter notificationActivityStarter); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 9e19c70abf24..7093dd8b39e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -29,6 +29,7 @@ import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEX import static java.lang.annotation.RetentionPolicy.SOURCE; +import android.app.TaskStackBuilder; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.TimeAnimator; @@ -50,6 +51,7 @@ import android.graphics.PointF; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.os.AsyncTask; import android.os.Bundle; import android.os.ServiceManager; import android.provider.Settings; @@ -117,6 +119,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.FakeShadowView; import com.android.systemui.statusbar.notification.ForegroundServiceDismissalFeatureController; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationUtils; @@ -255,6 +258,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd private final AmbientState mAmbientState; private NotificationGroupManager mGroupManager; + private NotificationActivityStarter mNotificationActivityStarter; private HashSet<ExpandableView> mChildrenToAddAnimated = new HashSet<>(); private ArrayList<View> mAddedHeadsUpChildren = new ArrayList<>(); private ArrayList<ExpandableView> mChildrenToRemoveAnimated = new ArrayList<>(); @@ -5699,6 +5703,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd } } + @Override + public void setNotificationActivityStarter( + NotificationActivityStarter notificationActivityStarter) { + mNotificationActivityStarter = notificationActivityStarter; + } + @VisibleForTesting @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) protected void inflateFooterView() { @@ -5709,10 +5719,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd clearNotifications(ROWS_ALL, true /* closeShade */); }); footerView.setManageButtonClickListener(v -> { - Intent intent = footerView.isHistoryShown() ? new Intent( - Settings.ACTION_NOTIFICATION_HISTORY) : new Intent( - Settings.ACTION_NOTIFICATION_SETTINGS); - mStatusBar.startActivity(intent, true, true, Intent.FLAG_ACTIVITY_SINGLE_TOP); + mNotificationActivityStarter.startHistoryIntent(mFooterView.isHistoryShown()); }); setFooterView(footerView); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index a2afd9c2d52b..ac5557b571d7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1301,6 +1301,9 @@ public class StatusBar extends SystemUI implements DemoMode, .setNotificationPanelViewController(mNotificationPanelViewController) .build(); + ((NotificationListContainer) mStackScroller) + .setNotificationActivityStarter(mNotificationActivityStarter); + mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter); mNotificationsController.initialize( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java index fbe3e9b19248..d40b5f9728dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -35,6 +35,7 @@ import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.os.UserHandle; +import android.provider.Settings; import android.service.dreams.IDreamManager; import android.service.notification.NotificationStats; import android.service.notification.StatusBarNotification; @@ -470,6 +471,29 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit }, null, false /* afterKeyguardGone */); } + @Override + public void startHistoryIntent(boolean showHistory) { + mActivityStarter.dismissKeyguardThenExecute(() -> { + AsyncTask.execute(() -> { + Intent intent = showHistory ? new Intent( + Settings.ACTION_NOTIFICATION_HISTORY) : new Intent( + Settings.ACTION_NOTIFICATION_SETTINGS); + TaskStackBuilder tsb = TaskStackBuilder.create(mContext) + .addNextIntent(new Intent(Settings.ACTION_NOTIFICATION_SETTINGS)); + if (showHistory) { + tsb.addNextIntent(intent); + } + tsb.startActivities(); + if (shouldCollapse()) { + // Putting it back on the main thread, since we're touching views + mMainThreadHandler.post(() -> mCommandQueue.animateCollapsePanels( + CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */)); + } + }); + return true; + }, null, false /* afterKeyguardGone */); + } + private void handleFullScreenIntent(NotificationEntry entry) { if (mNotificationInterruptStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry)) { if (shouldSuppressFullScreenIntent(entry)) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java index d41b6cfb32c0..92a2c8738344 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java @@ -43,6 +43,7 @@ import com.android.systemui.bubbles.BubbleController; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; import com.android.systemui.statusbar.notification.DynamicChildBindController; import com.android.systemui.statusbar.notification.DynamicPrivacyController; +import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -329,6 +330,10 @@ public class NotificationViewHierarchyManagerTest extends SysuiTestCase { } @Override + public void setNotificationActivityStarter( + NotificationActivityStarter notificationActivityStarter) {} + + @Override public void addContainerView(View v) { mLayout.addView(v); mRows.add(v); |