diff options
author | Bobby Georgescu <georgescu@google.com> | 2013-03-18 14:56:40 -0700 |
---|---|---|
committer | Bobby Georgescu <georgescu@google.com> | 2013-03-19 11:34:43 -0700 |
commit | 2b18812c460e7cc721d4c4c25b3c6f1cf179554d (patch) | |
tree | e99bf351392df8ea6b474bdfdefb39fa355a9af2 | |
parent | 575489b66b1e9c8397d4f497cb262c19e4c1aa8b (diff) | |
download | android_packages_apps_Snap-2b18812c460e7cc721d4c4c25b3c6f1cf179554d.tar.gz android_packages_apps_Snap-2b18812c460e7cc721d4c4c25b3c6f1cf179554d.tar.bz2 android_packages_apps_Snap-2b18812c460e7cc721d4c4c25b3c6f1cf179554d.zip |
Add album viewing to new Gallery
Change-Id: I71230541db0b06d41e2d23d51e83f0b3b8e8caf4
-rw-r--r-- | src/com/android/photos/AlbumActivity.java | 43 | ||||
-rw-r--r-- | src/com/android/photos/AlbumFragment.java | 190 | ||||
-rw-r--r-- | src/com/android/photos/AlbumSetFragment.java | 11 |
3 files changed, 241 insertions, 3 deletions
diff --git a/src/com/android/photos/AlbumActivity.java b/src/com/android/photos/AlbumActivity.java new file mode 100644 index 000000000..a6e7ef79d --- /dev/null +++ b/src/com/android/photos/AlbumActivity.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.photos; + +import android.app.Activity; +import android.os.Bundle; + +public class AlbumActivity extends Activity { + + public static final String KEY_ALBUM_URI = AlbumFragment.KEY_ALBUM_URI; + public static final String KEY_ALBUM_TITLE = "AlbumTitle"; + + private SelectionManager mSelectionManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle intentExtras = getIntent().getExtras(); + mSelectionManager = new SelectionManager(this); + if (savedInstanceState == null) { + AlbumFragment albumFragment = new AlbumFragment(); + albumFragment.setArguments(intentExtras); + albumFragment.setSelectionManager(mSelectionManager); + getFragmentManager().beginTransaction().add(android.R.id.content, + albumFragment).commit(); + } + getActionBar().setTitle(intentExtras.getString(KEY_ALBUM_TITLE)); + } +} diff --git a/src/com/android/photos/AlbumFragment.java b/src/com/android/photos/AlbumFragment.java new file mode 100644 index 000000000..377da0970 --- /dev/null +++ b/src/com/android/photos/AlbumFragment.java @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.photos; + +import android.app.Fragment; +import android.app.LoaderManager.LoaderCallbacks; +import android.content.Context; +import android.content.Intent; +import android.content.Loader; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.util.SparseBooleanArray; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.GridView; + +import com.android.gallery3d.R; +import com.android.gallery3d.app.Gallery; +import com.android.photos.adapters.PhotoThumbnailAdapter; +import com.android.photos.data.PhotoSetLoader; +import com.android.photos.shims.LoaderCompatShim; +import com.android.photos.shims.MediaItemsLoader; + +import java.util.ArrayList; + +public class AlbumFragment extends Fragment implements OnItemClickListener, + LoaderCallbacks<Cursor>, MultiChoiceManager.Delegate, SelectionManager.Client { + + protected static final String KEY_ALBUM_URI = "AlbumUri"; + private static final int LOADER_ALBUM = 1; + + private GridView mAlbumView; + private View mEmptyView; + + private boolean mInitialLoadComplete = false; + private LoaderCompatShim<Cursor> mLoaderCompatShim; + private PhotoThumbnailAdapter mAdapter; + private MultiChoiceManager mMultiChoiceManager; + private SelectionManager mSelectionManager; + private String mAlbumPath; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Context context = getActivity(); + mAdapter = new PhotoThumbnailAdapter(context); + mMultiChoiceManager = new MultiChoiceManager(context, this); + mMultiChoiceManager.setSelectionManager(mSelectionManager); + Bundle args = getArguments(); + if (args != null) { + mAlbumPath = args.getString(KEY_ALBUM_URI, null); + } + } + + @Override + public void setSelectionManager(SelectionManager manager) { + mSelectionManager = manager; + if (mMultiChoiceManager != null) { + mMultiChoiceManager.setSelectionManager(manager); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.photo_set, container, false); + mAlbumView = (GridView) root.findViewById(android.R.id.list); + // TODO: Remove once UI stabilizes + mAlbumView.setColumnWidth(MediaItemsLoader.getThumbnailSize()); + mAlbumView.setOnItemClickListener(this); + mEmptyView = root.findViewById(android.R.id.empty); + mEmptyView.setVisibility(View.GONE); + mAlbumView.setAdapter(mAdapter); + mAlbumView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); + mAlbumView.setMultiChoiceModeListener(mMultiChoiceManager); + getLoaderManager().initLoader(LOADER_ALBUM, null, this); + updateEmptyStatus(); + return root; + } + + private void updateEmptyStatus() { + boolean empty = (mAdapter == null || mAdapter.getCount() == 0); + mAlbumView.setVisibility(empty ? View.GONE : View.VISIBLE); + mEmptyView.setVisibility(empty && mInitialLoadComplete + ? View.VISIBLE : View.GONE); + } + + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, + long id) { + if (mLoaderCompatShim == null) { + // Not fully initialized yet, discard + return; + } + Cursor item = mAdapter.getItem(position); + Uri uri = mLoaderCompatShim.uriForItem(item); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.setClass(getActivity(), Gallery.class); + startActivity(intent); + } + + @Override + public Loader<Cursor> onCreateLoader(int id, Bundle args) { + // TODO: Switch to PhotoSetLoader + MediaItemsLoader loader = new MediaItemsLoader(getActivity(), mAlbumPath); + mInitialLoadComplete = false; + mLoaderCompatShim = loader; + mAdapter.setDrawableFactory(mLoaderCompatShim); + return loader; + } + + @Override + public void onLoadFinished(Loader<Cursor> loader, + Cursor data) { + mAdapter.swapCursor(data); + mInitialLoadComplete = true; + updateEmptyStatus(); + } + + @Override + public void onLoaderReset(Loader<Cursor> loader) { + } + + @Override + public int getItemMediaType(Object item) { + return ((Cursor) item).getInt(PhotoSetLoader.INDEX_MEDIA_TYPE); + } + + @Override + public int getItemSupportedOperations(Object item) { + return ((Cursor) item).getInt(PhotoSetLoader.INDEX_SUPPORTED_OPERATIONS); + } + + @Override + public Object getItemAtPosition(int position) { + return mAdapter.getItem(position); + } + + private ArrayList<Uri> mSubItemUriTemp = new ArrayList<Uri>(1); + @Override + public ArrayList<Uri> getSubItemUrisForItem(Object item) { + mSubItemUriTemp.clear(); + mSubItemUriTemp.add(mLoaderCompatShim.uriForItem((Cursor) item)); + return mSubItemUriTemp; + } + + + @Override + public Object getPathForItemAtPosition(int position) { + return mLoaderCompatShim.getPathForItem(mAdapter.getItem(position)); + } + + @Override + public void deleteItemWithPath(Object itemPath) { + mLoaderCompatShim.deleteItemWithPath(itemPath); + } + + @Override + public SparseBooleanArray getSelectedItemPositions() { + return mAlbumView.getCheckedItemPositions(); + } + + @Override + public int getSelectedItemCount() { + return mAlbumView.getCheckedItemCount(); + } + + @Override + public Uri getItemUri(Object item) { + return mLoaderCompatShim.uriForItem((Cursor) item); + } +} diff --git a/src/com/android/photos/AlbumSetFragment.java b/src/com/android/photos/AlbumSetFragment.java index 20c6db4c9..17dc69c97 100644 --- a/src/com/android/photos/AlbumSetFragment.java +++ b/src/com/android/photos/AlbumSetFragment.java @@ -19,6 +19,7 @@ package com.android.photos; import android.app.Fragment; import android.app.LoaderManager.LoaderCallbacks; import android.content.Context; +import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.net.Uri; @@ -120,9 +121,13 @@ public class AlbumSetFragment extends Fragment implements OnItemClickListener, return; } Cursor item = (Cursor) mAdapter.getItem(pos); - Toast.makeText(v.getContext(), - "Tapped " + item.getInt(AlbumSetLoader.INDEX_ID), - Toast.LENGTH_SHORT).show(); + Context context = getActivity(); + Intent intent = new Intent(context, AlbumActivity.class); + intent.putExtra(AlbumActivity.KEY_ALBUM_URI, + mLoaderCompatShim.getPathForItem(item).toString()); + intent.putExtra(AlbumActivity.KEY_ALBUM_TITLE, + item.getString(AlbumSetLoader.INDEX_TITLE)); + context.startActivity(intent); } @Override |