1c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu/*
2c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Copyright (C) 2013 The Android Open Source Project
3c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu *
4c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License");
5c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * you may not use this file except in compliance with the License.
6c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * You may obtain a copy of the License at
7c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu *
8c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu *      http://www.apache.org/licenses/LICENSE-2.0
9c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu *
10c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Unless required by applicable law or agreed to in writing, software
11c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS,
12c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * See the License for the specific language governing permissions and
14c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * limitations under the License.
15c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu */
16c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
17c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescupackage com.android.gallery3d.ingest.adapter;
18c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
19c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.content.Context;
20c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.mtp.MtpObjectInfo;
21c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.support.v4.view.PagerAdapter;
22c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.view.LayoutInflater;
23c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.view.View;
24c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport android.view.ViewGroup;
25c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
26c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport com.android.gallery3d.R;
27c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport com.android.gallery3d.ingest.MtpDeviceIndex;
28c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport com.android.gallery3d.ingest.MtpDeviceIndex.SortOrder;
29c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport com.android.gallery3d.ingest.ui.MtpFullscreenView;
30c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
31c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescupublic class MtpPagerAdapter extends PagerAdapter {
32c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
33c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private LayoutInflater mInflater;
34c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private int mGeneration = 0;
35c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private CheckBroker mBroker;
36c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private MtpDeviceIndex mModel;
37c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private SortOrder mSortOrder = SortOrder.Descending;
38c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
39c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    private MtpFullscreenView mReusableView = null;
40c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
41c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public MtpPagerAdapter(Context context, CheckBroker broker) {
42c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        super();
43c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mInflater = LayoutInflater.from(context);
44c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mBroker = broker;
45c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
46c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
47c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public void setMtpDeviceIndex(MtpDeviceIndex index) {
48c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mModel = index;
49c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        notifyDataSetChanged();
50c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
51c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
52c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
53c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public int getCount() {
54c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        return mModel != null ? mModel.sizeWithoutLabels() : 0;
55c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
56c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
57c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
58c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public void notifyDataSetChanged() {
59c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mGeneration++;
60c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        super.notifyDataSetChanged();
61c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
62c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
63c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public int translatePositionWithLabels(int position) {
64c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        if (mModel == null) return -1;
65c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        return mModel.getPositionWithoutLabelsFromPosition(position, mSortOrder);
66c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
67c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
68c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
69c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public void finishUpdate(ViewGroup container) {
70c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mReusableView = null;
71c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        super.finishUpdate(container);
72c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
73c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
74c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
75c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public boolean isViewFromObject(View view, Object object) {
76c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        return view == object;
77c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
78c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
79c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
80c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public void destroyItem(ViewGroup container, int position, Object object) {
81c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        MtpFullscreenView v = (MtpFullscreenView)object;
82c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        container.removeView(v);
83c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mBroker.unregisterOnCheckedChangeListener(v);
84c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        mReusableView = v;
85c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
86c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu
87c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    @Override
88c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    public Object instantiateItem(ViewGroup container, int position) {
89c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        MtpFullscreenView v;
90c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        if (mReusableView != null) {
91c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu            v = mReusableView;
92c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu            mReusableView = null;
93c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        } else {
94c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu            v = (MtpFullscreenView) mInflater.inflate(R.layout.ingest_fullsize, container, false);
95c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        }
96c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        MtpObjectInfo i = mModel.getWithoutLabels(position, mSortOrder);
97c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        v.getImageView().setMtpDeviceAndObjectInfo(mModel.getDevice(), i, mGeneration);
98c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        v.setPositionAndBroker(position, mBroker);
99c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        container.addView(v);
100c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu        return v;
101c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu    }
102c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu}
103