diff options
author | Jorge Ruesga <jorge@ruesga.com> | 2013-07-31 01:19:39 +0200 |
---|---|---|
committer | Jorge Ruesga <jorge@ruesga.com> | 2013-07-31 01:19:39 +0200 |
commit | 81f7dab77c5f28c74da332a038bb3411337f80ad (patch) | |
tree | 9c1e70bc0bd8ef347b4c52f33330f9eb9464ee31 | |
parent | bb22611e05b39c8849f209065ba4c776f5deab04 (diff) | |
download | android_packages_wallpapers_PhotoPhase-81f7dab77c5f28c74da332a038bb3411337f80ad.tar.gz android_packages_wallpapers_PhotoPhase-81f7dab77c5f28c74da332a038bb3411337f80ad.tar.bz2 android_packages_wallpapers_PhotoPhase-81f7dab77c5f28c74da332a038bb3411337f80ad.zip |
Initial steps of the disposition preference.
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
28 files changed, 265 insertions, 45 deletions
diff --git a/res/drawable-hdpi/ic_camera.png b/res/drawable-hdpi/ic_camera.png Binary files differnew file mode 100644 index 0000000..e0157f7 --- /dev/null +++ b/res/drawable-hdpi/ic_camera.png diff --git a/res/drawable-hdpi/resize_frame_holo.9.png b/res/drawable-hdpi/resize_frame_holo.9.png Binary files differnew file mode 100644 index 0000000..059a9d6 --- /dev/null +++ b/res/drawable-hdpi/resize_frame_holo.9.png diff --git a/res/drawable-hdpi/resize_handle_bottom.png b/res/drawable-hdpi/resize_handle_bottom.png Binary files differnew file mode 100644 index 0000000..bc4418f --- /dev/null +++ b/res/drawable-hdpi/resize_handle_bottom.png diff --git a/res/drawable-hdpi/resize_handle_left.png b/res/drawable-hdpi/resize_handle_left.png Binary files differnew file mode 100644 index 0000000..b808170 --- /dev/null +++ b/res/drawable-hdpi/resize_handle_left.png diff --git a/res/drawable-hdpi/resize_handle_right.png b/res/drawable-hdpi/resize_handle_right.png Binary files differnew file mode 100644 index 0000000..bcb8104 --- /dev/null +++ b/res/drawable-hdpi/resize_handle_right.png diff --git a/res/drawable-hdpi/resize_handle_top.png b/res/drawable-hdpi/resize_handle_top.png Binary files differnew file mode 100644 index 0000000..3ec18de --- /dev/null +++ b/res/drawable-hdpi/resize_handle_top.png diff --git a/res/drawable-mdpi/ic_camera.png b/res/drawable-mdpi/ic_camera.png Binary files differnew file mode 100644 index 0000000..17a2e9d --- /dev/null +++ b/res/drawable-mdpi/ic_camera.png diff --git a/res/drawable-mdpi/resize_frame_holo.9.png b/res/drawable-mdpi/resize_frame_holo.9.png Binary files differnew file mode 100644 index 0000000..435f3aa --- /dev/null +++ b/res/drawable-mdpi/resize_frame_holo.9.png diff --git a/res/drawable-mdpi/resize_handle_bottom.png b/res/drawable-mdpi/resize_handle_bottom.png Binary files differnew file mode 100644 index 0000000..848af0a --- /dev/null +++ b/res/drawable-mdpi/resize_handle_bottom.png diff --git a/res/drawable-mdpi/resize_handle_left.png b/res/drawable-mdpi/resize_handle_left.png Binary files differnew file mode 100644 index 0000000..0e62c9c --- /dev/null +++ b/res/drawable-mdpi/resize_handle_left.png diff --git a/res/drawable-mdpi/resize_handle_right.png b/res/drawable-mdpi/resize_handle_right.png Binary files differnew file mode 100644 index 0000000..5c8d477 --- /dev/null +++ b/res/drawable-mdpi/resize_handle_right.png diff --git a/res/drawable-mdpi/resize_handle_top.png b/res/drawable-mdpi/resize_handle_top.png Binary files differnew file mode 100644 index 0000000..609e06b --- /dev/null +++ b/res/drawable-mdpi/resize_handle_top.png diff --git a/res/drawable-xhdpi/ic_camera.png b/res/drawable-xhdpi/ic_camera.png Binary files differnew file mode 100644 index 0000000..8a9b3a3 --- /dev/null +++ b/res/drawable-xhdpi/ic_camera.png diff --git a/res/drawable-xhdpi/resize_frame_holo.9.png b/res/drawable-xhdpi/resize_frame_holo.9.png Binary files differnew file mode 100644 index 0000000..270c9b7 --- /dev/null +++ b/res/drawable-xhdpi/resize_frame_holo.9.png diff --git a/res/drawable-xhdpi/resize_handle_bottom.png b/res/drawable-xhdpi/resize_handle_bottom.png Binary files differnew file mode 100644 index 0000000..d4b11c9 --- /dev/null +++ b/res/drawable-xhdpi/resize_handle_bottom.png diff --git a/res/drawable-xhdpi/resize_handle_left.png b/res/drawable-xhdpi/resize_handle_left.png Binary files differnew file mode 100644 index 0000000..6eb7cd0 --- /dev/null +++ b/res/drawable-xhdpi/resize_handle_left.png diff --git a/res/drawable-xhdpi/resize_handle_right.png b/res/drawable-xhdpi/resize_handle_right.png Binary files differnew file mode 100644 index 0000000..01d96ab --- /dev/null +++ b/res/drawable-xhdpi/resize_handle_right.png diff --git a/res/drawable-xhdpi/resize_handle_top.png b/res/drawable-xhdpi/resize_handle_top.png Binary files differnew file mode 100644 index 0000000..9066218 --- /dev/null +++ b/res/drawable-xhdpi/resize_handle_top.png diff --git a/res/layout/choose_disposition_fragment.xml b/res/layout/choose_disposition_fragment.xml index becf879..166f715 100644 --- a/res/layout/choose_disposition_fragment.xml +++ b/res/layout/choose_disposition_fragment.xml @@ -14,11 +14,29 @@ limitations under the License. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="@dimen/default_margin" - android:layout_marginBottom="@dimen/default_margin"> + android:layout_marginBottom="@dimen/default_margin" + android:orientation="vertical"> - <!-- Resize widgets are inserted here --> -</RelativeLayout> + <TextView android:id="@+id/description" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/holo_blue_light" + android:layout_marginEnd="8dip" + android:layout_marginStart="8dip" + android:padding="4dip" + android:gravity="center_horizontal" + android:textColor="#FFFFFF" + android:textAppearance="?android:attr/textAppearanceSmall" + android:text="@string/pref_disposition_description" /> + + <org.cyanogenmod.wallpapers.photophase.widgets.DispositionView + android:id="@+id/disposition_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="@dimen/default_margin" + android:layout_marginBottom="@dimen/default_margin" /> +</LinearLayout> diff --git a/res/menu/choose_preference.xml b/res/menu/accept_restore_preference.xml index 435e4da..435e4da 100644 --- a/res/menu/choose_preference.xml +++ b/res/menu/accept_restore_preference.xml diff --git a/res/values/colors.xml b/res/values/colors.xml index d22597f..a944c45 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -24,4 +24,6 @@ <color name="text_color">#404040</color> <color name="notification_text_color">#ffffffff</color> + <color name="disposition_frame_bg_color">#c8595757</color> + </resources> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 7721a7b..3fc07e1 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -44,4 +44,6 @@ <dimen name="default_margin">16dp</dimen> <dimen name="small_margin">8dp</dimen> <dimen name="small_padding">5dp</dimen> + + <dimen name="disposition_frame_padding">1dp</dimen> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 4aa51d4..eec1105 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -72,13 +72,14 @@ <string name="pref_disposition_portrait_summary">Select how pictures are disposed on a portrait screen</string> <string name="pref_disposition_landscape">Landscape disposition</string> <string name="pref_disposition_landscape_summary">Select how pictures are disposed on a landscape screen</string> + <string name="pref_disposition_description">Tap a frame to select it. Then drag \u0026 drop the borders of the frame to resize it. + Tap the split buttons to split the frame horizontally or vertically.</string> <string name="pref_about">About</string> <string name="pref_about_summary">PhotoPhase v<xliff:g id="version">%1$s</xliff:g>\nCopyright \u00A9 2013 The CyanogenMod Project</string> <!-- Plurals --> <plurals name="album_number_of_pictures"> - <item quantity="zero">0 pictures</item> <item quantity="one">1 picture</item> <item quantity="other"><xliff:g id="number" example="7">%d</xliff:g> pictures</item> </plurals> diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java index 9e48a1b..cebfd81 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java +++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/ChoosePicturesFragment.java @@ -242,7 +242,7 @@ public class ChoosePicturesFragment extends PreferenceFragment { */ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.choose_preference, menu); + inflater.inflate(R.menu.accept_restore_preference, menu); } /** diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java index 99d2153..780bf4e 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java +++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/DispositionFragment.java @@ -17,16 +17,18 @@ package org.cyanogenmod.wallpapers.photophase.preferences; import android.content.Context; -import android.graphics.Rect; import android.os.Bundle; import android.preference.PreferenceFragment; 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.RelativeLayout; import org.cyanogenmod.wallpapers.photophase.R; import org.cyanogenmod.wallpapers.photophase.model.Disposition; +import org.cyanogenmod.wallpapers.photophase.widgets.DispositionView; import java.util.List; @@ -35,32 +37,21 @@ import java.util.List; */ public abstract class DispositionFragment extends PreferenceFragment { - /** - * Available modes for the {@link DispositionFragment} class. - */ - public static enum DispositionModes { - /** - * Portrait screen - */ - PORTRAIT, - /** - * Landscape screen - */ - LANDSCAPE; - } + private Runnable mRedraw = new Runnable() { + @Override + public void run() { + if (getActivity().isDestroyed()) return; + mDispositionView.setDispositions(getUserDispositions(), getCols(), getRows()); + } + }; - private final DispositionModes mMode; - - private List<Disposition> mOldDispositions; + DispositionView mDispositionView; /** * Constructor of <code>DispositionFragment</code> - * - * @param mode The mode of the disposition layout */ - public DispositionFragment(DispositionModes mode) { + public DispositionFragment() { super(); - mMode = mode; } /** @@ -71,6 +62,20 @@ public abstract class DispositionFragment extends PreferenceFragment { public abstract List<Disposition> getUserDispositions(); /** + * Method that returns the number of rows to use + * + * @return int The number of rows + */ + public abstract int getRows(); + + /** + * Method that returns the number of cols to use + * + * @return int The number of cols + */ + public abstract int getCols(); + + /** * {@inheritDoc} */ @Override @@ -80,6 +85,8 @@ public abstract class DispositionFragment extends PreferenceFragment { // Change the preference manager getPreferenceManager().setSharedPreferencesName(PreferencesProvider.PREFERENCES_FILE); getPreferenceManager().setSharedPreferencesMode(Context.MODE_PRIVATE); + + setHasOptionsMenu(true); } /** @@ -89,25 +96,52 @@ public abstract class DispositionFragment extends PreferenceFragment { 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); -// v.addView(createFrame()); + mDispositionView = (DispositionView)v.findViewById(R.id.disposition_view); + mDispositionView.post(mRedraw); return v; } /** - * Method that recreate - * @param r - * @return + * {@inheritDoc} */ - private View createFrame(Rect r) { - // Create a view with all the - View v = new View(getActivity()); - v.setBackgroundColor(getResources().getColor(R.color.wallpaper_background_color)); - RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(r.width(), r.height()); - params.leftMargin = r.top; - params.topMargin = r.left; - v.setLayoutParams(params); - v.setFocusable(true); - v.setFocusableInTouchMode(true); - return v; + @Override + public void onDestroyView() { + super.onDestroyView(); + if (mDispositionView != null) { + mDispositionView.removeCallbacks(mRedraw); + } } + + /** + * {@inheritDoc} + */ + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.accept_restore_preference, menu); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + 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 disposition view to the default state + */ + private void restoreData() { + //TODO Restore disposition + } + } diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/LandscapeDispositionFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/LandscapeDispositionFragment.java index 72b32c5..f53925d 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/preferences/LandscapeDispositionFragment.java +++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/LandscapeDispositionFragment.java @@ -33,7 +33,7 @@ public class LandscapeDispositionFragment extends DispositionFragment { * Constructor of <code>LandscapeDispositionFragment</code> */ public LandscapeDispositionFragment() { - super(DispositionModes.LANDSCAPE); + super(); } /** @@ -52,4 +52,22 @@ public class LandscapeDispositionFragment extends DispositionFragment { public List<Disposition> getUserDispositions() { return PreferencesProvider.Preferences.Layout.getLandscapeDisposition(); } + + /** + * {@inheritDoc} + */ + @Override + public int getRows() { + // inverted + return PreferencesProvider.Preferences.Layout.getCols(); + } + + /** + * {@inheritDoc} + */ + @Override + public int getCols() { + // inverted + return PreferencesProvider.Preferences.Layout.getRows(); + } } diff --git a/src/org/cyanogenmod/wallpapers/photophase/preferences/PortraitDispositionFragment.java b/src/org/cyanogenmod/wallpapers/photophase/preferences/PortraitDispositionFragment.java index 5209a5b..49fc4c4 100644 --- a/src/org/cyanogenmod/wallpapers/photophase/preferences/PortraitDispositionFragment.java +++ b/src/org/cyanogenmod/wallpapers/photophase/preferences/PortraitDispositionFragment.java @@ -33,7 +33,7 @@ public class PortraitDispositionFragment extends DispositionFragment { * Constructor of <code>PortraitDispositionFragment</code> */ public PortraitDispositionFragment() { - super(DispositionModes.PORTRAIT); + super(); } /** @@ -52,4 +52,20 @@ public class PortraitDispositionFragment extends DispositionFragment { public List<Disposition> getUserDispositions() { return PreferencesProvider.Preferences.Layout.getPortraitDisposition(); } + + /** + * {@inheritDoc} + */ + @Override + public int getRows() { + return PreferencesProvider.Preferences.Layout.getRows(); + } + + /** + * {@inheritDoc} + */ + @Override + public int getCols() { + return PreferencesProvider.Preferences.Layout.getCols(); + } } diff --git a/src/org/cyanogenmod/wallpapers/photophase/widgets/DispositionView.java b/src/org/cyanogenmod/wallpapers/photophase/widgets/DispositionView.java new file mode 100644 index 0000000..93b4b76 --- /dev/null +++ b/src/org/cyanogenmod/wallpapers/photophase/widgets/DispositionView.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2013 The CyanogenMod 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 org.cyanogenmod.wallpapers.photophase.widgets; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.ImageView.ScaleType; + +import org.cyanogenmod.wallpapers.photophase.R; +import org.cyanogenmod.wallpapers.photophase.model.Disposition; + +import java.util.List; + +/** + * A class that allow to select the frames disposition visually + */ +public class DispositionView extends RelativeLayout { + + private List<Disposition> mDispositions; + private int mCols; + private int mRows; + + /** + * Constructor of <code>DispositionView</code>. + * + * @param context The current context + */ + public DispositionView(Context context) { + super(context); + } + + /** + * Constructor of <code>DispositionView</code>. + * + * @param context The current context + * @param attrs The attributes of the XML tag that is inflating the view. + */ + public DispositionView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * Constructor of <code>DispositionView</code>. + * + * @param context The current context + * @param attrs The attributes of the XML tag that is inflating the view. + * @param defStyle The default style to apply to this view. If 0, no style + * will be applied (beyond what is included in the theme). This may + * either be an attribute resource, whose value will be retrieved + * from the current theme, or an explicit style resource. + */ + public DispositionView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Method that sets the disposition to draw on this view + * + * @param dispositions The dispositions to draw + */ + public void setDispositions(List<Disposition> dispositions, int cols, int rows) { + mDispositions = dispositions; + mCols = cols; + mRows = rows; + + // Remove all the current views and add the new ones + removeAllViews(); + for (Disposition disposition : mDispositions) { + createFrame(getLocationFromDisposition(disposition)); + } + } + + /** + * Method that create a new frame to be drawn in the specified location + * + * @param r The location relative to the parent layout + */ + private void createFrame(Rect r) { + int padding = (int)getResources().getDimension(R.dimen.disposition_frame_padding); + ImageView v = new ImageView(getContext()); + v.setImageResource(R.drawable.ic_camera); + v.setScaleType(ScaleType.CENTER); + v.setBackgroundColor(getResources().getColor(R.color.disposition_frame_bg_color)); + RelativeLayout.LayoutParams params = + new RelativeLayout.LayoutParams(r.width() - padding, r.height() - padding); + params.leftMargin = r.left + padding; + params.topMargin = r.top + padding; + v.setFocusable(true); + v.setFocusableInTouchMode(true); + addView(v, params); + } + + /** + * Method that returns the location of the frame from its disposition + * + * @param disposition The source disposition + * @return Rect The location on parent view + */ + private Rect getLocationFromDisposition(Disposition disposition) { + int w = getMeasuredWidth(); + int h = getMeasuredHeight(); + int cw = w / mCols; + int ch = h / mRows; + + Rect location = new Rect(); + location.left = disposition.x * cw; + location.top = disposition.y * ch; + location.right = location.left + disposition.w * cw; + location.bottom = location.top + disposition.h * ch; + return location; + } +} |