From 7aebf73e3af5fac86b137d2ad3a046ef4c9ce01b Mon Sep 17 00:00:00 2001 From: stom79 Date: Fri, 15 Dec 2017 18:53:17 +0100 Subject: [PATCH] Delete accounts from list --- .../mastodon/activities/ListActivity.java | 6 +++++- .../ManageAccountsInListActivity.java | 12 ++++++++---- .../asynctasks/ManageListsAsyncTask.java | 2 +- .../fr/gouv/etalab/mastodon/client/API.java | 9 ++++++--- .../etalab/mastodon/client/HttpsConnection.java | 5 ++--- .../drawers/AccountsInAListAdapter.java | 17 +++++++---------- .../res/drawable-anydpi/ic_person_outline.xml | 9 +++++++++ app/src/main/res/layout/drawer_account_list.xml | 5 ++--- app/src/main/res/menu/main_list.xml | 3 +-- 9 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/drawable-anydpi/ic_person_outline.xml diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ListActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ListActivity.java index 34c63006e..623f0d975 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ListActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ListActivity.java @@ -17,6 +17,7 @@ package fr.gouv.etalab.mastodon.activities; import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; @@ -174,8 +175,11 @@ public class ListActivity extends BaseActivity implements OnListActionInterface finish(); return true; case R.id.action_add_user: + Intent intent = new Intent(ListActivity.this, ManageAccountsInListActivity.class); + intent.putExtra("title", title); + intent.putExtra("id", listId); + startActivity(intent); return true; - case R.id.action_edit_list: AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(ListActivity.this); LayoutInflater inflater = getLayoutInflater(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ManageAccountsInListActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ManageAccountsInListActivity.java index 6115aebc1..7f5c0e9b0 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ManageAccountsInListActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ManageAccountsInListActivity.java @@ -31,6 +31,8 @@ import android.widget.TextView; import android.widget.Toast; +import java.util.ArrayList; + import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.asynctasks.ManageListsAsyncTask; import fr.gouv.etalab.mastodon.client.APIResponse; @@ -83,14 +85,16 @@ public class ManageAccountsInListActivity extends BaseActivity implements OnList lv_accounts_search = findViewById(R.id.lv_accounts_search); lv_accounts_current = findViewById(R.id.lv_accounts_current); no_action = findViewById(R.id.no_action); - accountsInAListAdapter = new AccountsInAListAdapter(ManageAccountsInListActivity.this, AccountsInAListAdapter.type.CURRENT, this.accounts); + this.accounts = new ArrayList<>(); + accountsInAListAdapter = new AccountsInAListAdapter(ManageAccountsInListActivity.this, AccountsInAListAdapter.type.CURRENT, listId, this.accounts); lv_accounts_current.setAdapter(accountsInAListAdapter); LinearLayoutManager mLayoutManager = new LinearLayoutManager(ManageAccountsInListActivity.this); lv_accounts_current.setLayoutManager(mLayoutManager); - accountsSearchInAListAdapter = new AccountsInAListAdapter(ManageAccountsInListActivity.this, AccountsInAListAdapter.type.SEARCH, this.accounts); + accountsSearchInAListAdapter = new AccountsInAListAdapter(ManageAccountsInListActivity.this, AccountsInAListAdapter.type.SEARCH, listId, this.accounts); lv_accounts_search.setAdapter(accountsSearchInAListAdapter); - lv_accounts_search.setLayoutManager(mLayoutManager); + LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(ManageAccountsInListActivity.this); + lv_accounts_search.setLayoutManager(mLayoutManager1); list_title.setText(title); @@ -127,7 +131,7 @@ public class ManageAccountsInListActivity extends BaseActivity implements OnList if (apiResponse.getAccounts() != null && apiResponse.getAccounts().size() > 0) { this.accounts.addAll(apiResponse.getAccounts()); accountsInAListAdapter.notifyDataSetChanged(); - + main_account_container.setVisibility(View.VISIBLE); } else { no_action.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/ManageListsAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/ManageListsAsyncTask.java index a4a192b8f..9ea6a9d8c 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/ManageListsAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/ManageListsAsyncTask.java @@ -81,7 +81,7 @@ public class ManageListsAsyncTask extends AsyncTask { }else if(apiAction == action.GET_LIST_TIMELINE){ apiResponse = new API(contextReference.get()).getListTimeline(this.listId, this.max_id, this.since_id, this.limit); }else if(apiAction == action.GET_LIST_ACCOUNT){ - apiResponse = new API(contextReference.get()).getLists(this.targetedId); + apiResponse = new API(contextReference.get()).getAccountsInList(this.listId,0); }else if( apiAction == action.CREATE_LIST){ apiResponse = new API(contextReference.get()).createList(this.title); }else if(apiAction == action.DELETE_LIST){ 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 8a877828e..1c7ba3848 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 @@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.client; import android.content.Context; import android.content.SharedPreferences; +import android.util.Log; import org.json.JSONArray; import org.json.JSONException; @@ -1250,7 +1251,7 @@ public class API { }catch (Exception e) { setDefaultError(); } - apiResponse.setLists(lists); + apiResponse.setAccounts(accounts); return apiResponse; } @@ -1294,7 +1295,7 @@ public class API { for(String val: account_ids) parameters.append("account_ids[]=").append(val).append("&"); if( parameters.length() > 0) { - parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16)); + parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(14)); params.put("account_ids[]", parameters.toString()); } List lists = new ArrayList<>(); @@ -1323,15 +1324,17 @@ public class API { for(String val: account_ids) parameters.append("account_ids[]=").append(val).append("&"); if( parameters.length() > 0) { - parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16)); + parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(14)); params.put("account_ids[]", parameters.toString()); } httpsConnection.delete(getAbsoluteUrl(String.format("/lists/%s/accounts", id)), 60, params, prefKeyOauthTokenT); actionCode = httpsConnection.getActionCode(); } catch (HttpsConnection.HttpsConnectionException e) { setError(e.getStatusCode(), e); + e.printStackTrace(); }catch (Exception e) { setDefaultError(); + e.printStackTrace(); } return actionCode; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java index baaa1be0d..57b22415e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java @@ -557,7 +557,6 @@ public class HttpsConnection { httpsURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); httpsURLConnection.setDoOutput(true); - getSinceMaxId(); httpsURLConnection.getOutputStream().write(postDataBytes); Reader in = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream(), "UTF-8")); @@ -603,11 +602,11 @@ public class HttpsConnection { httpsURLConnection.setConnectTimeout(timeout * 1000); httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - getSinceMaxId(); - + httpsURLConnection.getOutputStream().write(postDataBytes); if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { + getSinceMaxId(); httpsURLConnection.disconnect(); return httpsURLConnection.getResponseCode(); }else { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsInAListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsInAListAdapter.java index 46094a7b1..71fc2eb52 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsInAListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsInAListAdapter.java @@ -56,7 +56,7 @@ public class AccountsInAListAdapter extends RecyclerView.Adapter implements OnLi private Context context; private AccountsInAListAdapter accountsInAListAdapter; private type actionType; - + private String listId; public enum type{ @@ -64,12 +64,13 @@ public class AccountsInAListAdapter extends RecyclerView.Adapter implements OnLi SEARCH } - public AccountsInAListAdapter(Context context, type actionType, List accounts){ + public AccountsInAListAdapter(Context context, type actionType, String listId, List accounts){ this.context = context; this.accounts = accounts; layoutInflater = LayoutInflater.from(context); this.accountsInAListAdapter = this; this.actionType = actionType; + this.listId = listId; } @Override @@ -109,7 +110,7 @@ public class AccountsInAListAdapter extends RecyclerView.Adapter implements OnLi @Override public void onClick(View view) { if( actionType == type.CURRENT){ - new ManageListsAsyncTask(context, ManageListsAsyncTask.action.DELETE_USERS, new String[]{account.getId()}, null, null, null, AccountsInAListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new ManageListsAsyncTask(context, ManageListsAsyncTask.action.DELETE_USERS, new String[]{account.getId()}, null, listId, null, AccountsInAListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); accounts.remove(account); accountsInAListAdapter.notifyDataSetChanged(); }else if(actionType == type.SEARCH){ @@ -133,13 +134,9 @@ public class AccountsInAListAdapter extends RecyclerView.Adapter implements OnLi @Override public void onActionDone(ManageListsAsyncTask.action actionType, APIResponse apiResponse, int statusCode) { - if( apiResponse.getError() != null){ - final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - boolean show_error_messages = sharedpreferences.getBoolean(Helper.SET_SHOW_ERROR_MESSAGES, true); - if( show_error_messages) - Toast.makeText(context, apiResponse.getError().getError(),Toast.LENGTH_LONG).show(); - return; - } + if( actionType == ManageListsAsyncTask.action.DELETE_USERS && statusCode != 200){ + Toast.makeText(context, context.getString(R.string.toast_error), Toast.LENGTH_SHORT).show(); + } } @Override diff --git a/app/src/main/res/drawable-anydpi/ic_person_outline.xml b/app/src/main/res/drawable-anydpi/ic_person_outline.xml new file mode 100644 index 000000000..f828a57e6 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_person_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/drawer_account_list.xml b/app/src/main/res/layout/drawer_account_list.xml index fcb1b870e..bab650d99 100644 --- a/app/src/main/res/layout/drawer_account_list.xml +++ b/app/src/main/res/layout/drawer_account_list.xml @@ -57,10 +57,9 @@