/* * Copyright (C) 2012 The CyanogenMod Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.cyanogenmod.filemanager.ui.dialogs; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.text.Spanned; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.ui.ThemeManager; import com.cyanogenmod.filemanager.ui.ThemeManager.Theme; import com.cyanogenmod.filemanager.util.DialogHelper; /** * A class that wraps a dialog for showing a progress with text message (non graphical). */ public class MessageProgressDialog implements DialogInterface.OnClickListener { /** * A class for listen program cancellation events. */ public interface OnCancelListener { /** * Fires when a cancel were requested. * * @return boolean If the cancel can be done */ boolean onCancel(); } /** * @hide */ final Context mContext; /** * @hide */ final AlertDialog mDialog; private final TextView mProgress; /** * @hide */ OnCancelListener mOnCancelListener; /** * Constructor of <code>MessageProgressDialog</code>. * * * @param context The current context * @param iconResourceId The icon dialog resource identifier * @param titleResourceId The title dialog resource identifier * @param labelResourceId The label resource identifier * @param cancellable If the dialog is cancellable */ public MessageProgressDialog( Context context, int iconResourceId, int titleResourceId, int labelResourceId, boolean cancellable) { this(context, iconResourceId, titleResourceId, context.getResources().getString(labelResourceId), cancellable); } /** * Constructor of <code>MessageProgressDialog</code>. * * * @param context The current context * @param iconResourceId The icon dialog resource identifier * @param titleResourceId The title dialog resource identifier * @param labelMsg The label message * @param cancellable If the dialog is cancellable */ public MessageProgressDialog( Context context, int iconResourceId, int titleResourceId, String labelMsg, boolean cancellable) { super(); //Save the context this.mContext = context; //Create the layout LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup layout = (ViewGroup)li.inflate(R.layout.message_progress_dialog, null); final TextView labelView = (TextView)layout.findViewById(R.id.message_progress_dialog_label); labelView.setText(labelMsg); this.mProgress = (TextView)layout.findViewById(R.id.message_progress_dialog_progress); // Apply the current theme Theme theme = ThemeManager.getCurrentTheme(context); theme.setBackgroundDrawable(context, layout, "background_drawable"); //$NON-NLS-1$ theme.setTextColor(context, labelView, "text_color"); //$NON-NLS-1$ theme.setTextColor(context, this.mProgress, "text_color"); //$NON-NLS-1$ //Create the dialog this.mDialog = DialogHelper.createDialog( context, iconResourceId, titleResourceId, layout); this.mDialog.setButton( DialogInterface.BUTTON_NEUTRAL, context.getString(android.R.string.cancel), this); this.mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // Disable cancel button MessageProgressDialog.this.mDialog.getButton( DialogInterface.BUTTON_NEUTRAL).setEnabled(false); // Wait for cancellation if (MessageProgressDialog.this.mOnCancelListener != null) { if (!MessageProgressDialog.this.mOnCancelListener.onCancel()) { //The operation couldn't be cancelled DialogHelper.showToast( MessageProgressDialog.this.mContext, R.string.msgs_operation_can_not_be_cancelled, Toast.LENGTH_SHORT); } } } }); // Is cancellable this.mDialog.setCancelable(cancellable); if (!cancellable) { this.mProgress.post(new Runnable() { @Override public void run() { MessageProgressDialog.this.mDialog.getButton( DialogInterface.BUTTON_NEUTRAL).setEnabled(false); } }); } //Initialize the progress this.mProgress.setText(null); } /** * Method that sets the cancel listener. * * @param onCancelListener The cancel listener */ public void setOnCancelListener(OnCancelListener onCancelListener) { this.mOnCancelListener = onCancelListener; } /** * Method that sets the progress of the action. * * @param progress The progress of progress of the action */ public void setProgress(Spanned progress) { this.mProgress.setText(progress); } /** * Method that shows the dialog. */ public void show() { DialogHelper.delegateDialogShow(this.mContext, this.mDialog); } /** * Method that dismiss the dialog. */ public void dismiss() { this.mDialog.dismiss(); } /** * {@inheritDoc} */ @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_NEUTRAL: this.mDialog.cancel(); break; default: break; } } }