From fb78856466f425af729a5a3d52b1b05a87be33d7 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 10 Feb 2016 12:15:41 -0800 Subject: Change widget host view background when giving focus to child. Before, the FocusIndicatorView stayed on the widget host unless the widget had its own focus change listener, which caused a couple of problems, namely (1) it was hard to know where the focus was from a user's standpoint, and (2) the focus indicator could get stuck on the screen if you entered a widget and then long-pressed workspace. Now, the focus indicator goes away and instead the widget is framed with a white border to indicate that the focus is inside it. The frame goes away when pressing ESC or when touching the screen. Bug: 26744224 Change-Id: I14025576fd7a9f901b4d969b878af0bebad79a70 --- src/com/android/launcher3/LauncherAppWidgetHostView.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/com/android/launcher3/LauncherAppWidgetHostView.java') diff --git a/src/com/android/launcher3/LauncherAppWidgetHostView.java b/src/com/android/launcher3/LauncherAppWidgetHostView.java index 18ae753c9..418525758 100644 --- a/src/com/android/launcher3/LauncherAppWidgetHostView.java +++ b/src/com/android/launcher3/LauncherAppWidgetHostView.java @@ -57,6 +57,8 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView implements Touc mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mDragLayer = ((Launcher) context).getDragLayer(); setAccessibilityDelegate(LauncherAppState.getInstance().getAccessibilityDelegate()); + + setBackgroundResource(R.drawable.widget_internal_focus_bg); } @Override @@ -241,6 +243,7 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView implements Touc protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { if (gainFocus) { mChildrenFocused = false; + dispatchChildFocus(false); } super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); } @@ -249,6 +252,9 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView implements Touc public void requestChildFocus(View child, View focused) { super.requestChildFocus(child, focused); dispatchChildFocus(focused != null); + if (focused != null) { + focused.setFocusableInTouchMode(false); + } } @Override @@ -262,10 +268,9 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView implements Touc return mChildrenFocused; } - private void dispatchChildFocus(boolean focused) { - if (getOnFocusChangeListener() != null) { - getOnFocusChangeListener().onFocusChange(this, focused || isFocused()); - } + private void dispatchChildFocus(boolean childIsFocused) { + // The host view's background changes when selected, to indicate the focus is inside. + setSelected(childIsFocused); } @Override -- cgit v1.2.3