• 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.launcher2;
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 
PagedViewGridLayout(Context context, int cellCountX, int cellCountY)34     public PagedViewGridLayout(Context context, int cellCountX, int cellCountY) {
35         super(context, null, 0);
36         mCellCountX = cellCountX;
37         mCellCountY = cellCountY;
38     }
39 
getCellCountX()40     int getCellCountX() {
41         return mCellCountX;
42     }
43 
getCellCountY()44     int getCellCountY() {
45         return mCellCountY;
46     }
47 
onMeasure(int widthMeasureSpec, int heightMeasureSpec)48     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
49         // PagedView currently has issues with different-sized pages since it calculates the
50         // offset of each page to scroll to before it updates the actual size of each page
51         // (which can change depending on the content if the contents aren't a fixed size).
52         // We work around this by having a minimum size on each widget page).
53         int widthSpecSize = Math.min(getSuggestedMinimumWidth(),
54                 MeasureSpec.getSize(widthMeasureSpec));
55         int widthSpecMode = MeasureSpec.EXACTLY;
56         super.onMeasure(MeasureSpec.makeMeasureSpec(widthSpecSize, widthSpecMode),
57                 heightMeasureSpec);
58     }
59 
60     @Override
onTouchEvent(MotionEvent event)61     public boolean onTouchEvent(MotionEvent event) {
62         boolean result = super.onTouchEvent(event);
63         int count = getPageChildCount();
64         if (count > 0) {
65             // We only intercept the touch if we are tapping in empty space after the final row
66             View child = getChildOnPageAt(count - 1);
67             int bottom = child.getBottom();
68             result = result || (event.getY() < bottom);
69         }
70         return result;
71     }
72 
destroyHardwareLayer()73     void destroyHardwareLayer() {
74         setLayerType(LAYER_TYPE_NONE, null);
75     }
76 
createHardwareLayer()77     void createHardwareLayer() {
78         setLayerType(LAYER_TYPE_HARDWARE, null);
79     }
80 
81     @Override
removeAllViewsOnPage()82     public void removeAllViewsOnPage() {
83         removeAllViews();
84         destroyHardwareLayer();
85     }
86 
87     @Override
removeViewOnPageAt(int index)88     public void removeViewOnPageAt(int index) {
89         removeViewAt(index);
90     }
91 
92     @Override
getPageChildCount()93     public int getPageChildCount() {
94         return getChildCount();
95     }
96 
97     @Override
getChildOnPageAt(int i)98     public View getChildOnPageAt(int i) {
99         return getChildAt(i);
100     }
101 
102     @Override
indexOfChildOnPage(View v)103     public int indexOfChildOnPage(View v) {
104         return indexOfChild(v);
105     }
106 
107     public static class LayoutParams extends FrameLayout.LayoutParams {
LayoutParams(int width, int height)108         public LayoutParams(int width, int height) {
109             super(width, height);
110         }
111     }
112 }
113