Merge "First path of MessageList cleaning up"

This commit is contained in:
Makoto Onuki 2011-03-29 14:42:19 -07:00 committed by Android (Google) Code Review
commit c6973440fc
5 changed files with 18 additions and 413 deletions

View File

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2009 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/screen"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@android:drawable/title_bar">
<TextView android:id="@+id/title_left_text"
android:gravity="center_vertical|left"
android:ellipsize="end"
android:singleLine="true"
style="?android:attr/windowTitleStyle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView android:id="@+id/title_right_text"
android:gravity="center_vertical|right"
android:ellipsize="end"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textColor="#ffffffff"
android:shadowRadius="0.1"
android:shadowDy="1"
android:shadowColor="#ff000000"
android:layout_weight="1" />
<Button android:id="@+id/account_title_button"
android:gravity="center_vertical|right"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="26dip"
android:textColor="#ffffffff"
android:layout_margin="3dip"
android:paddingTop="0dip"
android:paddingBottom="0dip"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:background="@drawable/one_pixel_border_button" />
<ProgressBar android:id="@+id/title_progress_icon"
style="?android:attr/progressBarStyleSmallTitle"
android:visibility="gone"
android:minWidth="10dip"
android:paddingRight="1dip"
android:layout_marginLeft="4dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

View File

@ -20,7 +20,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<include layout="@layout/list_title" />
<include layout="@layout/connection_error_banner" /> <include layout="@layout/connection_error_banner" />
<fragment <fragment
@ -29,38 +28,4 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dip" android:layout_height="0dip"
android:layout_weight="1" /> android:layout_weight="1" />
<!-- Footer in Multi-select mode -->
<LinearLayout android:id="@+id/footer_organize"
android:orientation="horizontal"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dip"
android:paddingLeft="4dip"
android:paddingRight="4dip"
android:paddingBottom="1dip"
android:background="@android:drawable/bottom_bar">
<Button
android:id="@+id/btn_read_unread"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/read_unread_action" />
<Button
android:id="@+id/btn_multi_favorite"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/favorite_action" />
<Button android:id="@+id/btn_multi_delete"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/delete_action" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -4,9 +4,9 @@
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -14,35 +14,32 @@
limitations under the License. limitations under the License.
--> -->
<!-- This menu is shown when MessageList is viewing a regular mailbox. -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/refresh" <item android:id="@+id/refresh"
android:alphabeticShortcut="r" android:alphabeticShortcut="r"
android:title="@string/refresh_action" android:title="@string/refresh_action"
android:icon="@drawable/ic_menu_refresh" android:icon="@drawable/ic_menu_refresh_holo_light"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/compose" <item android:id="@+id/compose"
android:alphabeticShortcut="c" android:alphabeticShortcut="c"
android:title="@string/compose_action" android:title="@string/compose_action"
android:icon="@drawable/ic_menu_compose" android:icon="@drawable/ic_menu_compose_holo_light"
android:showAsAction="ifRoom"
/> />
<group android:id="@+id/deselect_all_group">
<item android:id="@+id/deselect_all"
android:title="@string/deselect_all_action"
android:icon="@drawable/ic_menu_email_deselect_mail"
/>
</group>
<item android:id="@+id/folders" <item android:id="@+id/folders"
android:title="@string/folders_action" android:title="@string/folders_action"
android:icon="@drawable/ic_menu_folder" android:icon="@drawable/ic_menu_folder"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/accounts" <item android:id="@+id/accounts"
android:title="@string/accounts_action" android:title="@string/accounts_action"
android:icon="@drawable/ic_menu_account_list" android:icon="@drawable/ic_menu_account_list"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/account_settings" <item android:id="@+id/account_settings"
android:title="@string/account_settings_action" android:title="@string/account_settings_action"
android:icon="@android:drawable/ic_menu_preferences" android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/> />
</menu> </menu>

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2009 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- This menu is shown when MessageList is viewing a smart-folder mailbox. -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/refresh"
android:alphabeticShortcut="r"
android:title="@string/refresh_action"
android:icon="@drawable/ic_menu_refresh"
/>
<item android:id="@+id/compose"
android:alphabeticShortcut="c"
android:title="@string/compose_action"
android:icon="@drawable/ic_menu_compose"
/>
<item android:id="@+id/accounts"
android:title="@string/accounts_action"
android:icon="@drawable/ic_menu_account_list"
/>
<group android:id="@+id/deselect_all_group">
<item android:id="@+id/deselect_all"
android:title="@string/deselect_all_action"
android:icon="@drawable/ic_menu_email_deselect_mail"
/>
</group>
</menu>

View File

@ -20,43 +20,26 @@ import com.android.email.Controller;
import com.android.email.ControllerResultUiThreadWrapper; import com.android.email.ControllerResultUiThreadWrapper;
import com.android.email.Email; import com.android.email.Email;
import com.android.email.MessagingExceptionStrings; import com.android.email.MessagingExceptionStrings;
import com.android.email.FolderProperties;
import com.android.email.R; import com.android.email.R;
import com.android.email.activity.setup.AccountSecurity; import com.android.email.activity.setup.AccountSecurity;
import com.android.email.activity.setup.AccountSettingsXL; import com.android.email.activity.setup.AccountSettingsXL;
import com.android.emailcommon.mail.MessagingException; import com.android.emailcommon.mail.MessagingException;
import com.android.emailcommon.provider.EmailContent;
import com.android.emailcommon.provider.EmailContent.Account; import com.android.emailcommon.provider.EmailContent.Account;
import com.android.emailcommon.provider.EmailContent.AccountColumns;
import com.android.emailcommon.provider.EmailContent.Mailbox; import com.android.emailcommon.provider.EmailContent.Mailbox;
import com.android.emailcommon.provider.EmailContent.MailboxColumns;
import com.android.emailcommon.utility.Utility;
import android.app.Activity; import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
// TODO Rework the menu for the phone UI public class MessageList extends Activity implements MessageListFragment.Callback {
// Menu won't show up on the phone UI -- not sure if it's a framework issue or our bug.
public class MessageList extends Activity implements OnClickListener,
AnimationListener, MessageListFragment.Callback {
// Intent extras (internal to this activity) // Intent extras (internal to this activity)
private static final String EXTRA_ACCOUNT_ID = "com.android.email.activity._ACCOUNT_ID"; private static final String EXTRA_ACCOUNT_ID = "com.android.email.activity._ACCOUNT_ID";
private static final String EXTRA_MAILBOX_TYPE = "com.android.email.activity.MAILBOX_TYPE"; private static final String EXTRA_MAILBOX_TYPE = "com.android.email.activity.MAILBOX_TYPE";
@ -66,37 +49,13 @@ public class MessageList extends Activity implements OnClickListener,
// UI support // UI support
private MessageListFragment mListFragment; private MessageListFragment mListFragment;
private View mMultiSelectPanel;
private Button mReadUnreadButton;
private Button mFavoriteButton;
private Button mDeleteButton;
private TextView mErrorBanner; private TextView mErrorBanner;
private final Controller mController = Controller.getInstance(getApplication()); private final Controller mController = Controller.getInstance(getApplication());
private ControllerResultUiThreadWrapper<ControllerResults> mControllerCallback; private ControllerResultUiThreadWrapper<ControllerResults> mControllerCallback;
private TextView mLeftTitle;
private ProgressBar mProgressIcon;
// DB access
private ContentResolver mResolver;
private SetTitleTask mSetTitleTask;
private MailboxFinder mMailboxFinder; private MailboxFinder mMailboxFinder;
private MailboxFinderCallback mMailboxFinderCallback = new MailboxFinderCallback(); private final MailboxFinderCallback mMailboxFinderCallback = new MailboxFinderCallback();
private static final int MAILBOX_NAME_COLUMN_ID = 0;
private static final int MAILBOX_NAME_COLUMN_ACCOUNT_KEY = 1;
private static final int MAILBOX_NAME_COLUMN_TYPE = 2;
private static final String[] MAILBOX_NAME_PROJECTION = new String[] {
MailboxColumns.DISPLAY_NAME, MailboxColumns.ACCOUNT_KEY,
MailboxColumns.TYPE};
private static final int ACCOUNT_DISPLAY_NAME_COLUMN_ID = 0;
private static final String[] ACCOUNT_NAME_PROJECTION = new String[] {
AccountColumns.DISPLAY_NAME };
private static final String ID_SELECTION = EmailContent.RECORD_ID + "=?";
/* package */ MessageListFragment getListFragmentForTest() { /* package */ MessageListFragment getListFragmentForTest() {
return mListFragment; return mListFragment;
@ -179,23 +138,10 @@ public class MessageList extends Activity implements OnClickListener,
new Handler(), new ControllerResults()); new Handler(), new ControllerResults());
mListFragment = (MessageListFragment) getFragmentManager() mListFragment = (MessageListFragment) getFragmentManager()
.findFragmentById(R.id.message_list_fragment); .findFragmentById(R.id.message_list_fragment);
mMultiSelectPanel = findViewById(R.id.footer_organize);
mReadUnreadButton = (Button) findViewById(R.id.btn_read_unread);
mFavoriteButton = (Button) findViewById(R.id.btn_multi_favorite);
mDeleteButton = (Button) findViewById(R.id.btn_multi_delete);
mLeftTitle = (TextView) findViewById(R.id.title_left_text);
mProgressIcon = (ProgressBar) findViewById(R.id.title_progress_icon);
mErrorBanner = (TextView) findViewById(R.id.connection_error_text); mErrorBanner = (TextView) findViewById(R.id.connection_error_text);
mReadUnreadButton.setOnClickListener(this);
mFavoriteButton.setOnClickListener(this);
mDeleteButton.setOnClickListener(this);
((Button) findViewById(R.id.account_title_button)).setOnClickListener(this);
mListFragment.setCallback(this); mListFragment.setCallback(this);
mResolver = getContentResolver();
// Show the appropriate account/mailbox specified by an {@link Intent}. // Show the appropriate account/mailbox specified by an {@link Intent}.
selectAccountAndMailbox(getIntent()); selectAccountAndMailbox(getIntent());
} }
@ -206,9 +152,6 @@ public class MessageList extends Activity implements OnClickListener,
private void selectAccountAndMailbox(Intent intent) { private void selectAccountAndMailbox(Intent intent) {
long mailboxId = intent.getLongExtra(EXTRA_MAILBOX_ID, -1); long mailboxId = intent.getLongExtra(EXTRA_MAILBOX_ID, -1);
if (mailboxId != -1) { if (mailboxId != -1) {
// Specific mailbox ID was provided - go directly to it
mSetTitleTask = new SetTitleTask(mailboxId);
mSetTitleTask.execute();
mListFragment.openMailbox(mailboxId); mListFragment.openMailbox(mailboxId);
} else { } else {
int mailboxType = intent.getIntExtra(EXTRA_MAILBOX_TYPE, Mailbox.TYPE_INBOX); int mailboxType = intent.getIntExtra(EXTRA_MAILBOX_TYPE, Mailbox.TYPE_INBOX);
@ -227,7 +170,6 @@ public class MessageList extends Activity implements OnClickListener,
mMailboxFinderCallback); mMailboxFinderCallback);
mMailboxFinder.startLookup(); mMailboxFinder.startLookup();
} }
// TODO set title to "account > mailbox (#unread)"
} }
@Override @Override
@ -257,8 +199,6 @@ public class MessageList extends Activity implements OnClickListener,
mMailboxFinder.cancel(); mMailboxFinder.cancel();
mMailboxFinder = null; mMailboxFinder = null;
} }
Utility.cancelTaskInterrupt(mSetTitleTask);
mSetTitleTask = null;
} }
@ -291,60 +231,15 @@ public class MessageList extends Activity implements OnClickListener,
public void onEnterSelectionMode(boolean enter) { public void onEnterSelectionMode(boolean enter) {
} }
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_read_unread:
mListFragment.onMultiToggleRead();
break;
case R.id.btn_multi_favorite:
mListFragment.onMultiToggleFavorite();
break;
case R.id.btn_multi_delete:
mListFragment.onMultiDelete();
break;
case R.id.account_title_button:
onAccounts();
break;
}
}
public void onAnimationEnd(Animation animation) {
// TODO: If the button panel hides the only selected item, scroll the list to make it
// visible again.
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationStart(Animation animation) {
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
return true; // Tell the framework it has the menu getMenuInflater().inflate(R.menu.message_list_option, menu);
return true;
} }
private boolean mMenuCreated;
@Override @Override
public boolean onPrepareOptionsMenu(Menu menu) { public boolean onPrepareOptionsMenu(Menu menu) {
if (mListFragment == null) { // TODO Disable "refresh" for combined mailboxes
// Activity not initialized.
// This method indirectly gets called from MessageListFragment.onCreate()
// due to the setHasOptionsMenu() call, at which point this.onCreate() hasn't been
// called -- thus mListFragment == null.
return false;
}
if (!mMenuCreated) {
mMenuCreated = true;
if (mListFragment.isMagicMailbox()) {
getMenuInflater().inflate(R.menu.message_list_option_smart_folder, menu);
} else {
getMenuInflater().inflate(R.menu.message_list_option, menu);
}
}
boolean showDeselect = mListFragment.getSelectedCount() > 0;
menu.setGroupVisible(R.id.deselect_all_group, showDeselect);
return true; return true;
} }
@ -366,9 +261,6 @@ public class MessageList extends Activity implements OnClickListener,
case R.id.account_settings: case R.id.account_settings:
onEditAccount(); onEditAccount();
return true; return true;
case R.id.deselect_all:
mListFragment.onDeselectAll();
return true;
default: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@ -398,56 +290,6 @@ public class MessageList extends Activity implements OnClickListener,
AccountSettingsXL.actionSettings(this, mListFragment.getAccountId()); AccountSettingsXL.actionSettings(this, mListFragment.getAccountId());
} }
/**
* Show multi-selection panel, if one or more messages are selected. Button labels will be
* updated too.
*
* @deprecated not used any longer. remove them.
*/
public void onSelectionChanged() {
showMultiPanel(mListFragment.getSelectedCount() > 0);
}
/**
* @deprecated not used any longer. remove them. (with associated resources, strings,
* members, etc)
*/
private void updateFooterButtonNames () {
// Show "unread_action" when one or more read messages are selected.
if (mListFragment.doesSelectionContainReadMessage()) {
mReadUnreadButton.setText(R.string.unread_action);
} else {
mReadUnreadButton.setText(R.string.read_action);
}
// Show "set_star_action" when one or more un-starred messages are selected.
if (mListFragment.doesSelectionContainNonStarredMessage()) {
mFavoriteButton.setText(R.string.set_star_action);
} else {
mFavoriteButton.setText(R.string.remove_star_action);
}
}
/**
* Show or hide the panel of multi-select options
*
* @deprecated not used any longer. remove them.
*/
private void showMultiPanel(boolean show) {
if (show && mMultiSelectPanel.getVisibility() != View.VISIBLE) {
mMultiSelectPanel.setVisibility(View.VISIBLE);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.footer_appear);
animation.setAnimationListener(this);
mMultiSelectPanel.startAnimation(animation);
} else if (!show && mMultiSelectPanel.getVisibility() != View.GONE) {
mMultiSelectPanel.setVisibility(View.GONE);
mMultiSelectPanel.startAnimation(
AnimationUtils.loadAnimation(this, R.anim.footer_disappear));
}
if (show) {
updateFooterButtonNames();
}
}
/** /**
* Handle the eventual result from the security update activity * Handle the eventual result from the security update activity
* *
@ -463,99 +305,8 @@ public class MessageList extends Activity implements OnClickListener,
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }
private class SetTitleTask extends AsyncTask<Void, Void, Object[]> {
private long mMailboxKey;
public SetTitleTask(long mailboxKey) {
mMailboxKey = mailboxKey;
}
@Override
protected Object[] doInBackground(Void... params) {
// Check special Mailboxes
int resIdSpecialMailbox = 0;
if (mMailboxKey == Mailbox.QUERY_ALL_INBOXES) {
resIdSpecialMailbox = R.string.account_folder_list_summary_inbox;
} else if (mMailboxKey == Mailbox.QUERY_ALL_FAVORITES) {
resIdSpecialMailbox = R.string.account_folder_list_summary_starred;
} else if (mMailboxKey == Mailbox.QUERY_ALL_DRAFTS) {
resIdSpecialMailbox = R.string.account_folder_list_summary_drafts;
} else if (mMailboxKey == Mailbox.QUERY_ALL_OUTBOX) {
resIdSpecialMailbox = R.string.account_folder_list_summary_outbox;
}
if (resIdSpecialMailbox != 0) {
return new Object[] {null, getString(resIdSpecialMailbox), 0};
}
String accountName = null;
String mailboxName = null;
String accountKey = null;
Cursor c = MessageList.this.mResolver.query(Mailbox.CONTENT_URI,
MAILBOX_NAME_PROJECTION, ID_SELECTION,
new String[] { Long.toString(mMailboxKey) }, null);
try {
if (c.moveToFirst()) {
mailboxName = FolderProperties.getInstance(MessageList.this)
.getDisplayName(c.getInt(MAILBOX_NAME_COLUMN_TYPE));
if (mailboxName == null) {
mailboxName = c.getString(MAILBOX_NAME_COLUMN_ID);
}
accountKey = c.getString(MAILBOX_NAME_COLUMN_ACCOUNT_KEY);
}
} finally {
c.close();
}
if (accountKey != null) {
c = MessageList.this.mResolver.query(Account.CONTENT_URI,
ACCOUNT_NAME_PROJECTION, ID_SELECTION, new String[] { accountKey },
null);
try {
if (c.moveToFirst()) {
accountName = c.getString(ACCOUNT_DISPLAY_NAME_COLUMN_ID);
}
} finally {
c.close();
}
}
int nAccounts = EmailContent.count(MessageList.this, Account.CONTENT_URI, null, null);
return new Object[] {accountName, mailboxName, nAccounts};
}
@Override
protected void onPostExecute(Object[] result) {
if (result == null) {
return;
}
final int nAccounts = (Integer) result[2];
if (result[0] != null) {
setTitleAccountName((String) result[0], nAccounts > 1);
}
if (result[1] != null) {
mLeftTitle.setText((String) result[1]);
}
}
}
private void setTitleAccountName(String accountName, boolean showAccountsButton) {
TextView accountsButton = (TextView) findViewById(R.id.account_title_button);
TextView textPlain = (TextView) findViewById(R.id.title_right_text);
if (showAccountsButton) {
accountsButton.setVisibility(View.VISIBLE);
textPlain.setVisibility(View.GONE);
accountsButton.setText(accountName);
} else {
accountsButton.setVisibility(View.GONE);
textPlain.setVisibility(View.VISIBLE);
textPlain.setText(accountName);
}
}
private void showProgressIcon(boolean show) { private void showProgressIcon(boolean show) {
int visibility = show ? View.VISIBLE : View.GONE; // TODO Show "refreshing" icon somewhere. (It's on the action bar on xlarge.)
mProgressIcon.setVisibility(visibility);
} }
private void showErrorBanner(String message) { private void showErrorBanner(String message) {
@ -579,6 +330,9 @@ public class MessageList extends Activity implements OnClickListener,
} }
/** /**
* TODO This should probably be removed -- use RefreshManager instead to update the progress
* icon and the error banner.
*
* Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper}, * Controller results listener. We wrap it with {@link ControllerResultUiThreadWrapper},
* so all methods are called on the UI thread. * so all methods are called on the UI thread.
*/ */
@ -653,8 +407,6 @@ public class MessageList extends Activity implements OnClickListener,
private class MailboxFinderCallback implements MailboxFinder.Callback { private class MailboxFinderCallback implements MailboxFinder.Callback {
@Override @Override
public void onMailboxFound(long accountId, long mailboxId) { public void onMailboxFound(long accountId, long mailboxId) {
mSetTitleTask = new SetTitleTask(mailboxId);
mSetTitleTask.execute();
mListFragment.openMailbox(mailboxId); mListFragment.openMailbox(mailboxId);
} }