Merge "Refocus conversation expand button in TalkBack" into rvc-dev am: 2c99d90744

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11678253

Change-Id: Id5785ab8b9bb54d6d9346bd6141b965777420746
This commit is contained in:
TreeHugger Robot
2020-06-04 16:58:41 +00:00
committed by Automerger Merge Worker
6 changed files with 60 additions and 5 deletions

View File

@@ -1223,7 +1223,6 @@ public class ConversationLayout extends FrameLayout
mExpandButtonContainer.setVisibility(VISIBLE); mExpandButtonContainer.setVisibility(VISIBLE);
mExpandButtonInnerContainer.setOnClickListener(onClickListener); mExpandButtonInnerContainer.setOnClickListener(onClickListener);
} else { } else {
// TODO: handle content paddings to end of layout
mExpandButtonContainer.setVisibility(GONE); mExpandButtonContainer.setVisibility(GONE);
} }
updateContentEndPaddings(); updateContentEndPaddings();

View File

@@ -557,9 +557,9 @@ public class NotificationContentView extends FrameLayout {
private void focusExpandButtonIfNecessary() { private void focusExpandButtonIfNecessary() {
if (mFocusOnVisibilityChange) { if (mFocusOnVisibilityChange) {
NotificationHeaderView header = getVisibleNotificationHeader(); NotificationViewWrapper wrapper = getVisibleWrapper(mVisibleType);
if (header != null) { if (wrapper != null) {
ImageView expandButton = header.getExpandButton(); View expandButton = wrapper.getExpandButton();
if (expandButton != null) { if (expandButton != null) {
expandButton.requestAccessibilityFocus(); expandButton.requestAccessibilityFocus();
} }

View File

@@ -50,6 +50,7 @@ class NotificationConversationTemplateViewWrapper constructor(
private lateinit var conversationBadgeBg: View private lateinit var conversationBadgeBg: View
private lateinit var expandButton: View private lateinit var expandButton: View
private lateinit var expandButtonContainer: View private lateinit var expandButtonContainer: View
private lateinit var expandButtonInnerContainer: View
private lateinit var imageMessageContainer: ViewGroup private lateinit var imageMessageContainer: ViewGroup
private lateinit var messagingLinearLayout: MessagingLinearLayout private lateinit var messagingLinearLayout: MessagingLinearLayout
private lateinit var conversationTitleView: View private lateinit var conversationTitleView: View
@@ -69,6 +70,8 @@ class NotificationConversationTemplateViewWrapper constructor(
expandButton = requireViewById(com.android.internal.R.id.expand_button) expandButton = requireViewById(com.android.internal.R.id.expand_button)
expandButtonContainer = expandButtonContainer =
requireViewById(com.android.internal.R.id.expand_button_container) requireViewById(com.android.internal.R.id.expand_button_container)
expandButtonInnerContainer =
requireViewById(com.android.internal.R.id.expand_button_inner_container)
importanceRing = requireViewById(com.android.internal.R.id.conversation_icon_badge_ring) importanceRing = requireViewById(com.android.internal.R.id.conversation_icon_badge_ring)
appName = requireViewById(com.android.internal.R.id.app_name_text) appName = requireViewById(com.android.internal.R.id.app_name_text)
conversationTitleView = requireViewById(com.android.internal.R.id.conversation_text) conversationTitleView = requireViewById(com.android.internal.R.id.conversation_text)
@@ -134,6 +137,8 @@ class NotificationConversationTemplateViewWrapper constructor(
) )
} }
override fun getExpandButton() = expandButtonInnerContainer
override fun setShelfIconVisible(visible: Boolean) { override fun setShelfIconVisible(visible: Boolean) {
if (conversationLayout.isImportantConversation) { if (conversationLayout.isImportantConversation) {
if (conversationIconView.visibility != GONE) { if (conversationIconView.visibility != GONE) {

View File

@@ -316,6 +316,11 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
return mNotificationHeader; return mNotificationHeader;
} }
@Override
public View getExpandButton() {
return mExpandButton;
}
@Override @Override
public int getOriginalIconColor() { public int getOriginalIconColor() {
return mIcon.getOriginalIconColor(); return mIcon.getOriginalIconColor();

View File

@@ -240,6 +240,13 @@ public abstract class NotificationViewWrapper implements TransformableView {
return null; return null;
} }
/**
* @return the expand button if it exists
*/
public @Nullable View getExpandButton() {
return null;
}
public int getOriginalIconColor() { public int getOriginalIconColor() {
return Notification.COLOR_INVALID; return Notification.COLOR_INVALID;
} }

View File

@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.notification.row; package com.android.systemui.statusbar.notification.row;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
@@ -30,11 +29,13 @@ import android.app.AppOpsManager;
import android.util.ArraySet; import android.util.ArraySet;
import android.view.NotificationHeaderView; import android.view.NotificationHeaderView;
import android.view.View; import android.view.View;
import android.view.ViewPropertyAnimator;
import androidx.test.annotation.UiThreadTest; import androidx.test.annotation.UiThreadTest;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
import com.android.internal.widget.NotificationExpandButton;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import org.junit.Before; import org.junit.Before;
@@ -98,4 +99,42 @@ public class NotificationContentViewTest extends SysuiTestCase {
verify(mockExpanded, times(1)).setVisibility(View.VISIBLE); verify(mockExpanded, times(1)).setVisibility(View.VISIBLE);
verify(mockHeadsUp, times(1)).setVisibility(View.VISIBLE); verify(mockHeadsUp, times(1)).setVisibility(View.VISIBLE);
} }
@Test
@UiThreadTest
public void testExpandButtonFocusIsCalled() {
View mockContractedEB = mock(NotificationExpandButton.class);
View mockContracted = mock(NotificationHeaderView.class);
when(mockContracted.animate()).thenReturn(mock(ViewPropertyAnimator.class));
when(mockContracted.findViewById(com.android.internal.R.id.expand_button)).thenReturn(
mockContractedEB);
View mockExpandedEB = mock(NotificationExpandButton.class);
View mockExpanded = mock(NotificationHeaderView.class);
when(mockExpanded.animate()).thenReturn(mock(ViewPropertyAnimator.class));
when(mockExpanded.findViewById(com.android.internal.R.id.expand_button)).thenReturn(
mockExpandedEB);
View mockHeadsUpEB = mock(NotificationExpandButton.class);
View mockHeadsUp = mock(NotificationHeaderView.class);
when(mockHeadsUp.animate()).thenReturn(mock(ViewPropertyAnimator.class));
when(mockHeadsUp.findViewById(com.android.internal.R.id.expand_button)).thenReturn(
mockHeadsUpEB);
// Set up all 3 child forms
mView.setContractedChild(mockContracted);
mView.setExpandedChild(mockExpanded);
mView.setHeadsUpChild(mockHeadsUp);
// This is required to call requestAccessibilityFocus()
mView.setFocusOnVisibilityChange();
// The following will initialize the view and switch from not visible to expanded.
// (heads-up is actually an alternate form of contracted, hence this enters expanded state)
mView.setHeadsUp(true);
verify(mockContractedEB, times(0)).requestAccessibilityFocus();
verify(mockExpandedEB, times(1)).requestAccessibilityFocus();
verify(mockHeadsUpEB, times(0)).requestAccessibilityFocus();
}
} }