HorizontalGridTestActivity.java revision ccea98979aa38d1061ae38a31271040a698c9d87
1/*
2 * Copyright (C) 2013 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
17package com.example.android.leanback;
18
19import android.support.v7.widget.RecyclerView;
20import android.support.v17.leanback.widget.HorizontalGridView;
21import android.support.v17.leanback.widget.OnChildSelectedListener;
22import android.app.Activity;
23import android.content.Context;
24import android.content.Intent;
25import android.graphics.BitmapFactory;
26import android.graphics.Color;
27import android.graphics.drawable.ColorDrawable;
28import android.graphics.drawable.Drawable;
29import android.net.Uri;
30import android.os.Bundle;
31import android.util.Log;
32import android.util.SparseArray;
33import android.view.MotionEvent;
34import android.view.View;
35import android.view.View.OnClickListener;
36import android.view.View.OnFocusChangeListener;
37import android.view.ViewGroup;
38import android.widget.ImageView;
39import android.widget.TextView;
40
41import java.io.File;
42
43public class HorizontalGridTestActivity extends Activity {
44    private static final String TAG = "HorizontalGridTestActivity";
45    private static final boolean DEBUG = true;
46    private static final String SELECT_ACTION = "android.test.leanback.widget.SELECT";
47    private static final int NUM_ITEMS = 100;
48    private static final boolean STAGGERED = true;
49
50    private HorizontalGridView mHorizontalGridView;
51    private int mScrollState = RecyclerView.SCROLL_STATE_IDLE;
52
53    private RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() {
54        @Override
55        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
56            if (DEBUG) {
57                final String[] stateNames = { "IDLE", "DRAGGING", "SETTLING" };
58                Log.v(TAG, "onScrollStateChanged "
59                        + (newState < stateNames.length ? stateNames[newState] : newState));
60            }
61            mScrollState = newState;
62        }
63    };
64
65    private View createView() {
66        View view = getLayoutInflater().inflate(R.layout.horizontal_grid, null, false);
67        mHorizontalGridView = (HorizontalGridView) view.findViewById(R.id.gridview);
68
69        mHorizontalGridView.setWindowAlignment(HorizontalGridView.WINDOW_ALIGN_BOTH_EDGE);
70        mHorizontalGridView.setWindowAlignmentOffsetPercent(35);
71        mHorizontalGridView.setOnChildSelectedListener(new OnChildSelectedListener() {
72            @Override
73            public void onChildSelected(ViewGroup parent, View view, int position, long id) {
74                if (DEBUG) Log.d(TAG, "onChildSelected position=" + position +  " id="+id);
75            }
76        });
77        return view;
78    }
79
80    @Override
81    protected void onCreate(Bundle savedInstanceState) {
82        super.onCreate(savedInstanceState);
83
84        if (DEBUG) Log.v(TAG, "onCreate");
85
86        RecyclerView.Adapter adapter = new MyAdapter();
87
88        View view = createView();
89
90        mHorizontalGridView.setAdapter(new MyAdapter());
91        setContentView(view);
92
93        mHorizontalGridView.setOnScrollListener(mScrollListener);
94    }
95
96    @Override
97    protected void onNewIntent(Intent intent) {
98        if (DEBUG) Log.v(TAG, "onNewIntent " + intent);
99        if (intent.getAction().equals(SELECT_ACTION)) {
100            int position = intent.getIntExtra("SELECT_POSITION", -1);
101            if (position >= 0) {
102                mHorizontalGridView.setSelectedPosition(position);
103            }
104        }
105        super.onNewIntent(intent);
106    }
107
108    private OnFocusChangeListener mItemFocusChangeListener = new OnFocusChangeListener() {
109
110        @Override
111        public void onFocusChange(View v, boolean hasFocus) {
112            if (hasFocus) {
113                v.setBackgroundColor(Color.YELLOW);
114            } else {
115                v.setBackgroundColor(Color.LTGRAY);
116            }
117        }
118    };
119
120    private OnClickListener mItemClickListener = new OnClickListener() {
121        @Override
122        public void onClick(View v) {
123            mHorizontalGridView.getAdapter().notifyDataSetChanged();
124        }
125    };
126
127    class MyAdapter extends RecyclerView.Adapter {
128
129        private int[] mItemLengths;
130
131        MyAdapter() {
132            mItemLengths = new int[NUM_ITEMS];
133            for (int i = 0; i < mItemLengths.length; i++) {
134                mItemLengths[i] = STAGGERED ? (int)(Math.random() * 180) + 180 : 240;
135            }
136        }
137
138        @Override
139        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
140            if (DEBUG) Log.v(TAG, "createViewHolder " + viewType);
141            TextView textView = new TextView(parent.getContext());
142            textView.setTextColor(Color.BLACK);
143            textView.setFocusable(true);
144            textView.setFocusableInTouchMode(true);
145            textView.setOnFocusChangeListener(mItemFocusChangeListener);
146            textView.setOnClickListener(mItemClickListener);
147            return new ViewHolder(textView);
148        }
149
150        @Override
151        public void onBindViewHolder(RecyclerView.ViewHolder baseHolder, int position) {
152            if (DEBUG) Log.v(TAG, "bindViewHolder " + position + " " + baseHolder);
153            ViewHolder holder = (ViewHolder) baseHolder;
154            ((TextView) holder.itemView).setText("Item "+position);
155            holder.itemView.setBackgroundColor(Color.LTGRAY);
156            holder.itemView.setLayoutParams(new ViewGroup.MarginLayoutParams(mItemLengths[position],
157                    80));
158        }
159
160        @Override
161        public int getItemCount() {
162            return mItemLengths.length;
163        }
164    }
165
166    static class ViewHolder extends RecyclerView.ViewHolder {
167
168        public ViewHolder(View v) {
169            super(v);
170        }
171    }
172}
173