diff options
author | Tony Wickham <twickham@google.com> | 2017-05-19 12:17:02 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2017-05-19 12:17:02 -0700 |
commit | 3720c69322210e2e196ad93bf856eadc3a956177 (patch) | |
tree | 986c9d06cb25078fca44fdda8fd01604bb83e3ba | |
parent | 4de0ddc4f16ea7d89f20cac68380f3095fd83f91 (diff) | |
parent | 8af16760dcb367dc7568ae3736b797cd2c8406c1 (diff) | |
download | android_packages_apps_Trebuchet-3720c69322210e2e196ad93bf856eadc3a956177.tar.gz android_packages_apps_Trebuchet-3720c69322210e2e196ad93bf856eadc3a956177.tar.bz2 android_packages_apps_Trebuchet-3720c69322210e2e196ad93bf856eadc3a956177.zip |
resolve merge conflicts of 8af16760d to ub-launcher3-dorval-polish
Test: I solemnly swear I tested this conflict resolution.
Change-Id: I4cdfeebd09be58270c249429104d91dc9a31b49c
10 files changed, 56 insertions, 22 deletions
diff --git a/res/values/config.xml b/res/values/config.xml index ace1d7e5f..8f2590abc 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -138,4 +138,5 @@ <item type="id" name="action_move_screen_forwards" /> <item type="id" name="action_resize" /> <item type="id" name="action_deep_shortcuts" /> + <item type="id" name="action_dismiss_notification" /> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index f7c482567..1fe33aedf 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -292,5 +292,13 @@ <!-- Accessibility description for the shortcuts menu shown for an app. --> <string name="shortcuts_menu_description"><xliff:g id="number_of_shortcuts" example="3">%1$d</xliff:g> shortcuts for <xliff:g id="app_name" example="Messenger">%2$s</xliff:g></string> + <!-- Accessibility description when the shortcuts menu has notifications as well as shortcuts. --> + <string name="shortcuts_menu_with_notifications_description"><xliff:g id="number_of_shortcuts" example="3">%1$d</xliff:g> shortcuts and <xliff:g id="number_of_notifications" example="3">%2$d</xliff:g> notifications for <xliff:g id="app_name" example="Messenger">%3$s</xliff:g></string> + + <!-- Accessibility action to dismiss a notification in the shortcuts menu for an icon. [CHAR_LIMIT=30] --> + <string name="action_dismiss_notification">Dismiss</string> + + <!-- Accessibility confirmation for notification being dismissed. --> + <string name="notification_dismissed">Notification dismissed</string> </resources> diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 251f9d872..e49ead0f7 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -674,14 +674,6 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver { } } - /** - * Returns true if the view can show custom shortcuts. - */ - public boolean hasDeepShortcuts() { - return !mLauncher.getPopupDataProvider().getShortcutIdsForItem((ItemInfo) getTag()) - .isEmpty(); - } - public int getIconSize() { return mIconSize; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 4be25bb17..f4342a29a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4054,8 +4054,8 @@ public class Launcher extends BaseActivity shortcutInfos.add(new KeyboardShortcutInfo(getString(R.string.custom_actions), KeyEvent.KEYCODE_O, KeyEvent.META_CTRL_ON)); } - if (currentFocus instanceof BubbleTextView && - ((BubbleTextView) currentFocus).hasDeepShortcuts()) { + if (currentFocus.getTag() instanceof ItemInfo + && DeepShortcutManager.supportsShortcuts((ItemInfo) currentFocus.getTag())) { shortcutInfos.add(new KeyboardShortcutInfo(getString(R.string.action_deep_shortcut), KeyEvent.KEYCODE_S, KeyEvent.META_CTRL_ON)); } diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index e8127c45f..34335330b 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -36,6 +36,7 @@ import com.android.launcher3.dragndrop.DragController.DragListener; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.folder.Folder; import com.android.launcher3.popup.PopupContainerWithArrow; +import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.util.Thunk; import java.util.ArrayList; @@ -103,8 +104,7 @@ public class LauncherAccessibilityDelegate extends AccessibilityDelegate impleme // If the request came from keyboard, do not add custom shortcuts as that is already // exposed as a direct shortcut - if (!fromKeyboard && host instanceof BubbleTextView - && ((BubbleTextView) host).hasDeepShortcuts()) { + if (!fromKeyboard && DeepShortcutManager.supportsShortcuts(item)) { info.addAction(mActions.get(DEEP_SHORTCUTS)); } diff --git a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java index 2ad0edbbc..816121995 100644 --- a/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/ShortcutMenuAccessibilityDelegate.java @@ -18,6 +18,7 @@ package com.android.launcher3.accessibility; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.ItemInfo; @@ -25,6 +26,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; import com.android.launcher3.ShortcutInfo; +import com.android.launcher3.notification.NotificationMainView; import com.android.launcher3.shortcuts.DeepShortcutView; import java.util.ArrayList; @@ -35,14 +37,23 @@ import java.util.ArrayList; */ public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDelegate { + private static final int DISMISS_NOTIFICATION = R.id.action_dismiss_notification; + public ShortcutMenuAccessibilityDelegate(Launcher launcher) { super(launcher); + mActions.put(DISMISS_NOTIFICATION, new AccessibilityAction(DISMISS_NOTIFICATION, + launcher.getText(R.string.action_dismiss_notification))); } @Override public void addSupportedActions(View host, AccessibilityNodeInfo info, boolean fromKeyboard) { if ((host.getParent() instanceof DeepShortcutView)) { info.addAction(mActions.get(ADD_TO_WORKSPACE)); + } else if (host instanceof NotificationMainView) { + NotificationMainView notificationView = (NotificationMainView) host; + if (notificationView.canChildBeDismissed(notificationView)) { + info.addAction(mActions.get(DISMISS_NOTIFICATION)); + } } } @@ -73,6 +84,14 @@ public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDele onComplete.run(); } return true; + } else if (action == DISMISS_NOTIFICATION) { + if (!(host instanceof NotificationMainView)) { + return false; + } + NotificationMainView notificationView = (NotificationMainView) host; + notificationView.onChildDismissed(notificationView); + announceConfirmation(R.string.notification_dismissed); + return true; } return false; } diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java index 1eef743fe..051c0333d 100644 --- a/src/com/android/launcher3/notification/NotificationFooterLayout.java +++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java @@ -141,6 +141,7 @@ public class NotificationFooterLayout extends FrameLayout { icon.setBackground(info.getIconForBackground(getContext(), mBackgroundColor)); icon.setOnClickListener(info); icon.setTag(info); + icon.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); mIconRow.addView(icon, 0, mIconLayoutParams); return icon; } diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java index dd272b3bc..997def277 100644 --- a/src/com/android/launcher3/notification/NotificationItemView.java +++ b/src/com/android/launcher3/notification/NotificationItemView.java @@ -77,6 +77,10 @@ public class NotificationItemView extends PopupItemView implements LogContainerP mSwipeHelper.setDisableHardwareLayers(true); } + public NotificationMainView getMainView() { + return mMainView; + } + public int getHeightMinusFooter() { int footerHeight = mFooter.getParent() == null ? 0 : mFooter.getHeight(); return getHeight() - footerHeight; diff --git a/src/com/android/launcher3/notification/NotificationMainView.java b/src/com/android/launcher3/notification/NotificationMainView.java index d6e0272fe..0d6da77ee 100644 --- a/src/com/android/launcher3/notification/NotificationMainView.java +++ b/src/com/android/launcher3/notification/NotificationMainView.java @@ -122,7 +122,7 @@ public class NotificationMainView extends FrameLayout implements SwipeHelper.Cal @Override public boolean canChildBeDismissed(View v) { - return mNotificationInfo.dismissable; + return mNotificationInfo != null && mNotificationInfo.dismissable; } @Override diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index d4ee3b8cb..ccead37dc 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -114,7 +114,6 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra mStartDragThreshold = getResources().getDimensionPixelSize( R.dimen.deep_shortcuts_start_drag_threshold); - // TODO: make sure the delegate works for all items, not just shortcuts. mAccessibilityDelegate = new ShortcutMenuAccessibilityDelegate(mLauncher); mIsRtl = Utilities.isRtl(getResources()); } @@ -176,7 +175,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra // Add dummy views first, and populate with real info when ready. PopupPopulator.Item[] itemsToPopulate = PopupPopulator .getItemsToPopulate(shortcutIds, notificationKeys, systemShortcuts); - addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1); + addDummyViews(itemsToPopulate, notificationKeys.size() > 1); measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); orientAboutIcon(originalIcon, arrowHeight + arrowVerticalOffset); @@ -187,7 +186,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra mNotificationItemView = null; mShortcutsItemView = null; itemsToPopulate = PopupPopulator.reverseItems(itemsToPopulate); - addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1); + addDummyViews(itemsToPopulate, notificationKeys.size() > 1); measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); orientAboutIcon(originalIcon, arrowHeight + arrowVerticalOffset); @@ -204,6 +203,17 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra updateNotificationHeader(); } + int numShortcuts = shortcutViews.size() + systemShortcutViews.size(); + int numNotifications = notificationKeys.size(); + if (numNotifications == 0) { + setContentDescription(getContext().getString(R.string.shortcuts_menu_description, + numShortcuts, originalIcon.getContentDescription().toString())); + } else { + setContentDescription(getContext().getString( + R.string.shortcuts_menu_with_notifications_description, numShortcuts, + numNotifications, originalIcon.getContentDescription().toString())); + } + // Add the arrow. final int arrowHorizontalOffset = resources.getDimensionPixelSize(isAlignedWithStart() ? R.dimen.popup_arrow_horizontal_offset_start : @@ -225,8 +235,8 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra systemShortcuts, systemShortcutViews)); } - private void addDummyViews(BubbleTextView originalIcon, - PopupPopulator.Item[] itemTypesToPopulate, boolean notificationFooterHasIcons) { + private void addDummyViews(PopupPopulator.Item[] itemTypesToPopulate, + boolean notificationFooterHasIcons) { final Resources res = getResources(); final int spacing = res.getDimensionPixelSize(R.dimen.popup_items_spacing); final LayoutInflater inflater = mLauncher.getLayoutInflater(); @@ -243,12 +253,14 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra int footerHeight = notificationFooterHasIcons ? res.getDimensionPixelSize(R.dimen.notification_footer_height) : 0; item.findViewById(R.id.footer).getLayoutParams().height = footerHeight; + mNotificationItemView.getMainView().setAccessibilityDelegate(mAccessibilityDelegate); + } else if (itemTypeToPopulate == PopupPopulator.Item.SHORTCUT) { + item.setAccessibilityDelegate(mAccessibilityDelegate); } boolean shouldAddBottomMargin = nextItemTypeToPopulate != null && itemTypeToPopulate.isShortcut ^ nextItemTypeToPopulate.isShortcut; - item.setAccessibilityDelegate(mAccessibilityDelegate); if (itemTypeToPopulate.isShortcut) { if (mShortcutsItemView == null) { mShortcutsItemView = (ShortcutsItemView) inflater.inflate( @@ -266,9 +278,6 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra } } } - // TODO: update this, since not all items are shortcuts - setContentDescription(getContext().getString(R.string.shortcuts_menu_description, - numItems, originalIcon.getContentDescription().toString())); } protected PopupItemView getItemViewAt(int index) { |