Fixes Issue 1561

The user can elect to have opening a Notification open a
account-specific search for unread messages.
This commit is contained in:
Daniel Applebaum 2010-05-12 05:35:08 +00:00
parent 8b92bc3836
commit 1502660826
6 changed files with 90 additions and 17 deletions

View file

@ -456,6 +456,9 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin
<string name="account_settings_show_combined_label">Show combined Inbox</string>
<string name="account_settings_notify_self_label">Notify for mail I sent</string>
<string name="account_settings_notify_self_summary">Notify even for mail sent from an account identity</string>
<string name="account_settings_notification_opens_unread_label">Notification opens unread messages</string>
<string name="account_settings_notification_opens_unread_summary">Searches for unread messages when Notification is opened</string>
<string name="account_settings_hide_buttons_label">Scroll navigation buttons</string>
<string name="account_settings_hide_buttons_never">Never</string>

View file

@ -195,6 +195,11 @@
android:title="@string/account_settings_notify_sync_label"
android:defaultValue="true"
android:summary="@string/account_settings_notify_sync_summary" />
<CheckBoxPreference
android:key="notification_opens_unread"
android:title="@string/account_settings_notification_opens_unread_label"
android:defaultValue="true"
android:summary="@string/account_settings_notification_opens_unread_summary" />
</PreferenceCategory>

View file

@ -84,6 +84,7 @@ public class Account implements BaseAccount
private String mExpungePolicy = EXPUNGE_IMMEDIATELY;
private int mMaxPushFolders;
private int mIdleRefreshMinutes;
private boolean goToUnreadMessageSearch;
private Map<String, Boolean> compressionMap = new ConcurrentHashMap<String, Boolean>();
private Searchable searchableFolders;
// Tracks if we have sent a notification for this account for
@ -133,6 +134,7 @@ public class Account implements BaseAccount
mAutoExpandFolderName = "INBOX";
mMaxPushFolders = 10;
mChipColor = 0;
goToUnreadMessageSearch = false;
searchableFolders = Searchable.ALL;
@ -190,7 +192,8 @@ public class Account implements BaseAccount
mExpungePolicy = preferences.getPreferences().getString(mUuid + ".expungePolicy", EXPUNGE_IMMEDIATELY);
mMaxPushFolders = preferences.getPreferences().getInt(mUuid + ".maxPushFolders", 10);
goToUnreadMessageSearch = preferences.getPreferences().getBoolean(mUuid + ".goToUnreadMessageSearch",
true);
for (String type : networkTypes)
{
Boolean useCompression = preferences.getPreferences().getBoolean(mUuid + ".useCompression." + type,
@ -354,6 +357,7 @@ public class Account implements BaseAccount
editor.remove(mUuid + ".expungePolicy");
editor.remove(mUuid + ".maxPushFolders");
editor.remove(mUuid + ".searchableFolders");
editor.remove(mUuid + ".goToUnreadMessageSearch");
for (String type : networkTypes)
{
editor.remove(mUuid + ".useCompression." + type);
@ -434,6 +438,7 @@ public class Account implements BaseAccount
editor.putInt(mUuid + ".maxPushFolders", mMaxPushFolders);
editor.putString(mUuid + ".searchableFolders", searchableFolders.name());
editor.putInt(mUuid + ".chipColor", mChipColor);
editor.putBoolean(mUuid + ".goToUnreadMessageSearch", goToUnreadMessageSearch);
for (String type : networkTypes)
{
@ -1152,4 +1157,14 @@ public class Account implements BaseAccount
{
mPushPollOnConnect = pushPollOnConnect;
}
public boolean goToUnreadMessageSearch()
{
return goToUnreadMessageSearch;
}
public void setGoToUnreadMessageSearch(boolean goToUnreadMessageSearch)
{
this.goToUnreadMessageSearch = goToUnreadMessageSearch;
}
}

View file

@ -4520,7 +4520,7 @@ public class MessagingController implements Runnable
Notification notif = new Notification(R.drawable.stat_notify_email_generic, messageNotice, System.currentTimeMillis());
notif.number = unreadMessageCount;
Intent i = FolderList.actionHandleAccountIntent(context, account, account.getAutoExpandFolderName());
Intent i = FolderList.actionHandleNotification(context, account, account.getAutoExpandFolderName());
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
String accountNotice = context.getString(R.string.notification_new_one_account_fmt, unreadMessageCount, account.getDescription());

View file

@ -48,10 +48,7 @@ public class FolderList extends K9ListActivity
private static final String EXTRA_ACCOUNT = "account";
private static final String EXTRA_INITIAL_FOLDER = "initialFolder";
//private static final String STATE_CURRENT_FOLDER = "com.fsck.k9.activity.folderlist_folder";
private static final String EXTRA_CLEAR_NOTIFICATION = "clearNotification";
private static final String EXTRA_FROM_NOTIFICATION = "fromNotification";
private static final boolean REFRESH_REMOTE = true;
@ -227,7 +224,7 @@ public class FolderList extends K9ListActivity
actionHandleAccount(context, account, null);
}
public static Intent actionHandleAccountIntent(Context context, Account account, String initialFolder)
public static Intent actionHandleNotification(Context context, Account account, String initialFolder)
{
Intent intent = new Intent(
Intent.ACTION_VIEW,
@ -236,7 +233,7 @@ public class FolderList extends K9ListActivity
FolderList.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_ACCOUNT, account.getUuid());
intent.putExtra(EXTRA_CLEAR_NOTIFICATION, true);
intent.putExtra(EXTRA_FROM_NOTIFICATION, true);
if (initialFolder != null)
{
@ -245,11 +242,6 @@ public class FolderList extends K9ListActivity
return intent;
}
public static Intent actionHandleAccountIntent(Context context, Account account)
{
return actionHandleAccountIntent(context, account, null);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
@ -290,9 +282,13 @@ public class FolderList extends K9ListActivity
mAccount = Preferences.getPreferences(this).getAccount(accountUuid);
initialFolder = intent.getStringExtra(EXTRA_INITIAL_FOLDER);
if (
initialFolder != null
&& !K9.FOLDER_NONE.equals(initialFolder))
boolean fromNotification = intent.getBooleanExtra(EXTRA_FROM_NOTIFICATION, false);
if (fromNotification && mAccount.goToUnreadMessageSearch())
{
openUnreadSearch(this, mAccount);
finish();
}
else if (initialFolder != null && !K9.FOLDER_NONE.equals(initialFolder))
{
onOpenFolder(initialFolder);
finish();
@ -1496,6 +1492,52 @@ public class FolderList extends K9ListActivity
}
private static Flag[] UNREAD_FLAG_ARRAY = { Flag.SEEN };
private void openUnreadSearch(Context context, final Account account)
{
String description = getString(R.string.search_title, mAccount.getDescription(), getString(R.string.unread_modifier));
SearchSpecification searchSpec = new SearchSpecification()
{
@Override
public String[] getAccountUuids()
{
return new String[] { account.getUuid() };
}
@Override
public Flag[] getForbiddenFlags()
{
return UNREAD_FLAG_ARRAY;
}
@Override
public String getQuery()
{
return "";
}
@Override
public Flag[] getRequiredFlags()
{
return null;
}
@Override
public boolean isIntegrate()
{
return false;
}
@Override
public String[] getFolderNames()
{
return null;
}
};
MessageList.actionHandle(context, description, searchSpec);
}
}

View file

@ -49,6 +49,8 @@ public class AccountSettings extends K9PreferenceActivity
private static final String PREFERENCE_AUTO_EXPAND_FOLDER = "account_setup_auto_expand_folder";
private static final String PREFERENCE_SEARCHABLE_FOLDERS = "searchable_folders";
private static final String PREFERENCE_CHIP_COLOR = "chip_color";
private static final String PREFERENCE_NOTIFICATION_OPENS_UNREAD = "notification_opens_unread";
private Account mAccount;
@ -73,6 +75,7 @@ public class AccountSettings extends K9PreferenceActivity
private Preference mAutoExpandFolder;
private Preference mChipColor;
private boolean mIncomingChanged = false;
private CheckBoxPreference mNotificationOpensUnread;
public static void actionSettings(Context context, Account account)
@ -301,6 +304,10 @@ public class AccountSettings extends K9PreferenceActivity
mAccountVibrate = (CheckBoxPreference) findPreference(PREFERENCE_VIBRATE);
mAccountVibrate.setChecked(mAccount.isVibrate());
mNotificationOpensUnread = (CheckBoxPreference)findPreference(PREFERENCE_NOTIFICATION_OPENS_UNREAD);
mNotificationOpensUnread.setChecked(mAccount.goToUnreadMessageSearch());
mAutoExpandFolder = (Preference)findPreference(PREFERENCE_AUTO_EXPAND_FOLDER);
@ -395,6 +402,7 @@ public class AccountSettings extends K9PreferenceActivity
mAccount.setShowOngoing(mAccountNotifySync.isChecked());
mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue()));
mAccount.setVibrate(mAccountVibrate.isChecked());
mAccount.setGoToUnreadMessageSearch(mNotificationOpensUnread.isChecked());
mAccount.setFolderTargetMode(Account.FolderMode.valueOf(mTargetMode.getValue()));
mAccount.setDeletePolicy(Integer.parseInt(mDeletePolicy.getValue()));
mAccount.setExpungePolicy(mExpungePolicy.getValue());