diff options
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.java | 370 |
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; + } +} |