From 4d582b7ab5f3df0cc34f1ce824ce447cadf33c5b Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Mon, 16 Sep 2013 19:27:20 +0200 Subject: [PATCH 1/4] fix a NPE when a user doesn't have rights to post but create a local draft --- .../wordpress/android/ui/posts/SelectCategoriesActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/org/wordpress/android/ui/posts/SelectCategoriesActivity.java b/src/org/wordpress/android/ui/posts/SelectCategoriesActivity.java index ed268944a89f..ff2f01054648 100644 --- a/src/org/wordpress/android/ui/posts/SelectCategoriesActivity.java +++ b/src/org/wordpress/android/ui/posts/SelectCategoriesActivity.java @@ -74,7 +74,7 @@ public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) } } }); - + mSelectedCategories = new HashSet(); Bundle extras = getIntent().getExtras(); @@ -89,6 +89,9 @@ public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) if (extras.containsKey("categories")) mSelectedCategories = (HashSet) extras.getSerializable("categories"); } + if (mSelectedCategories == null) { + mSelectedCategories = new HashSet(); + } populateOrFetchCategories(); } From abfbc966e0ddd77cc8425847b6e32cefc0df56ea Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Tue, 17 Sep 2013 12:36:43 +0200 Subject: [PATCH 2/4] fix #32: removed a call to showFormatBar() on OnTouch events triggered when ContentText is touched --- .../android/ui/posts/EditPostActivity.java | 73 ++++++++++++------- 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/src/org/wordpress/android/ui/posts/EditPostActivity.java b/src/org/wordpress/android/ui/posts/EditPostActivity.java index 7560bc3abecb..2cca12f8db58 100644 --- a/src/org/wordpress/android/ui/posts/EditPostActivity.java +++ b/src/org/wordpress/android/ui/posts/EditPostActivity.java @@ -1,23 +1,5 @@ package org.wordpress.android.ui.posts; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.Serializable; -import java.lang.reflect.Type; -import java.net.URL; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Random; -import java.util.Vector; - import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; @@ -74,6 +56,10 @@ import android.widget.EditText; import android.widget.ImageButton; import android.widget.RelativeLayout; +<<<<<<< HEAD +======= +import android.widget.ScrollView; +>>>>>>> c30d056... fix #32: removed a call to showFormatBar() on OnTouch events triggered when ContentText is touched import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Spinner; @@ -81,7 +67,10 @@ import android.widget.TimePicker; import android.widget.Toast; import android.widget.ToggleButton; +<<<<<<< HEAD +======= +>>>>>>> c30d056... fix #32: removed a call to showFormatBar() on OnTouch events triggered when ContentText is touched import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.MenuInflater; @@ -90,14 +79,10 @@ import com.android.volley.toolbox.ImageLoader.ImageListener; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; - import org.json.JSONArray; -import org.xmlrpc.android.ApiHelper; - import org.wordpress.android.Constants; import org.wordpress.android.R; import org.wordpress.android.WordPress; -import org.wordpress.passcodelock.AppLockManager; import org.wordpress.android.models.Blog; import org.wordpress.android.models.MediaFile; import org.wordpress.android.models.MediaGallery; @@ -119,6 +104,26 @@ import org.wordpress.android.util.WPHtml; import org.wordpress.android.util.WPImageSpan; import org.wordpress.android.util.WPUnderlineSpan; +import org.wordpress.passcodelock.AppLockManager; +import org.xmlrpc.android.ApiHelper; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.lang.reflect.Type; +import java.net.URL; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Random; +import java.util.Vector; public class EditPostActivity extends SherlockFragmentActivity implements OnClickListener, OnTouchListener, TextWatcher, WPEditText.OnSelectionChangedListener, OnFocusChangeListener, WPEditText.EditTextImeBackListener { @@ -476,6 +481,21 @@ else if (mQuickMediaType == Constants.QUICK_POST_VIDEO_LIBRARY) } } +<<<<<<< HEAD +======= + final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); + scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); + scrollView.setFocusable(true); + scrollView.setFocusableInTouchMode(true); + scrollView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + v.requestFocusFromTouch(); + return false; + } + }); + +>>>>>>> c30d056... fix #32: removed a call to showFormatBar() on OnTouch events triggered when ContentText is touched populateSelectedCategories(); registerForContextMenu(mAddPictureButton); @@ -623,10 +643,11 @@ else if (mQuickMediaType == Constants.QUICK_POST_VIDEO_CAMERA || mQuickMediaType @Override public void onFocusChange(View v, boolean hasFocus) { - if (hasFocus && mFormatBar.getVisibility() != View.VISIBLE) + if (hasFocus && mFormatBar.getVisibility() != View.VISIBLE) { showFormatBar(); - else if (!hasFocus && mFormatBar.getVisibility() == View.VISIBLE) + } else if (!hasFocus && mFormatBar.getVisibility() == View.VISIBLE) { hideFormatBar(); + } } @Override @@ -744,10 +765,6 @@ else if (mQuickMediaType == Constants.QUICK_POST_VIDEO_CAMERA || mQuickMediaType @Override public boolean onTouch(View v, MotionEvent event) { - - if (mFormatBar.getVisibility() != View.VISIBLE) - showFormatBar(); - float pos = event.getY(); if (event.getAction() == 0) From 431f29f5029869d96acd59814907d1b0cb79d276 Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Tue, 17 Sep 2013 16:12:56 +0200 Subject: [PATCH 3/4] fix #27: add the step graphic in Parent Category Spinner under Add New Category --- res/layout/categories_row_parent.xml | 24 +++++++ .../android/ui/posts/AddCategoryActivity.java | 30 ++------ .../posts/ParentCategorySpinnerAdapter.java | 70 +++++++++++++++++++ 3 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 res/layout/categories_row_parent.xml create mode 100644 src/org/wordpress/android/ui/posts/ParentCategorySpinnerAdapter.java diff --git a/res/layout/categories_row_parent.xml b/res/layout/categories_row_parent.xml new file mode 100644 index 000000000000..ad273090dbfc --- /dev/null +++ b/res/layout/categories_row_parent.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/src/org/wordpress/android/ui/posts/AddCategoryActivity.java b/src/org/wordpress/android/ui/posts/AddCategoryActivity.java index c56b5d6920a8..8dfb0c8ee967 100644 --- a/src/org/wordpress/android/ui/posts/AddCategoryActivity.java +++ b/src/org/wordpress/android/ui/posts/AddCategoryActivity.java @@ -1,25 +1,21 @@ package org.wordpress.android.ui.posts; -import java.util.ArrayList; -import java.util.List; - import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; -import android.text.Html; import android.view.View; -import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; - import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.models.CategoryNode; +import java.util.ArrayList; + public class AddCategoryActivity extends Activity { private int id; @Override @@ -51,7 +47,7 @@ public void onClick(View v) { Spinner sCategories = (Spinner) findViewById(R.id.parent_category); String parent_category = ""; if (sCategories.getSelectedItem() != null) - parent_category = sCategories.getSelectedItem().toString().trim(); + parent_category = ((CategoryNode)sCategories.getSelectedItem()).getName().trim(); int parent_id = 0; if (sCategories.getSelectedItemPosition() != 0){ parent_id = WordPress.wpDB.getCategoryId(id, parent_category); @@ -105,25 +101,14 @@ public void onClick(View v) { } private void loadCategories() { - ArrayList loadTextArray = new ArrayList(); CategoryNode rootCategory = CategoryNode.createCategoryTreeFromDB(id); ArrayList categoryLevels = CategoryNode.getSortedListOfCategoriesFromRoot(rootCategory); + categoryLevels.add(0, new CategoryNode(0, 0, getString(R.string.none))); if (categoryLevels.size() > 0) { - loadTextArray.add(getResources().getText(R.string.none)); - for (int i = 0; i < categoryLevels.size(); i++) { - CategoryNode currentCategory = categoryLevels.get(i); - String name = ""; - for (int j = 1; j < currentCategory.getLevel(); j++) { - name += " "; - } - name += Html.fromHtml(currentCategory.getName()); - loadTextArray.add(name); - } - ArrayAdapter categories = new ArrayAdapter(this, - android.R.layout.simple_dropdown_item_1line, loadTextArray); - categories.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + ParentCategorySpinnerAdapter categoryAdapter = new ParentCategorySpinnerAdapter(this, + R.layout.categories_row_parent, categoryLevels); Spinner sCategories = (Spinner) findViewById(R.id.parent_category); - sCategories.setAdapter(categories); + sCategories.setAdapter(categoryAdapter); } } @@ -132,5 +117,4 @@ public void onConfigurationChanged(Configuration newConfig) { //ignore orientation change super.onConfigurationChanged(newConfig); } - } diff --git a/src/org/wordpress/android/ui/posts/ParentCategorySpinnerAdapter.java b/src/org/wordpress/android/ui/posts/ParentCategorySpinnerAdapter.java new file mode 100644 index 000000000000..e87242df2f47 --- /dev/null +++ b/src/org/wordpress/android/ui/posts/ParentCategorySpinnerAdapter.java @@ -0,0 +1,70 @@ +package org.wordpress.android.ui.posts; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.SpinnerAdapter; +import android.widget.TextView; +import org.wordpress.android.R; +import org.wordpress.android.models.CategoryNode; + +import java.util.List; + + +public class ParentCategorySpinnerAdapter extends BaseAdapter implements SpinnerAdapter { + int mResourceId; + List mObjects; + Context mContext; + + public int getCount() { + return mObjects.size(); + } + + public CategoryNode getItem(int position) { + return mObjects.get(position); + } + + public long getItemId(int position) { + return position; + } + + public ParentCategorySpinnerAdapter(Context context, int resource, List objects) { + super(); + mContext = context; + mObjects = objects; + mResourceId = resource; + } + + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View rowView = inflater.inflate(mResourceId, parent, false); + TextView textView = (TextView) rowView.findViewById(R.id.categoryRowText); + ImageView levelIndicatorView = (ImageView) rowView.findViewById(R.id.categoryRowLevelIndicator); + textView.setText(Html.fromHtml(getItem(position).getName())); + int level = getItem(position).getLevel(); + if (level == 1) { // hide ImageView + levelIndicatorView.setVisibility(View.GONE); + } else { + ViewGroup.LayoutParams params = levelIndicatorView.getLayoutParams(); + params.width = (params.width / 2) * level; + levelIndicatorView.setLayoutParams(params); + } + return rowView; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View rowView = inflater.inflate(mResourceId, parent, false); + TextView textView = (TextView) rowView.findViewById(R.id.categoryRowText); + ImageView levelIndicatorView = (ImageView) rowView.findViewById(R.id.categoryRowLevelIndicator); + textView.setText(Html.fromHtml(getItem(position).getName())); + levelIndicatorView.setVisibility(View.GONE); + return rowView; + } +} \ No newline at end of file From ede697af959fdd232315cbd0cc9cb74fb78f6b0d Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Tue, 17 Sep 2013 16:13:27 +0200 Subject: [PATCH 4/4] More generic CategoryArrayAdapter --- src/org/wordpress/android/ui/posts/CategoryArrayAdapter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/org/wordpress/android/ui/posts/CategoryArrayAdapter.java b/src/org/wordpress/android/ui/posts/CategoryArrayAdapter.java index 287d5fd041a6..eb3cfd3506ec 100644 --- a/src/org/wordpress/android/ui/posts/CategoryArrayAdapter.java +++ b/src/org/wordpress/android/ui/posts/CategoryArrayAdapter.java @@ -14,15 +14,17 @@ import java.util.List; public class CategoryArrayAdapter extends ArrayAdapter { + int mResourceId; public CategoryArrayAdapter(Context context, int resource, List objects) { super(context, resource, objects); + mResourceId = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View rowView = inflater.inflate(R.layout.categories_row, parent, false); + View rowView = inflater.inflate(mResourceId, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.categoryRowText); ImageView levelIndicatorView = (ImageView) rowView.findViewById(R.id.categoryRowLevelIndicator); textView.setText(Html.fromHtml(getItem(position).getName()));