package org.wordpress.android.ui.accounts;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.helpshift.support.Support;
import org.wordpress.android.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.fluxc.store.AccountStore;
import org.wordpress.android.fluxc.store.SiteStore;
import org.wordpress.android.ui.ActivityLauncher;
import org.wordpress.android.ui.AppLogViewerActivity;
import org.wordpress.android.util.HelpshiftHelper;
import org.wordpress.android.util.HelpshiftHelper.MetadataKey;
import org.wordpress.android.util.HelpshiftHelper.Tag;
import org.wordpress.android.widgets.WPTextView;
import javax.inject.Inject;
public class SignInDialogFragment extends DialogFragment {
private static String ARG_TITLE = "title";
private static String ARG_DESCRIPTION = "message";
private static String ARG_IMAGE = "image";
private static String ARG_NUMBER_OF_BUTTONS = "number-of-buttons";
private static String ARG_FIRST_BUTTON_LABEL = "first-btn-label";
private static String ARG_SECOND_BUTTON_LABEL = "second-btn-label";
private static String ARG_THIRD_BUTTON_LABEL = "third-btn-label";
private static String ARG_SECOND_BUTTON_ACTION = "second-btn-action";
private static String ARG_THIRD_BUTTON_ACTION = "third-btn-action";
private static String ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_FAQ_ID = "tell-me-more-btn-param-name-faq-id";
private static String ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_SECTION_ID = "tell-me-more-btn-param-name-section-id";
public static String ARG_OPEN_URL_PARAM = "open-url-param";
public static final int ACTION_FINISH = 1;
public static final int ACTION_OPEN_URL = 2;
public static final int ACTION_OPEN_SUPPORT_CHAT = 3;
public static final int ACTION_OPEN_APPLICATION_LOG = 4;
public static final int ACTION_OPEN_FAQ_PAGE = 5;
@Inject AccountStore mAccountStore;
@Inject SiteStore mSiteStore;
public SignInDialogFragment() {
// Empty constructor required for DialogFragment
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((WordPress) getActivity().getApplication()).component().inject(this);
}
public static SignInDialogFragment newInstance(String title, String message, int imageSource, String buttonLabel) {
return newInstance(title, message, imageSource, 1, buttonLabel, "", "", 0, 0, "", "");
}
public static SignInDialogFragment newInstance(String title, String message, int imageSource, int numberOfButtons,
String firstButtonLabel, String secondButtonLabel,
String thirdButtonLabel, int secondButtonAction,
int thirdButtonAction) {
return newInstance(title, message, imageSource, numberOfButtons, firstButtonLabel, secondButtonLabel,
thirdButtonLabel, secondButtonAction, thirdButtonAction, "", "");
}
public static SignInDialogFragment newInstance(String title, String message, int imageSource, int numberOfButtons,
String firstButtonLabel, String secondButtonLabel,
String thirdButtonLabel,
int secondButtonAction, int thirdButtonAction,
String tellMeMoreButtonFaqId, String tellMeMoreButtonSectionId) {
SignInDialogFragment adf = new SignInDialogFragment();
Bundle bundle = new Bundle();
bundle.putString(ARG_TITLE, title);
bundle.putString(ARG_DESCRIPTION, message);
bundle.putInt(ARG_IMAGE, imageSource);
bundle.putInt(ARG_NUMBER_OF_BUTTONS, numberOfButtons);
bundle.putString(ARG_FIRST_BUTTON_LABEL, firstButtonLabel);
bundle.putString(ARG_SECOND_BUTTON_LABEL, secondButtonLabel);
bundle.putString(ARG_THIRD_BUTTON_LABEL, thirdButtonLabel);
bundle.putInt(ARG_SECOND_BUTTON_ACTION, secondButtonAction);
bundle.putInt(ARG_THIRD_BUTTON_ACTION, thirdButtonAction);
bundle.putString(ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_FAQ_ID, tellMeMoreButtonFaqId);
bundle.putString(ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_SECTION_ID, tellMeMoreButtonSectionId);
adf.setArguments(bundle);
adf.setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme);
return adf;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (getDialog().getWindow() != null) {
getDialog().getWindow().setBackgroundDrawable(getResources().getDrawable(R.color.nux_alert_bg));
}
View v = inflater.inflate(R.layout.signin_dialog_fragment, container, false);
ImageView imageView = (ImageView) v.findViewById(R.id.nux_dialog_image);
WPTextView titleTextView = (WPTextView) v.findViewById(R.id.nux_dialog_title);
WPTextView descriptionTextView = (WPTextView) v.findViewById(R.id.nux_dialog_description);
WPTextView footerBottomButton = (WPTextView) v.findViewById(R.id.nux_dialog_first_button);
WPTextView footerTopButton = (WPTextView) v.findViewById(R.id.nux_dialog_third_button);
WPTextView footerCenterButton = (WPTextView) v.findViewById(R.id.nux_dialog_second_button);
final Bundle arguments = getArguments();
titleTextView.setText(arguments.getString(ARG_TITLE));
descriptionTextView.setText(arguments.getString(ARG_DESCRIPTION));
imageView.setImageResource(arguments.getInt(ARG_IMAGE));
View.OnClickListener clickListenerDismiss = new View.OnClickListener() {
@Override
public void onClick(View v) {
dismissAllowingStateLoss();
}
};
View.OnClickListener clickListenerSecondButton = new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickAction(v, arguments.getInt(ARG_SECOND_BUTTON_ACTION, 0), arguments);
}
};
View.OnClickListener clickListenerThirdButton = new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickAction(v, arguments.getInt(ARG_THIRD_BUTTON_ACTION, 0), arguments);
}
};
switch (arguments.getInt(ARG_NUMBER_OF_BUTTONS, 1)) {
case 1:
// One button: we keep only the centered button
footerCenterButton.setText(arguments.getString(ARG_FIRST_BUTTON_LABEL));
footerCenterButton.setOnClickListener(clickListenerDismiss);
footerBottomButton.setVisibility(View.GONE);
footerTopButton.setVisibility(View.GONE);
break;
case 2:
// Two buttons: we keep only the left and right buttons
footerBottomButton.setText(arguments.getString(ARG_FIRST_BUTTON_LABEL));
footerTopButton.setText(arguments.getString(ARG_SECOND_BUTTON_LABEL));
footerCenterButton.setVisibility(View.GONE);
footerTopButton.setOnClickListener(clickListenerSecondButton);
break;
case 3:
footerBottomButton.setText(arguments.getString(ARG_FIRST_BUTTON_LABEL));
footerCenterButton.setText(arguments.getString(ARG_SECOND_BUTTON_LABEL));
footerCenterButton.setOnClickListener(clickListenerSecondButton);
footerTopButton.setText(arguments.getString(ARG_THIRD_BUTTON_LABEL));
footerTopButton.setOnClickListener(clickListenerThirdButton);
break;
}
v.setClickable(true);
v.setOnClickListener(clickListenerDismiss);
footerBottomButton.setOnClickListener(clickListenerDismiss);
return v;
}
private void onClickAction(View v, int action, Bundle arguments) {
if (!isAdded()) {
return;
}
switch (action) {
case ACTION_OPEN_URL:
String url = arguments.getString(ARG_OPEN_URL_PARAM);
if (TextUtils.isEmpty(url)) {
return;
}
ActivityLauncher.openUrlExternal(getContext(), url);
break;
case ACTION_OPEN_SUPPORT_CHAT:
HelpshiftHelper.getInstance().addMetaData(MetadataKey.USER_ENTERED_URL, arguments.getString(
SignInFragment.ENTERED_URL_KEY));
HelpshiftHelper.getInstance().addMetaData(MetadataKey.USER_ENTERED_USERNAME, arguments.getString(
SignInFragment.ENTERED_USERNAME_KEY));
Tag origin = (Tag) arguments.getSerializable(HelpshiftHelper.ORIGIN_KEY);
HelpshiftHelper.getInstance().showConversation(getActivity(), mSiteStore,
origin, mAccountStore.getAccount().getUserName());
dismissAllowingStateLoss();
break;
case ACTION_OPEN_APPLICATION_LOG:
startActivity(new Intent(v.getContext(), AppLogViewerActivity.class));
dismissAllowingStateLoss();
break;
case ACTION_OPEN_FAQ_PAGE:
String faqId = arguments.getString(ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_FAQ_ID);
String sectionId = arguments.getString(ARG_TELL_ME_MORE_BUTTON_PARAM_NAME_SECTION_ID);
if (faqId != null) {
Support.showSingleFAQ(getActivity(), faqId);
} else if (sectionId != null) {
Support.showFAQSection(getActivity(), sectionId);
}
break;
default:
case ACTION_FINISH:
getActivity().finish();
break;
}
}
}