Loading app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +13 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -497,7 +507,9 @@ public class ProfileActivity extends BaseActivity { }); } }); if (accountInstance != null) { accountsVM.lookUpAccount(accountInstance, account.username).observe(ProfileActivity.this, this::updateViewWithNewData); } } Loading app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java +6 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,12 @@ public interface MastodonAccountsService { @Path("id") String id ); //Get Account @GET("accounts/lookup") Call<Account> lookUpAccount( @Query("acct") String acct ); //Get Account statuses @GET("accounts/{id}/statuses") Call<List<Status>> getAccountStatuses( Loading app/src/main/java/app/fedilab/android/client/entities/api/Account.java +28 −0 Original line number Diff line number Diff line Loading @@ -73,12 +73,40 @@ public class Account implements Serializable { public List<Field> 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<View> viewWeakReference) { Loading app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java +30 −0 Original line number Diff line number Diff line Loading @@ -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<Account> lookUpAccount(@NonNull String instance, @NonNull String acct) { accountMutableLiveData = new MutableLiveData<>(); MastodonAccountsService mastodonAccountsService = init(instance); new Thread(() -> { Account account = null; Call<Account> accountCall = mastodonAccountsService.lookUpAccount(acct); if (accountCall != null) { try { Response<Account> 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} Loading app/src/main/res/layout/activity_profile.xml +28 −7 Original line number Diff line number Diff line Loading @@ -142,18 +142,39 @@ app:layout_constraintTop_toBottomOf="@id/avatar_container" tools:text="@tools:sample/first_names" /> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/account_un_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:gravity="center" app:layout_constraintEnd_toEndOf="@id/banner_container" app:layout_constraintStart_toStartOf="@id/banner_container" app:layout_constraintTop_toBottomOf="@id/account_dn"> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/account_un" style="@style/TextAppearance.AppCompat.Caption" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:singleLine="true" app:layout_constraintEnd_toEndOf="@id/banner_container" app:layout_constraintStart_toStartOf="@id/banner_container" app:layout_constraintTop_toBottomOf="@id/account_dn" tools:text="\@username\@instance.test" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/account_role" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="5dp" android:background="@drawable/blue_border" android:textColor="?colorPrimary" android:visibility="gone" tools:text="Owner" tools:visibility="visible" /> </androidx.appcompat.widget.LinearLayoutCompat> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/names_container" android:layout_width="wrap_content" Loading @@ -163,7 +184,7 @@ android:orientation="vertical" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/account_un"> app:layout_constraintTop_toBottomOf="@+id/account_un_container"> <androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content" Loading Loading
app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +13 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -497,7 +507,9 @@ public class ProfileActivity extends BaseActivity { }); } }); if (accountInstance != null) { accountsVM.lookUpAccount(accountInstance, account.username).observe(ProfileActivity.this, this::updateViewWithNewData); } } Loading
app/src/main/java/app/fedilab/android/client/endpoints/MastodonAccountsService.java +6 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,12 @@ public interface MastodonAccountsService { @Path("id") String id ); //Get Account @GET("accounts/lookup") Call<Account> lookUpAccount( @Query("acct") String acct ); //Get Account statuses @GET("accounts/{id}/statuses") Call<List<Status>> getAccountStatuses( Loading
app/src/main/java/app/fedilab/android/client/entities/api/Account.java +28 −0 Original line number Diff line number Diff line Loading @@ -73,12 +73,40 @@ public class Account implements Serializable { public List<Field> 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<View> viewWeakReference) { Loading
app/src/main/java/app/fedilab/android/viewmodel/mastodon/AccountsVM.java +30 −0 Original line number Diff line number Diff line Loading @@ -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<Account> lookUpAccount(@NonNull String instance, @NonNull String acct) { accountMutableLiveData = new MutableLiveData<>(); MastodonAccountsService mastodonAccountsService = init(instance); new Thread(() -> { Account account = null; Call<Account> accountCall = mastodonAccountsService.lookUpAccount(acct); if (accountCall != null) { try { Response<Account> 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} Loading
app/src/main/res/layout/activity_profile.xml +28 −7 Original line number Diff line number Diff line Loading @@ -142,18 +142,39 @@ app:layout_constraintTop_toBottomOf="@id/avatar_container" tools:text="@tools:sample/first_names" /> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/account_un_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:gravity="center" app:layout_constraintEnd_toEndOf="@id/banner_container" app:layout_constraintStart_toStartOf="@id/banner_container" app:layout_constraintTop_toBottomOf="@id/account_dn"> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/account_un" style="@style/TextAppearance.AppCompat.Caption" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:singleLine="true" app:layout_constraintEnd_toEndOf="@id/banner_container" app:layout_constraintStart_toStartOf="@id/banner_container" app:layout_constraintTop_toBottomOf="@id/account_dn" tools:text="\@username\@instance.test" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/account_role" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="5dp" android:background="@drawable/blue_border" android:textColor="?colorPrimary" android:visibility="gone" tools:text="Owner" tools:visibility="visible" /> </androidx.appcompat.widget.LinearLayoutCompat> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/names_container" android:layout_width="wrap_content" Loading @@ -163,7 +184,7 @@ android:orientation="vertical" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/account_un"> app:layout_constraintTop_toBottomOf="@+id/account_un_container"> <androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content" Loading