diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java index a587a3e63..6468f7df3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java @@ -48,6 +48,34 @@ public class Account implements Parcelable { private String instance; private boolean isFollowing; private boolean isRemote; + private followAction followType = followAction.NOTHING; + private boolean isMakingAction = false; + + public followAction getFollowType() { + return followType; + } + + public void setFollowType(followAction followType) { + this.followType = followType; + } + + public boolean isMakingAction() { + return isMakingAction; + } + + public void setMakingAction(boolean makingAction) { + isMakingAction = makingAction; + } + + public enum followAction{ + FOLLOW, + NOT_FOLLOW, + BLOCK, + MUTE, + REQUEST_SENT, + NOTHING + } + protected Account(Parcel in) { id = in.readString(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java index 0151c8406..0f4087b8d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java @@ -78,7 +78,15 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte this.targetedId = targetedId; } + public enum action{ + FOLLOW, + UNFOLLOW, + UNBLOCK, + NOTHING, + UNMUTE + } + private API.StatusAction doAction; @Override public int getCount() { @@ -126,9 +134,8 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte holder.account_sc = (TextView) convertView.findViewById(R.id.account_sc); holder.account_fgc = (TextView) convertView.findViewById(R.id.account_fgc); holder.account_frc = (TextView) convertView.findViewById(R.id.account_frc); - holder.account_action_block = (FloatingActionButton) convertView.findViewById(R.id.account_action_block); - holder.account_action_mute = (FloatingActionButton) convertView.findViewById(R.id.account_action_mute); - + holder.account_follow = (FloatingActionButton) convertView.findViewById(R.id.account_follow); + holder.account_follow_request = (TextView) convertView.findViewById(R.id.account_follow_request); holder.account_container = (LinearLayout) convertView.findViewById(R.id.account_container); convertView.setTag(holder); } else { @@ -136,24 +143,40 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte } if( action == RetrieveAccountsAsyncTask.Type.BLOCKED) - holder.account_action_block.setVisibility(View.VISIBLE); + account.setFollowType(Account.followAction.BLOCK); else if( action == RetrieveAccountsAsyncTask.Type.MUTED) - holder.account_action_mute.setVisibility(View.VISIBLE); + account.setFollowType(Account.followAction.MUTE); + if (account.getFollowType() == Account.followAction.NOTHING){ + holder.account_follow.setVisibility(View.GONE); + holder.account_follow_request.setVisibility(View.GONE); + doAction = null; + }else if( account.getFollowType() == Account.followAction.REQUEST_SENT){ + holder.account_follow.setVisibility(View.GONE); + holder.account_follow_request.setVisibility(View.VISIBLE); + doAction = null; + }else if( account.getFollowType() == Account.followAction.FOLLOW){ + holder.account_follow.setImageResource(R.drawable.ic_user_times); + doAction = API.StatusAction.UNFOLLOW; + holder.account_follow.setVisibility(View.VISIBLE); + holder.account_follow_request.setVisibility(View.GONE); + }else if( account.getFollowType() == Account.followAction.NOT_FOLLOW){ + holder.account_follow.setImageResource(R.drawable.ic_user_plus); + doAction = API.StatusAction.FOLLOW; + holder.account_follow.setVisibility(View.VISIBLE); + holder.account_follow_request.setVisibility(View.GONE); + }else if( account.getFollowType() == Account.followAction.BLOCK){ + holder.account_follow.setImageResource(R.drawable.ic_unlock_alt); + doAction = API.StatusAction.UNBLOCK; + holder.account_follow.setVisibility(View.VISIBLE); + holder.account_follow_request.setVisibility(View.GONE); + }else if( account.getFollowType() == Account.followAction.MUTE){ + holder.account_follow.setImageResource(R.drawable.ic_unlock_alt); + doAction = API.StatusAction.UNMUTE; + holder.account_follow.setVisibility(View.VISIBLE); + holder.account_follow_request.setVisibility(View.GONE); + } - holder.account_action_mute.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - moreOptionDialog(account); - } - }); - - holder.account_action_block.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - moreOptionDialog(account); - } - }); holder.account_container.setOnClickListener(new View.OnClickListener() { @Override @@ -184,6 +207,22 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte imageLoader.displayImage(account.getAvatar(), holder.account_pp, options); + + if( account.isMakingAction()){ + holder.account_follow.setEnabled(false); + }else { + holder.account_follow.setEnabled(true); + } + //Follow button + holder.account_follow.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if( doAction != null) { + account.setMakingAction(true); + new PostActionAsyncTask(context, doAction, account.getId(), AccountsListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + } + }); holder.account_pp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -233,44 +272,9 @@ public class AccountsListAdapter extends BaseAdapter implements OnPostActionInte TextView account_sc; TextView account_fgc; TextView account_frc; + FloatingActionButton account_follow; + TextView account_follow_request; LinearLayout account_container; - FloatingActionButton account_action_block; - FloatingActionButton account_action_mute; - } - - - /** - * More option for acccounts (unmute / unblock) - * @param account Account current account - */ - private void moreOptionDialog(final Account account){ - - String[] stringArrayConf = context.getResources().getStringArray(R.array.more_action_confirm_account); - final API.StatusAction doAction; - final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - AlertDialog.Builder dialog = new AlertDialog.Builder(context); - - if( action == RetrieveAccountsAsyncTask.Type.BLOCKED) { - dialog.setMessage(stringArrayConf[1]); - doAction = API.StatusAction.UNBLOCK; - }else { - dialog.setMessage(stringArrayConf[0]); - doAction = API.StatusAction.UNMUTE; - } - dialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog,int which) { - dialog.dismiss(); - } - }); - dialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog,int which) { - new PostActionAsyncTask(context, doAction, account.getId(), AccountsListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - dialog.dismiss(); - } - }); - dialog.show(); } } \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp/drawer_account.xml b/app/src/main/res/layout-sw600dp/drawer_account.xml index 45138711c..ab3200e08 100644 --- a/app/src/main/res/layout-sw600dp/drawer_account.xml +++ b/app/src/main/res/layout-sw600dp/drawer_account.xml @@ -176,27 +176,5 @@ android:layout_gravity="center" android:gravity="center" /> - - \ No newline at end of file