Merge "Fix janky swiping with RemoteInputViews" into nyc-dev

am: a9c0d3ff19

* commit 'a9c0d3ff19461b0384ac4a586cd67e2084193604':
  Fix janky swiping with RemoteInputViews

Change-Id: Ie462da81453bbd509ea3ae3c49fdedd611c98cbd
This commit is contained in:
Adrian Roos
2016-05-24 21:23:54 +00:00
committed by android-build-merger
5 changed files with 46 additions and 5 deletions

View File

@@ -702,8 +702,13 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
return mRemoved;
}
public void setRemoved(boolean removed) {
mRemoved = removed;
public void setRemoved() {
mRemoved = true;
mPrivateLayout.setRemoved();
if (mChildrenContainer != null) {
mChildrenContainer.setRemoved();
}
}
public NotificationChildrenContainer getChildrenContainer() {

View File

@@ -1053,4 +1053,13 @@ public class NotificationContentView extends FrameLayout {
public HybridNotificationView getSingleLineView() {
return mSingleLineView;
}
public void setRemoved() {
if (mExpandedRemoteInput != null) {
mExpandedRemoteInput.setRemoved();
}
if (mHeadsUpRemoteInput != null) {
mHeadsUpRemoteInput.setRemoved();
}
}
}

View File

@@ -1508,7 +1508,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
Entry entry = mNotificationData.get(key);
if (entry != null && entry.row != null) {
entry.row.setRemoved(true);
entry.row.setRemoved();
}
// Let's remove the children if this was a summary
handleGroupSummaryRemoved(key, ranking);
@@ -1556,7 +1556,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
toRemove.get(i).setKeepInParent(true);
// we need to set this state earlier as otherwise we might generate some weird
// animations
toRemove.get(i).setRemoved(true);
toRemove.get(i).setRemoved();
}
for (int i = 0; i < toRemove.size(); i++) {
removeNotification(toRemove.get(i).getStatusBarNotification().getKey(), ranking);

View File

@@ -73,6 +73,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private ScrollContainer mScrollContainer;
private View mScrollContainerChild;
private boolean mRemoved;
public RemoteInputView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -171,7 +172,12 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
public void onDefocus() {
mController.removeRemoteInput(mEntry);
mEntry.remoteInputText = mEditText.getText();
setVisibility(INVISIBLE);
// During removal, we get reattached and lose focus. Not hiding in that
// case to prevent flicker.
if (!mRemoved) {
setVisibility(INVISIBLE);
}
MetricsLogger.action(mContext, MetricsProto.MetricsEvent.ACTION_REMOTE_INPUT_CLOSE,
mEntry.notification.getPackageName());
}
@@ -347,6 +353,10 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
return mPendingIntent;
}
public void setRemoved() {
mRemoved = true;
}
/**
* An EditText that changes appearance based on whether it's focusable and becomes
* un-focusable whenever the user navigates away from it or it becomes invisible.
@@ -415,6 +425,15 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
return super.onKeyPreIme(keyCode, event);
}
@Override
public boolean onCheckIsTextEditor() {
// Stop being editable while we're being removed. During removal, we get reattached,
// and editable views get their spellchecking state re-evaluated which is too costly
// during the removal animation.
boolean flyingOut = mRemoteInputView != null && mRemoteInputView.mRemoved;
return !flyingOut && super.onCheckIsTextEditor();
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
final InputConnection inputConnection = super.onCreateInputConnection(outAttrs);

View File

@@ -846,4 +846,12 @@ public class NotificationChildrenContainer extends ViewGroup {
mHybridGroupManager.setOverflowNumberColor(mOverflowNumber,
mNotificationParent.getNotificationColor());
}
public void setRemoved() {
int childCount = mChildren.size();
for (int i = 0; i < childCount; i++) {
ExpandableNotificationRow child = mChildren.get(i);
child.setRemoved();
}
}
}