• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.gallery3d.ingest.adapter;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.mtp.MtpObjectInfo;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 import android.widget.BaseAdapter;
26 import android.widget.SectionIndexer;
27 
28 import com.android.gallery3d.R;
29 import com.android.gallery3d.ingest.MtpDeviceIndex;
30 import com.android.gallery3d.ingest.MtpDeviceIndex.SortOrder;
31 import com.android.gallery3d.ingest.SimpleDate;
32 import com.android.gallery3d.ingest.ui.DateTileView;
33 import com.android.gallery3d.ingest.ui.MtpThumbnailTileView;
34 
35 public class MtpAdapter extends BaseAdapter implements SectionIndexer {
36     public static final int ITEM_TYPE_MEDIA = 0;
37     public static final int ITEM_TYPE_BUCKET = 1;
38 
39     private Context mContext;
40     private MtpDeviceIndex mModel;
41     private SortOrder mSortOrder = SortOrder.Descending;
42     private LayoutInflater mInflater;
43     private int mGeneration = 0;
44 
MtpAdapter(Activity context)45     public MtpAdapter(Activity context) {
46         super();
47         mContext = context;
48         mInflater = LayoutInflater.from(context);
49     }
50 
setMtpDeviceIndex(MtpDeviceIndex index)51     public void setMtpDeviceIndex(MtpDeviceIndex index) {
52         mModel = index;
53         notifyDataSetChanged();
54     }
55 
getMtpDeviceIndex()56     public MtpDeviceIndex getMtpDeviceIndex() {
57         return mModel;
58     }
59 
60     @Override
notifyDataSetChanged()61     public void notifyDataSetChanged() {
62         mGeneration++;
63         super.notifyDataSetChanged();
64     }
65 
66     @Override
notifyDataSetInvalidated()67     public void notifyDataSetInvalidated() {
68         mGeneration++;
69         super.notifyDataSetInvalidated();
70     }
71 
deviceConnected()72     public boolean deviceConnected() {
73         return (mModel != null) && (mModel.getDevice() != null);
74     }
75 
indexReady()76     public boolean indexReady() {
77         return (mModel != null) && mModel.indexReady();
78     }
79 
80     @Override
getCount()81     public int getCount() {
82         return mModel != null ? mModel.size() : 0;
83     }
84 
85     @Override
getItem(int position)86     public Object getItem(int position) {
87         return mModel.get(position, mSortOrder);
88     }
89 
90     @Override
areAllItemsEnabled()91     public boolean areAllItemsEnabled() {
92         return true;
93     }
94 
95     @Override
isEnabled(int position)96     public boolean isEnabled(int position) {
97         return true;
98     }
99 
100     @Override
getItemId(int position)101     public long getItemId(int position) {
102         return position;
103     }
104 
105     @Override
getViewTypeCount()106     public int getViewTypeCount() {
107         return 2;
108     }
109 
110     @Override
getItemViewType(int position)111     public int getItemViewType(int position) {
112         // If the position is the first in its section, then it corresponds to
113         // a title tile, if not it's a media tile
114         if (position == getPositionForSection(getSectionForPosition(position))) {
115             return ITEM_TYPE_BUCKET;
116         } else {
117             return ITEM_TYPE_MEDIA;
118         }
119     }
120 
itemAtPositionIsBucket(int position)121     public boolean itemAtPositionIsBucket(int position) {
122         return getItemViewType(position) == ITEM_TYPE_BUCKET;
123     }
124 
itemAtPositionIsMedia(int position)125     public boolean itemAtPositionIsMedia(int position) {
126         return getItemViewType(position) == ITEM_TYPE_MEDIA;
127     }
128 
129     @Override
getView(int position, View convertView, ViewGroup parent)130     public View getView(int position, View convertView, ViewGroup parent) {
131         int type = getItemViewType(position);
132         if (type == ITEM_TYPE_MEDIA) {
133             MtpThumbnailTileView imageView;
134             if (convertView == null) {
135                 imageView = (MtpThumbnailTileView) mInflater.inflate(
136                         R.layout.ingest_thumbnail, parent, false);
137             } else {
138                 imageView = (MtpThumbnailTileView) convertView;
139             }
140             imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position), mGeneration);
141             return imageView;
142         } else {
143             DateTileView dateTile;
144             if (convertView == null) {
145                 dateTile = (DateTileView) mInflater.inflate(
146                         R.layout.ingest_date_tile, parent, false);
147             } else {
148                 dateTile = (DateTileView) convertView;
149             }
150             dateTile.setDate((SimpleDate)getItem(position));
151             return dateTile;
152         }
153     }
154 
155     @Override
getPositionForSection(int section)156     public int getPositionForSection(int section) {
157         if (getCount() == 0) {
158             return 0;
159         }
160         int numSections = getSections().length;
161         if (section >= numSections) {
162             section = numSections - 1;
163         }
164         return mModel.getFirstPositionForBucketNumber(section, mSortOrder);
165     }
166 
167     @Override
getSectionForPosition(int position)168     public int getSectionForPosition(int position) {
169         int count = getCount();
170         if (count == 0) {
171             return 0;
172         }
173         if (position >= count) {
174             position = count - 1;
175         }
176         return mModel.getBucketNumberForPosition(position, mSortOrder);
177     }
178 
179     @Override
getSections()180     public Object[] getSections() {
181         return getCount() > 0 ? mModel.getBuckets(mSortOrder) : null;
182     }
183 
getSortOrder()184     public SortOrder getSortOrder() {
185         return mSortOrder;
186     }
187 
translatePositionWithoutLabels(int position)188     public int translatePositionWithoutLabels(int position) {
189         if (mModel == null) return -1;
190         return mModel.getPositionFromPositionWithoutLabels(position, mSortOrder);
191     }
192 }
193