aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-11-03 20:27:42 +0100
committerJorge Ruesga <jorge@ruesga.com>2013-11-03 20:27:42 +0100
commitcfa23b580d7d50eb4c1e739f590bedd6b0a84bd8 (patch)
tree8aeb1f472ba965913d0f06ec203db10e3515fd00 /src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java
parentcf54b6212fdfd3bc0a0a1cab3b2d8415e07b382b (diff)
downloadandroid_packages_wallpapers_PhotoPhase-cfa23b580d7d50eb4c1e739f590bedd6b0a84bd8.tar.gz
android_packages_wallpapers_PhotoPhase-cfa23b580d7d50eb4c1e739f590bedd6b0a84bd8.tar.bz2
android_packages_wallpapers_PhotoPhase-cfa23b580d7d50eb4c1e739f590bedd6b0a84bd8.zip
Dispositions templates
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Diffstat (limited to 'src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java')
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java190
1 files changed, 150 insertions, 40 deletions
diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java
index 7071e76..5040178 100644
--- a/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java
+++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java
@@ -20,41 +20,44 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceFragment;
+import android.support.v4.view.ViewPager;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import org.cyanogenmod.wallpapers.photophase.R;
+import org.cyanogenmod.wallpapers.photophase.adapters.DispositionAdapter;
import org.cyanogenmod.wallpapers.photophase.model.Disposition;
+import org.cyanogenmod.wallpapers.photophase.model.Dispositions;
+import org.cyanogenmod.wallpapers.photophase.utils.DispositionUtil;
import org.cyanogenmod.wallpapers.photophase.widgets.DispositionView;
import org.cyanogenmod.wallpapers.photophase.widgets.DispositionView.OnFrameSelectedListener;
import org.cyanogenmod.wallpapers.photophase.widgets.ResizeFrame;
+import java.util.ArrayList;
import java.util.List;
/**
* An abstract fragment class that allow to choose the layout disposition of the wallpaper.
*/
-public abstract class DispositionFragment
- extends PreferenceFragment implements OnFrameSelectedListener {
-
- private Runnable mRedraw = new Runnable() {
- @Override
- public void run() {
- if (getActivity() == null) return;
- try {
- mDispositionView.setDispositions(getUserDispositions(), getCols(), getRows());
- } catch (Exception ex) {
- // Ignored
- }
- }
- };
+public abstract class DispositionFragment extends PreferenceFragment
+ implements OnFrameSelectedListener, OnPageChangeListener {
- DispositionView mDispositionView;
+ private ViewPager mPager;
+ private DispositionAdapter mAdapter;
+ private ResizeFrame mResizeFrame;
+ private TextView mAdvise;
+ private DispositionView mCurrentDispositionView;
+ private int mCurrentPage;
+ private int mNumberOfTemplates;
+
+ private MenuItem mRestoreMenu;
private MenuItem mDeleteMenu;
/**
@@ -79,6 +82,13 @@ public abstract class DispositionFragment
public abstract List<Disposition> getDefaultDispositions();
/**
+ * Method that returns the system-defined dispositions templates
+ *
+ * @return String[] The system-defined dispositions templates
+ */
+ public abstract String[] getDispositionsTemplates();
+
+ /**
* Method that request to save the dispositions
*
* @param dispositions The dispositions to save
@@ -93,9 +103,9 @@ public abstract class DispositionFragment
public abstract int getRows();
/**
- * Method that returns the number of cols to use
+ * Method that returns the number of columns to use
*
- * @return int The number of cols
+ * @return int The number of columns
*/
public abstract int getCols();
@@ -117,13 +127,24 @@ public abstract class DispositionFragment
* {@inheritDoc}
*/
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
// Inflate the layout for this fragment
- ViewGroup v = (ViewGroup)inflater.inflate(R.layout.choose_disposition_fragment, container, false);
- mDispositionView = (DispositionView)v.findViewById(R.id.disposition_view);
- mDispositionView.setResizeFrame((ResizeFrame)v.findViewById(R.id.resize_frame));
- mDispositionView.setOnFrameSelectedListener(this);
- mDispositionView.post(mRedraw);
+ ViewGroup v = (ViewGroup)inflater.inflate(R.layout.choose_disposition_fragment,
+ container, false);
+
+ mCurrentPage = 0;
+ mNumberOfTemplates = getDispositionsTemplates().length;
+
+ mAdvise = (TextView)v.findViewById(R.id.advise);
+ mResizeFrame = (ResizeFrame)v.findViewById(R.id.resize_frame);
+
+ mAdapter = new DispositionAdapter(getActivity(), getAllDispositions(), mResizeFrame, this);
+ mPager = (ViewPager)v.findViewById(R.id.dispositions_pager);
+ mPager.setAdapter(mAdapter);
+ mPager.setOnPageChangeListener(this);
+ mPager.setCurrentItem(0);
+
return v;
}
@@ -132,21 +153,28 @@ public abstract class DispositionFragment
*/
@Override
public void onDestroyView() {
- super.onDestroyView();
- if (mDispositionView != null) {
- mDispositionView.removeCallbacks(mRedraw);
- if (mDispositionView.isChanged()) {
- saveDispositions(mDispositionView.getDispositions());
- }
+ boolean saved = false;
+
+ if (mCurrentDispositionView == null) {
+ mCurrentDispositionView = mAdapter.getView(0);
}
- // Notify that the settings was changed
- Intent intent = new Intent(PreferencesProvider.ACTION_SETTINGS_CHANGED);
- if (mDispositionView.isChanged()) {
- intent.putExtra(PreferencesProvider.EXTRA_FLAG_REDRAW, Boolean.TRUE);
- intent.putExtra(PreferencesProvider.EXTRA_FLAG_RECREATE_WORLD, Boolean.TRUE);
+ if (mCurrentDispositionView != null) {
+ if (mCurrentPage != 0 || mCurrentDispositionView.isChanged()) {
+ saveDispositions(mCurrentDispositionView.getDispositions());
+ saved = true;
+ }
+
+ // Notify that the settings was changed
+ Intent intent = new Intent(PreferencesProvider.ACTION_SETTINGS_CHANGED);
+ if (saved) {
+ intent.putExtra(PreferencesProvider.EXTRA_FLAG_REDRAW, Boolean.TRUE);
+ intent.putExtra(PreferencesProvider.EXTRA_FLAG_RECREATE_WORLD, Boolean.TRUE);
+ }
+ getActivity().sendBroadcast(intent);
}
- getActivity().sendBroadcast(intent);
+
+ super.onDestroyView();
}
/**
@@ -155,10 +183,9 @@ public abstract class DispositionFragment
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.dispositions, menu);
+ mRestoreMenu = menu.findItem(R.id.mnu_restore);
mDeleteMenu = menu.findItem(R.id.mnu_delete);
- if (mDeleteMenu != null) {
- mDeleteMenu.setVisible(false);
- }
+ mDeleteMenu.setVisible(false);
}
/**
@@ -185,14 +212,51 @@ public abstract class DispositionFragment
* Method that restores the disposition view to the default state
*/
private void restoreData() {
- mDispositionView.setDispositions(getUserDispositions(), getCols(), getRows());
+ if (mCurrentDispositionView == null) {
+ mCurrentDispositionView = mAdapter.getView(0);
+ }
+ mCurrentDispositionView.setDispositions(getUserDispositions(), getCols(), getRows(), true);
}
/**
* Method that restores the disposition view to the default state
*/
private void deleteFrame() {
- mDispositionView.deleteCurrentFrame();
+ if (mCurrentDispositionView == null) {
+ mCurrentDispositionView = mAdapter.getView(0);
+ }
+ mCurrentDispositionView.deleteCurrentFrame();
+ }
+
+ /**
+ * Method that returns the system-defined dispositions templates
+ *
+ * @return List<Dispositions> All the system-defined dispositions templates
+ */
+ public List<Dispositions> getAllDispositions() {
+ final int rows = getRows();
+ final int cols = getCols();
+
+ List<Dispositions> allDispositions = new ArrayList<Dispositions>();
+ allDispositions.add(new Dispositions(getUserDispositions(), rows, cols));
+ allDispositions.addAll(getSystemDefinedDispositions(rows, cols));
+ return allDispositions;
+ }
+ /**
+ * Method that returns the system-defined dispositions templates
+ *
+ * @param rows The number of rows
+ * @param cols The number of columns
+ * @return List<Dispositions> All the system-defined dispositions templates
+ */
+ private List<Dispositions> getSystemDefinedDispositions(int rows, int cols) {
+ String[] templates = getDispositionsTemplates();
+ List<Dispositions> systemDispositions = new ArrayList<Dispositions>(templates.length);
+ for (String template : templates) {
+ systemDispositions.add(new Dispositions(
+ DispositionUtil.toDispositions(template), rows, cols));
+ }
+ return systemDispositions;
}
/**
@@ -214,4 +278,50 @@ public abstract class DispositionFragment
mDeleteMenu.setVisible(false);
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ // Ignored
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onPageSelected(int position) {
+ // Save state
+ mCurrentPage = position;
+ mCurrentDispositionView = mAdapter.getView(position);
+
+ // Enable/Disable menus
+ if (mRestoreMenu != null) {
+ mRestoreMenu.setVisible(position == 0);
+ }
+ if (mDeleteMenu != null) {
+ mDeleteMenu.setVisible(false);
+ }
+
+ // Set the title
+ if (position == 0) {
+ mAdvise.setText(getString(R.string.pref_disposition_description));
+ } else {
+ mAdvise.setText(getString(R.string.pref_disposition_template,
+ String.valueOf(position), String.valueOf(mNumberOfTemplates)));
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ if (mDeleteMenu != null) {
+ mDeleteMenu.setVisible(false);
+ }
+ mResizeFrame.setVisibility(View.GONE);
+ }
+
}