OSDN Git Service

Sharing support for albums, bulk operations infrastructure
[android-x86/packages-apps-Gallery2.git] / src / com / android / photos / AlbumSetFragment.java
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package com.android.photos;
18
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;
35
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;
41
42 import java.util.ArrayList;
43
44
45 public class AlbumSetFragment extends Fragment implements OnItemClickListener,
46     LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client {
47
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;
54
55     private static final int LOADER_ALBUMSET = 1;
56
57     @Override
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);
64     }
65
66     @Override
67     public void setSelectionManager(SelectionManager manager) {
68         mSelectionManager = manager;
69         if (mMultiChoiceManager != null) {
70             mMultiChoiceManager.setSelectionManager(manager);
71         }
72     }
73
74     @Override
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);
86         updateEmptyStatus();
87         return root;
88     }
89
90     @Override
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;
96         return loader;
97     }
98
99     @Override
100     public void onLoadFinished(Loader<Cursor> loader,
101             Cursor data) {
102         mAdapter.swapCursor(data);
103         updateEmptyStatus();
104     }
105
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);
110     }
111
112     @Override
113     public void onLoaderReset(Loader<Cursor> loader) {
114     }
115
116     @Override
117     public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
118         if (mLoaderCompatShim == null) {
119             // Not fully initialized yet, discard
120             return;
121         }
122         Cursor item = (Cursor) mAdapter.getItem(pos);
123         Toast.makeText(v.getContext(),
124                 "Tapped " + item.getInt(AlbumSetLoader.INDEX_ID),
125                 Toast.LENGTH_SHORT).show();
126     }
127
128     @Override
129     public int getItemMediaType(Object item) {
130         return FileColumns.MEDIA_TYPE_NONE;
131     }
132
133     @Override
134     public int getItemSupportedOperations(Object item) {
135         return ((Cursor) item).getInt(AlbumSetLoader.INDEX_SUPPORTED_OPERATIONS);
136     }
137
138     @Override
139     public Object getItemAtPosition(int position) {
140         return mAdapter.getItem(position);
141     }
142
143     @Override
144     public ArrayList<Uri> getSubItemUrisForItem(Object item) {
145         return mLoaderCompatShim.urisForSubItems((Cursor) item);
146     }
147
148     @Override
149     public Object getPathForItemAtPosition(int position) {
150         return mLoaderCompatShim.getPathForItem((Cursor) mAdapter.getItem(position));
151     }
152
153     @Override
154     public void deleteItemWithPath(Object itemPath) {
155         mLoaderCompatShim.deleteItemWithPath(itemPath);
156     }
157
158     @Override
159     public SparseBooleanArray getSelectedItemPositions() {
160         return mAlbumSetView.getCheckedItemPositions();
161     }
162
163     @Override
164     public int getSelectedItemCount() {
165         return mAlbumSetView.getCheckedItemCount();
166     }
167
168 }