SingleFolderSelectionDialog.java revision 8f98ac013f775cdf186578018f926ac329070541
1a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp/* 2a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Copyright (C) 2012 Google Inc. 3a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Licensed to The Android Open Source Project. 4a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * 5a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Licensed under the Apache License, Version 2.0 (the "License"); 6a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * you may not use this file except in compliance with the License. 7a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * You may obtain a copy of the License at 8a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * 9a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * http://www.apache.org/licenses/LICENSE-2.0 10a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * 11a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Unless required by applicable law or agreed to in writing, software 12a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * distributed under the License is distributed on an "AS IS" BASIS, 13a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * See the License for the specific language governing permissions and 15a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * limitations under the License. 16a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp */ 17a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 18a7e154530add87e05d1fcee980e1a1fc34a456e7mindyppackage com.android.mail.ui; 19a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 20a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport android.content.Context; 21a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport android.content.DialogInterface; 22a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport android.database.Cursor; 23a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 24a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.R; 25a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.providers.Account; 26a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.providers.Conversation; 27a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.providers.Folder; 28a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.providers.UIProvider; 29a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.ui.FolderSelectorAdapter.FolderRow; 30a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport com.android.mail.utils.Utils; 31a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 32a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport java.util.ArrayList; 33a7e154530add87e05d1fcee980e1a1fc34a456e7mindypimport java.util.Collection; 34a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 35a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp/** 36a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Displays a folder selection dialog for the conversation provided. It allows 37a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * the user to switch a conversation from one folder to another. 38a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp */ 398f98ac013f775cdf186578018f926ac329070541Mark Weipublic class SingleFolderSelectionDialog extends FolderSelectionDialog { 409eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei 41a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp /** 42a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * Create a new {@link SingleFolderSelectionDialog}. It is displayed when 43a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * the {@link #show()} method is called. 44a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param context 45a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param account the current account 46a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param updater 47a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param target conversations that are impacted 48a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param isBatch whether the dialog is shown during Contextual Action Bar 49a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * (CAB) mode 50a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * @param currentFolder the current folder that the 51a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp * {@link FolderListFragment} is showing 52a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp */ 538f98ac013f775cdf186578018f926ac329070541Mark Wei public SingleFolderSelectionDialog(final Context context, Account account, 54a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp final ConversationUpdater updater, Collection<Conversation> target, boolean isBatch, 55a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp Folder currentFolder) { 568f98ac013f775cdf186578018f926ac329070541Mark Wei super(context, account, updater, target, isBatch, currentFolder); 57a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 58a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 598f98ac013f775cdf186578018f926ac329070541Mark Wei @Override 608f98ac013f775cdf186578018f926ac329070541Mark Wei protected void updateAdapterInBackground(Context context) { 618f98ac013f775cdf186578018f926ac329070541Mark Wei Cursor foldersCursor = null; 628f98ac013f775cdf186578018f926ac329070541Mark Wei try { 638f98ac013f775cdf186578018f926ac329070541Mark Wei foldersCursor = context.getContentResolver().query( 648f98ac013f775cdf186578018f926ac329070541Mark Wei !Utils.isEmpty(mAccount.fullFolderListUri) ? mAccount.fullFolderListUri 658f98ac013f775cdf186578018f926ac329070541Mark Wei : mAccount.folderListUri, UIProvider.FOLDERS_PROJECTION, null, 668f98ac013f775cdf186578018f926ac329070541Mark Wei null, null); 678f98ac013f775cdf186578018f926ac329070541Mark Wei // TODO(mindyp) : bring this back in UR8 when Email providers 688f98ac013f775cdf186578018f926ac329070541Mark Wei // will have divided folder sections. 698f98ac013f775cdf186578018f926ac329070541Mark Wei final String[] headers = context.getResources().getStringArray( 708f98ac013f775cdf186578018f926ac329070541Mark Wei R.array.moveto_folder_sections); 718f98ac013f775cdf186578018f926ac329070541Mark Wei // Currently, the number of adapters are assumed to match the 728f98ac013f775cdf186578018f926ac329070541Mark Wei // number of headers in the string array. 738f98ac013f775cdf186578018f926ac329070541Mark Wei mAdapter.addSection(new SystemFolderSelectorAdapter(context, foldersCursor, 748f98ac013f775cdf186578018f926ac329070541Mark Wei R.layout.single_folders_view, null, mCurrentFolder)); 75a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 768f98ac013f775cdf186578018f926ac329070541Mark Wei // TODO(mindyp): we currently do not support frequently moved to 778f98ac013f775cdf186578018f926ac329070541Mark Wei // folders, at headers[1]; need to define what that means.*/ 788f98ac013f775cdf186578018f926ac329070541Mark Wei mAdapter.addSection(new HierarchicalFolderSelectorAdapter(context, 798f98ac013f775cdf186578018f926ac329070541Mark Wei AddableFolderSelectorAdapter.filterFolders(foldersCursor), 808f98ac013f775cdf186578018f926ac329070541Mark Wei R.layout.single_folders_view, headers[2], mCurrentFolder)); 818f98ac013f775cdf186578018f926ac329070541Mark Wei mBuilder.setAdapter(mAdapter, SingleFolderSelectionDialog.this); 828f98ac013f775cdf186578018f926ac329070541Mark Wei } finally { 838f98ac013f775cdf186578018f926ac329070541Mark Wei if (foldersCursor != null) { 848f98ac013f775cdf186578018f926ac329070541Mark Wei foldersCursor.close(); 85a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 86a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 87a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 88a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 899eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei @Override 908f98ac013f775cdf186578018f926ac329070541Mark Wei protected void onListItemClick(int position) { 918f98ac013f775cdf186578018f926ac329070541Mark Wei final Object item = mAdapter.getItem(position); 928f98ac013f775cdf186578018f926ac329070541Mark Wei if (item instanceof FolderRow) { 938f98ac013f775cdf186578018f926ac329070541Mark Wei final Folder folder = ((FolderRow) item).getFolder(); 948f98ac013f775cdf186578018f926ac329070541Mark Wei ArrayList<FolderOperation> ops = new ArrayList<FolderOperation>(); 958f98ac013f775cdf186578018f926ac329070541Mark Wei // Remove the current folder and add the new folder. 968f98ac013f775cdf186578018f926ac329070541Mark Wei ops.add(new FolderOperation(mCurrentFolder, false)); 978f98ac013f775cdf186578018f926ac329070541Mark Wei ops.add(new FolderOperation(folder, true)); 988f98ac013f775cdf186578018f926ac329070541Mark Wei mUpdater.assignFolder(ops, mTarget, mBatch, true); 998f98ac013f775cdf186578018f926ac329070541Mark Wei mDialog.dismiss(); 1008f98ac013f775cdf186578018f926ac329070541Mark Wei } 101a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 102a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp 103a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp @Override 104a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp public void onClick(DialogInterface dialog, int which) { 105a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp // Do nothing. 106a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp } 107a7e154530add87e05d1fcee980e1a1fc34a456e7mindyp} 108