From bd66462968826ca1ab3357d0fa1a061de5596ec9 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 11 Dec 2022 11:36:39 +0100 Subject: [PATCH] Fix issue #617 --- .../android/activities/ProfileActivity.java | 14 +++++++- .../endpoints/MastodonAccountsService.java | 6 ++++ .../android/client/entities/api/Account.java | 28 +++++++++++++++ .../viewmodel/mastodon/AccountsVM.java | 30 ++++++++++++++++ app/src/main/res/layout/activity_profile.xml | 35 +++++++++++++++---- 5 files changed, 105 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java index 5c34875e..ce355124 100644 --- a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java @@ -188,6 +188,16 @@ public class ProfileActivity extends BaseActivity { LocalBroadcastManager.getInstance(ProfileActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); } + + private void updateViewWithNewData(Account account) { + if (account != null) { + if (account.role != null && account.role.highlighted) { + binding.accountRole.setText(account.role.name); + binding.accountRole.setVisibility(View.VISIBLE); + } + } + } + private void initializeView(Account account) { SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ProfileActivity.this); if (account == null) { @@ -497,7 +507,9 @@ public class ProfileActivity extends BaseActivity { }); } }); - + if (accountInstance != null) { + accountsVM.lookUpAccount(accountInstance, account.username).observe(ProfileActivity.this, this::updateViewWithNewData); + } } diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java index a2ec0d5f..398c43dc 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java @@ -105,6 +105,12 @@ public interface MastodonAccountsService { @Path("id") String id ); + //Get Account + @GET("accounts/lookup") + Call lookUpAccount( + @Query("acct") String acct + ); + //Get Account statuses @GET("accounts/{id}/statuses") Call> getAccountStatuses( diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Account.java b/app/src/main/java/app/fedilab/android/client/entities/api/Account.java index 7a2bd1f2..ae0b71ae 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/api/Account.java +++ b/app/src/main/java/app/fedilab/android/client/entities/api/Account.java @@ -73,12 +73,40 @@ public class Account implements Serializable { public List fields; @SerializedName("suspended") public boolean suspended; + @SerializedName("limited") + public boolean limited; @SerializedName("discoverable") public boolean discoverable; + @SerializedName("group") + public boolean group; @SerializedName("mute_expires_at") public Date mute_expires_at; @SerializedName("moved") public Account moved; + @SerializedName("role") + public Role role; + + + public static class Role implements Serializable { + @SerializedName("id") + public String id; + @SerializedName("name") + public String name; + @SerializedName("color") + public String color; + @SerializedName("position") + public int position; + @SerializedName("permissions") + public int permissions; + @SerializedName("highlighted") + public boolean highlighted; + @SerializedName("created_at") + public Date created_at; + @SerializedName("updated_at") + public Date updated_at; + } + + public transient RelationShip relationShip; public synchronized Spannable getSpanDisplayName(Context context, WeakReference viewWeakReference) { diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java index 1d640b2b..5d4e17cd 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java @@ -296,6 +296,36 @@ public class AccountsVM extends AndroidViewModel { return accountMutableLiveData; } + + /** + * @param acct The acct of the account + * @return {@link LiveData} containing an {@link Account} + */ + public LiveData lookUpAccount(@NonNull String instance, @NonNull String acct) { + accountMutableLiveData = new MutableLiveData<>(); + MastodonAccountsService mastodonAccountsService = init(instance); + new Thread(() -> { + Account account = null; + Call accountCall = mastodonAccountsService.lookUpAccount(acct); + if (accountCall != null) { + + try { + Response accountResponse = accountCall.execute(); + if (accountResponse.isSuccessful()) { + account = accountResponse.body(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + Account finalAccount = account; + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> accountMutableLiveData.setValue(finalAccount); + mainHandler.post(myRunnable); + }).start(); + return accountMutableLiveData; + } + /** * @param id The id of the account * @return {@link LiveData} containing an {@link Account} diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index 523b390d..7f3b6ac4 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -142,17 +142,38 @@ app:layout_constraintTop_toBottomOf="@id/avatar_container" tools:text="@tools:sample/first_names" /> - + app:layout_constraintTop_toBottomOf="@id/account_dn"> + + + + + + + app:layout_constraintTop_toBottomOf="@+id/account_un_container">