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;