| /* |
| * Copyright (C) 2011 The Android Open Source 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.example.android.voicemail.common.ui; |
| |
| import android.app.Activity; |
| import android.app.AlertDialog; |
| import android.app.Dialog; |
| import android.os.Bundle; |
| |
| /** |
| * Uses an {@link Activity} to show Dialogs. |
| * <p> |
| * Instantiate this class inside your Activity. |
| * |
| * <pre class="code"> |
| * private final DialogHelperImpl mDialogHelper = new DialogHelperImpl(this); |
| * </pre> |
| * <p> |
| * Override your Activity's onCreateDialog(int, Bundle) method, as follows: |
| * |
| * <pre class="code"> |
| * @Override |
| * protected Dialog onCreateDialog(int id, Bundle bundle) { |
| * return mDialogHelper.handleOnCreateDialog(id, bundle); |
| * } |
| * </pre> |
| * <p> |
| * Now you can pass mDialogHelper around as a {@link DialogHelper} interface, and code that wants to |
| * show a Dialog can call a method like this: |
| * |
| * <pre class="code"> |
| * mDialogHelper.showErrorMessageDialog("An exception occurred!", e); |
| * </pre> |
| * <p> |
| * If you want more flexibility, and want to mix this implementation with your own dialogs, then you |
| * should do something like this in your Activity: |
| * |
| * <pre class="code"> |
| * @Override |
| * protected Dialog onCreateDialog(int id, Bundle bundle) { |
| * switch (id) { |
| * case ID_MY_OTHER_DIALOG: |
| * return new AlertDialog.Builder(this) |
| * .setTitle("something") |
| * .create(); |
| * default: |
| * return mDialogHelper.handleOnCreateDialog(id, bundle); |
| * } |
| * } |
| * </pre> |
| * |
| * Just be careful that you don't pick any IDs that conflict with those used by this class (which |
| * are documented in the public static final fields). |
| */ |
| public class DialogHelperImpl implements DialogHelper { |
| public static final int DIALOG_ID_EXCEPTION = 88953588; |
| |
| private static final String KEY_EXCEPTION = "exception"; |
| private static final String KEY_TITLE = "title"; |
| |
| private final Activity mActivity; |
| |
| public DialogHelperImpl(Activity activity) { |
| mActivity = activity; |
| } |
| |
| @Override |
| public void showErrorMessageDialog(int titleId, Exception exception) { |
| showErrorMessageDialog(mActivity.getString(titleId), exception); |
| } |
| |
| @Override |
| public void showErrorMessageDialog(String title, Exception exception) { |
| Bundle bundle = new Bundle(); |
| bundle.putString(KEY_TITLE, title); |
| bundle.putSerializable(KEY_EXCEPTION, exception); |
| mActivity.showDialog(DIALOG_ID_EXCEPTION, bundle); |
| } |
| |
| /** |
| * You should call this method from your Activity's onCreateDialog(int, Bundle) method. |
| */ |
| public Dialog handleOnCreateDialog(int id, Bundle args) { |
| if (id == DIALOG_ID_EXCEPTION) { |
| Exception exception = (Exception) args.getSerializable(KEY_EXCEPTION); |
| String title = args.getString(KEY_TITLE); |
| return new AlertDialog.Builder(mActivity) |
| .setTitle(title) |
| .setMessage(convertExceptionToErrorMessage(exception)) |
| .setCancelable(true) |
| .create(); |
| } |
| return null; |
| } |
| |
| private String convertExceptionToErrorMessage(Exception exception) { |
| StringBuilder sb = new StringBuilder().append(exception.getClass().getSimpleName()); |
| if (exception.getMessage() != null) { |
| sb.append("\n"); |
| sb.append(exception.getMessage()); |
| } |
| return sb.toString(); |
| } |
| } |