package com.appboy.sample;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Spinner;
import android.widget.Toast;
import com.appboy.Appboy;
import com.appboy.Constants;
import com.appboy.enums.inappmessage.ClickAction;
import com.appboy.enums.inappmessage.CropType;
import com.appboy.enums.inappmessage.DismissType;
import com.appboy.enums.inappmessage.ImageStyle;
import com.appboy.enums.inappmessage.Orientation;
import com.appboy.enums.inappmessage.SlideFrom;
import com.appboy.enums.inappmessage.TextAlign;
import com.appboy.models.IInAppMessage;
import com.appboy.models.IInAppMessageHtml;
import com.appboy.models.IInAppMessageImmersive;
import com.appboy.models.InAppMessageFull;
import com.appboy.models.InAppMessageHtmlFull;
import com.appboy.models.InAppMessageModal;
import com.appboy.models.InAppMessageSlideup;
import com.appboy.models.MessageButton;
import com.appboy.sample.util.SpinnerUtils;
import com.appboy.ui.AppboyNavigator;
import com.appboy.ui.inappmessage.AppboyInAppMessageManager;
import com.appboy.ui.inappmessage.config.AppboyInAppMessageParams;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class InAppMessageTesterFragment extends Fragment implements AdapterView.OnItemSelectedListener {
protected static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, InAppMessageTesterFragment.class.getName());
private enum HtmlMessageType {
NO_JS, INLINE_JS, EXTERNAL_JS, STAR_WARS, YOUTUBE, BRIDGE_TESTER
}
private static final String CUSTOM_INAPPMESSAGE_VIEW_KEY = "inapmessages_custom_inappmessage_view";
private static final String CUSTOM_INAPPMESSAGE_MANAGER_LISTENER_KEY = "inappmessages_custom_inappmessage_manager_listener";
private static final String CUSTOM_APPBOY_NAVIGATOR_KEY = "inappmessages_custom_appboy_navigator";
private static final String CUSTOM_INAPPMESSAGE_ANIMATION_KEY = "inappmessages_custom_inappmessage_animation";
private static final String CUSTOM_HTML_INAPPMESSAGE_ACTION_LISTENER_KEY = "inappmessages_custom_appboy_html_inappmessage_action_listener";
private static final String CUSTOM_INAPPMESSAGE_GRAPHIC_MODAL_MAX_SIZE = "inappmessages_custom_appboy_graphic_modal_max_size";
private static final String CUSTOM_INAPPMESSAGE_IMAGE_RADIUS = "inappmessages_custom_appboy_image_radius";
// color reference: http://www.google.com/design/spec/style/color.html
private static final int APPBOY_RED = 0xFFf33e3e;
private static final int GOOGLE_ORANGE = 0xFFFF5722;
private static final int GOOGLE_YELLOW = 0xFFFFEB3B;
private static final int GOOGLE_GREEN = 0xFF4CAF50;
private static final int APPBOY_BLUE = 0xFF0073d5;
private static final int TRANSPARENT_APPBOY_BLUE = 0x220073d5;
private static final int GOOGLE_PURPLE = 0xFF673AB7;
private static final int GOOGLE_BROWN = 0xFF795548;
private static final int GOOGLE_GREY = 0xFF9E9E9E;
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
private static final Map<Integer, Integer> sSpinnerOptionMap;
static {
Map<Integer, Integer> spinnerOptionMap = new HashMap<Integer, Integer>();
spinnerOptionMap.put(R.id.inapp_set_message_type_spinner, R.array.inapp_message_type_options);
spinnerOptionMap.put(R.id.inapp_click_action_spinner, R.array.inapp_click_action_options);
spinnerOptionMap.put(R.id.inapp_dismiss_type_spinner, R.array.inapp_dismiss_type_options);
spinnerOptionMap.put(R.id.inapp_slide_from_spinner, R.array.inapp_slide_from_options);
spinnerOptionMap.put(R.id.inapp_header_spinner, R.array.inapp_header_options);
spinnerOptionMap.put(R.id.inapp_message_spinner, R.array.inapp_message_options);
spinnerOptionMap.put(R.id.inapp_background_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_icon_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_icon_background_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_close_button_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_text_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_header_text_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_button_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_button_text_color_spinner, R.array.inapp_color_options);
spinnerOptionMap.put(R.id.inapp_frame_spinner, R.array.inapp_frame_options);
spinnerOptionMap.put(R.id.inapp_uri_spinner, R.array.inapp_uri_options);
spinnerOptionMap.put(R.id.inapp_icon_spinner, R.array.inapp_icon_options);
spinnerOptionMap.put(R.id.inapp_image_spinner, R.array.inapp_image_options);
spinnerOptionMap.put(R.id.inapp_button_spinner, R.array.inapp_button_options);
spinnerOptionMap.put(R.id.inapp_orientation_spinner, R.array.inapp_orientation_options);
spinnerOptionMap.put(R.id.inapp_header_align_spinner, R.array.inapp_align_options);
spinnerOptionMap.put(R.id.inapp_message_align_spinner, R.array.inapp_align_options);
spinnerOptionMap.put(R.id.inapp_animate_in_spinner, R.array.inapp_boolean_options);
spinnerOptionMap.put(R.id.inapp_animate_out_spinner, R.array.inapp_boolean_options);
spinnerOptionMap.put(R.id.inapp_open_uri_in_webview_spinner, R.array.inapp_boolean_options);
sSpinnerOptionMap = Collections.unmodifiableMap(spinnerOptionMap);
}
private String mMessageType;
private String mClickAction;
private String mDismissType;
private String mSlideFrom;
private String mUri;
private String mHeader;
private String mMessage;
private String mBackgroundColor;
private String mIconColor;
private String mIconBackgroundColor;
private String mCloseButtonColor;
private String mTextColor;
private String mHeaderTextColor;
private String mButtonColor;
private String mButtonTextColor;
private String mFrameColor;
private String mIcon;
private String mImage;
private String mButtons;
private String mOrientation;
private String mMessageTextAlign;
private String mHeaderTextAlign;
private String mAnimateIn;
private String mAnimateOut;
private String mUseWebview;
private String mHtmlBodyFromAssets;
private String mHtmlBodyFromAssetsInlineJs;
private String mHtmlBodyFromAssetsExternalJs;
private String mHtmlBodyFromAssetsStarWars;
private String mHtmlBodyFromAssetsYoutube;
private String mHtmlBodyFromBridgeTester;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
View view = layoutInflater.inflate(R.layout.inappmessage_tester, container, false);
for (Integer key : sSpinnerOptionMap.keySet()) {
SpinnerUtils.setUpSpinner((Spinner) view.findViewById(key), this, sSpinnerOptionMap.get(key));
}
CheckBox customInAppMessageViewCheckBox = (CheckBox) view.findViewById(R.id.custom_inappmessage_view_factory_checkbox);
customInAppMessageViewCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageViewFactory(new CustomInAppMessageViewFactory());
} else {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageViewFactory(null);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_INAPPMESSAGE_VIEW_KEY, isChecked).apply();
}
});
boolean usingCustomInAppMessageView = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_VIEW_KEY, false);
customInAppMessageViewCheckBox.setChecked(usingCustomInAppMessageView);
CheckBox customInAppMessageManagerListenerCheckBox = (CheckBox) view.findViewById(R.id.custom_inappmessage_manager_listener_checkbox);
customInAppMessageManagerListenerCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageManagerListener(new CustomInAppMessageManagerListener(getActivity()));
} else {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageManagerListener(null);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_INAPPMESSAGE_MANAGER_LISTENER_KEY, isChecked).apply();
}
});
boolean usingCustomInAppMessageManagerListener = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_MANAGER_LISTENER_KEY, false);
customInAppMessageManagerListenerCheckBox.setChecked(usingCustomInAppMessageManagerListener);
CheckBox customAppboyNavigatorCheckBox = (CheckBox) view.findViewById(R.id.custom_appboy_navigator_checkbox);
customAppboyNavigatorCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyNavigator.setAppboyNavigator(new CustomAppboyNavigator());
} else {
AppboyNavigator.setAppboyNavigator(null);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_APPBOY_NAVIGATOR_KEY, isChecked).apply();
}
});
boolean usingCustomAppboyNavigator = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_APPBOY_NAVIGATOR_KEY, false);
customAppboyNavigatorCheckBox.setChecked(usingCustomAppboyNavigator);
CheckBox maxSizeCheckBox = (CheckBox) view.findViewById(R.id.custom_appboy_graphic_modal_max_size_checkbox);
maxSizeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageParams.setGraphicModalMaxHeightDp(420);
AppboyInAppMessageParams.setGraphicModalMaxWidthDp(320);
} else {
AppboyInAppMessageParams.setGraphicModalMaxHeightDp(AppboyInAppMessageParams.GRAPHIC_MODAL_MAX_HEIGHT_DP);
AppboyInAppMessageParams.setGraphicModalMaxWidthDp(AppboyInAppMessageParams.GRAPHIC_MODAL_MAX_WIDTH_DP);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_INAPPMESSAGE_GRAPHIC_MODAL_MAX_SIZE, isChecked).apply();
}
});
boolean maxSizedChecked = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_GRAPHIC_MODAL_MAX_SIZE, false);
maxSizeCheckBox.setChecked(maxSizedChecked);
CheckBox imageRadiusCheckBox = (CheckBox) view.findViewById(R.id.custom_appboy_image_radius_checkbox);
imageRadiusCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageParams.setModalizedImageRadiusDp(0);
} else {
AppboyInAppMessageParams.setModalizedImageRadiusDp(AppboyInAppMessageParams.MODALIZED_IMAGE_RADIUS_DP);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_INAPPMESSAGE_IMAGE_RADIUS, isChecked).apply();
}
});
boolean customRadiusChecked = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_IMAGE_RADIUS, false);
imageRadiusCheckBox.setChecked(customRadiusChecked);
Button createAndAddInAppMessageButton = (Button) view.findViewById(R.id.create_and_add_inappmessage_button);
createAndAddInAppMessageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_VIEW_KEY, false)) {
// current custom in-app message view is an implementation of a base in-app message.
addInAppMessage(new CustomInAppMessage());
} else {
if ("slideup".equals(mMessageType)) {
addInAppMessage(new InAppMessageSlideup());
} else if ("modal".equals(mMessageType)) {
addInAppMessage(new InAppMessageModal());
} else if ("modal_graphic".equals(mMessageType)) {
InAppMessageModal inAppMessageModal = new InAppMessageModal();
inAppMessageModal.setImageStyle(ImageStyle.GRAPHIC);
// graphic modals must be center cropped, the default for newly constructed modals
// is center_fit
inAppMessageModal.setCropType(CropType.CENTER_CROP);
addInAppMessage(inAppMessageModal);
} else if ("full".equals(mMessageType)) {
addInAppMessage(new InAppMessageFull());
} else if ("full_graphic".equals(mMessageType)) {
InAppMessageFull inAppMessageFull = new InAppMessageFull();
inAppMessageFull.setImageStyle(ImageStyle.GRAPHIC);
addInAppMessage(inAppMessageFull);
} else if ("html_full_no_js".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.NO_JS);
} else if ("html_full_inline_js".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.INLINE_JS);
} else if ("html_full_external_js".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.EXTERNAL_JS);
} else if ("html_full_star_wars".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.STAR_WARS);
} else if ("html_full_youtube".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.YOUTUBE);
} else if ("html_full_bridge_tester".equals(mMessageType)) {
addInAppMessage(new InAppMessageHtmlFull(), HtmlMessageType.BRIDGE_TESTER);
} else {
addInAppMessage(new InAppMessageSlideup());
}
}
}
});
CheckBox customInAppMessageAnimationCheckBox = (CheckBox) view.findViewById(R.id.custom_appboy_animation_checkbox);
customInAppMessageAnimationCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageAnimationFactory(new CustomInAppMessageAnimationFactory());
} else {
AppboyInAppMessageManager.getInstance().setCustomInAppMessageAnimationFactory(null);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_INAPPMESSAGE_ANIMATION_KEY, isChecked).apply();
}
});
boolean usingCustomInAppAnimation = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_INAPPMESSAGE_ANIMATION_KEY, false);
customInAppMessageAnimationCheckBox.setChecked(usingCustomInAppAnimation);
CheckBox customHtmlInAppMessageActionListenerCheckBox = (CheckBox) view.findViewById(R.id.custom_appboy_html_inappmessage_action_listener_checkbox);
customHtmlInAppMessageActionListenerCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppboyInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(new CustomHtmlInAppMessageActionListener(getContext()));
} else {
AppboyInAppMessageManager.getInstance().setCustomHtmlInAppMessageActionListener(null);
}
getActivity().getPreferences(getActivity().MODE_PRIVATE).edit().putBoolean(CUSTOM_HTML_INAPPMESSAGE_ACTION_LISTENER_KEY, isChecked).apply();
}
});
boolean usingCustomHtmlInAppActionListener = getActivity().getPreferences(getActivity().MODE_PRIVATE).getBoolean(CUSTOM_HTML_INAPPMESSAGE_ACTION_LISTENER_KEY, false);
customHtmlInAppMessageActionListenerCheckBox.setChecked(usingCustomHtmlInAppActionListener);
Button displayNextInAppMessageButton = (Button) view.findViewById(R.id.display_next_inappmessage_button);
displayNextInAppMessageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppboyInAppMessageManager.getInstance().requestDisplayInAppMessage();
}
});
Button requestInAppMessageFromServerButton = (Button) view.findViewById(R.id.request_inappmessage_from_server_button);
requestInAppMessageFromServerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Appboy.getInstance(getContext()).requestInAppMessageRefresh();
}
});
Button hideCurrentInAppMessageButton = (Button) view.findViewById(R.id.hide_current_inappmessage_button);
hideCurrentInAppMessageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppboyInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(false);
}
});
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHtmlBodyFromAssets = readHtmlBodyFromAssets(HtmlMessageType.NO_JS);
mHtmlBodyFromAssetsInlineJs = readHtmlBodyFromAssets(HtmlMessageType.INLINE_JS);
mHtmlBodyFromAssetsExternalJs = readHtmlBodyFromAssets(HtmlMessageType.EXTERNAL_JS);
mHtmlBodyFromAssetsStarWars = readHtmlBodyFromAssets(HtmlMessageType.STAR_WARS);
mHtmlBodyFromBridgeTester = readHtmlBodyFromAssets(HtmlMessageType.BRIDGE_TESTER);
mHtmlBodyFromAssetsYoutube = readHtmlBodyFromAssets(HtmlMessageType.YOUTUBE);
}
@SuppressWarnings("checkstyle:avoidescapedunicodecharacters")
private void addInAppMessageImmersive(IInAppMessageImmersive inAppMessage) {
if (inAppMessage instanceof InAppMessageModal) {
inAppMessage.setMessage("Welcome to Appboy! Appboy is Marketing Automation for Apps!");
if (inAppMessage.getImageStyle().equals(ImageStyle.GRAPHIC)) {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1000w_1000h));
} else {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1160w_400h));
}
} else if (inAppMessage instanceof InAppMessageFull) {
inAppMessage.setMessage("Welcome to Appboy! Appboy is Marketing Automation for Apps. This is an example of a full in-app message.");
if (inAppMessage.getImageStyle().equals(ImageStyle.GRAPHIC)) {
if (inAppMessage.getOrientation().equals(Orientation.LANDSCAPE)) {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1600w_1000h));
} else {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1000w_1600h));
}
} else {
if (inAppMessage.getOrientation().equals(Orientation.LANDSCAPE)) {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1600w_500h));
} else {
inAppMessage.setRemoteImageUrl(getResources().getString(R.string.appboy_image_url_1000w_800h));
}
}
}
inAppMessage.setHeader("Hello from Appboy!");
ArrayList<MessageButton> messageButtons = new ArrayList<MessageButton>();
MessageButton buttonOne = new MessageButton();
buttonOne.setText("NEWSFEED");
buttonOne.setClickAction(ClickAction.NEWS_FEED);
messageButtons.add(buttonOne);
inAppMessage.setMessageButtons(messageButtons);
addMessageButtons(inAppMessage);
setHeader(inAppMessage);
setCloseButtonColor(inAppMessage);
setFrameColor(inAppMessage);
setHeaderTextAlign(inAppMessage);
}
@SuppressWarnings("checkstyle:avoidescapedunicodecharacters")
private void addInAppMessageSlideup(InAppMessageSlideup inAppMessage) {
inAppMessage.setMessage("Welcome to Appboy! This is a slideup in-app message.");
inAppMessage.setIcon("\uf091");
inAppMessage.setClickAction(ClickAction.NEWS_FEED);
setSlideFrom(inAppMessage);
setChevronColor(inAppMessage);
}
@SuppressWarnings("checkstyle:avoidescapedunicodecharacters")
private void addInAppMessageCustom(IInAppMessage inAppMessage) {
inAppMessage.setMessage("Welcome to Appboy! This is a custom in-app message.");
inAppMessage.setIcon("\uf091");
}
private void addInAppMessageHtmlFull(IInAppMessageHtml inAppMessage, HtmlMessageType jsType) {
switch (jsType) {
case NO_JS:
inAppMessage.setMessage(mHtmlBodyFromAssets);
inAppMessage.setAssetsZipRemoteUrl(getString(R.string.html_assets_no_js_remote_url));
break;
case INLINE_JS:
inAppMessage.setMessage(mHtmlBodyFromAssetsInlineJs);
break;
case EXTERNAL_JS:
inAppMessage.setMessage(mHtmlBodyFromAssetsExternalJs);
inAppMessage.setAssetsZipRemoteUrl(getString(R.string.html_assets_external_js_remote_url));
break;
case STAR_WARS:
inAppMessage.setMessage(mHtmlBodyFromAssetsStarWars);
break;
case YOUTUBE:
inAppMessage.setMessage(mHtmlBodyFromAssetsYoutube);
break;
case BRIDGE_TESTER:
inAppMessage.setMessage(mHtmlBodyFromBridgeTester);
inAppMessage.setAssetsZipRemoteUrl("https://appboy-images.com/HTML_ZIP_STOPWATCH.zip");
break;
default:
break;
}
}
private void addInAppMessage(IInAppMessage inAppMessage) {
addInAppMessage(inAppMessage, null);
}
private void addInAppMessage(IInAppMessage inAppMessage, HtmlMessageType messageType) {
// set orientation early to help determine which default image to use
setOrientation(inAppMessage);
if (inAppMessage instanceof IInAppMessageImmersive) {
addInAppMessageImmersive((IInAppMessageImmersive) inAppMessage);
} else if (inAppMessage instanceof InAppMessageSlideup) {
addInAppMessageSlideup((InAppMessageSlideup) inAppMessage);
} else if (inAppMessage instanceof InAppMessageHtmlFull) {
addInAppMessageHtmlFull((InAppMessageHtmlFull) inAppMessage, messageType);
} else if (inAppMessage instanceof IInAppMessage) {
addInAppMessageCustom(inAppMessage);
}
if (!addClickAction(inAppMessage)) {
return;
}
setDismissType(inAppMessage);
setBackgroundColor(inAppMessage);
setMessage(inAppMessage);
setIcon(inAppMessage);
setImage(inAppMessage);
setMessageTextAlign(inAppMessage);
setAnimation(inAppMessage);
setUseWebview(inAppMessage);
AppboyInAppMessageManager.getInstance().addInAppMessage(inAppMessage);
}
private void setUseWebview(IInAppMessage inAppMessage) {
if (!SpinnerUtils.spinnerItemNotSet(mUseWebview)) {
if (mUseWebview.equals("true")) {
inAppMessage.setOpenUriInWebView(true);
} else if (mUseWebview.equals("false")) {
inAppMessage.setOpenUriInWebView(false);
}
}
}
private void setAnimation(IInAppMessage inAppMessage) {
if (!SpinnerUtils.spinnerItemNotSet(mAnimateIn)) {
if (mAnimateIn.equals("true")) {
inAppMessage.setAnimateIn(true);
} else if (mAnimateIn.equals("false")) {
inAppMessage.setAnimateIn(false);
}
}
if (!SpinnerUtils.spinnerItemNotSet(mAnimateOut)) {
if (mAnimateOut.equals("true")) {
inAppMessage.setAnimateOut(true);
} else if (mAnimateOut.equals("false")) {
inAppMessage.setAnimateOut(false);
}
}
}
private void setDismissType(IInAppMessage inAppMessage) {
// set dismiss type if defined
if ("auto".equals(mDismissType)) {
inAppMessage.setDismissType(DismissType.AUTO_DISMISS);
} else if ("auto-short".equals(mDismissType)) {
inAppMessage.setDismissType(DismissType.AUTO_DISMISS);
inAppMessage.setDurationInMilliseconds(1000);
} else if ("manual".equals(mDismissType)) {
inAppMessage.setDismissType(DismissType.MANUAL);
}
}
private void setBackgroundColor(IInAppMessage inAppMessage) {
// set background color if defined
if (!SpinnerUtils.spinnerItemNotSet(mBackgroundColor)) {
inAppMessage.setBackgroundColor(parseColorFromString(mBackgroundColor));
}
}
private void setChevronColor(InAppMessageSlideup inAppMessage) {
// set chevron color if defined
if (!SpinnerUtils.spinnerItemNotSet(mCloseButtonColor)) {
inAppMessage.setChevronColor(parseColorFromString(mCloseButtonColor));
}
}
private void setCloseButtonColor(IInAppMessageImmersive inAppMessage) {
// set close button color if defined
if (!SpinnerUtils.spinnerItemNotSet(mCloseButtonColor)) {
inAppMessage.setCloseButtonColor(parseColorFromString(mCloseButtonColor));
}
}
private void setMessage(IInAppMessage inAppMessage) {
// set text color if defined
if (!SpinnerUtils.spinnerItemNotSet(mTextColor)) {
inAppMessage.setMessageTextColor(parseColorFromString(mTextColor));
}
// don't replace message on html IAMs
if (inAppMessage instanceof IInAppMessageHtml) {
return;
}
if (!SpinnerUtils.spinnerItemNotSet(mMessage)) {
inAppMessage.setMessage(mMessage);
}
}
private void setIcon(IInAppMessage inAppMessage) {
// set icon color if defined
if (!SpinnerUtils.spinnerItemNotSet(mIconColor)) {
inAppMessage.setIconColor(parseColorFromString(mIconColor));
}
// set icon background color if defined
if (!SpinnerUtils.spinnerItemNotSet(mIconBackgroundColor)) {
inAppMessage.setIconBackgroundColor(parseColorFromString(mIconBackgroundColor));
}
// set in-app message icon
if (!SpinnerUtils.spinnerItemNotSet(mIcon)) {
if (mIcon.equals(getString(R.string.none))) {
inAppMessage.setIcon(null);
} else {
inAppMessage.setIcon(mIcon);
}
}
}
private void setImage(IInAppMessage inAppMessage) {
// set in-app message image url
if (!SpinnerUtils.spinnerItemNotSet(mImage)) {
if (mImage.equals(getString(R.string.none))) {
inAppMessage.setRemoteImageUrl(null);
} else {
inAppMessage.setRemoteImageUrl(mImage);
}
}
}
private void setOrientation(IInAppMessage inAppMessage) {
// set in-app message preferred orientation
if (!SpinnerUtils.spinnerItemNotSet(mOrientation)) {
if (mOrientation.equals("any")) {
inAppMessage.setOrientation(Orientation.ANY);
} else if (mOrientation.equals("portrait")) {
inAppMessage.setOrientation(Orientation.PORTRAIT);
} else if (mOrientation.equals("landscape")) {
inAppMessage.setOrientation(Orientation.LANDSCAPE);
}
}
}
private boolean addClickAction(IInAppMessage inAppMessage) {
// set click action if defined
if ("newsfeed".equals(mClickAction)) {
inAppMessage.setClickAction(ClickAction.NEWS_FEED);
} else if ("uri".equals(mClickAction)) {
if (SpinnerUtils.spinnerItemNotSet(mUri)) {
Toast.makeText(getContext(), "Please choose a URI.", Toast.LENGTH_LONG).show();
return false;
} else {
inAppMessage.setClickAction(ClickAction.URI, Uri.parse(mUri));
}
} else if (getString(R.string.none).equals(mClickAction)) {
inAppMessage.setClickAction(ClickAction.NONE);
}
return true;
}
private void setSlideFrom(InAppMessageSlideup inAppMessage) {
// set slide from if defined
if ("top".equals(mSlideFrom)) {
inAppMessage.setSlideFrom(SlideFrom.TOP);
} else if ("bottom".equals(mSlideFrom)) {
inAppMessage.setSlideFrom(SlideFrom.BOTTOM);
}
}
private void setHeader(IInAppMessageImmersive inAppMessage) {
// set header text color if defined
if (!SpinnerUtils.spinnerItemNotSet(mHeaderTextColor)) {
inAppMessage.setHeaderTextColor(parseColorFromString(mHeaderTextColor));
}
if (!SpinnerUtils.spinnerItemNotSet(mHeader)) {
if (getString(R.string.none).equals(mHeader)) {
inAppMessage.setHeader(null);
} else {
inAppMessage.setHeader(mHeader);
}
}
}
private void setFrameColor(IInAppMessageImmersive inAppMessage) {
if (!SpinnerUtils.spinnerItemNotSet(mFrameColor)) {
inAppMessage.setFrameColor(parseColorFromString(mFrameColor));
}
}
private void setHeaderTextAlign(IInAppMessageImmersive inAppMessage) {
if (!SpinnerUtils.spinnerItemNotSet(mHeaderTextAlign)) {
inAppMessage.setHeaderTextAlign(parseTextAlign(mHeaderTextAlign));
}
}
private void setMessageTextAlign(IInAppMessage inAppMessage) {
if (!SpinnerUtils.spinnerItemNotSet(mMessageTextAlign)) {
inAppMessage.setMessageTextAlign(parseTextAlign(mMessageTextAlign));
}
}
private TextAlign parseTextAlign(String textAlign) {
if (textAlign.equals("start")) {
return TextAlign.START;
} else if (textAlign.equals("end")) {
return TextAlign.END;
} else if (textAlign.equals("center")) {
return TextAlign.CENTER;
}
return null;
}
private void addMessageButtons(IInAppMessageImmersive inAppMessage) {
// add message buttons.
if (!SpinnerUtils.spinnerItemNotSet(mButtons)) {
if (getString(R.string.none).equals(mButtons)) {
inAppMessage.setMessageButtons(null);
return;
}
ArrayList<MessageButton> messageButtons = new ArrayList<MessageButton>();
MessageButton buttonOne = new MessageButton();
if ("one".equals(mButtons)) {
buttonOne.setClickAction(ClickAction.NEWS_FEED);
buttonOne.setText("NEWSFEED");
messageButtons.add(buttonOne);
inAppMessage.setMessageButtons(messageButtons);
return;
}
MessageButton buttonTwo = new MessageButton();
if ("two".equals(mButtons) || "long".equals(mButtons)) {
buttonOne.setText("No Webview");
buttonOne.setClickAction(ClickAction.URI, Uri.parse(getResources().getString(R.string.appboy_homepage_url)));
buttonTwo.setText("Webview");
buttonTwo.setClickAction(ClickAction.URI, Uri.parse(getResources().getString(R.string.appboy_homepage_url)));
buttonTwo.setOpenUriInWebview(true);
if ("long".equals(mButtons)) {
buttonOne.setText("No Webview WITH A VERY LONG TITLE");
buttonTwo.setText("Webview WITH A VERY LONG TITLE");
}
} else if ("deeplink".equals(mButtons)) {
buttonOne.setText("TELEPHONE");
buttonOne.setClickAction(ClickAction.URI, Uri.parse(getResources().getString(R.string.telephone_uri)));
buttonTwo.setText("PLAY STORE");
buttonTwo.setClickAction(ClickAction.URI, Uri.parse(getResources().getString(R.string.play_store_uri)));
}
messageButtons.add(buttonOne);
messageButtons.add(buttonTwo);
inAppMessage.setMessageButtons(messageButtons);
}
if (!SpinnerUtils.spinnerItemNotSet(mButtonColor) && inAppMessage.getMessageButtons() != null) {
for (MessageButton button : inAppMessage.getMessageButtons()) {
button.setBackgroundColor(parseColorFromString(mButtonColor));
}
}
if (!SpinnerUtils.spinnerItemNotSet(mButtonTextColor) && inAppMessage.getMessageButtons() != null) {
for (MessageButton button : inAppMessage.getMessageButtons()) {
button.setTextColor(parseColorFromString(mButtonTextColor));
}
}
}
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()) {
case R.id.inapp_set_message_type_spinner:
mMessageType = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_message_type_values);
break;
case R.id.inapp_click_action_spinner:
mClickAction = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_click_action_values);
break;
case R.id.inapp_dismiss_type_spinner:
mDismissType = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_dismiss_type_values);
break;
case R.id.inapp_slide_from_spinner:
mSlideFrom = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_slide_from_values);
break;
case R.id.inapp_uri_spinner:
mUri = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_uri_values);
break;
case R.id.inapp_header_spinner:
mHeader = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_header_values);
break;
case R.id.inapp_message_spinner:
mMessage = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_message_values);
break;
case R.id.inapp_background_color_spinner:
mBackgroundColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_icon_color_spinner:
mIconColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_icon_background_color_spinner:
mIconBackgroundColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_close_button_color_spinner:
mCloseButtonColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_text_color_spinner:
mTextColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_header_text_color_spinner:
mHeaderTextColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_button_color_spinner:
mButtonColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_button_text_color_spinner:
mButtonTextColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_color_values);
break;
case R.id.inapp_frame_spinner:
mFrameColor = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_frame_values);
break;
case R.id.inapp_icon_spinner:
mIcon = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_icon_values);
break;
case R.id.inapp_image_spinner:
mImage = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_image_values);
break;
case R.id.inapp_button_spinner:
mButtons = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_button_values);
break;
case R.id.inapp_orientation_spinner:
mOrientation = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_orientation_values);
break;
case R.id.inapp_header_align_spinner:
mHeaderTextAlign = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_align_values);
break;
case R.id.inapp_message_align_spinner:
mMessageTextAlign = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_align_values);
break;
case R.id.inapp_animate_in_spinner:
mAnimateIn = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_boolean_values);
break;
case R.id.inapp_animate_out_spinner:
mAnimateOut = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_boolean_values);
break;
case R.id.inapp_open_uri_in_webview_spinner:
mUseWebview = SpinnerUtils.handleSpinnerItemSelected(parent, R.array.inapp_boolean_values);
break;
default:
Log.e(TAG, "Item selected for unknown spinner");
}
}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing
}
private int parseColorFromString(String colorString) {
if (colorString.equals("red")) {
return APPBOY_RED;
} else if (colorString.equals("orange")) {
return GOOGLE_ORANGE;
} else if (colorString.equals("yellow")) {
return GOOGLE_YELLOW;
} else if (colorString.equals("green")) {
return GOOGLE_GREEN;
} else if (colorString.equals("blue")) {
return APPBOY_BLUE;
} else if (colorString.equals("purple")) {
return GOOGLE_PURPLE;
} else if (colorString.equals("brown")) {
return GOOGLE_BROWN;
} else if (colorString.equals("grey")) {
return GOOGLE_GREY;
} else if (colorString.equals("black")) {
return BLACK;
} else if (colorString.equals("white")) {
return WHITE;
} else if (colorString.equals("transparent")) {
return 0;
} else if (colorString.equals("almost_transparent_blue")) {
return TRANSPARENT_APPBOY_BLUE;
} else {
return 0;
}
}
/**
* @return the html body string from the assets folder or null if the read fails.
*/
private String readHtmlBodyFromAssets(HtmlMessageType jsType) {
return readHtmlBodyFromAssetsWithFileName(jsType);
}
private String readHtmlBodyFromAssetsWithFileName(HtmlMessageType jsType) {
String htmlBody = null;
String filename = "html_inapp_message_body_no_js.html";
switch (jsType) {
case INLINE_JS:
filename = "html_inapp_message_body_inline_js.html";
break;
case EXTERNAL_JS:
filename = "html_inapp_message_body_external_js.html";
break;
case STAR_WARS:
filename = "html_inapp_message_body_star_wars.html";
break;
case YOUTUBE:
filename = "html_inapp_message_body_youtube_iframe.html";
break;
case BRIDGE_TESTER:
filename = "html_inapp_message_bridge_tester.html";
break;
default:
break;
}
// Get the text of the html from the assets folder
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(getActivity()
.getAssets().open(filename), "UTF-8"));
String line;
StringBuilder stringBuilder = new StringBuilder();
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
reader.close();
htmlBody = stringBuilder.toString();
} catch (IOException e) {
Log.e(TAG, "Error while reading html body from assets.", e);
}
return htmlBody;
}
}