MoveMessageToDialog.java revision 62f9c4d2803382f89cf8a19ed12b53b639d547fe
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.email.activity; 18 19import com.android.email.R; 20 21import android.app.Activity; 22import android.app.AlertDialog; 23import android.app.Dialog; 24import android.app.DialogFragment; 25import android.app.LoaderManager; 26import android.content.DialogInterface; 27import android.content.Loader; 28import android.database.Cursor; 29import android.os.Bundle; 30 31/** 32 * "Move (messages) to" dialog. 33 * 34 * TODO Make callback mechanism better (don't use getActivity--use setTargetFragment instead.) 35 * TODO Fix the text color in mailbox_list_item.xml. 36 * TODO Don't show unread counts. 37 */ 38public class MoveMessageToDialog extends DialogFragment implements DialogInterface.OnClickListener { 39 private static final String BUNDLE_ACCOUNT_ID = "account_id"; 40 private static final String BUNDLE_MESSAGE_IDS = "message_ids"; 41 private long mAccountId; 42 private MailboxesAdapter mAdapter; 43 44 public interface Callback { 45 public void onMoveToMailboxSelected(long newMailboxId, long[] messageIds); 46 } 47 48 public static MoveMessageToDialog newInstance(Activity parent, long accountId, 49 long[] messageIds) { 50 MoveMessageToDialog dialog = new MoveMessageToDialog(); 51 Bundle args = new Bundle(); 52 args.putLong(BUNDLE_ACCOUNT_ID, accountId); 53 args.putLongArray(BUNDLE_MESSAGE_IDS, messageIds); 54 dialog.setArguments(args); 55 return dialog; 56 } 57 58 @Override 59 public void onCreate(Bundle savedInstanceState) { 60 super.onCreate(savedInstanceState); 61 mAdapter = new MailboxesAdapter(getActivity().getApplicationContext()); 62 mAccountId = getArguments().getLong(BUNDLE_ACCOUNT_ID); 63 setStyle(STYLE_NORMAL, android.R.style.Theme_Light_Holo); 64 } 65 66 @Override 67 public Dialog onCreateDialog(Bundle savedInstanceState) { 68 final Activity a = getActivity(); 69 final String title = a.getResources().getString(R.string.move_to_folder_dialog_title); 70 71 a.getLoaderManager().initLoader(ActivityHelper.GLOBAL_LOADER_ID_MOVE_TO_DIALOG_LOADER, 72 getArguments(), new MyLoaderCallbacks()); 73 74 return new AlertDialog.Builder(a) 75 .setTitle(title) 76 .setSingleChoiceItems(mAdapter, -1, this) 77 .show(); 78 } 79 80 @Override 81 public void onClick(DialogInterface dialog, int position) { 82 final long mailboxId = mAdapter.getItemId(position); 83 final long[] massageIds = getArguments().getLongArray(BUNDLE_MESSAGE_IDS); 84 85 // TODO Fix it. It's not flexible 86 ((Callback) getActivity()).onMoveToMailboxSelected(mailboxId, massageIds); 87 dismiss(); 88 } 89 90 private class MyLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> { 91 @Override 92 public Loader<Cursor> onCreateLoader(int id, Bundle args) { 93 return MailboxesAdapter.createLoader(getActivity().getApplicationContext(), mAccountId, 94 MailboxesAdapter.MODE_MOVE_TO_TARGET); 95 } 96 97 @Override 98 public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 99 mAdapter.changeCursor(data); 100 } 101 } 102} 103