summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/ingest/adapter/MtpAdapter.java')
-rw-r--r--src/com/android/gallery3d/ingest/adapter/MtpAdapter.java192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java b/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
new file mode 100644
index 000000000..e8dd69f8c
--- /dev/null
+++ b/src/com/android/gallery3d/ingest/adapter/MtpAdapter.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2013 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 com.android.gallery3d.ingest.adapter;
+
+import android.app.Activity;
+import android.content.Context;
+import android.mtp.MtpObjectInfo;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.SectionIndexer;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.ingest.MtpDeviceIndex;
+import com.android.gallery3d.ingest.MtpDeviceIndex.SortOrder;
+import com.android.gallery3d.ingest.SimpleDate;
+import com.android.gallery3d.ingest.ui.DateTileView;
+import com.android.gallery3d.ingest.ui.MtpThumbnailTileView;
+
+public class MtpAdapter extends BaseAdapter implements SectionIndexer {
+ public static final int ITEM_TYPE_MEDIA = 0;
+ public static final int ITEM_TYPE_BUCKET = 1;
+
+ private Context mContext;
+ private MtpDeviceIndex mModel;
+ private SortOrder mSortOrder = SortOrder.Descending;
+ private LayoutInflater mInflater;
+ private int mGeneration = 0;
+
+ public MtpAdapter(Activity context) {
+ super();
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ public void setMtpDeviceIndex(MtpDeviceIndex index) {
+ mModel = index;
+ notifyDataSetChanged();
+ }
+
+ public MtpDeviceIndex getMtpDeviceIndex() {
+ return mModel;
+ }
+
+ @Override
+ public void notifyDataSetChanged() {
+ mGeneration++;
+ super.notifyDataSetChanged();
+ }
+
+ @Override
+ public void notifyDataSetInvalidated() {
+ mGeneration++;
+ super.notifyDataSetInvalidated();
+ }
+
+ public boolean deviceConnected() {
+ return (mModel != null) && (mModel.getDevice() != null);
+ }
+
+ public boolean indexReady() {
+ return (mModel != null) && mModel.indexReady();
+ }
+
+ @Override
+ public int getCount() {
+ return mModel != null ? mModel.size() : 0;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mModel.get(position, mSortOrder);
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ return true;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 2;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ // If the position is the first in its section, then it corresponds to
+ // a title tile, if not it's a media tile
+ if (position == getPositionForSection(getSectionForPosition(position))) {
+ return ITEM_TYPE_BUCKET;
+ } else {
+ return ITEM_TYPE_MEDIA;
+ }
+ }
+
+ public boolean itemAtPositionIsBucket(int position) {
+ return getItemViewType(position) == ITEM_TYPE_BUCKET;
+ }
+
+ public boolean itemAtPositionIsMedia(int position) {
+ return getItemViewType(position) == ITEM_TYPE_MEDIA;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ int type = getItemViewType(position);
+ if (type == ITEM_TYPE_MEDIA) {
+ MtpThumbnailTileView imageView;
+ if (convertView == null) {
+ imageView = (MtpThumbnailTileView) mInflater.inflate(
+ R.layout.ingest_thumbnail, parent, false);
+ } else {
+ imageView = (MtpThumbnailTileView) convertView;
+ }
+ imageView.setMtpDeviceAndObjectInfo(mModel.getDevice(), (MtpObjectInfo)getItem(position), mGeneration);
+ return imageView;
+ } else {
+ DateTileView dateTile;
+ if (convertView == null) {
+ dateTile = (DateTileView) mInflater.inflate(
+ R.layout.ingest_date_tile, parent, false);
+ } else {
+ dateTile = (DateTileView) convertView;
+ }
+ dateTile.setDate((SimpleDate)getItem(position));
+ return dateTile;
+ }
+ }
+
+ @Override
+ public int getPositionForSection(int section) {
+ if (getCount() == 0) {
+ return 0;
+ }
+ int numSections = getSections().length;
+ if (section >= numSections) {
+ section = numSections - 1;
+ }
+ return mModel.getFirstPositionForBucketNumber(section, mSortOrder);
+ }
+
+ @Override
+ public int getSectionForPosition(int position) {
+ int count = getCount();
+ if (count == 0) {
+ return 0;
+ }
+ if (position >= count) {
+ position = count - 1;
+ }
+ return mModel.getBucketNumberForPosition(position, mSortOrder);
+ }
+
+ @Override
+ public Object[] getSections() {
+ return getCount() > 0 ? mModel.getBuckets(mSortOrder) : null;
+ }
+
+ public SortOrder getSortOrder() {
+ return mSortOrder;
+ }
+
+ public int translatePositionWithoutLabels(int position) {
+ if (mModel == null) return -1;
+ return mModel.getPositionFromPositionWithoutLabels(position, mSortOrder);
+ }
+}