RemoteViewsListAdapter.java revision b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2e
150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen/* 250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * Copyright (C) 2012 The Android Open Source Project 350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * 450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * you may not use this file except in compliance with the License. 650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * You may obtain a copy of the License at 750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * 850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * http://www.apache.org/licenses/LICENSE-2.0 950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * 1050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * Unless required by applicable law or agreed to in writing, software 1150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * distributed under the License is distributed on an "AS IS" BASIS, 1250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * See the License for the specific language governing permissions and 1450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * limitations under the License. 1550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen */ 1650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 1750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenpackage android.widget; 1850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 1950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenimport android.content.Context; 2050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenimport android.view.View; 2150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenimport android.view.ViewGroup; 2250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 2350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenimport java.util.ArrayList; 2450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 2550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen/** 2650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * @hide 2750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen */ 2850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenpublic class RemoteViewsListAdapter extends BaseAdapter { 2950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 3050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private Context mContext; 3150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private ArrayList<RemoteViews> mRemoteViewsList; 3250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private ArrayList<Integer> mViewTypes = new ArrayList<Integer>(); 33b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen private int mViewTypeCount; 3450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 35b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen public RemoteViewsListAdapter(Context context, ArrayList<RemoteViews> remoteViews, 36b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen int viewTypeCount) { 3750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mContext = context; 3850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mRemoteViewsList = remoteViews; 39b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen mViewTypeCount = viewTypeCount; 4050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen init(); 4150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 4250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 4350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public void setViewsList(ArrayList<RemoteViews> remoteViews) { 4450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mRemoteViewsList = remoteViews; 4550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen init(); 4650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen notifyDataSetChanged(); 4750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 4850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 4950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private void init() { 5050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (mRemoteViewsList == null) return; 5150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 5250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mViewTypes.clear(); 5350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen for (RemoteViews rv: mRemoteViewsList) { 5450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (!mViewTypes.contains(rv.getLayoutId())) { 5550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mViewTypes.add(rv.getLayoutId()); 5650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 5750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 58b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen 59b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen if (mViewTypes.size() > mViewTypeCount || mViewTypeCount < 1) { 60b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen throw new RuntimeException("Invalid view type count -- view type count must be >= 1" + 61b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen "and must be as large as the total number of distinct view types"); 62b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen } 6350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 6450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 6550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 6650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getCount() { 6750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (mRemoteViewsList != null) { 6850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return mRemoteViewsList.size(); 6950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 7050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return 0; 7150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 7250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 7350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 7450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 7550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public Object getItem(int position) { 7650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return null; 7750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 7850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 7950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 8050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public long getItemId(int position) { 8150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return position; 8250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 8350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 8450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 8550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public View getView(int position, View convertView, ViewGroup parent) { 8650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (position < getCount()) { 8750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen RemoteViews rv = mRemoteViewsList.get(position); 88b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen rv.setIsWidgetCollectionChild(true); 8950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen View v; 9050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (convertView != null && rv != null && 9150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen convertView.getId() == rv.getLayoutId()) { 9250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen v = convertView; 9350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen rv.reapply(mContext, v); 9450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 9550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen v = rv.apply(mContext, parent); 9650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 9750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return v; 9850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 9950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return null; 10050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 10150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 10250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 10350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 10450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getItemViewType(int position) { 10550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (position < getCount()) { 10650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen int layoutId = mRemoteViewsList.get(position).getLayoutId(); 10750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return mViewTypes.indexOf(layoutId); 10850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 10950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return 0; 11050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 11150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 11250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 11350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getViewTypeCount() { 114b00d9f0e07993d47d49cfa2cf8d7026b8c5b0f2eAdam Cohen return mViewTypeCount; 11550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 11650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 11750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 11850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public boolean hasStableIds() { 11950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return false; 12050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 12150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen} 122