| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.widget; |
| |
| import android.content.Context; |
| import android.view.View; |
| import android.view.ViewGroup; |
| |
| import java.util.ArrayList; |
| |
| /** |
| * @hide |
| */ |
| public class RemoteViewsListAdapter extends BaseAdapter { |
| |
| private Context mContext; |
| private ArrayList<RemoteViews> mRemoteViewsList; |
| private ArrayList<Integer> mViewTypes = new ArrayList<Integer>(); |
| private int mViewTypeCount; |
| |
| public RemoteViewsListAdapter(Context context, ArrayList<RemoteViews> remoteViews, |
| int viewTypeCount) { |
| mContext = context; |
| mRemoteViewsList = remoteViews; |
| mViewTypeCount = viewTypeCount; |
| init(); |
| } |
| |
| public void setViewsList(ArrayList<RemoteViews> remoteViews) { |
| mRemoteViewsList = remoteViews; |
| init(); |
| notifyDataSetChanged(); |
| } |
| |
| private void init() { |
| if (mRemoteViewsList == null) return; |
| |
| mViewTypes.clear(); |
| for (RemoteViews rv: mRemoteViewsList) { |
| if (!mViewTypes.contains(rv.getLayoutId())) { |
| mViewTypes.add(rv.getLayoutId()); |
| } |
| } |
| |
| if (mViewTypes.size() > mViewTypeCount || mViewTypeCount < 1) { |
| throw new RuntimeException("Invalid view type count -- view type count must be >= 1" + |
| "and must be as large as the total number of distinct view types"); |
| } |
| } |
| |
| @Override |
| public int getCount() { |
| if (mRemoteViewsList != null) { |
| return mRemoteViewsList.size(); |
| } else { |
| return 0; |
| } |
| } |
| |
| @Override |
| public Object getItem(int position) { |
| return null; |
| } |
| |
| @Override |
| public long getItemId(int position) { |
| return position; |
| } |
| |
| @Override |
| public View getView(int position, View convertView, ViewGroup parent) { |
| if (position < getCount()) { |
| RemoteViews rv = mRemoteViewsList.get(position); |
| rv.addFlags(RemoteViews.FLAG_WIDGET_IS_COLLECTION_CHILD); |
| View v; |
| if (convertView != null && rv != null && |
| convertView.getId() == rv.getLayoutId()) { |
| v = convertView; |
| rv.reapply(mContext, v); |
| } else { |
| v = rv.apply(mContext, parent); |
| } |
| return v; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public int getItemViewType(int position) { |
| if (position < getCount()) { |
| int layoutId = mRemoteViewsList.get(position).getLayoutId(); |
| return mViewTypes.indexOf(layoutId); |
| } else { |
| return 0; |
| } |
| } |
| |
| public int getViewTypeCount() { |
| return mViewTypeCount; |
| } |
| |
| @Override |
| public boolean hasStableIds() { |
| return false; |
| } |
| } |