From c3cc43675ba29492532c789bc2ba9670f6f154ca Mon Sep 17 00:00:00 2001 From: danapple Date: Wed, 16 Mar 2011 17:05:41 -0500 Subject: [PATCH] Grey out unavailable accounts. Display a short toast when attempting to open an unavailable account. --- res/layout/accounts_item.xml | 6 ++-- res/values/strings.xml | 2 ++ src/com/fsck/k9/AccountStats.java | 1 + src/com/fsck/k9/activity/Accounts.java | 48 ++++++++++++++++---------- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/res/layout/accounts_item.xml b/res/layout/accounts_item.xml index b25c398a8..8c76ac48e 100644 --- a/res/layout/accounts_item.xml +++ b/res/layout/accounts_item.xml @@ -9,7 +9,8 @@ android:paddingRight="6dip" android:paddingBottom="2dip" android:descendantFocusability="blocksDescendants" - android:gravity="center_vertical" > + android:gravity="center_vertical" + android:background="#ccc" > + android:layout_alignParentLeft="true" + android:background="@android:color/transparent" /> Import succeeded Import failed + Account \"%s\" is unavailable; check storage + diff --git a/src/com/fsck/k9/AccountStats.java b/src/com/fsck/k9/AccountStats.java index d69685e66..146a8c94b 100644 --- a/src/com/fsck/k9/AccountStats.java +++ b/src/com/fsck/k9/AccountStats.java @@ -10,4 +10,5 @@ public class AccountStats implements Serializable { public long size = -1; public int unreadMessageCount = 0; public int flaggedMessageCount = 0; + public boolean available = true; } diff --git a/src/com/fsck/k9/activity/Accounts.java b/src/com/fsck/k9/activity/Accounts.java index 6afd1a4f2..7076615c0 100644 --- a/src/com/fsck/k9/activity/Accounts.java +++ b/src/com/fsck/k9/activity/Accounts.java @@ -32,6 +32,7 @@ import com.fsck.k9.controller.MessagingController; import com.fsck.k9.controller.MessagingListener; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.internet.MimeUtility; +import com.fsck.k9.mail.store.StorageManager; import com.fsck.k9.view.ColorChip; import java.io.FileNotFoundException; @@ -171,6 +172,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC } if (stats == null) { stats = new AccountStats(); // empty stats for unavailable accounts + stats.available = false; } accountStats.put(account.getUuid(), stats); if (account instanceof Account) { @@ -297,6 +299,8 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC restoreAccountStats(icicle); } + + } @@ -319,18 +323,37 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC outState.putSerializable(ACCOUNT_STATS, accountStats); } + private StorageManager.StorageListener storageListener = new StorageManager.StorageListener() + { + + @Override + public void onUnmount(String providerId) + { + refresh(); + } + + @Override + public void onMount(String providerId) + { + refresh(); + } + }; + @Override public void onResume() { super.onResume(); refresh(); MessagingController.getInstance(getApplication()).addListener(mListener); + StorageManager.getInstance(getApplication()).addListener(storageListener); } @Override public void onPause() { super.onPause(); MessagingController.getInstance(getApplication()).removeListener(mListener); + StorageManager.getInstance(getApplication()).removeListener(storageListener); + } private void refresh() { @@ -431,6 +454,10 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC } else { Account realAccount = (Account)account; if (!realAccount.isAvailable(this)) { + String toastText = getString(R.string.account_unavailable, account.getDescription()); + Toast toast = Toast.makeText(getApplication(), toastText, Toast.LENGTH_SHORT); + toast.show(); + Log.i(K9.LOG_TAG, "refusing to open account that is not available"); return false; } @@ -900,24 +927,6 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC } AccountStats stats = accountStats.get(account.getUuid()); - /* - // 20101024/fiouzy: the following code throws NullPointerException because Background is null - - // display unavailable accounts translucent - if (account instanceof Account) { - Account realAccount = (Account) account; - if (realAccount.isAvailable(Accounts.this)) { - holder.email.getBackground().setAlpha(255); - holder.description.getBackground().setAlpha(255); - } else { - holder.email.getBackground().setAlpha(127); - holder.description.getBackground().setAlpha(127); - } - } else { - holder.email.getBackground().setAlpha(255); - holder.description.getBackground().setAlpha(255); - } - */ if (stats != null && account instanceof Account && stats.size >= 0) { holder.email.setText(SizeFormatter.formatSize(Accounts.this, stats.size)); holder.email.setVisibility(View.VISIBLE); @@ -948,6 +957,8 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC holder.flaggedMessageCount.setOnClickListener(new AccountClickListener(account, SearchModifier.FLAGGED)); holder.newMessageCount.setOnClickListener(new AccountClickListener(account, SearchModifier.UNREAD)); + + view.getBackground().setAlpha(stats.available ? 0 : 127); holder.activeIcons.setOnClickListener(new OnClickListener() { public void onClick(View v) { @@ -960,6 +971,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC } else { holder.newMessageCount.setVisibility(View.GONE); holder.flaggedMessageCount.setVisibility(View.GONE); + view.getBackground().setAlpha(0); } if (account instanceof Account) { Account realAccount = (Account)account;