Merge "Migrate notification shade to use the a11y panes"
This commit is contained in:
@@ -7308,6 +7308,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
return mAccessibilityPaneTitle;
|
||||
}
|
||||
|
||||
private boolean isAccessibilityPane() {
|
||||
return !TextUtils.isEmpty(mAccessibilityPaneTitle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an accessibility event of the given type. If accessibility is
|
||||
* not enabled this method has no effect. The default implementation calls
|
||||
@@ -11637,7 +11641,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
return mode == IMPORTANT_FOR_ACCESSIBILITY_YES || isActionableForAccessibility()
|
||||
|| hasListenersForAccessibility() || getAccessibilityNodeProvider() != null
|
||||
|| getAccessibilityLiveRegion() != ACCESSIBILITY_LIVE_REGION_NONE
|
||||
|| (mAccessibilityPaneTitle != null);
|
||||
|| isAccessibilityPane();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -11734,18 +11738,26 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
|
||||
// Changes to views with a pane title count as window state changes, as the pane title
|
||||
// marks them as significant parts of the UI.
|
||||
if (!TextUtils.isEmpty(getAccessibilityPaneTitle())) {
|
||||
final AccessibilityEvent event = AccessibilityEvent.obtain();
|
||||
event.setEventType(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
|
||||
event.setContentChangeTypes(changeType);
|
||||
onPopulateAccessibilityEvent(event);
|
||||
if (mParent != null) {
|
||||
try {
|
||||
mParent.requestSendAccessibilityEvent(this, event);
|
||||
} catch (AbstractMethodError e) {
|
||||
Log.e(VIEW_LOG_TAG, mParent.getClass().getSimpleName()
|
||||
+ " does not fully implement ViewParent", e);
|
||||
if ((changeType != AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE)
|
||||
&& isAccessibilityPane()) {
|
||||
// If the pane isn't visible, content changed events are sufficient unless we're
|
||||
// reporting that the view just disappeared
|
||||
if ((getVisibility() == VISIBLE)
|
||||
|| (changeType == AccessibilityEvent.CONTENT_CHANGE_TYPE_PANE_DISAPPEARED)) {
|
||||
final AccessibilityEvent event = AccessibilityEvent.obtain();
|
||||
event.setEventType(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
|
||||
event.setContentChangeTypes(changeType);
|
||||
event.setSource(this);
|
||||
onPopulateAccessibilityEvent(event);
|
||||
if (mParent != null) {
|
||||
try {
|
||||
mParent.requestSendAccessibilityEvent(this, event);
|
||||
} catch (AbstractMethodError e) {
|
||||
Log.e(VIEW_LOG_TAG, mParent.getClass().getSimpleName()
|
||||
+ " does not fully implement ViewParent", e);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14035,6 +14047,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
}
|
||||
|
||||
if (accessibilityEnabled) {
|
||||
// If we're an accessibility pane and the visibility changed, we already have sent
|
||||
// a state change, so we really don't need to report other changes.
|
||||
if (isAccessibilityPane()) {
|
||||
changed &= ~VISIBILITY_MASK;
|
||||
}
|
||||
if ((changed & FOCUSABLE) != 0 || (changed & VISIBILITY_MASK) != 0
|
||||
|| (changed & CLICKABLE) != 0 || (changed & LONG_CLICKABLE) != 0
|
||||
|| (changed & CONTEXT_CLICKABLE) != 0) {
|
||||
|
||||
@@ -171,8 +171,6 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
|
||||
queryTiles();
|
||||
mNotifQsContainer.setCustomizerAnimating(true);
|
||||
mNotifQsContainer.setCustomizerShowing(true);
|
||||
announceForAccessibility(mContext.getString(
|
||||
R.string.accessibility_desc_quick_settings_edit));
|
||||
Dependency.get(KeyguardMonitor.class).addCallback(mKeyguardCallback);
|
||||
updateNavColors();
|
||||
}
|
||||
@@ -213,8 +211,6 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
|
||||
mClipper.animateCircularClip(mX, mY, false, mCollapseAnimationListener);
|
||||
mNotifQsContainer.setCustomizerAnimating(true);
|
||||
mNotifQsContainer.setCustomizerShowing(false);
|
||||
announceForAccessibility(mContext.getString(
|
||||
R.string.accessibility_desc_quick_settings));
|
||||
Dependency.get(KeyguardMonitor.class).removeCallback(mKeyguardCallback);
|
||||
updateNavColors();
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
@@ -111,6 +111,7 @@ public class NotificationPanelView extends PanelView implements
|
||||
}
|
||||
};
|
||||
private final PowerManager mPowerManager;
|
||||
private final AccessibilityManager mAccessibilityManager;
|
||||
|
||||
private KeyguardAffordanceHelper mAffordanceHelper;
|
||||
private KeyguardUserSwitcher mKeyguardUserSwitcher;
|
||||
@@ -249,6 +250,8 @@ public class NotificationPanelView extends PanelView implements
|
||||
setWillNotDraw(!DEBUG);
|
||||
mFalsingManager = FalsingManager.getInstance(context);
|
||||
mPowerManager = context.getSystemService(PowerManager.class);
|
||||
mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
|
||||
setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
|
||||
}
|
||||
|
||||
public void setStatusBar(StatusBar bar) {
|
||||
@@ -660,16 +663,6 @@ public class NotificationPanelView extends PanelView implements
|
||||
super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
|
||||
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
|
||||
event.getText().add(getKeyguardOrLockScreenString());
|
||||
mLastAnnouncementWasQuickSettings = false;
|
||||
return true;
|
||||
}
|
||||
return super.dispatchPopulateAccessibilityEventInternal(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(MotionEvent event) {
|
||||
if (mBlockTouches || mQsFullyExpanded && mQs.onInterceptTouchEvent(event)) {
|
||||
@@ -1300,10 +1293,6 @@ public class NotificationPanelView extends PanelView implements
|
||||
setQsExpanded(true);
|
||||
} else if (height <= mQsMinExpansionHeight && mQsExpanded) {
|
||||
setQsExpanded(false);
|
||||
if (mLastAnnouncementWasQuickSettings && !mTracking && !isCollapsing()) {
|
||||
announceForAccessibility(getKeyguardOrLockScreenString());
|
||||
mLastAnnouncementWasQuickSettings = false;
|
||||
}
|
||||
}
|
||||
mQsExpansionHeight = height;
|
||||
updateQsExpansion();
|
||||
@@ -1329,13 +1318,10 @@ public class NotificationPanelView extends PanelView implements
|
||||
updateClock(mClockPositionResult.clockAlpha, mClockPositionResult.clockScale);
|
||||
}
|
||||
|
||||
// Upon initialisation when we are not layouted yet we don't want to announce that we are
|
||||
// fully expanded, hence the != 0.0f check.
|
||||
if (height != 0.0f && mQsFullyExpanded && !mLastAnnouncementWasQuickSettings) {
|
||||
announceForAccessibility(getContext().getString(
|
||||
R.string.accessibility_desc_quick_settings));
|
||||
mLastAnnouncementWasQuickSettings = true;
|
||||
if (mAccessibilityManager.isEnabled()) {
|
||||
setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
|
||||
}
|
||||
|
||||
if (mQsFullyExpanded && mFalsingManager.shouldEnforceBouncer()) {
|
||||
mStatusBar.executeRunnableDismissingKeyguard(null, null /* cancelAction */,
|
||||
false /* dismissShade */, true /* afterKeyguardGone */, false /* deferred */);
|
||||
@@ -1350,9 +1336,13 @@ public class NotificationPanelView extends PanelView implements
|
||||
mQs.setQsExpansion(getQsExpansionFraction(), getHeaderTranslation());
|
||||
}
|
||||
|
||||
private String getKeyguardOrLockScreenString() {
|
||||
private String determineAccessibilityPaneTitle() {
|
||||
if (mQs != null && mQs.isCustomizing()) {
|
||||
return getContext().getString(R.string.accessibility_desc_quick_settings_edit);
|
||||
} else if (mQsExpansionHeight != 0.0f && mQsFullyExpanded) {
|
||||
// Upon initialisation when we are not layouted yet we don't want to announce that we
|
||||
// are fully expanded, hence the != 0.0f check.
|
||||
return getContext().getString(R.string.accessibility_desc_quick_settings);
|
||||
} else if (mStatusBarState == StatusBarState.KEYGUARD) {
|
||||
return getContext().getString(R.string.accessibility_desc_lock_screen);
|
||||
} else {
|
||||
@@ -1880,6 +1870,9 @@ public class NotificationPanelView extends PanelView implements
|
||||
requestScrollerTopPaddingUpdate(false /* animate */);
|
||||
requestPanelHeightUpdate();
|
||||
}
|
||||
if (mAccessibilityManager.isEnabled()) {
|
||||
setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user