Manage filters - some fixes

This commit is contained in:
stom79 2018-09-05 19:37:03 +02:00
parent e3f59fb337
commit c8545a32b7
7 changed files with 135 additions and 19 deletions

View File

@ -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());

View File

@ -1418,6 +1418,7 @@ public class API {
List<fr.gouv.etalab.mastodon.client.Entities.Filters> 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 ){

View File

@ -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;
}
}

View File

@ -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<CharSequence> 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());

View File

@ -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<CharSequence> 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);

View File

@ -17,6 +17,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:padding="10dp"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
@ -123,9 +124,8 @@
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:textSize="12sp"
android:text="@string/filter_expire"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Spinner
android:layout_marginStart="30dp"
@ -134,14 +134,4 @@
android:layout_height="wrap_content"
android:layout_marginLeft="30dp" />
</LinearLayout>
<Button
android:layout_marginTop="5dp"
android:id="@+id/save_filter"
android:layout_gravity="center"
android:gravity="center"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:maxWidth="150dp"
android:text="@string/add_new_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -595,4 +595,15 @@
<item>HTTP</item>
<item>SOCKS</item>
</string-array>
<string-array name="filter_expire">
<item>Never</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>6 hours</item>
<item>12 hours</item>
<item>1 day</item>
<item>1 week</item>
</string-array>
</resources>