2 * Copyright (C) 2013 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.photos;
19 import android.app.Fragment;
20 import android.app.LoaderManager.LoaderCallbacks;
21 import android.content.Context;
22 import android.content.Loader;
23 import android.database.Cursor;
24 import android.net.Uri;
25 import android.os.Bundle;
26 import android.provider.MediaStore.Files.FileColumns;
27 import android.util.SparseBooleanArray;
28 import android.view.LayoutInflater;
29 import android.view.View;
30 import android.view.ViewGroup;
31 import android.widget.AdapterView;
32 import android.widget.AdapterView.OnItemClickListener;
33 import android.widget.GridView;
34 import android.widget.Toast;
36 import com.android.gallery3d.R;
37 import com.android.photos.adapters.AlbumSetCursorAdapter;
38 import com.android.photos.data.AlbumSetLoader;
39 import com.android.photos.shims.LoaderCompatShim;
40 import com.android.photos.shims.MediaSetLoader;
42 import java.util.ArrayList;
45 public class AlbumSetFragment extends Fragment implements OnItemClickListener,
46 LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client {
48 private GridView mAlbumSetView;
49 private View mEmptyView;
50 private AlbumSetCursorAdapter mAdapter;
51 private LoaderCompatShim<Cursor> mLoaderCompatShim;
52 private MultiChoiceManager mMultiChoiceManager;
53 private SelectionManager mSelectionManager;
55 private static final int LOADER_ALBUMSET = 1;
58 public void onCreate(Bundle savedInstanceState) {
59 super.onCreate(savedInstanceState);
60 Context context = getActivity();
61 mAdapter = new AlbumSetCursorAdapter(context);
62 mMultiChoiceManager = new MultiChoiceManager(context, this);
63 mMultiChoiceManager.setSelectionManager(mSelectionManager);
67 public void setSelectionManager(SelectionManager manager) {
68 mSelectionManager = manager;
69 if (mMultiChoiceManager != null) {
70 mMultiChoiceManager.setSelectionManager(manager);
75 public View onCreateView(LayoutInflater inflater, ViewGroup container,
76 Bundle savedInstanceState) {
77 View root = inflater.inflate(R.layout.album_set, container, false);
78 mAlbumSetView = (GridView) root.findViewById(android.R.id.list);
79 mEmptyView = root.findViewById(android.R.id.empty);
80 mEmptyView.setVisibility(View.GONE);
81 mAlbumSetView.setAdapter(mAdapter);
82 mAlbumSetView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
83 mAlbumSetView.setMultiChoiceModeListener(mMultiChoiceManager);
84 mAlbumSetView.setOnItemClickListener(this);
85 getLoaderManager().initLoader(LOADER_ALBUMSET, null, this);
91 public Loader<Cursor> onCreateLoader(int id, Bundle args) {
92 // TODO: Switch to AlbumSetLoader
93 MediaSetLoader loader = new MediaSetLoader(getActivity());
94 mAdapter.setDrawableFactory(loader);
95 mLoaderCompatShim = loader;
100 public void onLoadFinished(Loader<Cursor> loader,
102 mAdapter.swapCursor(data);
106 private void updateEmptyStatus() {
107 boolean empty = (mAdapter == null || mAdapter.getCount() == 0);
108 mAlbumSetView.setVisibility(empty ? View.GONE : View.VISIBLE);
109 mEmptyView.setVisibility(empty ? View.VISIBLE : View.GONE);
113 public void onLoaderReset(Loader<Cursor> loader) {
117 public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
118 if (mLoaderCompatShim == null) {
119 // Not fully initialized yet, discard
122 Cursor item = (Cursor) mAdapter.getItem(pos);
123 Toast.makeText(v.getContext(),
124 "Tapped " + item.getInt(AlbumSetLoader.INDEX_ID),
125 Toast.LENGTH_SHORT).show();
129 public int getItemMediaType(Object item) {
130 return FileColumns.MEDIA_TYPE_NONE;
134 public int getItemSupportedOperations(Object item) {
135 return ((Cursor) item).getInt(AlbumSetLoader.INDEX_SUPPORTED_OPERATIONS);
139 public Object getItemAtPosition(int position) {
140 return mAdapter.getItem(position);
144 public ArrayList<Uri> getSubItemUrisForItem(Object item) {
145 return mLoaderCompatShim.urisForSubItems((Cursor) item);
149 public Object getPathForItemAtPosition(int position) {
150 return mLoaderCompatShim.getPathForItem((Cursor) mAdapter.getItem(position));
154 public void deleteItemWithPath(Object itemPath) {
155 mLoaderCompatShim.deleteItemWithPath(itemPath);
159 public SparseBooleanArray getSelectedItemPositions() {
160 return mAlbumSetView.getCheckedItemPositions();
164 public int getSelectedItemCount() {
165 return mAlbumSetView.getCheckedItemCount();