package com.xabber.android.ui.dialog; import android.app.Activity; 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.account.AccountErrorEvent; import com.xabber.android.data.account.AccountManager; import com.xabber.android.ui.activity.AccountActivity; import com.xabber.android.ui.activity.AccountSettingsActivity; public class AccountErrorDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { public static final String ARGUMENT_ACCOUNT = AccountErrorDialogFragment.class.getName() + "ARGUMENT_ACCOUNT"; private static final String ARGUMENT_ERROR_EVENT = AccountErrorDialogFragment.class.getName() + "ARGUMENT_ERROR_EVENT"; private AccountErrorEvent accountErrorEvent; public static DialogFragment newInstance(AccountErrorEvent accountErrorEvent) { AccountErrorDialogFragment fragment = new AccountErrorDialogFragment(); Bundle arguments = new Bundle(); arguments.putSerializable(ARGUMENT_ERROR_EVENT, accountErrorEvent); fragment.setArguments(arguments); return fragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); accountErrorEvent = (AccountErrorEvent) args.getSerializable(ARGUMENT_ERROR_EVENT); return new AlertDialog.Builder(getActivity()) .setTitle(AccountManager.getInstance().getVerboseName(accountErrorEvent.getAccount())) .setView(setUpDialogView()) .setPositiveButton(R.string.account_error_settings, this) .create(); } @NonNull private View setUpDialogView() { View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_account_error, null); TextView mainTextView = (TextView) view.findViewById(R.id.account_error_main_text); switch (accountErrorEvent.getType()) { case AUTHORIZATION: mainTextView.setText(R.string.AUTHENTICATION_FAILED); break; case CONNECTION: mainTextView.setText(R.string.CONNECTION_FAILED); break; } final TextView detailTextView = (TextView) view.findViewById(R.id.account_error_detail_text); detailTextView.setText(accountErrorEvent.getMessage()); detailTextView.setVisibility(View.GONE); final ImageView expandIcon = (ImageView) view.findViewById(R.id.account_error_expand_icon); View mainTextPanel = view.findViewById(R.id.account_error_main_text_panel); mainTextPanel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (detailTextView.getVisibility() == View.VISIBLE) { detailTextView.setVisibility(View.GONE); expandIcon.setImageResource(R.drawable.ic_expand_more_grey600_24dp); } else { detailTextView.setVisibility(View.VISIBLE); expandIcon.setImageResource(R.drawable.ic_expand_less_grey600_24dp); } } }); return view; } @Override public void onClick(DialogInterface dialog, int which) { if (which == Dialog.BUTTON_POSITIVE) { Activity activity = getActivity(); if (activity instanceof AccountActivity) { activity.finish(); } if (activity instanceof AccountSettingsActivity) { AccountManager.getInstance().removeAccountError(accountErrorEvent.getAccount()); } else { startActivity(AccountActivity.createConnectionSettingsIntent(activity, accountErrorEvent.getAccount())); } } } }