Merge "Merge "Fixed that clicking on the remoteinput didn't work from AOD" into qt-dev am: 70c8685a94" into qt-dev-plus-aosp
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index 501b1b5..f75f255 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -108,6 +108,8 @@
 
     <item type="id" name="display_cutout" />
 
+    <item type="id" name="row_tag_for_content_view" />
+
     <!-- Optional cancel button on Keyguard -->
     <item type="id" name="cancel_button"/>
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
index 2793b2a..a3e91c7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
@@ -51,6 +51,7 @@
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.NotificationVisibility;
 import com.android.systemui.Dumpable;
+import com.android.systemui.R;
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -348,24 +349,18 @@
 
         ViewParent p = view.getParent();
         RemoteInputView riv = null;
+        ExpandableNotificationRow row = null;
         while (p != null) {
             if (p instanceof View) {
                 View pv = (View) p;
                 if (pv.isRootNamespace()) {
                     riv = findRemoteInputView(pv);
+                    row = (ExpandableNotificationRow) pv.getTag(R.id.row_tag_for_content_view);
                     break;
                 }
             }
             p = p.getParent();
         }
-        ExpandableNotificationRow row = null;
-        while (p != null) {
-            if (p instanceof ExpandableNotificationRow) {
-                row = (ExpandableNotificationRow) p;
-                break;
-            }
-            p = p.getParent();
-        }
 
         if (row == null) {
             return false;
@@ -391,10 +386,13 @@
             if (riv == null) {
                 return false;
             }
-            if (!row.getPrivateLayout().getExpandedChild().isShown()) {
-                mCallback.onMakeExpandedVisibleForRemoteInput(row, view);
-                return true;
-            }
+        }
+        if (riv == row.getPrivateLayout().getExpandedRemoteInput()
+                && !row.getPrivateLayout().getExpandedChild().isShown()) {
+            // The expanded layout is selected, but it's not shown yet, let's wait on it to
+            // show before we do the animation.
+            mCallback.onMakeExpandedVisibleForRemoteInput(row, view);
+            return true;
         }
 
         int width = view.getWidth();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index b81d814..ad745f5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -542,6 +542,12 @@
     }
 
     @Override
+    public void onViewAdded(View child) {
+        super.onViewAdded(child);
+        child.setTag(R.id.row_tag_for_content_view, mContainingNotification);
+    }
+
+    @Override
     protected void onVisibilityChanged(View changedView, int visibility) {
         super.onVisibilityChanged(changedView, visibility);
         updateVisibility();
@@ -1893,4 +1899,8 @@
         }
         pw.println();
     }
+
+    public RemoteInputView getExpandedRemoteInput() {
+        return mExpandedRemoteInput;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
index 471d511..0865eb6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
@@ -28,6 +28,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentSender;
+import android.os.Handler;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.view.View;
@@ -65,6 +66,7 @@
     private final ActivityStarter mActivityStarter = Dependency.get(ActivityStarter.class);
     private final Context mContext;
     private final ActivityIntentHelper mActivityIntentHelper;
+    private final NotificationGroupManager mGroupManager;
     private View mPendingWorkRemoteInputView;
     private View mPendingRemoteInputView;
     private final ShadeController mShadeController = Dependency.get(ShadeController.class);
@@ -72,11 +74,12 @@
     private final CommandQueue mCommandQueue;
     private int mDisabled2;
     protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver();
+    private Handler mMainHandler = new Handler();
 
     /**
      */
     @Inject
-    public StatusBarRemoteInputCallback(Context context) {
+    public StatusBarRemoteInputCallback(Context context, NotificationGroupManager groupManager) {
         mContext = context;
         mContext.registerReceiverAsUser(mChallengeReceiver, UserHandle.ALL,
                 new IntentFilter(ACTION_DEVICE_LOCKED_CHANGED), null, null);
@@ -85,15 +88,15 @@
         mCommandQueue = getComponent(context, CommandQueue.class);
         mCommandQueue.addCallback(this);
         mActivityIntentHelper = new ActivityIntentHelper(mContext);
+        mGroupManager = groupManager;
     }
 
     @Override
     public void onStateChanged(int state) {
         if (state == StatusBarState.SHADE && mStatusBarStateController.leaveOpenOnKeyguardHide()) {
             if (!mStatusBarStateController.isKeyguardRequested()) {
-                if (mPendingRemoteInputView != null
-                        && mPendingRemoteInputView.isAttachedToWindow()) {
-                    mPendingRemoteInputView.post(mPendingRemoteInputView::callOnClick);
+                if (mPendingRemoteInputView != null) {
+                    mMainHandler.post(mPendingRemoteInputView::callOnClick);
                 }
                 mPendingRemoteInputView = null;
             }
@@ -159,6 +162,10 @@
         if (mKeyguardMonitor.isShowing()) {
             onLockedRemoteInput(row, clickedView);
         } else {
+            if (row.isChildInGroup() && !row.areChildrenExpanded()) {
+                // The group isn't expanded, let's make sure it's visible!
+                mGroupManager.toggleGroupExpansion(row.getStatusBarNotification());
+            }
             row.setUserExpanded(true);
             row.getPrivateLayout().setOnExpandedVisibleListener(clickedView::performClick);
         }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
index a88a595..a97832f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
@@ -70,7 +70,8 @@
                 mNotificationLockscreenUserManager);
         mDependency.putComponent(CommandQueue.class, mock(CommandQueue.class));
 
-        mRemoteInputCallback = spy(new StatusBarRemoteInputCallback(mContext));
+        mRemoteInputCallback = spy(new StatusBarRemoteInputCallback(mContext,
+                mock(NotificationGroupManager.class)));
         mRemoteInputCallback.mChallengeReceiver = mRemoteInputCallback.new ChallengeReceiver();
     }