Эх сурвалжийг харах

reuse account manager list adapter for account chooser, put helper method for list names in utils

AndyScherzinger 8 жил өмнө
parent
commit
247bbc11b6

+ 3 - 16
src/com/owncloud/android/ui/activity/ManageAccountsActivity.java

@@ -57,6 +57,7 @@ import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.adapter.AccountListAdapter;
 import com.owncloud.android.ui.adapter.AccountListItem;
 import com.owncloud.android.ui.helpers.FileOperationsHelper;
+import com.owncloud.android.utils.DisplayUtils;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -96,7 +97,7 @@ public class ManageAccountsActivity extends FileActivity
         updateActionBarTitleAndHomeButtonByString(getResources().getString(R.string.prefs_manage_accounts));
 
         Account[] accountList = AccountManager.get(this).getAccountsByType(MainApp.getAccountType());
-        mOriginalAccounts = toAccountNameSet(accountList);
+        mOriginalAccounts = DisplayUtils.toAccountNameSet(accountList);
         mOriginalCurrentAccount = AccountUtils.getCurrentOwnCloudAccount(this).name;
 
         setAccount(AccountUtils.getCurrentOwnCloudAccount(this));
@@ -116,20 +117,6 @@ public class ManageAccountsActivity extends FileActivity
         initializeComponentGetters();
     }
 
-    /**
-     * converts an array of accounts into a set of account names.
-     *
-     * @param accountList the account array
-     * @return set of account names
-     */
-    private Set<String> toAccountNameSet(Account[] accountList) {
-        Set<String> actualAccounts = new HashSet<>(accountList.length);
-        for (Account account : accountList) {
-            actualAccounts.add(account.name);
-        }
-        return actualAccounts;
-    }
-
     @Override
     public void onBackPressed() {
         Intent resultIntent = new Intent();
@@ -147,7 +134,7 @@ public class ManageAccountsActivity extends FileActivity
      */
     private boolean hasAccountListChanged() {
         Account[] accountList = AccountManager.get(this).getAccountsByType(MainApp.getAccountType());
-        Set<String> actualAccounts = toAccountNameSet(accountList);
+        Set<String> actualAccounts = DisplayUtils.toAccountNameSet(accountList);
         return !mOriginalAccounts.equals(actualAccounts);
     }
 

+ 40 - 15
src/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -35,12 +35,15 @@ import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.Resources.NotFoundException;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.FragmentManager;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.graphics.drawable.DrawableCompat;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AlertDialog.Builder;
@@ -75,13 +78,14 @@ import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.syncadapter.FileSyncAdapter;
+import com.owncloud.android.ui.adapter.AccountListAdapter;
+import com.owncloud.android.ui.adapter.AccountListItem;
 import com.owncloud.android.ui.adapter.UploaderAdapter;
 import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
 import com.owncloud.android.ui.fragment.TaskRetainerFragment;
 import com.owncloud.android.ui.helpers.UriUploader;
-import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.FileStorageUtils;
 
@@ -102,9 +106,10 @@ import java.util.Vector;
 /**
  * This can be used to upload things to an ownCloud instance.
  */
-public class ReceiveExternalFilesActivity extends FileActivity
-        implements OnItemClickListener, android.view.View.OnClickListener,
-    CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener {
+public class ReceiveExternalFilesActivity extends FileActivity implements
+        OnItemClickListener,
+        android.view.View.OnClickListener,
+        CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener {
 
     private static final String TAG = ReceiveExternalFilesActivity.class.getSimpleName();
 
@@ -251,8 +256,8 @@ public class ReceiveExternalFilesActivity extends FileActivity
                     if (android.os.Build.VERSION.SDK_INT >
                         android.os.Build.VERSION_CODES.ECLAIR_MR1) {
                         // using string value since in API7 this
-                        // constatn is not defined
-                        // in API7 < this constatant is defined in
+                        // constant is not defined
+                        // in API7 < this constant is defined in
                         // Settings.ADD_ACCOUNT_SETTINGS
                         // and Settings.EXTRA_AUTHORITIES
                         Intent intent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT);
@@ -261,9 +266,9 @@ public class ReceiveExternalFilesActivity extends FileActivity
                     } else {
                         // since in API7 there is no direct call for
                         // account setup, so we need to
-                        // show our own AccountSetupAcricity, get
+                        // show our own AccountSetupActivity, get
                         // desired results and setup
-                        // everything for ourself
+                        // everything for ourselves
                         Intent intent = new Intent(getActivity().getBaseContext(), AccountAuthenticator.class);
                         startActivityForResult(intent, REQUEST_CODE__SETUP_ACCOUNT);
                     }
@@ -280,19 +285,24 @@ public class ReceiveExternalFilesActivity extends FileActivity
     }
 
     public static class DialogMultipleAccount extends DialogFragment {
+        private AccountListAdapter mAccountListAdapter;
+        private Drawable mTintedCheck;
+
         @NonNull
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final ReceiveExternalFilesActivity parent = (ReceiveExternalFilesActivity) getActivity();
             AlertDialog.Builder builder = new Builder(parent);
-            Account accounts[] = parent.mAccountManager.getAccountsByType(MainApp.getAccountType());
-            CharSequence dialogItems[] = new CharSequence[accounts.length];
-            for (int i = 0; i < dialogItems.length; ++i) {
-                dialogItems[i] = DisplayUtils.getAccountNameDisplayText(
-                        parent, accounts[i], accounts[i].name, DisplayUtils.convertIdn(accounts[i].name, false));
-            }
+
+            mTintedCheck = DrawableCompat.wrap(ContextCompat.getDrawable(parent,
+                    R.drawable.ic_account_circle_white_18dp));
+            int tint = ContextCompat.getColor(parent, R.color.primary);
+            DrawableCompat.setTint(mTintedCheck, tint);
+
+            mAccountListAdapter = new AccountListAdapter(parent, getAccountListItems(parent), mTintedCheck);
+
             builder.setTitle(R.string.common_choose_account);
-            builder.setItems(dialogItems, new OnClickListener() {
+            builder.setAdapter(mAccountListAdapter, new OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final ReceiveExternalFilesActivity parent = (ReceiveExternalFilesActivity) getActivity();
@@ -307,6 +317,21 @@ public class ReceiveExternalFilesActivity extends FileActivity
             return builder.create();
         }
 
+        /**
+         * creates the account list items list including the add-account action in case multiaccount_support is enabled.
+         *
+         * @return list of account list items
+         */
+        private ArrayList<AccountListItem> getAccountListItems(ReceiveExternalFilesActivity activity) {
+            Account[] accountList = activity.mAccountManager.getAccountsByType(MainApp.getAccountType());
+            ArrayList<AccountListItem> adapterAccountList = new ArrayList<>(accountList.length);
+            for (Account account : accountList) {
+                adapterAccountList.add(new AccountListItem(account));
+            }
+
+            return adapterAccountList;
+        }
+
         public void onCancel(DialogInterface dialog) {
             super.onCancel(dialog);
             final ReceiveExternalFilesActivity parent = (ReceiveExternalFilesActivity) getActivity();

+ 26 - 17
src/com/owncloud/android/ui/adapter/AccountListAdapter.java

@@ -53,7 +53,9 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
         super(context, -1, values);
         this.mContext = context;
         this.mValues = values;
-        this.mListener = (AccountListAdapterListener) context;
+        if (context instanceof AccountListAdapterListener) {
+            this.mListener = (AccountListAdapterListener) context;
+        }
         this.mAccountAvatarRadiusDimension = context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius);
         this.mTintedCheck = tintedCheck;
     }
@@ -75,6 +77,11 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
             viewHolder.passwordButtonItem = (ImageView) convertView.findViewById(R.id.passwordButton);
             viewHolder.removeButtonItem = (ImageView) convertView.findViewById(R.id.removeButton);
 
+            if(mListener == null) {
+                viewHolder.passwordButtonItem.setVisibility(View.GONE);
+                viewHolder.removeButtonItem.setVisibility(View.GONE);
+            }
+
             convertView.setTag(viewHolder);
         } else {
             viewHolder = (AccountViewHolderItem) convertView.getTag();
@@ -94,7 +101,7 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
                 setupListeners(position, viewHolder);
 
             } // create add account action item
-            else if (AccountListItem.TYPE_ACTION_ADD == accountListItem.getType()) {
+            else if (AccountListItem.TYPE_ACTION_ADD == accountListItem.getType() && mListener != null) {
                 return setupAddAccountListItem(parent);
             }
         }
@@ -125,21 +132,23 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
     }
 
     private void setupListeners(final int position, AccountViewHolderItem viewHolder) {
-        /// bind listener to change password
-        viewHolder.passwordButtonItem.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mListener.changePasswordOfAccount(mValues.get(position).getAccount());
-            }
-        });
-
-        /// bind listener to remove account
-        viewHolder.removeButtonItem.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mListener.performAccountRemoval(mValues.get(position).getAccount());
-            }
-        });
+        if (mListener != null) {
+            /// bind listener to change password
+            viewHolder.passwordButtonItem.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    mListener.changePasswordOfAccount(mValues.get(position).getAccount());
+                }
+            });
+
+            /// bind listener to remove account
+            viewHolder.removeButtonItem.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    mListener.performAccountRemoval(mValues.get(position).getAccount());
+                }
+            });
+        }
     }
 
     private void setCurrentlyActiveState(AccountViewHolderItem viewHolder, Account account) {

+ 16 - 0
src/com/owncloud/android/utils/DisplayUtils.java

@@ -61,7 +61,9 @@ import java.net.IDN;
 import java.text.DateFormat;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * A helper class for UI/display related operations.
@@ -208,6 +210,20 @@ public class DisplayUtils {
         }
     }
 
+    /**
+     * converts an array of accounts into a set of account names.
+     *
+     * @param accountList the account array
+     * @return set of account names
+     */
+    public static Set<String> toAccountNameSet(Account[] accountList) {
+        Set<String> actualAccounts = new HashSet<>(accountList.length);
+        for (Account account : accountList) {
+            actualAccounts.add(account.name);
+        }
+        return actualAccounts;
+    }
+
     /**
      * calculates the relative time string based on the given modificaion timestamp.
      *