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