From: Tony Wickham Date: Wed, 10 Feb 2016 20:15:41 +0000 (-0800) Subject: Change widget host view background when giving focus to child. X-Git-Tag: android-x86-7.1-r1~166^2~31^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fb78856466f425af729a5a3d52b1b05a87be33d7;p=android-x86%2Fpackages-apps-Launcher3.git 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 --- diff --git a/res/drawable/widget_internal_focus_bg.xml b/res/drawable/widget_internal_focus_bg.xml new file mode 100644 index 000000000..4d4bea63f --- /dev/null +++ b/res/drawable/widget_internal_focus_bg.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + \ No newline at end of file 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