1 /*
2  * Copyright (C) 2012 Google Inc.
3  * Licensed to The Android Open Source Project.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package com.android.mail.browse;
18 
19 import android.app.Dialog;
20 import android.app.DialogFragment;
21 import android.app.ProgressDialog;
22 import android.content.ContentValues;
23 import android.content.DialogInterface;
24 import android.os.Bundle;
25 import com.android.mail.R;
26 import com.android.mail.providers.Attachment;
27 import com.android.mail.providers.UIProvider.AttachmentColumns;
28 import com.android.mail.providers.UIProvider.AttachmentState;
29 import com.google.common.base.Objects;
30 
31 public class AttachmentProgressDialogFragment extends DialogFragment {
32     public static final String ATTACHMENT_KEY = "attachment";
33     private AttachmentCommandHandler mCommandHandler;
34 
35     private Attachment mAttachment;
36 
37     private ProgressDialog mDialog;
38 
newInstance(Attachment attachment)39     static AttachmentProgressDialogFragment newInstance(Attachment attachment) {
40         final AttachmentProgressDialogFragment f = new AttachmentProgressDialogFragment();
41 
42         // Supply the attachment as an argument.
43         final Bundle args = new Bundle(1);
44         args.putParcelable(ATTACHMENT_KEY, attachment);
45         f.setArguments(args);
46 
47         return f;
48     }
49 
50     // Public no-args constructor needed for fragment re-instantiation
AttachmentProgressDialogFragment()51     public AttachmentProgressDialogFragment() {}
52 
53     @Override
onCreate(Bundle savedInstanceState)54     public void onCreate(Bundle savedInstanceState) {
55         super.onCreate(savedInstanceState);
56         final Bundle args = getArguments();
57         mAttachment = args.getParcelable(ATTACHMENT_KEY);
58     }
59 
60     @Override
onActivityCreated(Bundle savedInstanceState)61     public void onActivityCreated(Bundle savedInstanceState) {
62         super.onActivityCreated(savedInstanceState);
63         mCommandHandler = new AttachmentCommandHandler(getActivity());
64     }
65 
66     @Override
onCreateDialog(final Bundle savedInstanceState)67     public Dialog onCreateDialog(final Bundle savedInstanceState) {
68         mDialog = new ProgressDialog(getActivity());
69         mDialog.setTitle(R.string.fetching_attachment);
70         mDialog.setMessage(mAttachment.getName());
71         mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
72         mDialog.setIndeterminate(true);
73         mDialog.setMax(mAttachment.size);
74         mDialog.setProgressNumberFormat(null);
75 
76         return mDialog;
77     }
78 
79     @Override
onDismiss(DialogInterface dialog)80     public  void onDismiss(DialogInterface dialog) {
81         mDialog = null;
82         super.onDismiss(dialog);
83     }
84 
85     @Override
onCancel(DialogInterface dialog)86     public  void onCancel(DialogInterface dialog) {
87         mDialog = null;
88 
89         // This needs to cancel the attachment
90         cancelAttachment();
91         super.onCancel(dialog);
92     }
93 
cancelAttachment()94     public void cancelAttachment() {
95         final ContentValues params = new ContentValues(1);
96         params.put(AttachmentColumns.STATE, AttachmentState.NOT_SAVED);
97 
98         mCommandHandler.sendCommand(mAttachment.uri, params);
99     }
100 
setProgress(int progress)101     public void setProgress(int progress) {
102         if (mDialog != null) {
103             mDialog.setProgress(progress);
104         }
105     }
106 
isIndeterminate()107     public boolean isIndeterminate() {
108         return mDialog != null && mDialog.isIndeterminate();
109     }
110 
setIndeterminate(boolean indeterminate)111     public void setIndeterminate(boolean indeterminate) {
112         if (mDialog != null) {
113             mDialog.setIndeterminate(indeterminate);
114         }
115     }
116 
isShowingDialogForAttachment(Attachment attachment)117     public boolean isShowingDialogForAttachment(Attachment attachment) {
118         return getDialog() != null
119                 && Objects.equal(attachment.getIdentifierUri(), mAttachment.getIdentifierUri());
120     }
121 }
122