summaryrefslogtreecommitdiffstats
path: root/src/android/support/wearable/view/AcceptDenyDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/support/wearable/view/AcceptDenyDialog.java')
-rw-r--r--src/android/support/wearable/view/AcceptDenyDialog.java182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/android/support/wearable/view/AcceptDenyDialog.java b/src/android/support/wearable/view/AcceptDenyDialog.java
new file mode 100644
index 00000000..8961ee71
--- /dev/null
+++ b/src/android/support/wearable/view/AcceptDenyDialog.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2016 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 android.support.wearable.view;
+
+import android.annotation.TargetApi;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.support.annotation.StyleRes;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.Space;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+
+/**
+ * A dialog to display a title, a message, and/or an icon with a positive and a negative button.
+ *
+ * <p>The buttons are hidden away unless there is a listener attached to the button. Since there's
+ * no click listener attached by default, the buttons are hidden be default.
+ */
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+public class AcceptDenyDialog extends Dialog {
+ /** Icon at the top of the dialog. */
+ protected ImageView mIcon;
+ /** Title at the top of the dialog. */
+ protected TextView mTitle;
+ /** Message content of the dialog. */
+ protected TextView mMessage;
+ /** Panel containing the buttons. */
+ protected View mButtonPanel;
+ /** Positive button in the button panel. */
+ protected ImageButton mPositiveButton;
+ /** Negative button in the button panel. */
+ protected ImageButton mNegativeButton;
+ /**
+ * Click listener for the positive button. Positive button should hide if this is <code>null
+ * </code>.
+ */
+ protected DialogInterface.OnClickListener mPositiveButtonListener;
+ /**
+ * Click listener for the negative button. Negative button should hide if this is <code>null
+ * </code>.
+ */
+ protected DialogInterface.OnClickListener mNegativeButtonListener;
+ /** Spacer between the positive and negative button. Hidden if one button is hidden. */
+ protected View mSpacer;
+
+ private final View.OnClickListener mButtonHandler = (v) -> {
+ if (v == mPositiveButton && mPositiveButtonListener != null) {
+ mPositiveButtonListener.onClick(this, DialogInterface.BUTTON_POSITIVE);
+ dismiss();
+ } else if (v == mNegativeButton && mNegativeButtonListener != null) {
+ mNegativeButtonListener.onClick(this, DialogInterface.BUTTON_NEGATIVE);
+ dismiss();
+ }
+ };
+
+ public AcceptDenyDialog(Context context) {
+ this(context, 0 /* use default context theme */);
+ }
+
+ public AcceptDenyDialog(Context context, @StyleRes int themeResId) {
+ super(context, themeResId);
+
+ setContentView(R.layout.accept_deny_dialog);
+
+ mTitle = (TextView) findViewById(android.R.id.title);
+ mMessage = (TextView) findViewById(android.R.id.message);
+ mIcon = (ImageView) findViewById(android.R.id.icon);
+ mPositiveButton = (ImageButton) findViewById(android.R.id.button1);
+ mPositiveButton.setOnClickListener(mButtonHandler);
+ mNegativeButton = (ImageButton) findViewById(android.R.id.button2);
+ mNegativeButton.setOnClickListener(mButtonHandler);
+ mSpacer = (Space) findViewById(R.id.spacer);
+ mButtonPanel = findViewById(R.id.buttonPanel);
+ }
+
+ public ImageButton getButton(int whichButton) {
+ switch (whichButton) {
+ case DialogInterface.BUTTON_POSITIVE:
+ return mPositiveButton;
+ case DialogInterface.BUTTON_NEGATIVE:
+ return mNegativeButton;
+ default:
+ return null;
+ }
+ }
+
+ public void setIcon(Drawable icon) {
+ mIcon.setVisibility(icon == null ? View.GONE : View.VISIBLE);
+ mIcon.setImageDrawable(icon);
+ }
+
+ /**
+ * @param resId the resourceId of the drawable to use as the icon or 0 if you don't want an icon.
+ */
+ public void setIcon(int resId) {
+ mIcon.setVisibility(resId == 0 ? View.GONE : View.VISIBLE);
+ mIcon.setImageResource(resId);
+ }
+
+ /** @param message the content message text of the dialog. */
+ public void setMessage(CharSequence message) {
+ mMessage.setText(message);
+ mMessage.setVisibility(message == null ? View.GONE : View.VISIBLE);
+ }
+
+ /** @param title the title text of the dialog. */
+ @Override
+ public void setTitle(CharSequence title) {
+ mTitle.setText(title);
+ }
+
+ /**
+ * Sets a click listener for a button.
+ *
+ * <p>Will hide button bar if all buttons are hidden (i.e. their click listeners are <code>null
+ * </code>).
+ *
+ * @param whichButton {@link DialogInterface.BUTTON_POSITIVE} or {@link
+ * DialogInterface.BUTTON_NEGATIVE}
+ * @param listener the listener to set for the button. Hide button if <code>null</code>.
+ */
+ public void setButton(int whichButton, DialogInterface.OnClickListener listener) {
+ switch (whichButton) {
+ case DialogInterface.BUTTON_POSITIVE:
+ mPositiveButtonListener = listener;
+ break;
+ case DialogInterface.BUTTON_NEGATIVE:
+ mNegativeButtonListener = listener;
+ break;
+ default:
+ return;
+ }
+
+ mSpacer.setVisibility(mPositiveButtonListener == null || mNegativeButtonListener == null
+ ? View.GONE : View.INVISIBLE);
+ mPositiveButton.setVisibility(
+ mPositiveButtonListener == null ? View.GONE : View.VISIBLE);
+ mNegativeButton.setVisibility(
+ mNegativeButtonListener == null ? View.GONE : View.VISIBLE);
+ mButtonPanel.setVisibility(
+ mPositiveButtonListener == null && mNegativeButtonListener == null
+ ? View.GONE : View.VISIBLE);
+ }
+
+ /**
+ * Convenience method for <code>setButton(DialogInterface.BUTTON_POSITIVE, listener)</code>.
+ *
+ * @param listener the listener for the positive button.
+ */
+ public void setPositiveButton(DialogInterface.OnClickListener listener) {
+ setButton(DialogInterface.BUTTON_POSITIVE, listener);
+ }
+
+ /**
+ * Convenience method for <code>setButton(DialogInterface.BUTTON_NEGATIVE, listener)</code>.
+ *
+ * @param listener the listener for the positive button.
+ */
+ public void setNegativeButton(DialogInterface.OnClickListener listener) {
+ setButton(DialogInterface.BUTTON_NEGATIVE, listener);
+ }
+}