1
0
mirror of https://github.com/moparisthebest/k-9 synced 2025-02-07 02:30:10 -05:00

filter on folder-selection

This commit is contained in:
Marcus Wolschon 2010-08-13 06:37:00 +00:00
parent 08b8066441
commit 97001b6edb
4 changed files with 113 additions and 12 deletions

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--
<item
android:title="@string/folder_list_display_mode_label"
android:icon="@drawable/ic_show_folders"
>
<menu>-->
<item
android:id="@+id/display_all"
android:title="@string/folder_list_display_mode_all"
android:icon="@drawable/ic_menu_clear"
/>
<item
android:id="@+id/display_1st_class"
android:title="@string/folder_list_display_mode_first_class"
android:icon="@drawable/ic_menu_clear"
/>
<item
android:id="@+id/display_1st_and_2nd_class"
android:title="@string/folder_list_display_mode_first_and_second_class"
android:icon="@drawable/ic_menu_clear"
/>
<item
android:id="@+id/display_not_second_class"
android:title="@string/folder_list_display_mode_not_second_class"
android:icon="@drawable/ic_menu_clear"
/>
<item
android:id="@+id/list_folders"
android:title="@string/refresh_folders_action"
android:icon="@drawable/ic_menu_refresh"
/>
<!-- </menu>
</item>-->
</menu>

View File

@ -5,6 +5,8 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.Window; import android.view.Window;
import android.widget.AdapterView; import android.widget.AdapterView;
@ -13,6 +15,7 @@ import android.widget.Filter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import com.fsck.k9.*; import com.fsck.k9.*;
import com.fsck.k9.Account.FolderMode;
import com.fsck.k9.controller.MessagingController; import com.fsck.k9.controller.MessagingController;
import com.fsck.k9.controller.MessagingListener; import com.fsck.k9.controller.MessagingListener;
import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.Folder;
@ -34,6 +37,20 @@ public class ChooseFolder extends K9ListActivity
boolean showOptionNone = false; boolean showOptionNone = false;
boolean showDisplayableOnly = false; boolean showDisplayableOnly = false;
/**
* What folders to display.<br/>
* Initialized to whatever is configured
* but can be overridden via {@link #onOptionsItemSelected(MenuItem)}
* while this activity is showing.
*/
private Account.FolderMode mMode;
/**
* Current filter used by our ArrayAdapter.<br/>
* Created on the fly and invalidated if a new
* set of folders is chosen via {@link #onOptionsItemSelected(MenuItem)}
*/
private FolderListFilter<String> myFilter = null;
public static final String EXTRA_ACCOUNT = "com.fsck.k9.ChooseFolder_account"; public static final String EXTRA_ACCOUNT = "com.fsck.k9.ChooseFolder_account";
public static final String EXTRA_CUR_FOLDER = "com.fsck.k9.ChooseFolder_curfolder"; public static final String EXTRA_CUR_FOLDER = "com.fsck.k9.ChooseFolder_curfolder";
public static final String EXTRA_SEL_FOLDER = "com.fsck.k9.ChooseFolder_selfolder"; public static final String EXTRA_SEL_FOLDER = "com.fsck.k9.ChooseFolder_selfolder";
@ -169,6 +186,55 @@ public class ChooseFolder extends K9ListActivity
} }
} }
@Override public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.folder_select_option, menu);
return true;
}
@Override public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.display_1st_class:
{
setDisplayMode(FolderMode.FIRST_CLASS);
return true;
}
case R.id.display_1st_and_2nd_class:
{
setDisplayMode(FolderMode.FIRST_AND_SECOND_CLASS);
return true;
}
case R.id.display_not_second_class:
{
setDisplayMode(FolderMode.NOT_SECOND_CLASS);
return true;
}
case R.id.display_all:
{
setDisplayMode(FolderMode.ALL);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
private void setDisplayMode(FolderMode aMode) {
mMode = aMode;
// invalidate the current filter as it is working on an inval
if (myFilter != null) {
myFilter.invalidate();
}
//re-populate the list
MessagingController.getInstance(getApplication()).listFolders(mAccount,
false, mListener);
}
private MessagingListener mListener = new MessagingListener() private MessagingListener mListener = new MessagingListener()
{ {
@Override @Override
@ -207,15 +273,7 @@ public class ChooseFolder extends K9ListActivity
{ {
return; return;
} }
Account.FolderMode aMode = Account.FolderMode.ALL; Account.FolderMode aMode = mMode;
if (showDisplayableOnly)
{
aMode = account.getFolderDisplayMode();
}
else
{
aMode = account.getFolderTargetMode();
}
Preferences prefs = Preferences.getPreferences(getApplication().getApplicationContext()); Preferences prefs = Preferences.getPreferences(getApplication().getApplicationContext());
ArrayList<String> localFolders = new ArrayList<String>(); ArrayList<String> localFolders = new ArrayList<String>();

View File

@ -1613,19 +1613,19 @@ public class FolderList extends K9ListActivity
SearchSpecification searchSpec = new SearchSpecification() SearchSpecification searchSpec = new SearchSpecification()
{ {
@Override //interface has no override @Override
public String[] getAccountUuids() public String[] getAccountUuids()
{ {
return new String[] { account.getUuid() }; return new String[] { account.getUuid() };
} }
@Override //interface has no override @Override
public Flag[] getForbiddenFlags() public Flag[] getForbiddenFlags()
{ {
return UNREAD_FLAG_ARRAY; return UNREAD_FLAG_ARRAY;
} }
@Override //interface has no override @Override
public String getQuery() public String getQuery()
{ {
return ""; return "";

View File

@ -135,4 +135,8 @@ public class FolderListFilter<T> extends Filter
// Send notification that the data set changed now // Send notification that the data set changed now
mFolders.notifyDataSetChanged(); mFolders.notifyDataSetChanged();
} }
public void invalidate() {
mOriginalValues = null;
}
} }