From c4b3b904446eca9e077468cdb3530198a2d76dfc Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 7 Oct 2017 18:34:29 +0200 Subject: [PATCH] Improves remote follow - 2 --- .../activities/RemoteFollowActivity.java | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/RemoteFollowActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/RemoteFollowActivity.java index 2360455c3..fd9293fce 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/RemoteFollowActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/RemoteFollowActivity.java @@ -24,6 +24,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -63,14 +64,21 @@ import java.util.ArrayList; import java.util.List; import cz.msebera.android.httpclient.Header; +import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask; +import fr.gouv.etalab.mastodon.asynctasks.RetrieveRelationshipAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveRemoteAccountsAsyncTask; +import fr.gouv.etalab.mastodon.client.API; import fr.gouv.etalab.mastodon.client.Entities.Account; +import fr.gouv.etalab.mastodon.client.Entities.Error; +import fr.gouv.etalab.mastodon.client.Entities.Relationship; import fr.gouv.etalab.mastodon.client.Entities.Results; import fr.gouv.etalab.mastodon.client.KinrarClient; import fr.gouv.etalab.mastodon.client.PatchBaseImageDownloader; import fr.gouv.etalab.mastodon.drawers.AccountsListAdapter; import fr.gouv.etalab.mastodon.helper.Helper; +import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface; +import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRelationshipInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRemoteAccountInterface; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; @@ -82,7 +90,7 @@ import mastodon.etalab.gouv.fr.mastodon.R; * Remote follow activity class */ -public class RemoteFollowActivity extends AppCompatActivity implements OnRetrieveRemoteAccountInterface { +public class RemoteFollowActivity extends AppCompatActivity implements OnRetrieveRemoteAccountInterface, OnRetrieveRelationshipInterface, OnPostActionInterface { private ImageView pp_actionBar; @@ -283,6 +291,76 @@ public class RemoteFollowActivity extends AppCompatActivity implements OnRetriev AccountsListAdapter accountSearchWebAdapter = new AccountsListAdapter(RemoteFollowActivity.this, RetrieveAccountsAsyncTask.Type.FOLLOWERS, userId, selectedAccount); lv_account.setAdapter(accountSearchWebAdapter); lv_account.setVisibility(View.VISIBLE); + new RetrieveRelationshipAsyncTask(getApplicationContext(), account.getId(),RemoteFollowActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } + + @Override + public void onRetrieveRelationship(Relationship relationship, Error error) { + final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + if( error != null){ + boolean show_error_messages = sharedpreferences.getBoolean(Helper.SET_SHOW_ERROR_MESSAGES, true); + if( show_error_messages) + Toast.makeText(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show(); + return; + } + if( relationship == null) + return; + final FloatingActionButton account_follow = findViewById(R.id.account_follow); + ShowAccountActivity.action doAction = null; + String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); + final String accountId = relationship.getId(); + if( accountId != null && accountId.equals(userId)){ + account_follow.setVisibility(View.GONE); + }else if( relationship.isBlocking()){ + account_follow.setImageResource(R.drawable.ic_unlock_alt); + doAction = ShowAccountActivity.action.UNBLOCK; + account_follow.setVisibility(View.VISIBLE); + }else if( relationship.isRequested()){ + account_follow.setVisibility(View.GONE); + doAction = ShowAccountActivity.action.NOTHING; + }else if( relationship.isFollowing()){ + account_follow.setImageResource(R.drawable.ic_user_times); + doAction = ShowAccountActivity.action.UNFOLLOW; + account_follow.setVisibility(View.VISIBLE); + }else if( !relationship.isFollowing()){ + account_follow.setImageResource(R.drawable.ic_user_plus); + doAction = ShowAccountActivity.action.FOLLOW; + account_follow.setVisibility(View.VISIBLE); + }else{ + account_follow.setVisibility(View.GONE); + doAction = ShowAccountActivity.action.NOTHING; + } + final ShowAccountActivity.action finalDoAction = doAction; + account_follow.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if( finalDoAction == ShowAccountActivity.action.NOTHING){ + Toast.makeText(getApplicationContext(), R.string.nothing_to_do, Toast.LENGTH_LONG).show(); + }else if( finalDoAction == ShowAccountActivity.action.FOLLOW){ + account_follow.setEnabled(false); + new PostActionAsyncTask(getApplicationContext(), API.StatusAction.FOLLOW, accountId, RemoteFollowActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }else if( finalDoAction == ShowAccountActivity.action.UNFOLLOW){ + account_follow.setEnabled(false); + new PostActionAsyncTask(getApplicationContext(), API.StatusAction.UNFOLLOW, accountId, RemoteFollowActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }else if( finalDoAction == ShowAccountActivity.action.UNBLOCK){ + account_follow.setEnabled(false); + new PostActionAsyncTask(getApplicationContext(), API.StatusAction.UNBLOCK, accountId, RemoteFollowActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + } + }); + } + + @Override + public void onPostAction(int statusCode, API.StatusAction statusAction, String userId, Error error) { + if( error != null){ + final SharedPreferences sharedpreferences = 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(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show(); + return; + } + Helper.manageMessageStatusCode(getApplicationContext(), statusCode, statusAction); + new RetrieveRelationshipAsyncTask(getApplicationContext(), userId,RemoteFollowActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } }