Loading res/drawable/widget_internal_focus_bg.xml 0 → 100644 +28 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- /* ** ** Copyright 2015, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <!-- Used as the widget host view background when giving focus to a child via keyboard. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <shape android:shape="rectangle"> <stroke android:color="#fff" android:width="2dp" /> </shape> </item> </selector> No newline at end of file src/com/android/launcher3/LauncherAppWidgetHostView.java +9 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } Loading @@ -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 Loading @@ -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 Loading Loading
res/drawable/widget_internal_focus_bg.xml 0 → 100644 +28 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- /* ** ** Copyright 2015, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <!-- Used as the widget host view background when giving focus to a child via keyboard. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <shape android:shape="rectangle"> <stroke android:color="#fff" android:width="2dp" /> </shape> </item> </selector> No newline at end of file
src/com/android/launcher3/LauncherAppWidgetHostView.java +9 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } Loading @@ -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 Loading @@ -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 Loading