From b09e21a589018bfc95d66abf506008b7e81a0a1d Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 18 Nov 2022 15:52:25 +0100 Subject: [PATCH] Comment #467 #464 - fix api calls --- .../android/activities/FilterActivity.java | 120 ++++++++---------- .../endpoints/MastodonFiltersService.java | 29 +++-- .../android/client/entities/api/Filter.java | 44 +++++-- .../android/client/entities/api/Status.java | 4 +- .../android/helper/TimelineHelper.java | 4 +- .../android/ui/drawer/KeywordAdapter.java | 119 +++++++++++++++++ .../android/viewmodel/mastodon/FiltersVM.java | 24 ++-- ...keywords_layout.xml => drawer_keyword.xml} | 1 + app/src/main/res/layout/popup_add_filter.xml | 7 +- 9 files changed, 246 insertions(+), 106 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/ui/drawer/KeywordAdapter.java rename app/src/main/res/layout/{keywords_layout.xml => drawer_keyword.xml} (93%) diff --git a/app/src/main/java/app/fedilab/android/activities/FilterActivity.java b/app/src/main/java/app/fedilab/android/activities/FilterActivity.java index 78de94ef..f1fd1d9a 100644 --- a/app/src/main/java/app/fedilab/android/activities/FilterActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/FilterActivity.java @@ -28,8 +28,6 @@ import android.widget.Button; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.AppCompatCheckBox; -import androidx.appcompat.widget.AppCompatEditText; import androidx.core.content.ContextCompat; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; @@ -37,7 +35,6 @@ import androidx.lifecycle.ViewModelStoreOwner; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; import java.util.Objects; @@ -45,11 +42,11 @@ import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.Filter; import app.fedilab.android.databinding.ActivityFiltersBinding; -import app.fedilab.android.databinding.KeywordsLayoutBinding; import app.fedilab.android.databinding.PopupAddFilterBinding; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.drawer.FilterAdapter; +import app.fedilab.android.ui.drawer.KeywordAdapter; import app.fedilab.android.viewmodel.mastodon.FiltersVM; public class FilterActivity extends BaseActivity implements FilterAdapter.Delete { @@ -74,6 +71,7 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete R.array.filter_expire, android.R.layout.simple_spinner_dropdown_item); popupAddFilterBinding.filterExpire.setAdapter(adapterResize); final int[] expire = {-1}; + Filter.FilterParams filterParams = new Filter.FilterParams(); popupAddFilterBinding.filterExpire.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent1, View view, int position1, long id) { @@ -107,16 +105,29 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete } }); - popupAddFilterBinding.addKeyword.setOnClickListener(v -> { - KeywordsLayoutBinding keywordsLayoutBinding = KeywordsLayoutBinding.inflate(LayoutInflater.from(context)); - keywordsLayoutBinding.deleteKeyword.setOnClickListener(v2 -> popupAddFilterBinding.keywordsContainer.removeView(keywordsLayoutBinding.getRoot())); - keywordsLayoutBinding.deleteKeyword.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(context)); - popupAddFilterBinding.keywordsContainer.addView(keywordsLayoutBinding.getRoot()); - }); + if (filter != null) { + + filterParams.filter_action = filter.filter_action; + filterParams.title = filter.title; + // filterParams.expires_in = filter.expires_at; + filterParams.context = filter.context; + filterParams.id = filter.id; + if (filter.keywords != null && filter.keywords.size() > 0) { + filterParams.keywords = new ArrayList<>(); + for (Filter.KeywordsAttributes keywordsAttributes : filter.keywords) { + Filter.KeywordsParams keywordsParams = new Filter.KeywordsParams(); + keywordsParams._destroy = null; + keywordsParams.id = keywordsAttributes.id; + keywordsParams.keyword = keywordsAttributes.keyword; + keywordsParams.whole_word = keywordsAttributes.whole_word; + filterParams.keywords.add(keywordsParams); + } + } + popupAddFilterBinding.addTitle.setText(filter.title); - if (filter.context != null) + if (filter.context != null) { for (String val : filter.context) { switch (val) { case "home": @@ -136,29 +147,25 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete break; } } - if (filter.keywords != null && filter.keywords.size() > 0) { - for (Filter.FilterKeyword filterKeyword : filter.keywords) { - KeywordsLayoutBinding keywordsLayoutBinding = KeywordsLayoutBinding.inflate(LayoutInflater.from(context)); - keywordsLayoutBinding.keywordPhrase.setText(filterKeyword.keyword); - keywordsLayoutBinding.wholeWord.setChecked(filterKeyword.whole_word); - keywordsLayoutBinding.deleteKeyword.setOnClickListener(v -> popupAddFilterBinding.keywordsContainer.removeView(keywordsLayoutBinding.getRoot())); - keywordsLayoutBinding.deleteKeyword.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(context)); - popupAddFilterBinding.keywordsContainer.addView(keywordsLayoutBinding.getRoot()); - } } - if (popupAddFilterBinding.keywordsContainer.getChildCount() == 0) { - KeywordsLayoutBinding keywordsLayoutBinding = KeywordsLayoutBinding.inflate(LayoutInflater.from(context)); - keywordsLayoutBinding.deleteKeyword.setOnClickListener(v -> popupAddFilterBinding.keywordsContainer.removeView(keywordsLayoutBinding.getRoot())); - keywordsLayoutBinding.deleteKeyword.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(context)); - popupAddFilterBinding.keywordsContainer.addView(keywordsLayoutBinding.getRoot()); + if (filter.filter_action.equalsIgnoreCase("warn")) { + popupAddFilterBinding.actionHide.setChecked(true); + popupAddFilterBinding.actionRemove.setChecked(false); + } else { + popupAddFilterBinding.actionHide.setChecked(false); + popupAddFilterBinding.actionRemove.setChecked(true); } - } else { - //Add at least a view - KeywordsLayoutBinding keywordsLayoutBinding = KeywordsLayoutBinding.inflate(LayoutInflater.from(context)); - keywordsLayoutBinding.deleteKeyword.setOnClickListener(v -> popupAddFilterBinding.keywordsContainer.removeView(keywordsLayoutBinding.getRoot())); - keywordsLayoutBinding.deleteKeyword.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(context)); - popupAddFilterBinding.keywordsContainer.addView(keywordsLayoutBinding.getRoot()); } + + KeywordAdapter keywordAdapter = new KeywordAdapter(filterParams.keywords); + popupAddFilterBinding.lvKeywords.setAdapter(keywordAdapter); + popupAddFilterBinding.lvKeywords.setLayoutManager(new LinearLayoutManager(context)); + + popupAddFilterBinding.addKeyword.setOnClickListener(v -> { + filterParams.keywords.add(new Filter.KeywordsParams()); + keywordAdapter.notifyItemInserted(filterParams.keywords.size() - 1); + }); + popupAddFilterBinding.actionRemove.setOnClickListener(v -> { popupAddFilterBinding.actionHide.setChecked(false); popupAddFilterBinding.actionRemove.setChecked(true); @@ -170,29 +177,16 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete AlertDialog alertDialog = dialogBuilder.setPositiveButton(R.string.validate, null) .setNegativeButton(R.string.cancel, null).create(); + alertDialog.setOnShowListener(dialogInterface -> { Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); button.setOnClickListener(view -> { - int keywordsItem = popupAddFilterBinding.keywordsContainer.getChildCount(); - List keywordsAttributes = null; boolean canBeSent = true; - - for (int i = 0; i < keywordsItem; i++) { - View itemView = popupAddFilterBinding.keywordsContainer.getChildAt(i); - AppCompatEditText keyword = itemView.findViewById(R.id.keyword_phrase); - AppCompatCheckBox whole_word = itemView.findViewById(R.id.whole_word); - keywordsAttributes = new ArrayList<>(); - if (keyword != null && whole_word != null) { - Filter.KeywordsAttributes keywordsAttr = new Filter.KeywordsAttributes(); - keywordsAttr.keyword = keyword.getText().toString(); - keywordsAttr.whole_word = whole_word.isChecked(); - if (keywordsAttr.keyword.trim().isEmpty()) { - keyword.setError(context.getString(R.string.cannot_be_empty)); - canBeSent = false; - } - keywordsAttributes.add(keywordsAttr); + for (int i = 0; i < filterParams.keywords.size(); i++) { + if (filterParams.keywords.get(i).keyword.trim().isEmpty() && !filterParams.keywords.get(i)._destroy) { + canBeSent = false; } } if (popupAddFilterBinding.addTitle.getText().toString().trim().isEmpty()) { @@ -204,33 +198,29 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete canBeSent = false; } if (canBeSent) { - Filter filterSent = new Filter(); - ArrayList contextFilter = new ArrayList<>(); + filterParams.context = new ArrayList<>(); if (popupAddFilterBinding.contextHome.isChecked()) - contextFilter.add("home"); + filterParams.context.add("home"); if (popupAddFilterBinding.contextPublic.isChecked()) - contextFilter.add("public"); + filterParams.context.add("public"); if (popupAddFilterBinding.contextNotification.isChecked()) - contextFilter.add("notifications"); + filterParams.context.add("notifications"); if (popupAddFilterBinding.contextConversation.isChecked()) - contextFilter.add("thread"); + filterParams.context.add("thread"); if (popupAddFilterBinding.contextProfiles.isChecked()) - contextFilter.add("account"); - filterSent.context = contextFilter; + filterParams.context.add("account"); if (expire[0] != -1) { - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.SECOND, expire[0]); - filterSent.expires_at = calendar.getTime(); + filterParams.expires_in = (long) expire[0]; } else { - filterSent.expires_at = null; + filterParams.expires_in = null; } - filterSent.title = popupAddFilterBinding.addTitle.getText().toString().trim(); - filterSent.filter_action = popupAddFilterBinding.actionHide.isChecked() ? "hide" : "warn"; - if (filter != null) { - filtersVM.editFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filter.id, filterSent.title, filterSent.expires_at, filterSent.context, filterSent.filter_action, keywordsAttributes) + filterParams.title = popupAddFilterBinding.addTitle.getText().toString().trim(); + filterParams.filter_action = popupAddFilterBinding.actionRemove.isChecked() ? "hide" : "warn"; + if (filterParams.id != null) { + filtersVM.editFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams) .observe((LifecycleOwner) context, listener::callback); } else { - filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterSent.title, filterSent.expires_at, filterSent.context, filterSent.filter_action, keywordsAttributes) + filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams) .observe((LifecycleOwner) context, listener::callback); } alertDialog.dismiss(); diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonFiltersService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonFiltersService.java index e3de3d47..17ad69e3 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonFiltersService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonFiltersService.java @@ -15,16 +15,17 @@ package app.fedilab.android.client.endpoints; * see . */ -import java.util.Date; import java.util.List; import app.fedilab.android.client.entities.api.Filter; import retrofit2.Call; +import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; +import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Path; @@ -50,23 +51,28 @@ public interface MastodonFiltersService { Call addFilter( @Header("Authorization") String token, @Field("title") String title, - @Field("expires_at") Date expires_at, + @Field("expires_in") Long expires_in, @Field("filter_action") String filter_action, @Field("context[]") List context, - @Field("keywords_attributes[]") List keywordsAttributes + @Field("keywords_attributes[]") List keywordsAttributes ); //Edit a filter - @FormUrlEncoded + @Headers({"Accept: application/json"}) @PUT("filters/{id}") Call editFilter( @Header("Authorization") String token, @Path("id") String id, + @Body Filter.FilterParams filter + /*@Path("id") String id, @Field("title") String title, - @Field("expires_at") Date expires_at, + @Field("expires_in") Date expires_in, @Field("filter_action") String filter_action, @Field("context[]") List context, - @Field("keywords_attributes[]") List keywordsAttributes + @Field("keywords_attributes[]") List keywords + @Field("keywords_attributes[][id]") List keywordId, + @Field("keywords_attributes[][keyword]") List keywords, + @Field("keywords_attributes[][whole_word]") List wholeWords*/ ); //Remove a filter @@ -77,7 +83,7 @@ public interface MastodonFiltersService { ); - //Get a filter with its id + //Get a keywords for a filter @GET("filters/{id}/keywords") Call> getKeywordFilter( @Header("Authorization") String token, @@ -90,21 +96,20 @@ public interface MastodonFiltersService { @Header("Authorization") String token, @Path("filter_id") String filter_id, @Path("id") String id, - @Field("keyword") Filter.Keyword keyword + @Field("keyword") Filter.KeywordsAttributes keyword ); //Edit a keyword for a filter @FormUrlEncoded - @PUT("filters/{filter_id}/keywords/{id}") + @PUT("filter_keywords/{id}") Call editKeywordFilter( @Header("Authorization") String token, - @Path("filter_id") String filter_id, @Path("id") String id, - @Field("keyword") Filter.Keyword keyword + @Field("keyword") Filter.KeywordsAttributes keyword ); //Remove a keyword for a filter - @DELETE("filters/keywords/{id}") + @DELETE("filter_keywords/{id}") Call removeKeywordFilter( @Header("Authorization") String token, @Path("id") String id diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Filter.java b/app/src/main/java/app/fedilab/android/client/entities/api/Filter.java index 70a2cefe..a52980b9 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/api/Filter.java +++ b/app/src/main/java/app/fedilab/android/client/entities/api/Filter.java @@ -1,5 +1,6 @@ package app.fedilab.android.client.entities.api; +import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import java.io.Serializable; @@ -33,15 +34,26 @@ public class Filter implements Serializable { @SerializedName("filter_action") public String filter_action; @SerializedName("keywords") - public List keywords; + public List keywords; - public static class FilterKeyword implements Serializable { + public static String getValueOf(FilterParams filterParams) { + Gson gson = new Gson(); + try { + return gson.toJson(filterParams); + } catch (Exception e) { + return null; + } + } + + public static class KeywordsAttributes implements Serializable { @SerializedName("id") public String id; @SerializedName("keyword") public String keyword; @SerializedName("whole_word") - public boolean whole_word; + public Boolean whole_word; + @SerializedName("_destroy") + public Boolean _destroy; } public static class FilterResult implements Serializable { @@ -53,27 +65,35 @@ public class Filter implements Serializable { public List context; @SerializedName("whole_word") public boolean whole_word; - @SerializedName("expires_at") + @SerializedName("expires_in") public Date expires_at; @SerializedName("filter_action") public String filter_action; } - public static class Keyword implements Serializable { - @SerializedName("keyword") - public String keyword; - @SerializedName("whole_word") - public boolean whole_word; + public static class FilterParams implements Serializable { + @SerializedName("id") + public String id; + @SerializedName("title") + public String title; + @SerializedName("context") + public List context; + @SerializedName("expires_in") + public Long expires_in; + @SerializedName("filter_action") + public String filter_action; + @SerializedName("keywords_attributes") + public List keywords; } - public static class KeywordsAttributes implements Serializable { + public static class KeywordsParams implements Serializable { @SerializedName("id") public String id; @SerializedName("keyword") public String keyword; @SerializedName("whole_word") - public boolean whole_word; + public Boolean whole_word; @SerializedName("_destroy") - public boolean _destroy; + public Boolean _destroy; } } diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Status.java b/app/src/main/java/app/fedilab/android/client/entities/api/Status.java index 228f0dc6..caa387a2 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/api/Status.java +++ b/app/src/main/java/app/fedilab/android/client/entities/api/Status.java @@ -92,8 +92,8 @@ public class Status implements Serializable, Cloneable { public Card card; @SerializedName("poll") public Poll poll; - @SerializedName("filtered") - public Filter.FilterResult filtered; + /* @SerializedName("filtered") + public Filter.FilterResult filtered;*/ @SerializedName("pleroma") public Pleroma pleroma; @SerializedName("cached") diff --git a/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java b/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java index 57f7fe5c..f6577415 100644 --- a/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/TimelineHelper.java @@ -112,7 +112,7 @@ public class TimelineHelper { if (!filter.context.contains("public")) continue; } if (filter.keywords != null && filter.keywords.size() > 0) { - for (Filter.FilterKeyword filterKeyword : filter.keywords) { + for (Filter.KeywordsAttributes filterKeyword : filter.keywords) { if (filterKeyword.whole_word) { Pattern p = Pattern.compile("(^|\\W)(" + Pattern.quote(filterKeyword.keyword) + ")($|\\W)", Pattern.CASE_INSENSITIVE); for (Status status : statuses) { @@ -206,7 +206,7 @@ public class TimelineHelper { if (!filter.context.contains("notification")) continue; if (filter.keywords != null && filter.keywords.size() > 0) { - for (Filter.FilterKeyword filterKeyword : filter.keywords) { + for (Filter.KeywordsAttributes filterKeyword : filter.keywords) { if (filterKeyword.whole_word) { Pattern p = Pattern.compile("(^|\\W)(" + Pattern.quote(filterKeyword.keyword) + ")($|\\W)", Pattern.CASE_INSENSITIVE); for (Notification notification : notifications) { diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/KeywordAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/KeywordAdapter.java new file mode 100644 index 00000000..d0cb8814 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/ui/drawer/KeywordAdapter.java @@ -0,0 +1,119 @@ +package app.fedilab.android.ui.drawer; +/* Copyright 2022 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + +import android.content.Context; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.client.entities.api.Filter; +import app.fedilab.android.databinding.DrawerKeywordBinding; + +public class KeywordAdapter extends RecyclerView.Adapter { + private final List keywordsParamsList; + private Context context; + + public KeywordAdapter(List keywordsParamsList) { + this.keywordsParamsList = keywordsParamsList; + } + + + public int getCount() { + return keywordsParamsList.size(); + } + + public Filter.KeywordsParams getItem(int position) { + return keywordsParamsList.get(position); + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + context = parent.getContext(); + DrawerKeywordBinding itemBinding = DrawerKeywordBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + return new KeywordViewHolder(itemBinding); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { + Filter.KeywordsParams keywordsParams = keywordsParamsList.get(position); + KeywordViewHolder holder = (KeywordViewHolder) viewHolder; + holder.binding.keywordPhrase.setText(keywordsParams.keyword); + holder.binding.keywordPhrase.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + keywordsParams.keyword = charSequence.toString().trim(); + if (charSequence.toString().length() == 0) { + holder.binding.wholeWord.setError(context.getString(R.string.cannot_be_empty)); + } else { + holder.binding.wholeWord.setError(null); + } + } + + @Override + public void afterTextChanged(Editable editable) { + + } + }); + if (keywordsParams._destroy != null) { + holder.binding.mainContainer.setVisibility(View.GONE); + } else { + holder.binding.mainContainer.setVisibility(View.VISIBLE); + } + holder.binding.wholeWord.setOnCheckedChangeListener((compoundButton, checked) -> keywordsParams.whole_word = checked); + holder.binding.wholeWord.setChecked(keywordsParams.whole_word != null && keywordsParams.whole_word); + holder.binding.deleteKeyword.setOnClickListener(v -> { + //The keyword exists + if (keywordsParams.id != null) { + keywordsParams._destroy = true; + notifyItemChanged(position); + } else { //It is currently only the app + if (keywordsParamsList.size() > position) { + keywordsParamsList.remove(position); + notifyItemRemoved(position); + } + } + }); + } + + @Override + public int getItemCount() { + return keywordsParamsList.size(); + } + + + public static class KeywordViewHolder extends RecyclerView.ViewHolder { + DrawerKeywordBinding binding; + + KeywordViewHolder(DrawerKeywordBinding itemView) { + super(itemView.getRoot()); + binding = itemView; + } + } +} diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/FiltersVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/FiltersVM.java index e93eb5ad..2dd575c1 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/FiltersVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/FiltersVM.java @@ -18,14 +18,12 @@ package app.fedilab.android.viewmodel.mastodon; import android.app.Application; import android.os.Handler; import android.os.Looper; -import android.util.Log; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @@ -60,7 +58,8 @@ public class FiltersVM extends AndroidViewModel { private MastodonFiltersService initV2(String instance) { Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://" + instance + "/api/v2/") - .addConverterFactory(GsonConverterFactory.create(Helper.getDateBuilder())) + // .addConverterFactory(GsonConverterFactory.create(Helper.getDateBuilder())) + .addConverterFactory(GsonConverterFactory.create()) .client(okHttpClient) .build(); return retrofit.create(MastodonFiltersService.class); @@ -132,13 +131,12 @@ public class FiltersVM extends AndroidViewModel { * * @return {@link LiveData} containing a {@link Filter} */ - public LiveData addFilter(@NonNull String instance, String token, - @NonNull String title, Date expires_at, @NonNull List filterContext, String filter_action, List keywordsAttributes) { + public LiveData addFilter(@NonNull String instance, String token, @NonNull Filter.FilterParams filterParams) { filterMutableLiveData = new MutableLiveData<>(); MastodonFiltersService mastodonFiltersService = initV2(instance); new Thread(() -> { Filter filter = null; - Call addFilterCall = mastodonFiltersService.addFilter(token, title, expires_at, filter_action, filterContext, keywordsAttributes); + Call addFilterCall = mastodonFiltersService.addFilter(token, filterParams.title, filterParams.expires_in, filterParams.filter_action, filterParams.context, filterParams.keywords); if (addFilterCall != null) { try { Response addFiltersResponse = addFilterCall.execute(); @@ -162,14 +160,22 @@ public class FiltersVM extends AndroidViewModel { * * @return {@link LiveData} containing a {@link Filter} */ - public LiveData editFilter(@NonNull String instance, String token, @NonNull String id, @NonNull String title, Date expires_at, @NonNull List filterContext, String filter_action, List keywordsAttributes) { + public LiveData editFilter(@NonNull String instance, String token, @NonNull Filter.FilterParams filterParams) { filterMutableLiveData = new MutableLiveData<>(); MastodonFiltersService mastodonFiltersService = initV2(instance); new Thread(() -> { Filter filter = null; - Call editFilterCall = mastodonFiltersService.editFilter(token, id, title, expires_at, filter_action, filterContext, keywordsAttributes); + /* List keywordsId = new ArrayList<>(); + List keywords = new ArrayList<>(); + List whole_words = new ArrayList<>(); + for(Filter.KeywordsAttributes attributes: keywordsAttributes) { + keywordsId.add(attributes.id); + keywords.add(attributes.keyword); + whole_words.add(attributes.whole_word); + }*/ + + Call editFilterCall = mastodonFiltersService.editFilter(token, filterParams.id, filterParams); if (editFilterCall != null) { - Log.v(Helper.TAG, "request: " + editFilterCall.request()); try { Response editFiltersResponse = editFilterCall.execute(); if (editFiltersResponse.isSuccessful()) { diff --git a/app/src/main/res/layout/keywords_layout.xml b/app/src/main/res/layout/drawer_keyword.xml similarity index 93% rename from app/src/main/res/layout/keywords_layout.xml rename to app/src/main/res/layout/drawer_keyword.xml index 9252508f..2ae95fea 100644 --- a/app/src/main/res/layout/keywords_layout.xml +++ b/app/src/main/res/layout/drawer_keyword.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content" />