From c8545a32b7044da835ab3bfcf5ed9a781ae72ad8 Mon Sep 17 00:00:00 2001 From: stom79 Date: Wed, 5 Sep 2018 19:37:03 +0200 Subject: [PATCH] Manage filters - some fixes --- .../mastodon/activities/BaseMainActivity.java | 7 +++ .../fr/gouv/etalab/mastodon/client/API.java | 11 ++-- .../mastodon/client/Entities/Filters.java | 10 +++ .../mastodon/drawers/FilterAdapter.java | 63 ++++++++++++++++++- .../fragments/DisplayFiltersFragment.java | 38 ++++++++++- app/src/main/res/layout/add_filter.xml | 14 +---- app/src/main/res/values/strings.xml | 11 ++++ 7 files changed, 135 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index 6df81d9e5..19e93481b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -92,6 +92,7 @@ import fr.gouv.etalab.mastodon.client.Entities.Version; import fr.gouv.etalab.mastodon.fragments.DisplayAccountsFragment; import fr.gouv.etalab.mastodon.fragments.DisplayBookmarksFragment; import fr.gouv.etalab.mastodon.fragments.DisplayDraftsFragment; +import fr.gouv.etalab.mastodon.fragments.DisplayFiltersFragment; import fr.gouv.etalab.mastodon.fragments.DisplayFollowRequestSentFragment; import fr.gouv.etalab.mastodon.fragments.DisplayListsFragment; import fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment; @@ -1495,6 +1496,12 @@ public abstract class BaseMainActivity extends BaseActivity fragmentTag = "LISTS"; fragmentManager.beginTransaction() .replace(R.id.main_app_container, displayListsFragment, fragmentTag).commit(); + }else if(id == R.id.nav_filters){ + toot.setVisibility(View.GONE); + DisplayFiltersFragment displayFiltersFragment = new DisplayFiltersFragment(); + fragmentTag = "FILTERS"; + fragmentManager.beginTransaction() + .replace(R.id.main_app_container, displayFiltersFragment, fragmentTag).commit(); } populateTitleWithTag(fragmentTag, item.getTitle().toString(), item.getItemId()); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index 4c71e818c..100513648 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -1418,6 +1418,7 @@ public class API { List filters = new ArrayList<>(); try { String response = new HttpsConnection(context).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT); + Log.v(Helper.TAG,"resp: " + response); filters = parseFilters(new JSONArray(response)); } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); @@ -1445,6 +1446,7 @@ public class API { fr.gouv.etalab.mastodon.client.Entities.Filters filter; try { String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT); + Log.v(Helper.TAG,"resp: " + response); filter = parseFilter(new JSONObject(response)); filters.add(filter); } catch (HttpsConnection.HttpsConnectionException e) { @@ -2211,16 +2213,17 @@ public class API { * @param resobj JSONObject * @return Filter */ - private static fr.gouv.etalab.mastodon.client.Entities.Filters parseFilter(JSONObject resobj){ + private fr.gouv.etalab.mastodon.client.Entities.Filters parseFilter(JSONObject resobj){ fr.gouv.etalab.mastodon.client.Entities.Filters filter = new fr.gouv.etalab.mastodon.client.Entities.Filters(); try { filter.setPhrase(resobj.get("phrase").toString()); - filter.setExpires_in(Integer.parseInt(resobj.get("expires_in").toString())); + filter.setSetExpires_at(Helper.mstStringToDate(context, resobj.get("expires_at").toString())); filter.setWhole_word(Boolean.parseBoolean(resobj.get("whole_word").toString())); filter.setIrreversible(Boolean.parseBoolean(resobj.get("irreversible").toString())); String contextString = resobj.get("context").toString(); - contextString = contextString.replace("[",""); - contextString = contextString.replace("]",""); + contextString = contextString.replaceAll("\\[",""); + contextString = contextString.replaceAll("]",""); + contextString = contextString.replaceAll("\"",""); if( contextString != null) { String[] context = contextString.split(","); if( contextString.length() > 0 ){ diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java index 3d4335fd0..643693bca 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Filters.java @@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.client.Entities; import java.util.ArrayList; +import java.util.Date; /** * Created by Thomas on 05/09/2018. @@ -30,6 +31,7 @@ public class Filters { private boolean irreversible; private boolean whole_word; private int expires_in; + private Date setExpires_at; public String getPhrase() { return phrase; @@ -78,4 +80,12 @@ public class Filters { public void setId(String id) { this.id = id; } + + public Date getSetExpires_at() { + return setExpires_at; + } + + public void setSetExpires_at(Date setExpires_at) { + this.setExpires_at = setExpires_at; + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java index fc8c27a81..95890d846 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/FilterAdapter.java @@ -26,11 +26,15 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.EditText; +import android.widget.Filter; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.Spinner; import android.widget.TextView; import java.util.ArrayList; @@ -89,12 +93,18 @@ public class FilterAdapter extends BaseAdapter implements OnFilterActionInterfac holder = new ViewHolder(); holder.filter_word = convertView.findViewById(R.id.filter_word); holder.filter_context = convertView.findViewById(R.id.filter_context); + holder.edit_filter = convertView.findViewById(R.id.edit_filter); + holder.delete_filter = convertView.findViewById(R.id.delete_filter); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } - - + holder.filter_word.setText(filter.getPhrase()); + StringBuilder contextString = new StringBuilder(); + if( filter.getContext() != null) + for(String ct: filter.getContext()) + contextString.append(ct).append(" "); + holder.filter_context.setText(contextString.toString()); holder.edit_filter.setOnClickListener(new View.OnClickListener() { @Override @@ -111,6 +121,54 @@ public class FilterAdapter extends BaseAdapter implements OnFilterActionInterfac CheckBox context_conversation = dialogView.findViewById(R.id.context_conversation); CheckBox context_whole_word = dialogView.findViewById(R.id.context_whole_word); CheckBox context_drop = dialogView.findViewById(R.id.context_drop); + Spinner filter_expire = dialogView.findViewById(R.id.filter_expire); + ArrayAdapter adapterResize = ArrayAdapter.createFromResource(context, + R.array.filter_expire, android.R.layout.simple_spinner_item); + filter_expire.setAdapter(adapterResize); + final int[] expire = {-1}; + filter_expire.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position){ + case 0: + expire[0] = -1; + break; + case 1: + expire[0] = 3600; + break; + case 2: + expire[0] = 21600; + break; + case 3: + expire[0] = 43200; + break; + case 4: + expire[0] = 86400; + break; + case 5: + expire[0] = 604800; + break; + } + } + @Override + public void onNothingSelected(AdapterView parent) { + } + }); + + add_phrase.setText(filter.getPhrase()); + if( filter.getContext() != null) + for(String val: filter.getContext()){ + if(val.equals("home")) + context_home.setChecked(true); + else if(val.equals("public")) + context_public.setChecked(true); + else if(val.equals("notifications")) + context_notification.setChecked(true); + else if(val.equals("thread")) + context_conversation.setChecked(true); + } + context_whole_word.setChecked(filter.isWhole_word()); + context_drop.setChecked(filter.isIrreversible()); dialogBuilder.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() { @Override @@ -128,6 +186,7 @@ public class FilterAdapter extends BaseAdapter implements OnFilterActionInterfac if( context_conversation.isChecked()) contextFilter.add("thread"); filter.setContext(contextFilter); + filter.setExpires_in(expire[0]); filter.setPhrase(add_phrase.getText().toString()); filter.setWhole_word(context_whole_word.isChecked()); filter.setIrreversible(context_drop.isChecked()); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayFiltersFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayFiltersFragment.java index e9191dbc2..79f00f728 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayFiltersFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayFiltersFragment.java @@ -29,10 +29,13 @@ import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; import android.widget.RelativeLayout; +import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; @@ -104,7 +107,39 @@ public class DisplayFiltersFragment extends Fragment implements OnFilterActionIn CheckBox context_conversation = dialogView.findViewById(R.id.context_conversation); CheckBox context_whole_word = dialogView.findViewById(R.id.context_whole_word); CheckBox context_drop = dialogView.findViewById(R.id.context_drop); - + Spinner filter_expire = dialogView.findViewById(R.id.filter_expire); + ArrayAdapter adapterResize = ArrayAdapter.createFromResource(getContext(), + R.array.filter_expire, android.R.layout.simple_spinner_item); + filter_expire.setAdapter(adapterResize); + final int[] expire = {-1}; + filter_expire.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position){ + case 0: + expire[0] = -1; + break; + case 1: + expire[0] = 3600; + break; + case 2: + expire[0] = 21600; + break; + case 3: + expire[0] = 43200; + break; + case 4: + expire[0] = 86400; + break; + case 5: + expire[0] = 604800; + break; + } + } + @Override + public void onNothingSelected(AdapterView parent) { + } + }); dialogBuilder.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { @@ -122,6 +157,7 @@ public class DisplayFiltersFragment extends Fragment implements OnFilterActionIn contextFilter.add("thread"); filter.setContext(contextFilter); filter.setPhrase(add_phrase.getText().toString()); + filter.setExpires_in(expire[0]); filter.setWhole_word(context_whole_word.isChecked()); filter.setIrreversible(context_drop.isChecked()); new ManageFiltersAsyncTask(context, ManageFiltersAsyncTask.action.CREATE_FILTER, filter, DisplayFiltersFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); diff --git a/app/src/main/res/layout/add_filter.xml b/app/src/main/res/layout/add_filter.xml index f075553f8..cf82c1863 100644 --- a/app/src/main/res/layout/add_filter.xml +++ b/app/src/main/res/layout/add_filter.xml @@ -17,6 +17,7 @@ --> -