From d90801095555ea7666b2e186a0f6023a4500fda4 Mon Sep 17 00:00:00 2001 From: stom79 Date: Wed, 25 Oct 2017 09:04:34 +0200 Subject: [PATCH] Adds users in a list --- .../mastodon/activities/TootActivity.java | 31 ++- .../RetrieveAccountsForReplyAsyncTask.java | 13 +- .../etalab/mastodon/helper/CrossActions.java | 197 ------------------ 3 files changed, 32 insertions(+), 209 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java index acff2f44f..066dc96b2 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java @@ -97,6 +97,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -770,9 +771,9 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc dialog.dismiss(); } }); - alert.setPositiveButton(R.string.accounts, new DialogInterface.OnClickListener() { + alert.setNegativeButton(R.string.accounts, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { - new RetrieveAccountsForReplyAsyncTask(getApplicationContext(), tootReply, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new RetrieveAccountsForReplyAsyncTask(getApplicationContext(), tootReply.getReblog() != null?tootReply.getReblog():tootReply, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); dialog.dismiss(); } }); @@ -1542,33 +1543,43 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc @Override public void onRetrieveAccountsReply(ArrayList mentions) { ArrayList accounts = new ArrayList<>(); + List listItems = new ArrayList<>(); + final boolean[] checkedValues = new boolean[mentions.size()]; + int i = 0; for(Mention mention: mentions) { Account account = new Account(); account.setAcct(mention.getAcct()); account.setAvatar(mention.getUrl()); account.setUsername(mention.getUsername()); + listItems.add("@"+mention.getAcct()); + checkedValues[i] = toot_content.getText().toString().contains("@" + mention.getAcct()); + i++; } - AlertDialog.Builder builderSingle = new AlertDialog.Builder(TootActivity.this); + final CharSequence[] charSequenceItems = listItems.toArray(new CharSequence[listItems.size()]); + final AlertDialog.Builder builderSingle = new AlertDialog.Builder(TootActivity.this); builderSingle.setTitle(getString(R.string.choose_accounts)); final AccountsSearchAdapter accountsSearchAdapter = new AccountsSearchAdapter(getApplicationContext(), accounts, false); final Account[] accountArray = new Account[accounts.size()]; - int i = 0; + i = 0; for(Account account: accounts){ accountArray[i] = account; i++; } - builderSingle.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + builderSingle.setNegativeButton(R.string.validate, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); - builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() { + + builderSingle.setMultiChoiceItems(charSequenceItems, checkedValues, new DialogInterface.OnMultiChoiceClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { - Account selectedAccount = accountArray[which]; - - dialog.dismiss(); + public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) { + if (isChecked) { + toot_content.setText(charSequenceItems[indexSelected] + " " + toot_content.getText()); + } else { + toot_content.setText(toot_content.getText().toString().replaceAll("\\s*" +charSequenceItems[indexSelected], "")); + } } }); builderSingle.show(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveAccountsForReplyAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveAccountsForReplyAsyncTask.java index 58d28de25..c459d3b60 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveAccountsForReplyAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveAccountsForReplyAsyncTask.java @@ -15,13 +15,19 @@ package fr.gouv.etalab.mastodon.asynctasks; import android.content.Context; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import java.util.ArrayList; import fr.gouv.etalab.mastodon.client.API; +import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.client.Entities.Mention; +import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveAccountsReplyInterface; +import fr.gouv.etalab.mastodon.sqlite.AccountDAO; +import fr.gouv.etalab.mastodon.sqlite.Sqlite; /** @@ -51,7 +57,6 @@ public class RetrieveAccountsForReplyAsyncTask extends AsyncTask(); //Retrieves the first toot if( statusContext.getAncestors().size() > 0 ) { - fr.gouv.etalab.mastodon.client.Entities.Status statusFirst = statusContext.getAncestors().get(0); statusContext = api.getStatusContext(statusContext.getAncestors().get(0).getId()); } if( status != null){ @@ -84,7 +89,11 @@ public class RetrieveAccountsForReplyAsyncTask extends AsyncTask accounts = connectedAccounts(context, status, limitedToOwner); - final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE); - doAction = makeAction; - boolean undoAction = (doAction == API.StatusAction.UNPIN || doAction == API.StatusAction.UNREBLOG || doAction == API.StatusAction.UNFAVOURITE ); - //Undo actions won't ask for choosing a user - if( accounts.size() == 1 || (undoAction && limitedToOwner) ) { - - boolean confirmation = false; - if( doAction == API.StatusAction.UNFAVOURITE || doAction == API.StatusAction.FAVOURITE) - confirmation = sharedpreferences.getBoolean(Helper.SET_NOTIF_VALIDATION_FAV, false); - else if( doAction == API.StatusAction.UNREBLOG || doAction == API.StatusAction.REBLOG ) - confirmation = sharedpreferences.getBoolean(Helper.SET_NOTIF_VALIDATION, true); - if (confirmation) - displayConfirmationDialog(context, doAction, status, baseAdapter, onPostActionInterface); - else { - if( doAction == API.StatusAction.REBLOG || doAction == API.StatusAction.UNREBLOG) - reblogAction(context, status, baseAdapter, onPostActionInterface); - else if( doAction == API.StatusAction.FAVOURITE || doAction == API.StatusAction.UNFAVOURITE) - favouriteAction(context, status, baseAdapter, onPostActionInterface); - else if ( doAction == API.StatusAction.PIN || doAction == API.StatusAction.UNPIN) - pinAction(context, status, baseAdapter, onPostActionInterface); - } - }else { - AlertDialog.Builder builderSingle = new AlertDialog.Builder(context); - builderSingle.setTitle(context.getString(R.string.choose_accounts)); - final AccountsSearchAdapter accountsSearchAdapter = new AccountsSearchAdapter(context, accounts, true); - final Account[] accountArray = new Account[accounts.size()]; - int i = 0; - for(Account account: accounts){ - accountArray[i] = account; - i++; - } - - builderSingle.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - Account selectedAccount = accountArray[which]; - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - Account loggedAccount = new AccountDAO(context, db).getAccountByID(userId); - //Cross action can only be create elements (boost/fav) - if( doAction == API.StatusAction.UNREBLOG) - doAction = API.StatusAction.REBLOG; - else if( doAction == API.StatusAction.UNFAVOURITE) - doAction = API.StatusAction.FAVOURITE; - - if(loggedAccount.getInstance().equals(selectedAccount.getInstance())){ - new PostActionAsyncTask(context, selectedAccount, doAction, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - }else{ //Account is from another instance - new PostActionAsyncTask(context, selectedAccount, status, doAction, onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - if( selectedAccount.getInstance().equals(loggedAccount.getInstance()) && selectedAccount.getId().equals(loggedAccount.getId())) { - if (doAction == API.StatusAction.REBLOG) { - status.setReblogged(true); - } else if (doAction == API.StatusAction.FAVOURITE) { - status.setFavourited(true); - } else if (doAction == API.StatusAction.PIN) { - status.setPinned(true); - } - baseAdapter.notifyDataSetChanged(); - } - dialog.dismiss(); - } - }); - builderSingle.show(); - } - } - - - - /** - * Display a validation message - * @param action int - * @param status Status - */ - private static void displayConfirmationDialog(final Context context, final API.StatusAction action, final Status status, final BaseAdapter baseAdapter, final OnPostActionInterface onPostActionInterface){ - - String title = null; - if( action == API.StatusAction.FAVOURITE){ - title = context.getString(R.string.favourite_add); - }else if( action == API.StatusAction.UNFAVOURITE){ - title = context.getString(R.string.favourite_remove); - }else if( action == API.StatusAction.REBLOG){ - title = context.getString(R.string.reblog_add); - }else if(action == API.StatusAction.UNREBLOG){ - title = context.getString(R.string.reblog_remove); - }else if ( action == API.StatusAction.PIN) { - title = context.getString(R.string.pin_add); - }else if (action == API.StatusAction.UNPIN) { - title = context.getString(R.string.pin_remove); - } - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - builder.setMessage(Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY)); - else - //noinspection deprecation - builder.setMessage(Html.fromHtml(status.getContent())); - builder.setIcon(android.R.drawable.ic_dialog_alert) - .setTitle(title) - .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if( action == API.StatusAction.REBLOG || action == API.StatusAction.UNREBLOG) - reblogAction(context, status, baseAdapter, onPostActionInterface); - else if( action == API.StatusAction.FAVOURITE || action == API.StatusAction.UNFAVOURITE) - favouriteAction(context, status, baseAdapter, onPostActionInterface); - else if ( action == API.StatusAction.PIN || action == API.StatusAction.UNPIN) - pinAction(context, status, baseAdapter, onPostActionInterface); - dialog.dismiss(); - } - }) - .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - - }) - .show(); - } - - /** - * Favourites/Unfavourites a status - * @param status Status - */ - private static void favouriteAction(Context context, Status status, BaseAdapter baseAdapter, OnPostActionInterface onPostActionInterface){ - if( status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())){ - new PostActionAsyncTask(context, API.StatusAction.UNFAVOURITE, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setFavourited(false); - }else{ - new PostActionAsyncTask(context, API.StatusAction.FAVOURITE, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setFavourited(true); - } - baseAdapter.notifyDataSetChanged(); - } - - /** - * Reblog/Unreblog a status - * @param status Status - */ - private static void reblogAction(Context context, Status status, BaseAdapter baseAdapter, OnPostActionInterface onPostActionInterface){ - if( status.isReblogged() || (status.getReblog()!= null && status.getReblog().isReblogged())){ - String statusId = status.getReblog()!=null?status.getReblog().getId():status.getId(); - new PostActionAsyncTask(context, API.StatusAction.UNREBLOG, statusId, onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setReblogged(false); - }else{ - new PostActionAsyncTask(context, API.StatusAction.REBLOG, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setReblogged(true); - } - baseAdapter.notifyDataSetChanged(); - } - - /** - * Pin or unpin a status - * @param status Status - */ - private static void pinAction(Context context, Status status, BaseAdapter baseAdapter, OnPostActionInterface onPostActionInterface) { - - if (status.isPinned()) { - new PostActionAsyncTask(context, API.StatusAction.UNPIN, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setPinned(false); - } else { - new PostActionAsyncTask(context, API.StatusAction.PIN, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - status.setPinned(true); - } - baseAdapter.notifyDataSetChanged(); - } /** @@ -286,24 +107,6 @@ public class CrossActions { } - - - - - - - - - - - - - - - - - - public static void doCrossAction(final Context context, final Status status, final API.StatusAction doAction, final RecyclerView.Adapter baseAdapter, final OnPostActionInterface onPostActionInterface, boolean limitedToOwner){ List accounts = connectedAccounts(context, status, limitedToOwner); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);