diff --git a/res/values/strings.xml b/res/values/strings.xml index 11179004eb..3c1a9c6579 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -471,6 +471,12 @@ Shortcut Menu + + Widget Resize Frame for %1$s + + + Close + Dismiss diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index b51e850c04..213d88f852 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -216,6 +216,13 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O AppWidgetResizeFrame frame = (AppWidgetResizeFrame) launcher.getLayoutInflater() .inflate(R.layout.app_widget_resize_frame, dl, false); frame.setupForWidget(widget, cellLayout, dl); + // Save widget item info as tag on resize frame; so that, the accessibility delegate can + // attach actions that typically happen on widget (e.g. resize, move) also on the resize + // frame. + frame.setTag(widget.getTag()); + frame.setAccessibilityDelegate(launcher.getAccessibilityDelegate()); + frame.setContentDescription(launcher.asContext().getString(R.string.widget_frame_name, + widget.getContentDescription())); ((DragLayer.LayoutParams) frame.getLayoutParams()).customPosition = true; dl.addView(frame); @@ -235,6 +242,13 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O } } + /** + * Retrieves the view where accessibility actions happen. + */ + public View getViewForAccessibility() { + return mWidgetView; + } + private void setupForWidget(LauncherAppWidgetHostView widgetView, CellLayout cellLayout, DragLayer dragLayer) { mCellLayout = cellLayout; diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index 78b53a96bd..cd91f8e00b 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -25,6 +25,7 @@ import android.view.accessibility.AccessibilityEvent; import androidx.annotation.Nullable; import com.android.launcher3.AbstractFloatingView; +import com.android.launcher3.AppWidgetResizeFrame; import com.android.launcher3.BubbleTextView; import com.android.launcher3.ButtonDropTarget; import com.android.launcher3.CellLayout; @@ -82,6 +83,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate actions = getSupportedResizeActions(host, info); + List actions = getSupportedResizeActions(itemView, info); Rect pos = new Rect(); - mContext.getDragLayer().getDescendantRectRelativeToSelf(host, pos); + mContext.getDragLayer().getDescendantRectRelativeToSelf(itemView, pos); ArrowPopup popup = OptionsPopupView.show(mContext, new RectF(pos), actions, false); popup.requestFocus(); popup.addOnCloseCallback(() -> { - host.requestFocus(); - host.sendAccessibilityEvent(TYPE_VIEW_FOCUSED); - host.performAccessibilityAction(ACTION_ACCESSIBILITY_FOCUS, null); + itemView.requestFocus(); + itemView.sendAccessibilityEvent(TYPE_VIEW_FOCUSED); + itemView.performAccessibilityAction(ACTION_ACCESSIBILITY_FOCUS, null); AbstractFloatingView.closeOpenViews(mContext, /* animate= */ false, AbstractFloatingView.TYPE_WIDGET_RESIZE_FRAME); }); @@ -208,6 +222,11 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate getSupportedResizeActions(View host, LauncherAppWidgetInfo info) { List actions = new ArrayList<>(); + if (host instanceof AppWidgetResizeFrame) { + return getSupportedResizeActions( + ((AppWidgetResizeFrame) host).getViewForAccessibility(), info); + } AppWidgetProviderInfo providerInfo = ((LauncherAppWidgetHostView) host).getAppWidgetInfo(); if (providerInfo == null) { return actions;