aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java370
1 files changed, 370 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java
new file mode 100644
index 000000000..e17074499
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGallerySettingsFragment.java
@@ -0,0 +1,370 @@
+package org.wordpress.android.ui.media;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.os.Bundle;
+import android.util.SparseBooleanArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import org.wordpress.android.R;
+import org.wordpress.android.ui.ExpandableHeightGridView;
+
+import java.util.ArrayList;
+
+/**
+ * The fragment containing the settings for the media gallery
+ */
+public class MediaGallerySettingsFragment extends Fragment implements OnCheckedChangeListener {
+ private static final int DEFAULT_THUMBNAIL_COLUMN_COUNT = 3;
+
+ private static final String STATE_NUM_COLUMNS = "STATE_NUM_COLUMNS";
+ private static final String STATE_GALLERY_TYPE_ORD = "GALLERY_TYPE_ORD";
+ private static final String STATE_RANDOM_ORDER = "STATE_RANDOM_ORDER";
+
+ private CheckBox mThumbnailCheckbox;
+ private CheckBox mSquaresCheckbox;
+ private CheckBox mTiledCheckbox;
+ private CheckBox mCirclesCheckbox;
+ private CheckBox mSlideshowCheckbox;
+
+ private GalleryType mType;
+ private int mNumColumns;
+ private boolean mIsRandomOrder;
+
+ private View mNumColumnsContainer;
+ private View mHeader;
+
+ private CheckBox mRandomOrderCheckbox;
+
+ private boolean mAllowCheckChanged;
+
+ private TextView mTitleView;
+
+ private ScrollView mScrollView;
+
+ private CustomGridAdapter mGridAdapter;
+
+ private MediaGallerySettingsCallback mCallback;
+
+
+ private enum GalleryType {
+ DEFAULT(""),
+ TILED("rectangular"),
+ SQUARES("square"),
+ CIRCLES("circle"),
+ SLIDESHOW("slideshow");
+
+ private final String mTag;
+
+ private GalleryType(String tag) {
+ mTag = tag;
+ }
+
+ public String getTag() {
+ return mTag;
+ }
+
+ public static GalleryType getTypeFromTag(String tag) {
+ if (tag.equals("rectangular"))
+ return TILED;
+ else if (tag.equals("square"))
+ return SQUARES;
+ else if (tag.equals("circle"))
+ return CIRCLES;
+ else if (tag.equals("slideshow"))
+ return SLIDESHOW;
+ else
+ return DEFAULT;
+ }
+
+ }
+
+ public interface MediaGallerySettingsCallback {
+ public void onReverseClicked();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ try {
+ mCallback = (MediaGallerySettingsCallback) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString() + " must implement MediaGallerySettingsCallback");
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ mAllowCheckChanged = true;
+ mType = GalleryType.DEFAULT;
+ mNumColumns = DEFAULT_THUMBNAIL_COLUMN_COUNT;
+ mIsRandomOrder = false;
+
+ restoreState(savedInstanceState);
+
+ View view = inflater.inflate(R.layout.media_gallery_settings_fragment, container, false);
+
+ mHeader = view.findViewById(R.id.media_gallery_settings_header);
+ mScrollView = (ScrollView) view.findViewById(R.id.media_gallery_settings_content_container);
+ mTitleView = (TextView) view.findViewById(R.id.media_gallery_settings_title);
+
+ mNumColumnsContainer = view.findViewById(R.id.media_gallery_settings_num_columns_container);
+ int visible = (mType == GalleryType.DEFAULT) ? View.VISIBLE : View.GONE;
+ mNumColumnsContainer.setVisibility(visible);
+
+ ExpandableHeightGridView numColumnsGrid = (ExpandableHeightGridView) view.findViewById(R.id.media_gallery_num_columns_grid);
+ numColumnsGrid.setExpanded(true);
+ ArrayList<String> list = new ArrayList<String>(9);
+ for (int i = 1; i <= 9; i++) {
+ list.add(i + "");
+ }
+
+ mGridAdapter = new CustomGridAdapter(mNumColumns);
+ numColumnsGrid.setAdapter(mGridAdapter);
+
+ mThumbnailCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_type_thumbnail_grid);
+ mTiledCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_type_tiled);
+ mSquaresCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_type_squares);
+ mCirclesCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_type_circles);
+ mSlideshowCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_type_slideshow);
+
+ setType(mType.getTag());
+
+ mThumbnailCheckbox.setOnCheckedChangeListener(this);
+ mTiledCheckbox.setOnCheckedChangeListener(this);
+ mSquaresCheckbox.setOnCheckedChangeListener(this);
+ mCirclesCheckbox.setOnCheckedChangeListener(this);
+
+ mSlideshowCheckbox.setOnCheckedChangeListener(this);
+
+ mRandomOrderCheckbox = (CheckBox) view.findViewById(R.id.media_gallery_random_checkbox);
+ mRandomOrderCheckbox.setChecked(mIsRandomOrder);
+ mRandomOrderCheckbox.setOnCheckedChangeListener(this);
+
+ Button reverseButton = (Button) view.findViewById(R.id.media_gallery_settings_reverse_button);
+ reverseButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mCallback.onReverseClicked();
+ }
+ });
+
+ return view;
+ }
+
+ private void restoreState(Bundle savedInstanceState) {
+ if (savedInstanceState == null)
+ return;
+
+ mNumColumns = savedInstanceState.getInt(STATE_NUM_COLUMNS);
+ int galleryTypeOrdinal = savedInstanceState.getInt(STATE_GALLERY_TYPE_ORD);
+ mType = GalleryType.values()[galleryTypeOrdinal];
+ mIsRandomOrder = savedInstanceState.getBoolean(STATE_RANDOM_ORDER);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(STATE_NUM_COLUMNS, mNumColumns);
+ outState.putBoolean(STATE_RANDOM_ORDER, mIsRandomOrder);
+ outState.putInt(STATE_GALLERY_TYPE_ORD, mType.ordinal());
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton button, boolean checked) {
+ if (!mAllowCheckChanged)
+ return;
+
+ // the checkboxes for types are mutually exclusive, so when one is set,
+ // the others must be unset. Disable the checkChange listener during this time,
+ // and re-enable it once done.
+ mAllowCheckChanged = false;
+
+ int numColumnsContainerVisible = View.GONE;
+ int i = button.getId();
+ if (i == R.id.media_gallery_type_thumbnail_grid) {
+ numColumnsContainerVisible = View.VISIBLE;
+
+ mType = GalleryType.DEFAULT;
+ mThumbnailCheckbox.setChecked(true);
+ mSquaresCheckbox.setChecked(false);
+ mTiledCheckbox.setChecked(false);
+ mCirclesCheckbox.setChecked(false);
+ mSlideshowCheckbox.setChecked(false);
+ } else if (i == R.id.media_gallery_type_tiled) {
+ mType = GalleryType.TILED;
+ mThumbnailCheckbox.setChecked(false);
+ mTiledCheckbox.setChecked(true);
+ mSquaresCheckbox.setChecked(false);
+ mCirclesCheckbox.setChecked(false);
+ mSlideshowCheckbox.setChecked(false);
+ } else if (i == R.id.media_gallery_type_squares) {
+ mType = GalleryType.SQUARES;
+ mThumbnailCheckbox.setChecked(false);
+ mTiledCheckbox.setChecked(false);
+ mSquaresCheckbox.setChecked(true);
+ mCirclesCheckbox.setChecked(false);
+ mSlideshowCheckbox.setChecked(false);
+ } else if (i == R.id.media_gallery_type_circles) {
+ mType = GalleryType.CIRCLES;
+ mThumbnailCheckbox.setChecked(false);
+ mSquaresCheckbox.setChecked(false);
+ mTiledCheckbox.setChecked(false);
+ mCirclesCheckbox.setChecked(true);
+ mSlideshowCheckbox.setChecked(false);
+ } else if (i == R.id.media_gallery_type_slideshow) {
+ mType = GalleryType.SLIDESHOW;
+ mThumbnailCheckbox.setChecked(false);
+ mSquaresCheckbox.setChecked(false);
+ mTiledCheckbox.setChecked(false);
+ mCirclesCheckbox.setChecked(false);
+ mSlideshowCheckbox.setChecked(true);
+ } else if (i == R.id.media_gallery_random_checkbox) {
+ numColumnsContainerVisible = mNumColumnsContainer.getVisibility();
+ mIsRandomOrder = checked;
+ }
+
+ mNumColumnsContainer.setVisibility(numColumnsContainerVisible);
+
+ mAllowCheckChanged = true;
+ }
+
+ private class CustomGridAdapter extends BaseAdapter implements OnCheckedChangeListener {
+ private boolean mAllowCheckChanged;
+ private final SparseBooleanArray mCheckedPositions;
+
+ public CustomGridAdapter(int selection) {
+ mAllowCheckChanged = true;
+ mCheckedPositions = new SparseBooleanArray(9);
+ setSelection(selection);
+ }
+
+ // when a number of columns is checked, the numbers less than
+ // the one chose are also set to checked on the ui.
+ // e.g. when 3 is checked, 1 and 2 are as well.
+ private void setSelection(int selection) {
+ for (int i = 0; i < 9; i++){
+ if (i + 1 <= selection)
+ mCheckedPositions.put(i, true);
+ else
+ mCheckedPositions.put(i, false);
+ }
+ }
+
+ @Override
+ public int getCount() {
+ return 9;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return position;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+ CheckBox checkbox = (CheckBox) inflater.inflate(R.layout.media_gallery_column_checkbox, parent, false);
+ checkbox.setChecked(mCheckedPositions.get(position));
+ checkbox.setTag(position);
+ checkbox.setText(String.valueOf(position + 1));
+ checkbox.setOnCheckedChangeListener(this);
+
+ return checkbox;
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton button, boolean checked) {
+ if (mAllowCheckChanged) {
+ mAllowCheckChanged = false;
+
+ int position = (Integer) button.getTag();
+ mNumColumns = position + 1;
+
+ int count = mCheckedPositions.size();
+ for (int i = 0; i < count; i++) {
+ if (i <= position)
+ mCheckedPositions.put(i, true);
+ else
+ mCheckedPositions.put(i, false);
+ }
+ notifyDataSetChanged();
+ mAllowCheckChanged = true;
+ }
+ }
+
+ }
+
+ public View getDragView() {
+ return mHeader;
+ }
+
+ public void onPanelExpanded() {
+ mTitleView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.gallery_arrow_dropdown_open, 0);
+ mScrollView.scrollTo(0, 0);
+ }
+
+ public void onPanelCollapsed() {
+ mTitleView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.gallery_arrow_dropdown_closed, 0);
+ }
+
+ public void setRandom(boolean random) {
+ mIsRandomOrder = random;
+ mRandomOrderCheckbox.setChecked(mIsRandomOrder);
+ }
+
+ public boolean isRandom() {
+ return mIsRandomOrder;
+ }
+
+ public void setType(String type) {
+ mType = GalleryType.getTypeFromTag(type);
+ switch (mType) {
+ case CIRCLES:
+ mCirclesCheckbox.setChecked(true);
+ break;
+ case DEFAULT:
+ mThumbnailCheckbox.setChecked(true);
+ break;
+ case SLIDESHOW:
+ mSlideshowCheckbox.setChecked(true);
+ break;
+ case SQUARES:
+ mSquaresCheckbox.setChecked(true);
+ break;
+ case TILED:
+ mTiledCheckbox.setChecked(true);
+ break;
+ }
+ }
+
+ public String getType() {
+ return mType.getTag();
+ }
+
+ public void setNumColumns(int numColumns) {
+ mNumColumns = numColumns;
+ mGridAdapter.setSelection(numColumns);
+ mGridAdapter.notifyDataSetChanged();
+ }
+
+ public int getNumColumns() {
+ return mNumColumns;
+ }
+}