package com.xabber.android.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.entity.AccountJid;
import com.xabber.android.data.entity.UserJid;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.color.AccountPainter;
import com.xabber.android.ui.color.ColorManager;
public abstract class BaseContactDialog extends DialogFragment
implements DialogInterface.OnClickListener, DialogInterface.OnShowListener {
public static final String ARGUMENT_ACCOUNT = "com.xabber.android.ui.dialog.BaseContactDialog.ARGUMENT_ACCOUNT";
public static final String ARGUMENT_CONTACT = "com.xabber.android.ui.dialog.BaseContactDialog.ARGUMENT_CONTACT";
private AccountJid account;
private UserJid contact;
private AccountPainter accountPainter;
private AlertDialog dialog;
protected abstract int getDialogTitleTextResource();
protected abstract String getMessage();
protected abstract int getNegativeButtonTextResource();
protected abstract int getPositiveButtonTextResource();
protected abstract Integer getNeutralButtonTextResourceOrNull();
protected abstract void onPositiveButtonClick();
protected abstract void onNegativeButtonClick();
protected abstract void onNeutralButtonClick();
protected static void setArguments(AccountJid account, UserJid contact, DialogFragment fragment) {
Bundle arguments = new Bundle();
arguments.putParcelable(ARGUMENT_ACCOUNT, account);
arguments.putParcelable(ARGUMENT_CONTACT, contact);
fragment.setArguments(arguments);
}
protected AccountJid getAccount() {
return account;
}
protected UserJid getContact() {
return contact;
}
protected void setUpContactTitleView(View view) {
final AbstractContact bestContact = RosterManager.getInstance().getBestContact(account, contact);
((ImageView)view.findViewById(R.id.avatar)).setImageDrawable(bestContact.getAvatar());
((TextView)view.findViewById(R.id.name)).setText(bestContact.getName());
((TextView)view.findViewById(R.id.status_text)).setText(contact.toString());
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments();
account = args.getParcelable(ARGUMENT_ACCOUNT);
contact = args.getParcelable(ARGUMENT_CONTACT);
accountPainter = ColorManager.getInstance().getAccountPainter();
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setCustomTitle(setUpDialogTitle())
.setView(setUpDialogView())
.setPositiveButton(getPositiveButtonTextResource(), this)
.setNegativeButton(getNegativeButtonTextResource(), this);
final Integer neutralButtonTextResource = getNeutralButtonTextResourceOrNull();
if (neutralButtonTextResource != null) {
builder.setNeutralButton(neutralButtonTextResource, this);
}
dialog = builder.create();
dialog.setOnShowListener(this);
return dialog;
}
@NonNull
private View setUpDialogTitle() {
View dialogTitleView = getActivity().getLayoutInflater().inflate(R.layout.dialog_title, null);
final TextView dialogTitle = (TextView) dialogTitleView.findViewById(R.id.dialog_title_text_view);
dialogTitle.setTextColor(accountPainter.getAccountTextColor(account));
dialogTitle.setText(getDialogTitleTextResource());
return dialogTitleView;
}
@NonNull
private View setUpDialogView() {
View view = getActivity().getLayoutInflater().inflate(R.layout.contact_title_dialog, null);
setUpContactTitleView(view);
((TextView)view.findViewById(R.id.dialog_message)).setText(getMessage());
return view;
}
@Override
public void onShow(DialogInterface dialog) {
this.dialog.getButton(Dialog.BUTTON_POSITIVE).setTextColor(accountPainter.getAccountTextColor(account));
this.dialog.getButton(Dialog.BUTTON_NEGATIVE).setTextColor(accountPainter.getGreyMain());
this.dialog.getButton(Dialog.BUTTON_NEUTRAL).setTextColor(accountPainter.getGreyMain());
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case Dialog.BUTTON_POSITIVE:
onPositiveButtonClick();
break;
case Dialog.BUTTON_NEUTRAL:
onNeutralButtonClick();
break;
case Dialog.BUTTON_NEGATIVE:
onNegativeButtonClick();
break;
}
}
}