1f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira/*
2f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * Copyright (C) 2012 Google Inc.
3f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * Licensed to The Android Open Source Project.
4f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira *
5f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
6f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * you may not use this file except in compliance with the License.
7f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * You may obtain a copy of the License at
8f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira *
9f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
10f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira *
11f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * Unless required by applicable law or agreed to in writing, software
12f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
13f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * See the License for the specific language governing permissions and
15f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira * limitations under the License.
16f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira */
17ac09485a8283d3f9d5a8e0f5995938cc1a384be0Mindy Pereira
18f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereirapackage com.android.mail.ui;
19f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
202a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantlerimport android.app.AlertDialog;
212a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantlerimport android.app.LoaderManager;
22f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport android.content.Context;
232a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantlerimport android.content.CursorLoader;
24f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport android.content.DialogInterface;
252a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantlerimport android.content.Loader;
26f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport android.database.Cursor;
278db7e407109532557718c6b8064792f2df7a073dMindy Pereiraimport android.net.Uri;
282a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantlerimport android.os.Bundle;
29f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
30f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport com.android.mail.R;
31293ee6858b5b2b049610992114aa82495631a246Mindy Pereiraimport com.android.mail.providers.Conversation;
326778f4663a790d3e9d4c6a2f43292eef43c1e0bdMindy Pereiraimport com.android.mail.providers.Folder;
33f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport com.android.mail.providers.UIProvider;
34e7e0163126fa81af58ae6dbffc20adb610580fe2Scott Kennedyimport com.android.mail.providers.UIProvider.FolderType;
3541b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereiraimport com.android.mail.ui.FolderSelectorAdapter.FolderRow;
36935b993f6ebb1345e336b3fd996365b781a5e897Mindy Pereiraimport com.android.mail.utils.Utils;
37e7e0163126fa81af58ae6dbffc20adb610580fe2Scott Kennedyimport com.google.common.collect.ImmutableSet;
38f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
3967d75721f73844754220e5e81a23c32a62be1723Mindy Pereiraimport java.util.Arrays;
40f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereiraimport java.util.HashMap;
4141b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereiraimport java.util.HashSet;
42b2033d855ab0f13e253e5403ce25989bcbc49488Andy Huangimport java.util.List;
4374098779f90c61487ff0b5bbb7a458f0a8818047Jin Caoimport java.util.Map;
4474098779f90c61487ff0b5bbb7a458f0a8818047Jin Caoimport java.util.Set;
45f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
46ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal/**
479eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei * Displays a folder selection dialog for the conversation provided. It allows
489eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei * the user to mark folders to assign that conversation to.
49ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal */
508f98ac013f775cdf186578018f926ac329070541Mark Weipublic class MultiFoldersSelectionDialog extends FolderSelectionDialog {
512a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    private boolean mSingle;
52eb86a56580c220e4442951e77e9e7c7658fbf09bVikram Aggarwal    private final HashMap<Uri, FolderOperation> mOperations;
539eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei
542a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    public MultiFoldersSelectionDialog() {
558f98ac013f775cdf186578018f926ac329070541Mark Wei        mOperations = new HashMap<Uri, FolderOperation>();
56ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal    }
57ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal
582a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    private static final int FOLDER_LOADER_ID = 0;
592a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    private static final String FOLDER_QUERY_URI_TAG = "folderQueryUri";
602a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
612a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    private static final String SAVESTATE_OPERATIONS_TAG = "operations";
622a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
638f98ac013f775cdf186578018f926ac329070541Mark Wei    @Override
642a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    public void onCreate(Bundle savedInstanceState) {
652a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        super.onCreate(savedInstanceState);
662a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
672a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        mSingle = !mAccount
682a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                .supportsCapability(UIProvider.AccountCapabilities.MULTIPLE_FOLDERS_PER_CONV);
692a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        mTitleId = R.string.change_folders_selection_dialog_title;
702a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
712a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        if (savedInstanceState != null) {
722a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler            final FolderOperation[] savedOps = (FolderOperation[])
732a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    savedInstanceState.getParcelableArray(SAVESTATE_OPERATIONS_TAG);
742a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler            for (final FolderOperation op : savedOps) {
752a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                mOperations.put(op.mFolder.folderUri.fullUri, op);
76935b993f6ebb1345e336b3fd996365b781a5e897Mindy Pereira            }
77293ee6858b5b2b049610992114aa82495631a246Mindy Pereira        }
782a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
792a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        final Bundle args = new Bundle(1);
802a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        args.putParcelable(FOLDER_QUERY_URI_TAG, !Utils.isEmpty(mAccount.fullFolderListUri) ?
812a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                mAccount.fullFolderListUri : mAccount.folderListUri);
822a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        final Context loaderContext = getActivity().getApplicationContext();
832a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        getLoaderManager().initLoader(FOLDER_LOADER_ID, args,
842a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                new LoaderManager.LoaderCallbacks<Cursor>() {
852a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    @Override
862a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
872a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        final Uri queryUri = args.getParcelable(FOLDER_QUERY_URI_TAG);
882a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        return new CursorLoader(loaderContext, queryUri,
892a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                UIProvider.FOLDERS_PROJECTION, null, null, null);
902a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    }
912a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
922a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    @Override
932a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
942a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        final Context context = getActivity();
952a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        if (data == null || context == null) {
962a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                            return;
972a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        }
982a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        final AlertDialog dialog = (AlertDialog) getDialog();
995291de861af3e7cf11719a71f0a236d76a79b327Martin Hibdon                        if (dialog == null) {
1005291de861af3e7cf11719a71f0a236d76a79b327Martin Hibdon                            // This could happen if the dialog is dismissed just before the
1015291de861af3e7cf11719a71f0a236d76a79b327Martin Hibdon                            // load finishes.
1025291de861af3e7cf11719a71f0a236d76a79b327Martin Hibdon                            return;
1035291de861af3e7cf11719a71f0a236d76a79b327Martin Hibdon                        }
1042a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // The number of view types changes here, so we have to reset the listview's
1052a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // adapter.
1062a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        dialog.getListView().setAdapter(null);
107cc2e1ee5ea19d1b166a7542ea03f4fd4e5c807e3Rohan Shah                        dialog.getListView().setDivider(null);
1082a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
1092a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        final HashSet<String> checked = new HashSet<String>();
1102a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        for (final Conversation conversation : mTarget) {
1112a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                            final List<Folder> rawFolders = conversation.getRawFolders();
1122a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                            if (rawFolders != null && rawFolders.size() > 0) {
1132a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                // Parse the raw folders and get all the uris.
1142a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                checked.addAll(Arrays.asList(Folder.getUriArray(rawFolders)));
1152a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                            } else {
1162a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                // There are no folders for this conversation, so it must
1172a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                // belong to the folder we are currently looking at.
1182a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                checked.add(mCurrentFolder.folderUri.fullUri.toString());
1192a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                            }
1202a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        }
12174098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        final Set<String> originalChecked = ImmutableSet.copyOf(checked);
12274098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        for (final Map.Entry<Uri, FolderOperation> entry : mOperations.entrySet()) {
12374098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                            if (entry.getValue().mAdd) {
12474098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                checked.add(entry.getKey().toString());
12574098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                            } else {
12674098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                checked.remove(entry.getKey().toString());
12774098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                            }
1282a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        }
129872f34134c62338ed0d003a844d3db2ada030afaJin Cao                        mAdapter.clearSections();
1302a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // TODO(mindyp) : bring this back in UR8 when Email providers
1312a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // will have divided folder sections.
1322a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        /* final String[] headers = mContext.getResources()
1332a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                                .getStringArray(R.array.moveto_folder_sections);
1342a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                         // Currently, the number of adapters are assumed to match the
1352a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                         // number of headers in the string array.
1362a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                         mAdapter.addSection(new SystemFolderSelectorAdapter(mContext,
1372a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                         foldersCursor, checked, R.layout.multi_folders_view, null));
1382a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
1392a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // TODO(mindyp): we currently do not support frequently moved to
1402a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        // folders, at headers[1]; need to define what that means.*/
14174098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao
14274098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        Cursor c = AddableFolderSelectorAdapter.filterFolders(data,
14374098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                ImmutableSet.of(FolderType.INBOX_SECTION), originalChecked,
14474098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                true /* includeOnlyInitiallySelected */);
14574098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        if (c.getCount() > 0) {
14674098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                            mAdapter.addSection(new AddableFolderSelectorAdapter(context, c,
147106a12a1b6642e8c2f716aefa846d9664fbec158Andrew Sapperstein                                    checked, R.layout.multi_folders_view));
14874098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        }
14974098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao
15074098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        c = AddableFolderSelectorAdapter.filterFolders(data,
15174098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                ImmutableSet.of(FolderType.INBOX_SECTION), originalChecked,
15274098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                                false /* includeOnlyInitiallySelected */);
15374098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        if (c.getCount() > 0) {
15474098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                            mAdapter.addSection(new AddableFolderSelectorAdapter(context, c,
155106a12a1b6642e8c2f716aefa846d9664fbec158Andrew Sapperstein                                    checked, R.layout.multi_folders_view));
15674098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                        }
1572a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
1582a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        dialog.getListView().setAdapter(mAdapter);
1592a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    }
1602a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
1612a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    @Override
1622a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    public void onLoaderReset(Loader<Cursor> loader) {
1632a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        mAdapter.clearSections();
1642a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                    }
1652a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                });
1662a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    }
1672a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler
1682a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    @Override
1692a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    public void onSaveInstanceState(Bundle outState) {
1702a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        super.onSaveInstanceState(outState);
1712a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler        outState.putParcelableArray(SAVESTATE_OPERATIONS_TAG,
1722a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                mOperations.values().toArray(new FolderOperation[mOperations.size()]));
173f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira    }
174f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
1759eb1c9a76a400f84c002b58c831119119ebf4870Mark Wei    @Override
1768f98ac013f775cdf186578018f926ac329070541Mark Wei    protected void onListItemClick(int position) {
1778f98ac013f775cdf186578018f926ac329070541Mark Wei        final Object item = mAdapter.getItem(position);
1788f98ac013f775cdf186578018f926ac329070541Mark Wei        if (item instanceof FolderRow) {
1798f98ac013f775cdf186578018f926ac329070541Mark Wei            update((FolderRow) item);
1808f98ac013f775cdf186578018f926ac329070541Mark Wei        }
18141b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira    }
18241b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira
18341b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira    /**
18430fd47bf1947da5ad813cb957b6cbe569dce563aMindy Pereira     * Call this to update the state of folders as a result of them being
18541b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira     * selected / de-selected.
18641b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira     *
18741b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira     * @param row The item being updated.
18841b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira     */
1892a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler    private void update(FolderSelectorAdapter.FolderRow row) {
19074098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao        final boolean add = !row.isSelected();
19141b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira        if (mSingle) {
19241b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira            if (!add) {
19341b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira                // This would remove the check on a single radio button, so just
19441b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira                // return.
19541b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira                return;
19641b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira            }
19741b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira            // Clear any other checked items.
198ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal            for (int i = 0, size = mAdapter.getCount(); i < size; i++) {
199ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal                final Object item = mAdapter.getItem(i);
2005650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira                if (item instanceof FolderRow) {
20174098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao                   ((FolderRow)item).setIsSelected(false);
202ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal                   final Folder folder = ((FolderRow)item).getFolder();
203259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy                   mOperations.put(folder.folderUri.fullUri,
204259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy                           new FolderOperation(folder, false));
2055650bb59fd9bb351ee94e44a32256e717048ed63Mindy Pereira                }
20641b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira            }
20741b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira        }
20874098779f90c61487ff0b5bbb7a458f0a8818047Jin Cao        row.setIsSelected(add);
20941b1c8d641caf29a0699a8080f469b3984fe319eMindy Pereira        mAdapter.notifyDataSetChanged();
210ef78cb7a26ee6dc551f0e563216069fe68427316Vikram Aggarwal        final Folder folder = row.getFolder();
211259df5b9e11908c8ef7c91483924891dd96b3c27Scott Kennedy        mOperations.put(folder.folderUri.fullUri, new FolderOperation(folder, add));
212f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira    }
213f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira
214f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira    @Override
215f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira    public void onClick(DialogInterface dialog, int which) {
216f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira        switch (which) {
217f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira            case DialogInterface.BUTTON_POSITIVE:
2182a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                getConversationUpdater().assignFolder(mOperations.values(), mTarget, mBatch,
2192a4be2459962700e1a38ba897de5d2f5913412f5Tony Mantler                        true /* showUndo */, false /* isMoveTo */);
220f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira                break;
221f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira            case DialogInterface.BUTTON_NEGATIVE:
222f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira                break;
223f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira            default:
224f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira                break;
225f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira        }
226f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira    }
227f3dfb15b47aabd56fa7b7c99685ba6fad1d7e931Mindy Pereira}
228