OSDN Git Service

Importer: Full-screen viewing, UI refinement, refactoring
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / ingest / adapter / MtpAdapter.java
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
45     public MtpAdapter(Activity context) {
46         super();
47         mContext = context;
48         mInflater = LayoutInflater.from(context);
49     }
50
51     public void setMtpDeviceIndex(MtpDeviceIndex index) {
52         mModel = index;
53         notifyDataSetChanged();
54     }
55
56     public MtpDeviceIndex getMtpDeviceIndex() {
57         return mModel;
58     }
59
60     @Override
61     public void notifyDataSetChanged() {
62         mGeneration++;
63         super.notifyDataSetChanged();
64     }
65
66     @Override
67     public void notifyDataSetInvalidated() {
68         mGeneration++;
69         super.notifyDataSetInvalidated();
70     }
71
72     public boolean deviceConnected() {
73         return (mModel != null) && (mModel.getDevice() != null);
74     }
75
76     public boolean indexReady() {
77         return (mModel != null) && mModel.indexReady();
78     }
79
80     @Override
81     public int getCount() {
82         return mModel != null ? mModel.size() : 0;
83     }
84
85     @Override
86     public Object getItem(int position) {
87         return mModel.get(position, mSortOrder);
88     }
89
90     @Override
91     public boolean areAllItemsEnabled() {
92         return true;
93     }
94
95     @Override
96     public boolean isEnabled(int position) {
97         return true;
98     }
99
100     @Override
101     public long getItemId(int position) {
102         return position;
103     }
104
105     @Override
106     public int getViewTypeCount() {
107         return 2;
108     }
109
110     @Override
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
121     public boolean itemAtPositionIsBucket(int position) {
122         return getItemViewType(position) == ITEM_TYPE_BUCKET;
123     }
124
125     public boolean itemAtPositionIsMedia(int position) {
126         return getItemViewType(position) == ITEM_TYPE_MEDIA;
127     }
128
129     @Override
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
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
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
180     public Object[] getSections() {
181         return getCount() > 0 ? mModel.getBuckets(mSortOrder) : null;
182     }
183
184     public SortOrder getSortOrder() {
185         return mSortOrder;
186     }
187
188     public int translatePositionWithoutLabels(int position) {
189         if (mModel == null) return -1;
190         return mModel.getPositionFromPositionWithoutLabels(position, mSortOrder);
191     }
192 }