diff --git a/res/layout/account_item.xml b/res/layout/account_item.xml
index 9094173a6888..9ce8c581a4e9 100644
--- a/res/layout/account_item.xml
+++ b/res/layout/account_item.xml
@@ -43,7 +43,7 @@
android:textColor="@color/textColor"
android:textSize="@dimen/two_line_primary_text_size"/>
-
-
+ android:background="?android:selectableItemBackground"
+ android:src="@drawable/ic_action_delete"/>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b49a268f1a32..749e1f2f6fa3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -105,6 +105,7 @@
About
Change password
Remove account
+ Delete account %s?\n\nDeleting cannot be undone.
Create account
Upload from …
Folder name
diff --git a/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java b/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java
index 98bfdd47ca8a..16637847ff0f 100644
--- a/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java
+++ b/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java
@@ -24,13 +24,19 @@
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.OperationCanceledException;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
import android.content.ComponentName;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.view.MenuItem;
import android.widget.ListView;
@@ -115,8 +121,7 @@ public void onBackPressed() {
resultIntent.putExtra(KEY_ACCOUNT_LIST_CHANGED, hasAccountListChanged());
resultIntent.putExtra(KEY_CURRENT_ACCOUNT_CHANGED, hasCurrentAccountChanged());
setResult(RESULT_OK, resultIntent);
-
- finish();
+
super.onBackPressed();
}
@@ -164,7 +169,7 @@ private void initializeComponentGetters() {
*/
private ArrayList getAccountListItems() {
Account[] accountList = AccountManager.get(this).getAccountsByType(MainApp.getAccountType());
- ArrayList adapterAccountList = new ArrayList(accountList.length);
+ ArrayList adapterAccountList = new ArrayList<>(accountList.length);
for (Account account : accountList) {
adapterAccountList.add(new AccountListItem(account));
}
@@ -191,11 +196,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
@Override
- public void removeAccount(Account account) {
- AccountManager am = (AccountManager) this.getSystemService(ACCOUNT_SERVICE);
+ public void performAccountRemoval(Account account) {
+ AccountRemovalConfirmationDialog dialog = AccountRemovalConfirmationDialog.newInstance(account);
mAccountName = account.name;
- am.removeAccount(account, ManageAccountsActivity.this, mHandler);
- Log_OC.d(TAG, "Remove an account " + account.name);
+ dialog.show(getFragmentManager(), "dialog");
}
@Override
@@ -267,7 +271,7 @@ public void run(AccountManagerFuture future) {
}
mAccountListAdapter = new AccountListAdapter(this, getAccountListItems());
- mAccountListAdapter.notifyDataSetChanged();
+ mListView.setAdapter(mAccountListAdapter);
}
}
@@ -285,6 +289,8 @@ protected void onDestroy() {
super.onDestroy();
}
+ public Handler getHandler() { return mHandler; }
+
// Methods for ComponentsGetter
@Override
public FileDownloader.FileDownloaderBinder getFileDownloaderBinder() {
@@ -343,4 +349,49 @@ public void onServiceDisconnected(ComponentName component) {
}
}
}
+
+ public static class AccountRemovalConfirmationDialog extends DialogFragment {
+
+ private static final String ARG__ACCOUNT = "account";
+
+ private Account mAccount;
+
+ public static AccountRemovalConfirmationDialog newInstance(Account account) {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(ARG__ACCOUNT, account);
+
+ AccountRemovalConfirmationDialog dialog = new AccountRemovalConfirmationDialog();
+ dialog.setArguments(bundle);
+
+ return dialog;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mAccount = getArguments().getParcelable(ARG__ACCOUNT);
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
+ .setTitle(R.string.delete_account)
+ .setMessage(getResources().getString(R.string.delete_account_warning, mAccount.name))
+ .setIcon(R.drawable.ic_warning)
+ .setPositiveButton(R.string.common_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ AccountManager am = (AccountManager) getActivity().getSystemService(ACCOUNT_SERVICE);
+ am.removeAccount(
+ mAccount,
+ (ManageAccountsActivity)getActivity(),
+ ((ManageAccountsActivity)getActivity()).getHandler());
+ }
+ })
+ .setNegativeButton(R.string.common_cancel, null)
+ .create();
+ }
+ }
}
diff --git a/src/com/owncloud/android/ui/adapter/AccountListAdapter.java b/src/com/owncloud/android/ui/adapter/AccountListAdapter.java
index de3ee1f9d2b9..c74dca4a81d5 100644
--- a/src/com/owncloud/android/ui/adapter/AccountListAdapter.java
+++ b/src/com/owncloud/android/ui/adapter/AccountListAdapter.java
@@ -20,19 +20,17 @@
package com.owncloud.android.ui.adapter;
import android.accounts.Account;
-import android.content.Context;
import android.graphics.drawable.Drawable;
-import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
+import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.ui.TextDrawable;
import com.owncloud.android.ui.activity.BaseActivity;
import com.owncloud.android.ui.activity.ManageAccountsActivity;
import com.owncloud.android.utils.DisplayUtils;
@@ -57,10 +55,6 @@ public AccountListAdapter(BaseActivity context, List values) {
this.mAccountAvatarRadiusDimension = context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius);
}
- public void setAccountList(List values) {
- this.mValues = values;
- }
-
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
AccountViewHolderItem viewHolder;
@@ -72,8 +66,8 @@ public View getView(final int position, View convertView, ViewGroup parent) {
viewHolder = new AccountViewHolderItem();
viewHolder.textViewItem = (TextView) convertView.findViewById(R.id.user_name);
viewHolder.imageViewItem = (ImageView) convertView.findViewById(R.id.user_icon);
- viewHolder.passwordButtonItem = (ImageView) convertView.findViewById(R.id.passwordButton);
- viewHolder.removeButtonItem = (ImageView) convertView.findViewById(R.id.removeButton);
+ viewHolder.passwordButtonItem = (ImageButton) convertView.findViewById(R.id.passwordButton);
+ viewHolder.removeButtonItem = (ImageButton) convertView.findViewById(R.id.removeButton);
convertView.setTag(viewHolder);
} else {
@@ -111,9 +105,7 @@ public void onClick(View v) {
viewHolder.removeButtonItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- mListener.removeAccount(mValues.get(position).getAccount());
- mValues.remove(position);
- AccountListAdapter.this.notifyDataSetChanged();
+ mListener.performAccountRemoval(mValues.get(position).getAccount());
}
});
} // create add account action item
@@ -152,7 +144,7 @@ public boolean shouldCallGeneratedCallback(String tag, Object callContext) {
* Listener interface for Activities using the {@link AccountListAdapter}
*/
public interface AccountListAdapterListener {
- void removeAccount(Account account);
+ void performAccountRemoval(Account account);
void changePasswordOfAccount(Account account);
@@ -166,7 +158,7 @@ static class AccountViewHolderItem {
TextView textViewItem;
ImageView imageViewItem;
- ImageView passwordButtonItem;
- ImageView removeButtonItem;
+ ImageButton passwordButtonItem;
+ ImageButton removeButtonItem;
}
}