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