15f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck/*
25f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Copyright (C) 2013 The Android Open Source Project
35f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck *
45f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Licensed under the Apache License, Version 2.0 (the "License");
55f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * you may not use this file except in compliance with the License.
65f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * You may obtain a copy of the License at
75f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck *
85f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck *      http://www.apache.org/licenses/LICENSE-2.0
95f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck *
105f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * Unless required by applicable law or agreed to in writing, software
115f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * distributed under the License is distributed on an "AS IS" BASIS,
125f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * See the License for the specific language governing permissions and
145f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck * limitations under the License.
155f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck */
165f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck
175f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reckpackage com.android.photos;
185f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck
198c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescuimport android.app.LoaderManager.LoaderCallbacks;
20a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.content.Context;
21def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescuimport android.content.Intent;
228c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescuimport android.content.Loader;
23a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.database.Cursor;
24869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.net.Uri;
25a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.os.Bundle;
26869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport android.provider.MediaStore.Files.FileColumns;
27a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.view.LayoutInflater;
28a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.view.View;
29a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.view.ViewGroup;
30a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport android.widget.GridView;
315f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck
32a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport com.android.gallery3d.R;
33869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport com.android.photos.adapters.AlbumSetCursorAdapter;
34a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescuimport com.android.photos.data.AlbumSetLoader;
35f6e687bc30887695374580712092aeb917c84253John Reckimport com.android.photos.shims.LoaderCompatShim;
368c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescuimport com.android.photos.shims.MediaSetLoader;
375f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck
38869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescuimport java.util.ArrayList;
395f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck
40a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
41c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescupublic class AlbumSetFragment extends MultiSelectGridFragment implements LoaderCallbacks<Cursor> {
428c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
438c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    private AlbumSetCursorAdapter mAdapter;
44869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    private LoaderCompatShim<Cursor> mLoaderCompatShim;
458c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
468c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    private static final int LOADER_ALBUMSET = 1;
47a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
48a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    @Override
49638d9ec56c26d9f3cff55145ccbd20b35bb964f5John Reck    public void onCreate(Bundle savedInstanceState) {
50638d9ec56c26d9f3cff55145ccbd20b35bb964f5John Reck        super.onCreate(savedInstanceState);
51869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        Context context = getActivity();
52869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        mAdapter = new AlbumSetCursorAdapter(context);
53869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    }
54869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu
55869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
56a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    public View onCreateView(LayoutInflater inflater, ViewGroup container,
57a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu            Bundle savedInstanceState) {
58c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        View root = super.onCreateView(inflater, container, savedInstanceState);
598c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        getLoaderManager().initLoader(LOADER_ALBUMSET, null, this);
60a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu        return root;
61a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    }
62a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
63a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    @Override
64c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    public void onViewCreated(View view, Bundle savedInstanceState) {
65c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        super.onViewCreated(view, savedInstanceState);
66c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        getGridView().setColumnWidth(getActivity().getResources()
67c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu                .getDimensionPixelSize(R.dimen.album_set_item_width));
68c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    }
69c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu
70c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    @Override
718c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
728c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        // TODO: Switch to AlbumSetLoader
738c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        MediaSetLoader loader = new MediaSetLoader(getActivity());
748c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        mAdapter.setDrawableFactory(loader);
75869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        mLoaderCompatShim = loader;
768c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        return loader;
778c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    }
788c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
798c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    @Override
808c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    public void onLoadFinished(Loader<Cursor> loader,
818c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu            Cursor data) {
828c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu        mAdapter.swapCursor(data);
83c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        setAdapter(mAdapter);
848c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    }
858c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
868c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    @Override
878c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    public void onLoaderReset(Loader<Cursor> loader) {
888c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    }
898c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
908c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu    @Override
91c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    public void onGridItemClick(GridView g, View v, int position, long id) {
92869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        if (mLoaderCompatShim == null) {
93869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu            // Not fully initialized yet, discard
94869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu            return;
95869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        }
96c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        Cursor item = (Cursor) getItemAtPosition(position);
97def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu        Context context = getActivity();
98def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu        Intent intent = new Intent(context, AlbumActivity.class);
99def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu        intent.putExtra(AlbumActivity.KEY_ALBUM_URI,
100def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu                mLoaderCompatShim.getPathForItem(item).toString());
101def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu        intent.putExtra(AlbumActivity.KEY_ALBUM_TITLE,
102def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu                item.getString(AlbumSetLoader.INDEX_TITLE));
103def3606a1e7ffa20171c473d792af7a0bbec4ea8Bobby Georgescu        context.startActivity(intent);
104a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    }
105a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
106869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
107869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    public int getItemMediaType(Object item) {
108869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        return FileColumns.MEDIA_TYPE_NONE;
109869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    }
110a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
111869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
112869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    public int getItemSupportedOperations(Object item) {
113869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        return ((Cursor) item).getInt(AlbumSetLoader.INDEX_SUPPORTED_OPERATIONS);
114869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    }
1158c12028e716792bb083dc57dda58b8be26a16ef7Bobby Georgescu
116869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
117869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    public ArrayList<Uri> getSubItemUrisForItem(Object item) {
118869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        return mLoaderCompatShim.urisForSubItems((Cursor) item);
119869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    }
120a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu
121869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
122869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    public void deleteItemWithPath(Object itemPath) {
123869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu        mLoaderCompatShim.deleteItemWithPath(itemPath);
124a73acc17eea200014edba9c9c6a40f1c632fa57dBobby Georgescu    }
125869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu
126869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    @Override
127c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    public Uri getItemUri(Object item) {
128c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        return mLoaderCompatShim.uriForItem((Cursor) item);
129869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu    }
130869f4a62594c4508aa57a8622b461b6825b74e7cBobby Georgescu
1311a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu    @Override
132c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu    public Object getPathForItem(Object item) {
133c1a015f3b9a896179d2b4778e50988460cfd34fbBobby Georgescu        return mLoaderCompatShim.getPathForItem((Cursor) item);
1341a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu    }
1355f30b98d6ac98c6aa863d48f47e9b8e2b77a1820John Reck}
136