1414import android .graphics .drawable .LayerDrawable ;
1515import android .net .Uri ;
1616import android .os .Bundle ;
17+ import android .view .View ;
1718
1819import androidx .annotation .NonNull ;
1920import androidx .fragment .app .DialogFragment ;
2021
2122import com .google .android .material .dialog .MaterialAlertDialogBuilder ;
23+ import com .owncloud .android .lib .resources .users .Status ;
2224
2325import java .util .concurrent .ExecutorService ;
2426import java .util .concurrent .Executors ;
3335import it .niedermann .owncloud .notes .persistence .NotesRepository ;
3436import it .niedermann .owncloud .notes .persistence .entity .Account ;
3537import it .niedermann .owncloud .notes .share .helper .AvatarLoader ;
38+ import it .niedermann .owncloud .notes .shared .util .DisplayUtils ;
3639import it .niedermann .owncloud .notes .util .ActivityExtensionsKt ;
3740import kotlin .Unit ;
3841
@@ -47,6 +50,8 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
4750 private DialogAccountSwitcherBinding binding ;
4851 private AccountSwitcherListener accountSwitcherListener ;
4952 private long currentAccountId ;
53+ private UserStatusRepository repository ;
54+ private Status currentStatus ;
5055 private final ExecutorService executor = Executors .newSingleThreadExecutor ();
5156
5257 @ Override
@@ -67,6 +72,34 @@ public void onAttach(@NonNull Context context) {
6772 }
6873
6974 repo = NotesRepository .getInstance (requireContext ());
75+ initRepositoryAndFetchCurrentStatus ();
76+ }
77+
78+ private void initRepositoryAndFetchCurrentStatus () {
79+ ActivityExtensionsKt .ssoAccount (requireActivity (), account -> {
80+ if (account != null ) {
81+ repository = new UserStatusRepository (requireContext (), account );
82+ } else {
83+ DisplayUtils .showSnackMessage (requireView (), R .string .account_switch_dialog_status_fetching_error_message );
84+ }
85+ executor .execute (() -> {
86+ currentStatus = repository .fetchUserStatus ();
87+ requireActivity ().runOnUiThread (() -> {
88+ final var message = currentStatus .getMessage ();
89+ if (message != null ) {
90+ binding .accountStatus .setVisibility (View .VISIBLE );
91+ binding .accountStatus .setText (message );
92+ }
93+
94+ final var emoji = currentStatus .getIcon ();
95+ if (emoji != null ) {
96+ binding .accountStatusEmoji .setVisibility (View .VISIBLE );
97+ binding .accountStatusEmoji .setText (emoji );
98+ }
99+ });
100+ });
101+ return Unit .INSTANCE ;
102+ });
70103 }
71104
72105 @ NonNull
@@ -128,25 +161,14 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
128161 }
129162
130163 private void showBottomSheetDialog (@ NonNull AccountSwitcherBottomSheetTag tag ) {
131- ActivityExtensionsKt .ssoAccount (requireActivity (), account -> {
132- if (account == null ) {
133- return Unit .INSTANCE ;
134- }
135- final var repository = new UserStatusRepository (requireContext (), account );
136- executor .execute (() -> {
137- final var currentStatus = repository .fetchUserStatus ();
138- if (currentStatus == null ) {
139- return ;
140- }
164+ if (repository == null || currentStatus == null ) {
165+ DisplayUtils .showSnackMessage (requireView (), R .string .account_switch_dialog_status_fetching_error_message );
166+ return ;
167+ }
141168
142- requireActivity ().runOnUiThread (() -> {
143- final var fragment = tag .fragment (repository , currentStatus );
144- fragment .show (requireActivity ().getSupportFragmentManager (), tag .name ());
145- dismiss ();
146- });
147- });
148- return Unit .INSTANCE ;
149- });
169+ final var fragment = tag .fragment (repository , currentStatus );
170+ fragment .show (requireActivity ().getSupportFragmentManager (), tag .name ());
171+ dismiss ();
150172 }
151173
152174 public static DialogFragment newInstance (long currentAccountId ) {
0 commit comments