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