diff options
author | jruesga <jorge@ruesga.com> | 2013-07-02 23:43:25 +0200 |
---|---|---|
committer | jruesga <jorge@ruesga.com> | 2013-07-02 23:43:25 +0200 |
commit | cd2132689e0da3f1d71e49edc0e3040aa58faa26 (patch) | |
tree | 283dc99fa4e068881f29adbc574af265f2b8c44e | |
parent | 3dd2a72ffbc6a589ffef60ee326f83adbee20b99 (diff) | |
download | android_packages_wallpapers_PhotoPhase-cd2132689e0da3f1d71e49edc0e3040aa58faa26.tar.gz android_packages_wallpapers_PhotoPhase-cd2132689e0da3f1d71e49edc0e3040aa58faa26.tar.bz2 android_packages_wallpapers_PhotoPhase-cd2132689e0da3f1d71e49edc0e3040aa58faa26.zip |
Add restore option in album preference
Signed-off-by: jruesga <jorge@ruesga.com>
-rw-r--r-- | res/drawable-hdpi/ic_restore.png | bin | 0 -> 1201 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_restore.png | bin | 0 -> 756 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_restore.png | bin | 0 -> 1595 bytes | |||
-rw-r--r-- | res/menu/choose_preference.xml (renamed from res/menu/albums.xml) | 4 | ||||
-rw-r--r-- | res/values/strings.xml | 1 | ||||
-rw-r--r-- | src/org/cyanogenmod/wallpapers/photophase/model/Album.java | 14 | ||||
-rw-r--r-- | src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java | 49 | ||||
-rw-r--r-- | src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java | 26 |
8 files changed, 79 insertions, 15 deletions
diff --git a/res/drawable-hdpi/ic_restore.png b/res/drawable-hdpi/ic_restore.png Binary files differnew file mode 100644 index 0000000..69dd3d4 --- /dev/null +++ b/res/drawable-hdpi/ic_restore.png diff --git a/res/drawable-mdpi/ic_restore.png b/res/drawable-mdpi/ic_restore.png Binary files differnew file mode 100644 index 0000000..89d6b7b --- /dev/null +++ b/res/drawable-mdpi/ic_restore.png diff --git a/res/drawable-xhdpi/ic_restore.png b/res/drawable-xhdpi/ic_restore.png Binary files differnew file mode 100644 index 0000000..89a450d --- /dev/null +++ b/res/drawable-xhdpi/ic_restore.png diff --git a/res/menu/albums.xml b/res/menu/choose_preference.xml index 4a64b62..435e4da 100644 --- a/res/menu/albums.xml +++ b/res/menu/choose_preference.xml @@ -15,6 +15,10 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/mnu_restore" + android:title="@string/mnu_restore" + android:icon="@drawable/ic_restore" + android:showAsAction="always|withText" /> <item android:id="@+id/mnu_ok" android:title="@string/mnu_ok" android:icon="@drawable/ic_accept" diff --git a/res/values/strings.xml b/res/values/strings.xml index d900967..9ece6be 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -25,6 +25,7 @@ <!-- Menus --> <string name="mnu_ok" translatable="false">@android:string/ok</string> + <string name="mnu_restore">Restore</string> <string name="mnu_settings">Settings</string> <string name="mnu_select_all">Select all</string> <string name="mnu_deselect_all">Deselect all</string> diff --git a/src/org/cyanogenmod/wallpapers/photophase/model/Album.java b/src/org/cyanogenmod/wallpapers/photophase/model/Album.java index 6329a69..71fe389 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/model/Album.java +++ b/src/org/cyanogenmod/wallpapers/photophase/model/Album.java @@ -18,12 +18,13 @@ package org.cyanogenmod.wallpapers.photophase.model; import android.graphics.drawable.Drawable; +import java.util.ArrayList; import java.util.List; /** * A class that represents an album */ -public class Album implements Comparable<Album> { +public class Album implements Comparable<Album>, Cloneable { private Drawable mIcon; private String mPath; @@ -94,4 +95,15 @@ public class Album implements Comparable<Album> { return mPath.compareTo(another.mPath); } + @Override + public Object clone() { + Album album = new Album(); + album.mIcon = mIcon; + album.mPath = mPath; + album.mName = mName; + album.mDate = mDate; + album.mItems = new ArrayList<String>(mItems); + album.mSelectedItems = new ArrayList<String>(mSelectedItems); + return album; + } } diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java index f0f3522..34611c9 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java +++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java @@ -43,6 +43,7 @@ import java.io.File; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -62,6 +63,7 @@ public class ChoosePicturesFragment extends PreferenceFragment { DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); Album album = null; mAlbums.clear(); + mOriginalAlbums.clear(); Cursor c = mContentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{ MediaStore.MediaColumns.DATA }, @@ -118,18 +120,21 @@ public class ChoosePicturesFragment extends PreferenceFragment { protected void onProgressUpdate(Album... values) { for (Album album : values) { addAlbum(album); + mOriginalAlbums.add((Album)album.clone()); } } }; + /*package*/ ContentResolver mContentResolver; - List<Album> mAlbums; - ContentResolver mContentResolver; - - private CardLayout mAlbumsPanel; + /*package*/ List<Album> mAlbums; + /*package*/ List<Album> mOriginalAlbums; /*package*/ Set<String> mSelectedAlbums; + private Set<String> mOriginalSelectedAlbums; + + private CardLayout mAlbumsPanel; /*package*/ boolean mSelectionChanged; @@ -143,13 +148,15 @@ public class ChoosePicturesFragment extends PreferenceFragment { // Create an empty album mAlbums = new ArrayList<Album>(); + mOriginalAlbums = new ArrayList<Album>(); // Change the preference manager getPreferenceManager().setSharedPreferencesName(PreferencesProvider.PREFERENCES_FILE); getPreferenceManager().setSharedPreferencesMode(Context.MODE_PRIVATE); // Load the albums user selection - mSelectedAlbums = PreferencesProvider.Preferences.Media.getSelectedAlbums(); + mOriginalSelectedAlbums = PreferencesProvider.Preferences.Media.getSelectedAlbums(); + mSelectedAlbums = new HashSet<String>(mOriginalSelectedAlbums); mSelectionChanged = false; setHasOptionsMenu(true); @@ -211,7 +218,7 @@ public class ChoosePicturesFragment extends PreferenceFragment { */ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.albums, menu); + inflater.inflate(R.menu.choose_preference, menu); } /** @@ -223,12 +230,42 @@ public class ChoosePicturesFragment extends PreferenceFragment { case R.id.mnu_ok: getActivity().finish(); return true; + case R.id.mnu_restore: + restoreData(); + return true; default: return super.onOptionsItemSelected(item); } } /** + * Method that restores the albums to its original state + */ + private void restoreData() { + // Restore and the albums the selection + mSelectedAlbums = new HashSet<String>(mOriginalSelectedAlbums); + mAlbums.clear(); + for (Album album : mOriginalAlbums) { + mAlbums.add((Album)album.clone()); + } + + // Update every view (albums and views should have the same size) + int count = mAlbumsPanel.getChildCount(); + for (int i = 0; i < count; i++) { + Album album = mAlbums.get(i); + View v = mAlbumsPanel.getChildAt(i); + AlbumInfo albumInfo = (AlbumInfo)v.findViewById(R.id.album_info); + AlbumPictures albumPictures = (AlbumPictures)v.findViewById(R.id.album_pictures); + albumInfo.updateView(album); + albumPictures.updateView(album); + } + + // Restore the preference + PreferencesProvider.Preferences.Media.setSelectedAlbums(getActivity(), mSelectedAlbums); + mSelectionChanged = false; + } + + /** * Method that adds a new album to the card layout * * @param album The album to add diff --git a/src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java b/src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java index 324fe15..18bc5db 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java +++ b/src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java @@ -160,14 +160,24 @@ public class AlbumPictures extends RelativeLayout mAlbum = album; if (mHolder != null) { - // Create the pictures - final LayoutInflater inflater = (LayoutInflater) getContext(). - getSystemService(Context.LAYOUT_INFLATER_SERVICE); - mScroller.cancelTasks(); - mHolder.removeAllViews(); - for (final String picture : mAlbum.getItems()) { - View v = createPicture(inflater, picture, isPictureSelected(picture)); - mHolder.addView(v); + int pictures = mHolder.getChildCount(); + if (pictures != album.getItems().size()) { + // Recreate the pictures + final LayoutInflater inflater = (LayoutInflater) getContext(). + getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mScroller.cancelTasks(); + mHolder.removeAllViews(); + for (final String picture : mAlbum.getItems()) { + View v = createPicture(inflater, picture, isPictureSelected(picture)); + mHolder.addView(v); + } + } else { + int i = 0; + for (final String picture : mAlbum.getItems()) { + View v = mHolder.getChildAt(i); + v.setSelected(isPictureSelected(picture)); + i++; + } } } } |