package com.appboy.ui.inappmessage.views; import android.content.Context; import android.graphics.Bitmap; import android.graphics.PorterDuff; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.appboy.Constants; import com.appboy.enums.inappmessage.TextAlign; import com.appboy.models.MessageButton; import com.appboy.support.AppboyLogger; import com.appboy.ui.R; import com.appboy.ui.inappmessage.AppboyInAppMessageManager; import com.appboy.ui.support.ViewUtils; import java.util.List; public class InAppMessageViewUtils { private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, InAppMessageViewUtils.class.getName()); public static void setImage(Bitmap bitmap, ImageView imageView) { if (bitmap != null) { imageView.setImageBitmap(bitmap); } } public static void setIcon(Context context, String icon, int iconColor, int iconBackgroundColor, TextView textView) { if (isValidIcon(icon)) { try { Typeface fontFamily = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf"); textView.setTypeface(fontFamily); } catch (Exception e) { AppboyLogger.e(TAG, "Caught exception setting icon typeface. Not rendering icon.", e); return; } textView.setText(icon); setTextViewColor(textView, iconColor); if (textView.getBackground() != null) { InAppMessageViewUtils.setDrawableColor(textView.getBackground(), iconBackgroundColor, context.getResources().getColor(R.color.com_appboy_inappmessage_icon_background)); } else { setViewBackgroundColor(textView, iconBackgroundColor); } } } public static void setButtons(List<View> buttonViews, View buttonLayoutView, int defaultColor, List<MessageButton> messageButtons) { if (messageButtons == null || messageButtons.size() == 0) { ViewUtils.removeViewFromParent(buttonLayoutView); return; } for (int i = 0; i < buttonViews.size(); i++) { if (messageButtons.size() <= i) { buttonViews.get(i).setVisibility(View.GONE); } else { if (buttonViews.get(i) instanceof Button) { Button button = (Button) buttonViews.get(i); MessageButton messageButton = messageButtons.get(i); button.setText(messageButton.getText()); setTextViewColor(button, messageButton.getTextColor()); setDrawableColor(button.getBackground(), messageButton.getBackgroundColor(), defaultColor); } } } } public static void setFrameColor(View view, Integer color) { if (color != null) { view.setBackgroundColor(color); } } public static void setTextViewColor(TextView textView, int color) { if (isValidInAppMessageColor(color)) { textView.setTextColor(color); } } public static void setViewBackgroundColor(View view, int color) { if (isValidInAppMessageColor(color)) { view.setBackgroundColor(color); } } public static void setViewBackgroundColorFilter(View view, int color, int defaultColor) { if (isValidInAppMessageColor(color)) { view.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY); } else { view.getBackground().setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY); } } public static void setDrawableColor(Drawable drawable, int color, int defaultColor) { if (drawable instanceof GradientDrawable) { setDrawableColor((GradientDrawable) drawable, color, defaultColor); } else if (isValidInAppMessageColor(color)) { drawable.setColorFilter(color, PorterDuff.Mode.MULTIPLY); } else { drawable.setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY); } } public static void setDrawableColor(GradientDrawable gradientDrawable, int color, int defaultColor) { if (isValidInAppMessageColor(color)) { gradientDrawable.setColor(color); } else { gradientDrawable.setColor(defaultColor); } } public static boolean isValidInAppMessageColor(int color) { return color != 0; } public static boolean isValidIcon(String icon) { return icon != null; } protected static void resetMessageMarginsIfNecessary(TextView messageView, TextView headerView) { if (headerView == null && messageView != null) { // If header is not present but message is present, reset message margins to 0 (Typically, the message's has a top margin to accommodate the header.) LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(messageView.getLayoutParams().width, messageView.getLayoutParams().height); layoutParams.setMargins(0, 0, 0, 0); messageView.setLayoutParams(layoutParams); } } protected static void resetButtonSizesIfNecessary(List<View> buttonViews, List<MessageButton> messageButtons) { if (messageButtons != null && messageButtons.size() == 1) { LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); buttonViews.get(0).setLayoutParams(layoutParams); } } public static void closeInAppMessageOnKeycodeBack() { AppboyLogger.d(TAG, "Back button intercepted by in-app message view, closing in-app message."); AppboyInAppMessageManager.getInstance().hideCurrentlyDisplayingInAppMessage(true); } public static void setTextAlignment(TextView textView, TextAlign textAlign) { if (textAlign.equals(TextAlign.START)) { textView.setGravity(Gravity.START); } else if (textAlign.equals(TextAlign.END)) { textView.setGravity(Gravity.END); } else if (textAlign.equals(TextAlign.CENTER)) { textView.setGravity(Gravity.CENTER); } } }