RemoteViewsListAdapter.java revision 50f3d1bae884eb9545d3db24362271c20f0d8d64
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 Cohenimport java.util.HashMap; 2550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 2650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen/** 2750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen * @hide 2850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen */ 2950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohenpublic class RemoteViewsListAdapter extends BaseAdapter { 3050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 3150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private Context mContext; 3250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private ArrayList<RemoteViews> mRemoteViewsList; 3350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private ArrayList<Integer> mViewTypes = new ArrayList<Integer>(); 3450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 3550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public RemoteViewsListAdapter(Context context, ArrayList<RemoteViews> remoteViews) { 3650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mContext = context; 3750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mRemoteViewsList = remoteViews; 3850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen init(); 3950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 4050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 4150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public void setViewsList(ArrayList<RemoteViews> remoteViews) { 4250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mRemoteViewsList = remoteViews; 4350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen init(); 4450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen notifyDataSetChanged(); 4550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 4650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 4750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen private void init() { 4850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (mRemoteViewsList == null) return; 4950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 5050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mViewTypes.clear(); 5150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen for (RemoteViews rv: mRemoteViewsList) { 5250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (!mViewTypes.contains(rv.getLayoutId())) { 5350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen mViewTypes.add(rv.getLayoutId()); 5450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 5550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 5650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 5750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 5850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 5950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getCount() { 6050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (mRemoteViewsList != null) { 6150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return mRemoteViewsList.size(); 6250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 6350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return 0; 6450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 6550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 6650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 6750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 6850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public Object getItem(int position) { 6950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return null; 7050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 7150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 7250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 7350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public long getItemId(int position) { 7450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return position; 7550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 7650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 7750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 7850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public View getView(int position, View convertView, ViewGroup parent) { 7950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (position < getCount()) { 8050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen RemoteViews rv = mRemoteViewsList.get(position); 8150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen View v; 8250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (convertView != null && rv != null && 8350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen convertView.getId() == rv.getLayoutId()) { 8450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen v = convertView; 8550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen rv.reapply(mContext, v); 8650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 8750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen v = rv.apply(mContext, parent); 8850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 8950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return v; 9050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 9150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return null; 9250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 9350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 9450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 9550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 9650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getItemViewType(int position) { 9750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen if (position < getCount()) { 9850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen int layoutId = mRemoteViewsList.get(position).getLayoutId(); 9950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return mViewTypes.indexOf(layoutId); 10050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } else { 10150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return 0; 10250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 10350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 10450f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 10550f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public int getViewTypeCount() { 10650f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return mViewTypes.size(); 10750f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 10850f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen 10950f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen @Override 11050f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen public boolean hasStableIds() { 11150f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen return false; 11250f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen } 11350f3d1bae884eb9545d3db24362271c20f0d8d64Adam Cohen} 114