diff options
author | tom79 <tschneider.ac@gmail.com> | 2019-06-04 11:02:15 +0200 |
---|---|---|
committer | tom79 <tschneider.ac@gmail.com> | 2019-06-04 11:02:15 +0200 |
commit | bbb57c4c0c3672632786f0b5ce30ce33bf0b88d5 (patch) | |
tree | 7df1552664f3eb6fe247e54d8b14189fbd0d1957 /app/src | |
parent | 68355363e2309c7d10d4889641294e5b2f7ced07 (diff) |
Fix issue #183
Diffstat (limited to 'app/src')
7 files changed, 168 insertions, 68 deletions
diff --git a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java index 5093bc2be..b593cbb39 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java @@ -169,6 +169,7 @@ public abstract class BaseMainActivity extends BaseActivity public static HashMap<Integer, Fragment> mPageReferenceMap = new HashMap<>(); private static boolean notificationChecked = false; + public static HashMap<String, Integer> poll_limits = new HashMap<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -1766,6 +1767,7 @@ public abstract class BaseMainActivity extends BaseActivity } if( apiResponse.getInstance() == null || apiResponse.getInstance().getVersion() == null || apiResponse.getInstance().getVersion().trim().length() == 0) return; + poll_limits = apiResponse.getInstance().getPoll_limits(); Version currentVersion = new Version(apiResponse.getInstance().getVersion()); Version minVersion = new Version("1.6"); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); diff --git a/app/src/main/java/app/fedilab/android/activities/TootActivity.java b/app/src/main/java/app/fedilab/android/activities/TootActivity.java index 0f09ae10b..081c12837 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -230,7 +230,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface, public static boolean autocomplete; private String newContent; private TextWatcher textWatcher; - + private int pollCountItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -2801,8 +2801,62 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface, Spinner poll_duration = view.findViewById(R.id.poll_duration); EditText choice_1 = view.findViewById(R.id.choice_1); EditText choice_2 = view.findViewById(R.id.choice_2); - EditText choice_3 = view.findViewById(R.id.choice_3); - EditText choice_4 = view.findViewById(R.id.choice_4); + ImageButton add = view.findViewById(R.id.add_poll_item); + ImageButton remove = view.findViewById(R.id.remove_poll_item); + LinearLayout poll_items_container = view.findViewById(R.id.poll_items_container); + int max_entry = 4; + int max_length = 25; + pollCountItem = 2; + if( MainActivity.poll_limits != null && MainActivity.poll_limits.containsKey("max_options")){ + max_entry = MainActivity.poll_limits.get("max_options")!=null?MainActivity.poll_limits.get("max_options"):4; + } + if( MainActivity.poll_limits != null && MainActivity.poll_limits.containsKey("max_option_chars")){ + max_length = MainActivity.poll_limits.get("max_option_chars")!=null?MainActivity.poll_limits.get("max_option_chars"):25; + } + InputFilter[] fArray = new InputFilter[1]; + fArray[0] = new InputFilter.LengthFilter(max_length); + choice_1.setFilters(fArray); + choice_2.setFilters(fArray); + + int finalMax_entry = max_entry; + int finalMax_length = max_length; + add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if( pollCountItem < finalMax_entry){ + EditText poll_item = new EditText(TootActivity.this); + InputFilter[] fArray = new InputFilter[1]; + fArray[0] = new InputFilter.LengthFilter(finalMax_length); + poll_item.setFilters(fArray); + poll_item.setHint(getString(R.string.poll_choice_s,(pollCountItem+1))); + poll_items_container.addView(poll_item); + } + pollCountItem++; + if( pollCountItem >= finalMax_entry){ + add.setVisibility(View.GONE); + }else{ + add.setVisibility(View.VISIBLE); + } + remove.setVisibility(View.VISIBLE); + } + }); + remove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if( pollCountItem > 2){ + int childCount = poll_items_container.getChildCount(); + poll_items_container.removeViewAt(childCount -1); + } + pollCountItem--; + if( pollCountItem <= 2){ + remove.setVisibility(View.GONE); + }else{ + remove.setVisibility(View.VISIBLE); + } + add.setVisibility(View.VISIBLE); + } + }); + ArrayAdapter<CharSequence> pollduration = ArrayAdapter.createFromResource(TootActivity.this, R.array.poll_duration, android.R.layout.simple_spinner_item); @@ -2815,23 +2869,23 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface, if( poll != null){ int i = 1; for(PollOptions pollOptions: poll.getOptionsList()){ - switch (i){ - case 1: - if( pollOptions.getTitle() != null) - choice_1.setText(pollOptions.getTitle()); - break; - case 2: - if( pollOptions.getTitle() != null) - choice_2.setText(pollOptions.getTitle()); - break; - case 3: - if( pollOptions.getTitle() != null) - choice_3.setText(pollOptions.getTitle()); - break; - case 4: - if( pollOptions.getTitle() != null) - choice_4.setText(pollOptions.getTitle()); - break; + if( i == 1){ + if( pollOptions.getTitle() != null) + choice_1.setText(pollOptions.getTitle()); + }else if(i == 2){ + if( pollOptions.getTitle() != null) + choice_2.setText(pollOptions.getTitle()); + }else{ + EditText poll_item = new EditText(TootActivity.this); + fArray = new InputFilter[1]; + fArray[0] = new InputFilter.LengthFilter(finalMax_length); + poll_item.setFilters(fArray); + poll_item.setHint(getString(R.string.poll_choice_s,(pollCountItem+1))); + if( pollOptions.getTitle() != null){ + poll_item.setText(pollOptions.getTitle()); + } + poll_items_container.addView(poll_item); + pollCountItem++; } i++; } @@ -2884,8 +2938,6 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface, int poll_choice_pos = poll_choice.getSelectedItemPosition(); String choice1 = choice_1.getText().toString().trim(); String choice2 = choice_2.getText().toString().trim(); - String choice3 = choice_3.getText().toString().trim(); - String choice4 = choice_4.getText().toString().trim(); if( choice1.isEmpty() && choice2.isEmpty()){ Toasty.error(getApplicationContext(), getString(R.string.poll_invalid_choices), Toast.LENGTH_SHORT).show(); @@ -2929,13 +2981,15 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface, pollOption2.setTitle(choice2); pollOptions.add(pollOption2); - PollOptions pollOption3 = new PollOptions(); - pollOption3.setTitle(choice3); - pollOptions.add(pollOption3); + int childCount = poll_items_container.getChildCount(); + if( childCount > 2){ + for( int i = 2 ; i < childCount; i++){ + PollOptions pollItem = new PollOptions(); + pollItem.setTitle(((EditText)poll_items_container.getChildAt(i)).getText().toString()); + pollOptions.add(pollItem); + } + } - PollOptions pollOption4 = new PollOptions(); - pollOption4.setTitle(choice4); - pollOptions.add(pollOption4); poll.setOptionsList(pollOptions); dialog.dismiss(); diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 4ea194a09..9731cdedc 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -4288,8 +4288,18 @@ public class API { instance.setDescription(resobj.get("description").toString()); instance.setEmail(resobj.get("email").toString()); instance.setVersion(resobj.get("version").toString()); + + if(resobj.has("poll_limits")){ + HashMap<String, Integer> poll_limits = new HashMap<>(); + JSONObject polllimits = resobj.getJSONObject("poll_limits"); + poll_limits.put("min_expiration",polllimits.getInt("min_expiration")); + poll_limits.put("max_options",polllimits.getInt("max_options")); + poll_limits.put("max_option_chars",polllimits.getInt("max_option_chars")); + poll_limits.put("max_expiration",polllimits.getInt("max_expiration")); + instance.setPoll_limits(poll_limits); + } } catch (JSONException e) { - setDefaultError(e); + e.printStackTrace(); } return instance; } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Instance.java b/app/src/main/java/app/fedilab/android/client/Entities/Instance.java index 286925040..e0ff27c28 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Instance.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Instance.java @@ -14,6 +14,8 @@ * see <http://www.gnu.org/licenses>. */ package app.fedilab.android.client.Entities; +import java.util.HashMap; + /** * Created by Thomas on 05/06/2017. * Describes instance @@ -26,6 +28,7 @@ public class Instance { private String description; private String email; private String version; + private HashMap<String, Integer> poll_limits; public String getUri() { return uri; @@ -66,4 +69,12 @@ public class Instance { public void setVersion(String version) { this.version = version; } + + public HashMap<String, Integer> getPoll_limits() { + return poll_limits; + } + + public void setPoll_limits(HashMap<String, Integer> poll_limits) { + this.poll_limits = poll_limits; + } } diff --git a/app/src/main/res/drawable/ic_remove_white.xml b/app/src/main/res/drawable/ic_remove_white.xml new file mode 100644 index 000000000..f6e9e9416 --- /dev/null +++ b/app/src/main/res/drawable/ic_remove_white.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#FFFFFF" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M19,13H5v-2h14v2z"/> +</vector> diff --git a/app/src/main/res/layout/popup_poll.xml b/app/src/main/res/layout/popup_poll.xml index a931f96d1..3d856e177 100644 --- a/app/src/main/res/layout/popup_poll.xml +++ b/app/src/main/res/layout/popup_poll.xml @@ -23,46 +23,63 @@ android:paddingLeft="20dp" android:paddingRight="20dp" android:layout_height="match_parent"> - <EditText - android:id="@+id/choice_1" - android:hint="@string/poll_choice_1" - android:singleLine="true" - android:maxLength="25" + <ScrollView android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="text" - android:layout_marginBottom="10dp" - /> - <EditText - android:id="@+id/choice_2" - android:hint="@string/poll_choice_2" - android:maxLength="25" - android:singleLine="true" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="text" - android:layout_marginBottom="10dp" - /> - <EditText - android:id="@+id/choice_3" - android:hint="@string/poll_choice_3" - android:maxLength="25" - android:singleLine="true" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:inputType="text" - android:layout_marginBottom="10dp" - /> - <EditText - android:id="@+id/choice_4" - android:hint="@string/poll_choice_4" - android:maxLength="25" - android:singleLine="true" + android:layout_height="wrap_content"> + <LinearLayout + android:layout_width="match_parent" + android:orientation="vertical" + android:id="@+id/poll_items_container" + android:layout_height="wrap_content"> + <EditText + android:id="@+id/choice_1" + android:hint="@string/poll_choice_1" + android:singleLine="true" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:inputType="text" + android:layout_marginBottom="10dp" + /> + <EditText + android:id="@+id/choice_2" + android:hint="@string/poll_choice_2" + android:singleLine="true" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:inputType="text" + android:layout_marginBottom="10dp" + /> + </LinearLayout> + </ScrollView> + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="text" - android:layout_marginBottom="10dp" - /> + android:orientation="horizontal"> + <ImageButton + android:id="@+id/add_poll_item" + android:layout_width="28dp" + android:layout_height="28dp" + android:layout_gravity="center" + android:layout_marginRight="5dp" + android:layout_marginEnd="5dp" + android:adjustViewBounds="true" + android:background="@color/transparent" + android:contentDescription="@string/add_poll_item" + android:scaleType="centerCrop" + android:src="@drawable/ic_add" /> + <ImageButton + android:id="@+id/remove_poll_item" + android:layout_width="28dp" + android:layout_height="28dp" + android:layout_gravity="center" + android:layout_marginRight="5dp" + android:layout_marginEnd="5dp" + android:adjustViewBounds="true" + android:background="@color/transparent" + android:contentDescription="@string/remove_poll_item" + android:scaleType="centerCrop" + android:src="@drawable/ic_remove_white" /> + </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6227d0ac0..29ec60dd9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -907,8 +907,7 @@ <string name="create_poll">Create a poll</string> <string name="poll_choice_1">Choice 1</string> <string name="poll_choice_2">Choice 2</string> - <string name="poll_choice_3">Choice 3</string> - <string name="poll_choice_4">Choice 4</string> + <string name="poll_choice_s">Choice %d</string> <string name="poll_invalid_choices">You need two choices at least for the poll!</string> <string name="done">Done</string> <string name="poll_finish_at">end at %s</string> @@ -978,6 +977,8 @@ <string name="opacity">Opacity</string> <string name="label_crop">Crop</string> <string name="set_photo_editor">Enable photo editor</string> + <string name="add_poll_item">Add a poll item</string> + <string name="remove_poll_item">Remove last poll item</string> <plurals name="number_of_vote"> <item quantity="one">%d vote</item> <item quantity="other">%d votes</item> |