/* * 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. * *
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 null
*
.
*/
protected DialogInterface.OnClickListener mPositiveButtonListener;
/**
* Click listener for the negative button. Negative button should hide if this is null
*
.
*/
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.
*
*
Will hide button bar if all buttons are hidden (i.e. their click listeners are null
*
).
*
* @param whichButton {@link DialogInterface.BUTTON_POSITIVE} or {@link
* DialogInterface.BUTTON_NEGATIVE}
* @param listener the listener to set for the button. Hide button if null
.
*/
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 setButton(DialogInterface.BUTTON_POSITIVE, listener)
.
*
* @param listener the listener for the positive button.
*/
public void setPositiveButton(DialogInterface.OnClickListener listener) {
setButton(DialogInterface.BUTTON_POSITIVE, listener);
}
/**
* Convenience method for setButton(DialogInterface.BUTTON_NEGATIVE, listener)
.
*
* @param listener the listener for the positive button.
*/
public void setNegativeButton(DialogInterface.OnClickListener listener) {
setButton(DialogInterface.BUTTON_NEGATIVE, listener);
}
}