From a3723849baeec57260a83e01131e6db612a4ec44 Mon Sep 17 00:00:00 2001 From: Hans Boehm Date: Wed, 24 Jun 2015 17:54:13 -0700 Subject: Reimplement overflow menu messages as DialogFragments Bug: 20650813 This preserves fraction and "with leading digits" displays during rotation. It also turns out to easily support copy, which is a useful bonus, since it was an obvious hole in the UI for the fraction display. For the "with leading digits" display, this is similar to a plain display copy, but it allows character-level selection. Much of the code here was cloned from Justin's. Change-Id: I4805280fa6a46f06833be0bde9563c3ce04dca45 --- res/layout/dialog_message.xml | 27 ++++++++++ .../android/calculator2/AlertDialogFragment.java | 61 ++++++++++++++++++++++ src/com/android/calculator2/Calculator.java | 6 +-- 3 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 res/layout/dialog_message.xml create mode 100644 src/com/android/calculator2/AlertDialogFragment.java diff --git a/res/layout/dialog_message.xml b/res/layout/dialog_message.xml new file mode 100644 index 0000000..67e6089 --- /dev/null +++ b/res/layout/dialog_message.xml @@ -0,0 +1,27 @@ + + + + diff --git a/src/com/android/calculator2/AlertDialogFragment.java b/src/com/android/calculator2/AlertDialogFragment.java new file mode 100644 index 0000000..bb7a50b --- /dev/null +++ b/src/com/android/calculator2/AlertDialogFragment.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2015 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.android.calculator2; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.widget.TextView; + +public class AlertDialogFragment extends DialogFragment { + + private static final String NAME = AlertDialogFragment.class.getName(); + private static final String KEY_MESSAGE = NAME + "_message"; + private static final String KEY_BUTTON_NEGATIVE = NAME + "_button_negative"; + + public static void showMessageDialog(Activity activity, CharSequence message) { + final Bundle args = new Bundle(); + args.putCharSequence(KEY_MESSAGE, message); + args.putCharSequence(KEY_BUTTON_NEGATIVE, activity.getString(R.string.dismiss)); + + final AlertDialogFragment dialogFragment = new AlertDialogFragment(); + dialogFragment.setArguments(args); + dialogFragment.show(activity.getFragmentManager(), null /* tag */); + } + + public AlertDialogFragment() { + setStyle(STYLE_NO_TITLE, android.R.attr.alertDialogTheme); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final Bundle args = getArguments() == null ? Bundle.EMPTY : getArguments(); + final Context context = getContext(); + final LayoutInflater inflater = LayoutInflater.from(context); + final TextView textView = (TextView) inflater.inflate(R.layout.dialog_message, + null /* root */); + textView.setText(args.getCharSequence(KEY_MESSAGE)); + return new AlertDialog.Builder(context) + .setView(textView) + .setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */) + .create(); + } +} diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java index 65c668b..28d3312 100644 --- a/src/com/android/calculator2/Calculator.java +++ b/src/com/android/calculator2/Calculator.java @@ -34,7 +34,6 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.app.Activity; -import android.app.AlertDialog; import android.content.ClipData; import android.content.Intent; import android.content.res.Resources; @@ -870,10 +869,7 @@ public class Calculator extends Activity } private void displayMessage(String s) { - new AlertDialog.Builder(this) - .setMessage(s) - .setNegativeButton(R.string.dismiss, null /* listener */) - .show(); + AlertDialogFragment.showMessageDialog(this, s); } private void displayFraction() { -- cgit v1.2.3