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 ;
24+ import com .owncloud .android .lib .resources .users .StatusType ;
25+
26+ import java .util .concurrent .ExecutorService ;
27+ import java .util .concurrent .Executors ;
2228
2329import it .niedermann .owncloud .notes .NotesApplication ;
2430import it .niedermann .owncloud .notes .R ;
31+ import it .niedermann .owncloud .notes .accountswitcher .adapter .accountSwitcher .AccountSwitcherAdapter ;
32+ import it .niedermann .owncloud .notes .accountswitcher .bottomSheet .AccountSwitcherBottomSheetTag ;
33+ import it .niedermann .owncloud .notes .accountswitcher .repository .UserStatusRepository ;
2534import it .niedermann .owncloud .notes .branding .BrandedDialogFragment ;
2635import it .niedermann .owncloud .notes .branding .BrandingUtil ;
2736import it .niedermann .owncloud .notes .databinding .DialogAccountSwitcherBinding ;
2837import it .niedermann .owncloud .notes .manageaccounts .ManageAccountsActivity ;
2938import it .niedermann .owncloud .notes .persistence .NotesRepository ;
3039import it .niedermann .owncloud .notes .persistence .entity .Account ;
3140import it .niedermann .owncloud .notes .share .helper .AvatarLoader ;
41+ import it .niedermann .owncloud .notes .shared .util .DisplayUtils ;
42+ import it .niedermann .owncloud .notes .util .ActivityExtensionsKt ;
43+ import it .niedermann .owncloud .notes .util .StatusTypeExtensionsKt ;
44+ import kotlin .Unit ;
3245
3346/**
3447 * Displays all available {@link Account} entries and provides basic operations for them, like adding or switching
@@ -41,6 +54,9 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
4154 private DialogAccountSwitcherBinding binding ;
4255 private AccountSwitcherListener accountSwitcherListener ;
4356 private long currentAccountId ;
57+ private UserStatusRepository repository ;
58+ private Status currentStatus ;
59+ private final ExecutorService executor = Executors .newSingleThreadExecutor ();
4460
4561 @ Override
4662 public void onAttach (@ NonNull Context context ) {
@@ -60,6 +76,38 @@ public void onAttach(@NonNull Context context) {
6076 }
6177
6278 repo = NotesRepository .getInstance (requireContext ());
79+ initRepositoryAndFetchCurrentStatus ();
80+ }
81+
82+ private void initRepositoryAndFetchCurrentStatus () {
83+ ActivityExtensionsKt .ssoAccount (requireActivity (), account -> {
84+ if (account != null ) {
85+ repository = new UserStatusRepository (requireContext (), account );
86+ } else {
87+ DisplayUtils .showSnackMessage (requireView (), R .string .account_switch_dialog_status_fetching_error_message );
88+ }
89+ executor .execute (() -> {
90+ currentStatus = repository .fetchUserStatus ();
91+ requireActivity ().runOnUiThread (() -> {
92+ final var message = currentStatus .getMessage ();
93+ if (message != null ) {
94+ binding .accountStatus .setVisibility (View .VISIBLE );
95+ binding .accountStatus .setText (message );
96+ }
97+
98+ final var emoji = currentStatus .getIcon ();
99+ if (emoji != null ) {
100+ binding .accountStatusEmoji .setVisibility (View .VISIBLE );
101+ binding .accountStatusEmoji .setText (emoji );
102+ } else {
103+ final var status = currentStatus .getStatus ();
104+ binding .accountStatusIcon .setVisibility (View .VISIBLE );
105+ binding .accountStatusIcon .setImageResource (StatusTypeExtensionsKt .getImageResource (status ));
106+ }
107+ });
108+ });
109+ return Unit .INSTANCE ;
110+ });
63111 }
64112
65113 @ NonNull
@@ -76,6 +124,14 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
76124 AvatarLoader .INSTANCE .load (requireContext (), binding .currentAccountItemAvatar , currentLocalAccount );
77125 binding .accountLayout .setOnClickListener ((v ) -> dismiss ());
78126
127+ binding .onlineStatus .setOnClickListener (v -> {
128+ showBottomSheetDialog (AccountSwitcherBottomSheetTag .ONLINE_STATUS );
129+ });
130+
131+ binding .statusMessage .setOnClickListener (v -> {
132+ showBottomSheetDialog (AccountSwitcherBottomSheetTag .MESSAGE_STATUS );
133+ });
134+
79135 final var adapter = new AccountSwitcherAdapter ((localAccount -> {
80136 accountSwitcherListener .onAccountChosen (localAccount );
81137 dismiss ();
@@ -112,6 +168,17 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
112168 return builder .create ();
113169 }
114170
171+ private void showBottomSheetDialog (@ NonNull AccountSwitcherBottomSheetTag tag ) {
172+ if (repository == null || currentStatus == null ) {
173+ DisplayUtils .showSnackMessage (requireView (), R .string .account_switch_dialog_status_fetching_error_message );
174+ return ;
175+ }
176+
177+ final var fragment = tag .fragment (repository , currentStatus );
178+ fragment .show (requireActivity ().getSupportFragmentManager (), tag .name ());
179+ dismiss ();
180+ }
181+
115182 public static DialogFragment newInstance (long currentAccountId ) {
116183 final var dialog = new AccountSwitcherDialog ();
117184
0 commit comments