summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-05-09 20:43:21 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-06-08 15:00:09 -0700
commit3333b0ced8e6743c41909f6f6b916f1f9ec5a004 (patch)
tree7fd735821e3393a0dfe8691087f58ebbaa9dafae /src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java
parentab06999a70c773ffbc0aadaf938e0e90f8ca09b2 (diff)
downloadandroid_packages_apps_Trebuchet-3333b0ced8e6743c41909f6f6b916f1f9ec5a004.tar.gz
android_packages_apps_Trebuchet-3333b0ced8e6743c41909f6f6b916f1f9ec5a004.tar.bz2
android_packages_apps_Trebuchet-3333b0ced8e6743c41909f6f6b916f1f9ec5a004.zip
Unifying focus indicator handling for workspace and all-apps
Adding an abstract FocusIndicatorHelper based on FocusIndicatorView which draws the background instead of using a dummy view. Change-Id: Id560195323d2ddad8fcd77ba675cf3f4fd4a94ab
Diffstat (limited to 'src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java')
-rw-r--r--src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java
new file mode 100644
index 000000000..bd5c06e5b
--- /dev/null
+++ b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+package com.android.launcher3.keyboard;
+
+import android.graphics.Rect;
+import android.view.View;
+import android.view.View.OnFocusChangeListener;
+
+import com.android.launcher3.PagedView;
+
+/**
+ * {@link FocusIndicatorHelper} for a generic view group.
+ */
+public class ViewGroupFocusHelper extends FocusIndicatorHelper {
+
+ private final View mContainer;
+
+ public ViewGroupFocusHelper(View container) {
+ super(container);
+ mContainer = container;
+ }
+
+ @Override
+ public void viewToRect(View v, Rect outRect) {
+ outRect.left = 0;
+ outRect.top = 0;
+
+ computeLocationRelativeToContainer(v, outRect);
+
+ // If a view is scaled, its position will also shift accordingly. For optimization, only
+ // consider this for the last node.
+ outRect.left += (1 - v.getScaleX()) * v.getWidth() / 2;
+ outRect.top += (1 - v.getScaleY()) * v.getHeight() / 2;
+
+ outRect.right = outRect.left + (int) (v.getScaleX() * v.getWidth());
+ outRect.bottom = outRect.top + (int) (v.getScaleY() * v.getHeight());
+ }
+
+ private void computeLocationRelativeToContainer(View child, Rect outRect) {
+ View parent = (View) child.getParent();
+ outRect.left += child.getLeft();
+ outRect.top += child.getTop();
+
+ if (parent != mContainer) {
+ if (parent instanceof PagedView) {
+ PagedView page = (PagedView) parent;
+ outRect.left -= page.getScrollForPage(page.indexOfChild(child));
+ }
+
+ computeLocationRelativeToContainer(parent, outRect);
+ }
+ }
+
+ /**
+ * Sets the alpha of this FocusIndicatorHelper to 0 when a view with this listener
+ * receives focus.
+ */
+ public View.OnFocusChangeListener getHideIndicatorOnFocusListener() {
+ return new OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if (hasFocus) {
+ endCurrentAnimation();
+ setCurrentView(null);
+ setAlpha(0);
+ invalidateDirty();
+ }
+ }
+ };
+ }
+}