aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjruesga <jorge@ruesga.com>2013-07-02 23:43:25 +0200
committerjruesga <jorge@ruesga.com>2013-07-02 23:43:25 +0200
commitcd2132689e0da3f1d71e49edc0e3040aa58faa26 (patch)
tree283dc99fa4e068881f29adbc574af265f2b8c44e
parent3dd2a72ffbc6a589ffef60ee326f83adbee20b99 (diff)
downloadandroid_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.pngbin0 -> 1201 bytes
-rw-r--r--res/drawable-mdpi/ic_restore.pngbin0 -> 756 bytes
-rw-r--r--res/drawable-xhdpi/ic_restore.pngbin0 -> 1595 bytes
-rw-r--r--res/menu/choose_preference.xml (renamed from res/menu/albums.xml)4
-rw-r--r--res/values/strings.xml1
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/model/Album.java14
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java49
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/widgets/AlbumPictures.java26
8 files changed, 79 insertions, 15 deletions
diff --git a/res/drawable-hdpi/ic_restore.png b/res/drawable-hdpi/ic_restore.png
new file mode 100644
index 0000000..69dd3d4
--- /dev/null
+++ b/res/drawable-hdpi/ic_restore.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_restore.png b/res/drawable-mdpi/ic_restore.png
new file mode 100644
index 0000000..89d6b7b
--- /dev/null
+++ b/res/drawable-mdpi/ic_restore.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_restore.png b/res/drawable-xhdpi/ic_restore.png
new file mode 100644
index 0000000..89a450d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_restore.png
Binary files differ
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++;
+ }
}
}
}