MultipleAccountsDialog.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. *
  3. * Nextcloud Android client application
  4. *
  5. * @author Tobias Kaminsky
  6. * @author Chris Narkiewicz <hello@ezaquarii.com>
  7. *
  8. * Copyright (C) 2019 Tobias Kaminsky
  9. * Copyright (C) 2019 Nextcloud GmbH
  10. * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  11. *
  12. * This program is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU Affero General Public License as published by
  14. * the Free Software Foundation, either version 3 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU Affero General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU Affero General Public License
  23. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  24. *
  25. */
  26. package com.owncloud.android.ui.dialog;
  27. import android.annotation.SuppressLint;
  28. import android.app.Activity;
  29. import android.app.Dialog;
  30. import android.graphics.drawable.Drawable;
  31. import android.os.Bundle;
  32. import android.view.LayoutInflater;
  33. import android.view.View;
  34. import android.view.Window;
  35. import android.view.WindowManager;
  36. import com.nextcloud.client.account.User;
  37. import com.nextcloud.client.account.UserAccountManager;
  38. import com.nextcloud.client.di.Injectable;
  39. import com.owncloud.android.R;
  40. import com.owncloud.android.ui.activity.ReceiveExternalFilesActivity;
  41. import com.owncloud.android.ui.adapter.UserListAdapter;
  42. import com.owncloud.android.ui.adapter.UserListItem;
  43. import com.owncloud.android.utils.ThemeUtils;
  44. import java.util.ArrayList;
  45. import java.util.List;
  46. import javax.inject.Inject;
  47. import androidx.annotation.NonNull;
  48. import androidx.appcompat.app.AlertDialog;
  49. import androidx.core.content.ContextCompat;
  50. import androidx.core.graphics.drawable.DrawableCompat;
  51. import androidx.fragment.app.DialogFragment;
  52. import androidx.recyclerview.widget.LinearLayoutManager;
  53. import androidx.recyclerview.widget.RecyclerView;
  54. import butterknife.BindView;
  55. import butterknife.ButterKnife;
  56. public class MultipleAccountsDialog extends DialogFragment implements Injectable, UserListAdapter.ClickListener {
  57. @BindView(R.id.list)
  58. RecyclerView listView;
  59. @Inject UserAccountManager accountManager;
  60. @NonNull
  61. @Override
  62. public Dialog onCreateDialog(Bundle savedInstanceState) {
  63. Activity activity = getActivity();
  64. if (activity == null) {
  65. throw new IllegalArgumentException("Activity may not be null");
  66. }
  67. int accentColor = ThemeUtils.primaryAccentColor(getContext());
  68. // Inflate the layout for the dialog
  69. LayoutInflater inflater = activity.getLayoutInflater();
  70. @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.multiple_accounts, null);
  71. ButterKnife.bind(this, view);
  72. final ReceiveExternalFilesActivity parent = (ReceiveExternalFilesActivity) getActivity();
  73. AlertDialog.Builder builder = new AlertDialog.Builder(parent);
  74. Drawable tintedCheck = DrawableCompat.wrap(ContextCompat.getDrawable(parent, R.drawable.account_circle_white));
  75. int tint = ThemeUtils.primaryColor(getContext());
  76. DrawableCompat.setTint(tintedCheck, tint);
  77. UserListAdapter adapter = new UserListAdapter(parent,
  78. accountManager,
  79. getAccountListItems(),
  80. tintedCheck,
  81. this,
  82. false, false);
  83. listView.setHasFixedSize(true);
  84. listView.setLayoutManager(new LinearLayoutManager(activity));
  85. listView.setAdapter(adapter);
  86. builder.setView(view)
  87. .setTitle(ThemeUtils.getColoredTitle(getResources().getString(R.string.common_choose_account), accentColor));
  88. Dialog dialog = builder.create();
  89. Window window = dialog.getWindow();
  90. if (window != null) {
  91. window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
  92. }
  93. return dialog;
  94. }
  95. /**
  96. * creates the account list items list including the add-account action in case
  97. * multiaccount_support is enabled.
  98. *
  99. * @return list of account list items
  100. */
  101. private List<UserListItem> getAccountListItems() {
  102. List<User> users = accountManager.getAllUsers();
  103. List<UserListItem> adapterUserList = new ArrayList<>(users.size());
  104. for (User user : users) {
  105. adapterUserList.add(new UserListItem(user));
  106. }
  107. return adapterUserList;
  108. }
  109. @Override
  110. public void onOptionItemClicked(User user, View view) {
  111. // By default, access account if option is clicked
  112. onAccountClicked(user);
  113. }
  114. @Override
  115. public void onAccountClicked(User user) {
  116. final ReceiveExternalFilesActivity parentActivity = (ReceiveExternalFilesActivity) getActivity();
  117. if (parentActivity != null) {
  118. parentActivity.changeAccount(user.toPlatformAccount());
  119. }
  120. dismiss();
  121. }
  122. }