package com.appboy.ui.inappmessage.factories;
import android.app.Activity;
import android.widget.RelativeLayout;
import com.appboy.enums.inappmessage.ImageStyle;
import com.appboy.enums.inappmessage.Orientation;
import com.appboy.models.IInAppMessage;
import com.appboy.models.InAppMessageFull;
import com.appboy.ui.R;
import com.appboy.ui.inappmessage.IInAppMessageViewFactory;
import com.appboy.ui.inappmessage.views.AppboyInAppMessageFullView;
import com.appboy.ui.support.FrescoLibraryUtils;
import com.appboy.ui.support.ViewUtils;
public class AppboyFullViewFactory implements IInAppMessageViewFactory {
@Override
public AppboyInAppMessageFullView createInAppMessageView(Activity activity, IInAppMessage inAppMessage) {
InAppMessageFull inAppMessageFull = (InAppMessageFull) inAppMessage;
boolean isGraphic = inAppMessageFull.getImageStyle().equals(ImageStyle.GRAPHIC);
AppboyInAppMessageFullView view = getAppropriateFullView(activity, isGraphic);
view.inflateStubViews(activity, inAppMessageFull);
if (FrescoLibraryUtils.canUseFresco(activity.getApplicationContext())) {
view.setMessageSimpleDrawee(inAppMessageFull);
} else {
view.setMessageImageView(inAppMessageFull.getBitmap());
}
// modal frame should not be clickable.
view.getFrameView().setOnClickListener(null);
view.setMessageBackgroundColor(inAppMessageFull.getBackgroundColor());
view.setFrameColor(inAppMessageFull.getFrameColor());
view.setMessageButtons(inAppMessageFull.getMessageButtons());
view.setMessageCloseButtonColor(inAppMessageFull.getCloseButtonColor());
if (!isGraphic) {
view.setMessage(inAppMessageFull.getMessage());
view.setMessageTextColor(inAppMessageFull.getMessageTextColor());
view.setMessageHeaderText(inAppMessageFull.getHeader());
view.setMessageHeaderTextColor(inAppMessageFull.getHeaderTextColor());
view.setMessageHeaderTextAlignment(inAppMessageFull.getHeaderTextAlign());
view.setMessageTextAlign(inAppMessageFull.getMessageTextAlign());
view.resetMessageMargins(inAppMessageFull.getImageDownloadSuccessful());
}
resetLayoutParamsIfAppropriate(activity, inAppMessageFull, view);
return view;
}
/**
* For in-app messages that have a preferred orientation and are being displayed on tablet,
* ensure the in-app message appears in the style of the preferred orientation regardless of
* actual screen orientation.
*
* @param activity
* @param inAppMessage
* @param view
* @return true if params were reset
*/
boolean resetLayoutParamsIfAppropriate(Activity activity, IInAppMessage inAppMessage, AppboyInAppMessageFullView view) {
if (!ViewUtils.isRunningOnTablet(activity)) {
return false;
}
if (inAppMessage.getOrientation() == null || inAppMessage.getOrientation() == Orientation.ANY) {
return false;
}
int longEdge = view.getLongEdge();
int shortEdge = view.getShortEdge();
if (longEdge > 0 && shortEdge > 0) {
RelativeLayout.LayoutParams layoutParams;
if (inAppMessage.getOrientation() == Orientation.LANDSCAPE) {
layoutParams = new RelativeLayout.LayoutParams(longEdge, shortEdge);
} else {
layoutParams = new RelativeLayout.LayoutParams(shortEdge, longEdge);
}
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
view.getMessageBackgroundObject().setLayoutParams(layoutParams);
return true;
}
return false;
}
AppboyInAppMessageFullView getAppropriateFullView(Activity activity, boolean isGraphic) {
if (isGraphic) {
return (AppboyInAppMessageFullView) activity.getLayoutInflater().inflate(R.layout.com_appboy_inappmessage_full_graphic, null);
} else {
return (AppboyInAppMessageFullView) activity.getLayoutInflater().inflate(R.layout.com_appboy_inappmessage_full, null);
}
}
}