From 098cf7dd46b936c7018410f3df5d8a8a85c831e5 Mon Sep 17 00:00:00 2001 From: Bartosz Przybylski Date: Sun, 10 Jul 2016 16:47:02 +0200 Subject: [PATCH 1/5] Add confirmation dialog on account deletion --- res/layout/account_item.xml | 6 +- res/values/strings.xml | 1 + .../ui/activity/ManageAccountsActivity.java | 63 +++++++++++++++++-- .../ui/adapter/AccountListAdapter.java | 22 +++---- 4 files changed, 69 insertions(+), 23 deletions(-) diff --git a/res/layout/account_item.xml b/res/layout/account_item.xml index 9094173a6888..9e32ced50f33 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"/> - - \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index b49a268f1a32..226a38066c9c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -105,6 +105,7 @@ About Change password Remove account + Delete account %s? Deleting 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..653a8a32f58a 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(); } @@ -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 @@ -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; } } From 3f952fad30422b6479b1fc545a797b4afd27e853 Mon Sep 17 00:00:00 2001 From: Bartosz Przybylski Date: Sun, 10 Jul 2016 17:09:59 +0200 Subject: [PATCH 2/5] Update account list adapter, just notifying adapter makes no sense --- .../owncloud/android/ui/activity/ManageAccountsActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java b/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java index 653a8a32f58a..16637847ff0f 100644 --- a/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java +++ b/src/com/owncloud/android/ui/activity/ManageAccountsActivity.java @@ -169,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)); } @@ -271,7 +271,7 @@ public void run(AccountManagerFuture future) { } mAccountListAdapter = new AccountListAdapter(this, getAccountListItems()); - mAccountListAdapter.notifyDataSetChanged(); + mListView.setAdapter(mAccountListAdapter); } } From 6ad28b52509e0e948e4e70cf3a1baa2ab7c8e403 Mon Sep 17 00:00:00 2001 From: Bartosz Przybylski Date: Mon, 11 Jul 2016 20:26:26 +0200 Subject: [PATCH 3/5] change close icon to delete icon --- res/layout/account_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/layout/account_item.xml b/res/layout/account_item.xml index 9e32ced50f33..58dcbe48df4a 100644 --- a/res/layout/account_item.xml +++ b/res/layout/account_item.xml @@ -65,6 +65,6 @@ android:paddingBottom="@dimen/standard_padding" android:paddingRight="@dimen/standard_padding" android:background="?android:selectableItemBackground" - android:src="@drawable/ic_close"/> + android:src="@android:drawable/ic_menu_delete"/> \ No newline at end of file From 956edc5e7a98567a6183f45549757b7ceb446c30 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 12 Jul 2016 14:38:13 +0200 Subject: [PATCH 4/5] use nextcloud trashbin icon --- res/layout/account_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/layout/account_item.xml b/res/layout/account_item.xml index 58dcbe48df4a..9ce8c581a4e9 100644 --- a/res/layout/account_item.xml +++ b/res/layout/account_item.xml @@ -65,6 +65,6 @@ android:paddingBottom="@dimen/standard_padding" android:paddingRight="@dimen/standard_padding" android:background="?android:selectableItemBackground" - android:src="@android:drawable/ic_menu_delete"/> + android:src="@drawable/ic_action_delete"/> \ No newline at end of file From fca1e0d2fd361a68ba70cae5b508036336a5de5e Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 14 Jul 2016 21:34:37 +0200 Subject: [PATCH 5/5] added line breaks according to CR --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 226a38066c9c..749e1f2f6fa3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -105,7 +105,7 @@ About Change password Remove account - Delete account %s? Deleting cannot be undone. + Delete account %s?\n\nDeleting cannot be undone. Create account Upload from … Folder name