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