• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.launcher3;
18 
19 import android.content.Context;
20 import android.view.MotionEvent;
21 import android.view.View;
22 import android.widget.FrameLayout;
23 import android.widget.GridLayout;
24 
25 /**
26  * The grid based layout used strictly for the widget/wallpaper tab of the AppsCustomize pane
27  */
28 public class PagedViewGridLayout extends GridLayout implements Page {
29     static final String TAG = "PagedViewGridLayout";
30 
31     private int mCellCountX;
32     private int mCellCountY;
33     private Runnable mOnLayoutListener;
34 
PagedViewGridLayout(Context context, int cellCountX, int cellCountY)35     public PagedViewGridLayout(Context context, int cellCountX, int cellCountY) {
36         super(context, null, 0);
37         mCellCountX = cellCountX;
38         mCellCountY = cellCountY;
39     }
40 
getCellCountX()41     int getCellCountX() {
42         return mCellCountX;
43     }
44 
getCellCountY()45     int getCellCountY() {
46         return mCellCountY;
47     }
48 
49     /**
50      * Clears all the key listeners for the individual widgets.
51      */
resetChildrenOnKeyListeners()52     public void resetChildrenOnKeyListeners() {
53         int childCount = getChildCount();
54         for (int j = 0; j < childCount; ++j) {
55             getChildAt(j).setOnKeyListener(null);
56         }
57     }
58 
59     @Override
onDetachedFromWindow()60     protected void onDetachedFromWindow() {
61         super.onDetachedFromWindow();
62         mOnLayoutListener = null;
63     }
64 
setOnLayoutListener(Runnable r)65     public void setOnLayoutListener(Runnable r) {
66         mOnLayoutListener = r;
67     }
68 
onLayout(boolean changed, int left, int top, int right, int bottom)69     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
70         super.onLayout(changed, left, top, right, bottom);
71         if (mOnLayoutListener != null) {
72             mOnLayoutListener.run();
73         }
74     }
75 
76     @Override
onTouchEvent(MotionEvent event)77     public boolean onTouchEvent(MotionEvent event) {
78         boolean result = super.onTouchEvent(event);
79         int count = getPageChildCount();
80         if (count > 0) {
81             // We only intercept the touch if we are tapping in empty space after the final row
82             View child = getChildOnPageAt(count - 1);
83             int bottom = child.getBottom();
84             result = result || (event.getY() < bottom);
85         }
86         return result;
87     }
88 
89     @Override
removeAllViewsOnPage()90     public void removeAllViewsOnPage() {
91         removeAllViews();
92         mOnLayoutListener = null;
93         setLayerType(LAYER_TYPE_NONE, null);
94     }
95 
96     @Override
removeViewOnPageAt(int index)97     public void removeViewOnPageAt(int index) {
98         removeViewAt(index);
99     }
100 
101     @Override
getPageChildCount()102     public int getPageChildCount() {
103         return getChildCount();
104     }
105 
106     @Override
getChildOnPageAt(int i)107     public View getChildOnPageAt(int i) {
108         return getChildAt(i);
109     }
110 
111     @Override
indexOfChildOnPage(View v)112     public int indexOfChildOnPage(View v) {
113         return indexOfChild(v);
114     }
115 
116     public static class LayoutParams extends FrameLayout.LayoutParams {
LayoutParams(int width, int height)117         public LayoutParams(int width, int height) {
118             super(width, height);
119         }
120     }
121 }
122