158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik/*
258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Copyright (C) 2016 The Android Open Source Project
358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik *
458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * you may not use this file except in compliance with the License.
658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * You may obtain a copy of the License at
758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik *
858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik *
1058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * Unless required by applicable law or agreed to in writing, software
1158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
1258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * See the License for the specific language governing permissions and
1458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik * limitations under the License.
1558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik */
1658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikpackage com.android.test.uibench.recyclerview;
1758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
1858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.content.Context;
1958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.graphics.Color;
2058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.support.v7.widget.RecyclerView;
2158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.util.TypedValue;
2258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.view.ViewGroup;
2358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport android.widget.TextView;
2458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
2558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport java.util.ArrayList;
2658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport java.util.Collections;
2758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikimport java.util.List;
2858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
2958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craikpublic class RvBoxAdapter extends RecyclerView.Adapter<RvBoxAdapter.ViewHolder> {
3058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
3158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    private int mBackground;
3258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
3358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    private List<String> mValues;
3458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
3558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    public static class ViewHolder extends RecyclerView.ViewHolder {
3658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        public TextView mTextView;
3758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
3858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        public ViewHolder(TextView v) {
3958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            super(v);
4058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            mTextView = v;
4158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        }
4258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
4358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        @Override
4458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        public String toString() {
4558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            return super.toString() + " '" + mTextView.getText();
4658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        }
4758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
4858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
4958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    public RvBoxAdapter(Context context, String[] strings) {
5058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        TypedValue val = new TypedValue();
5158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        if (context.getTheme() != null) {
5258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            context.getTheme().resolveAttribute(
5358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik                    android.R.attr.selectableItemBackground, val, true);
5458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        }
5558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        mBackground = val.resourceId;
5658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        mValues = new ArrayList<>();
5758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        Collections.addAll(mValues, strings);
5858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
5958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
6058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    @Override
6158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    public RvBoxAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
6258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        final ViewHolder h = new ViewHolder(new TextView(parent.getContext()));
6358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        h.mTextView.setMinimumHeight(128);
6458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        h.mTextView.setPadding(20, 0, 20, 0);
6558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        h.mTextView.setFocusable(true);
6658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        h.mTextView.setBackgroundResource(mBackground);
6758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(
6858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik                ViewGroup.LayoutParams.WRAP_CONTENT,
6958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik                ViewGroup.LayoutParams.WRAP_CONTENT);
7058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        lp.leftMargin = 10;
7158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        lp.rightMargin = 5;
7258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        lp.topMargin = 20;
7358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        lp.bottomMargin = 15;
7458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        h.mTextView.setLayoutParams(lp);
7558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        return h;
7658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
7758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
7858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    @Override
7958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    public void onBindViewHolder(ViewHolder holder, int position) {
8058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        holder.mTextView.setText(position + ":" + mValues.get(position));
8158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        holder.mTextView.setMinHeight((200 + mValues.get(position).length() * 10));
8258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        holder.mTextView.setBackgroundColor(getBackgroundColor(position));
8358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
8458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
8558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    private int getBackgroundColor(int position) {
8658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        switch (position % 4) {
8758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            case 0: return Color.LTGRAY;
8858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            case 1: return Color.RED;
8958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            case 2: return Color.DKGRAY;
9058427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik            case 3: return Color.BLUE;
9158427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        }
9258427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        return Color.TRANSPARENT;
9358427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
9458427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik
9558427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    @Override
9658427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    public int getItemCount() {
9758427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik        return mValues.size();
9858427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik    }
9958427a62ac6dce6acc35617ac9eabdaba18ea2b4Chris Craik}
100