Fixed that clicking on the remoteinput didn't work from AOD
Because we are freeing the AOD view, the view was not attached to the window anymore and therefore we would not trigger the remote input. Additionally if the expanded view was already showing on AOD, we also wouldn't wait on it to become visible, also leading to an issue where the user couldn't reply. This also fixes an issue where the notificaiton would be invisible if it was replied to in a group. Fixes: 118365629 Fixes: 110072505 Change-Id: Ied33ed19eacc115006f5457f427acd4fefe0494b
This commit is contained in:
@@ -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"/>
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
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 @@ public class NotificationRemoteInputManager implements Dumpable {
|
||||
|
||||
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 @@ public class NotificationRemoteInputManager implements Dumpable {
|
||||
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();
|
||||
|
||||
@@ -541,6 +541,12 @@ public class NotificationContentView extends FrameLayout {
|
||||
mContainingNotification);
|
||||
}
|
||||
|
||||
@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);
|
||||
@@ -1893,4 +1899,8 @@ public class NotificationContentView extends FrameLayout {
|
||||
}
|
||||
pw.println();
|
||||
}
|
||||
|
||||
public RemoteInputView getExpandedRemoteInput() {
|
||||
return mExpandedRemoteInput;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.content.Context;
|
||||
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 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
|
||||
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 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
|
||||
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 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
|
||||
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 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks,
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -70,7 +70,8 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase {
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user