/* * Copyright (c) 2012 Socialize Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.socialize.ui.profile.activity; import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.Typeface; import android.text.Spannable; import android.text.SpannableString; import android.text.style.TextAppearanceSpan; import android.util.TypedValue; import android.view.View; import android.widget.TextView; import com.socialize.Socialize; import com.socialize.api.action.ActionType; import com.socialize.entity.SocializeAction; import com.socialize.entity.User; import com.socialize.log.SocializeLogger; import com.socialize.ui.SocializeEntityLoader; import com.socialize.ui.util.Colors; import com.socialize.util.DisplayUtils; import com.socialize.util.StringUtils; /** * @author Jason Polites * */ public class UserActivityActionText extends TextView implements UserActivityAction { private Colors colors; private int contentFontSize = 12; private int titleFontSize = 11; private DisplayUtils displayUtils; private SocializeLogger logger; public UserActivityActionText(Context context) { super(context); } /* (non-Javadoc) * @see com.socialize.ui.profile.activity.UserActivityAction#init() */ @Override public void init() { setBackgroundColor(0x00000000); } /* (non-Javadoc) * @see com.socialize.ui.profile.activity.UserActivityAction#setAction(com.socialize.entity.SocializeAction) */ @Override public void setAction(Context context, final SocializeAction action) { try { doSetAction(action); } catch (Exception e) { setText("Error!"); if(logger != null) { logger.error("Error rendering action text", e); } else { SocializeLogger.e(e.getMessage(), e); } } } protected void doSetAction(final SocializeAction action) { int contentFontSizeDip = displayUtils.getDIP(contentFontSize); StringBuilder builder = new StringBuilder(); boolean canLoad = false; final SocializeEntityLoader entityLoader = Socialize.getSocialize().getEntityLoader(); if(entityLoader != null) { canLoad = entityLoader.canLoad(getContext(), action.getEntity()); if(canLoad) { setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { entityLoader.loadEntity((Activity)getContext(), action.getEntity()); } }); } } setTextSize(TypedValue.COMPLEX_UNIT_DIP, titleFontSize); String name = ""; User user = action.getUser(); if(user != null) { name = user.getFirstName(); if(StringUtils.isEmpty(name)) { name = user.getDisplayName(); } if(name == null) { name = ""; } } builder.append(name); String actionText = null; // Do the intro text switch(action.getActionType()) { case COMMENT: builder.append(" commented on "); actionText = StringUtils.replaceNewLines(action.getDisplayText(), 3, 2); break; case LIKE: builder.append(" liked "); break; case SHARE: actionText = action.getDisplayText(); builder.append(" shared "); break; } String textSoFar = builder.toString(); String entityName = StringUtils.ellipsis(action.getEntityDisplayName(), 30); if(!StringUtils.isEmpty(entityName)) { entityName = StringUtils.encodeUtf8(entityName); } else { entityName = ""; } int entityNameStartIndex = textSoFar.length(); int entityNameEndIndex = entityNameStartIndex + entityName.length(); int actionTextStartIndex = 0; int actionTextEndIndex = 0; builder.append(entityName); if(actionText != null) { actionText = StringUtils.encodeUtf8(actionText); builder.append("\n\n"); actionTextStartIndex = entityNameEndIndex + 2; // Plus 2 for the new lines and the end of the entity name. if(action.getActionType().equals(ActionType.COMMENT)) { builder.append("\""); builder.append(actionText); builder.append("\""); actionTextEndIndex = actionTextStartIndex + actionText.length() + 2; // Plus 2 for the quotes; } else { builder.append(actionText); actionTextEndIndex = actionTextStartIndex + actionText.length(); } } Spannable spannable = new SpannableString(builder.toString()); if(canLoad) { ColorStateList linkColor = new ColorStateList( new int[][] { new int[] { android.R.attr.state_pressed }, new int[0], }, new int[] { Color.DKGRAY, colors.getColor(Colors.SOCIALIZE_BLUE) }); TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan("sans", Typeface.BOLD, contentFontSizeDip, linkColor, linkColor); spannable.setSpan(textAppearanceSpan, entityNameStartIndex, entityNameEndIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(actionText != null) { ColorStateList bodyColor = new ColorStateList( new int[][] { new int[] { android.R.attr.state_pressed }, new int[0], }, new int[] { Color.DKGRAY, colors.getColor(Colors.BODY) }); TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan("serif", Typeface.ITALIC, contentFontSizeDip, bodyColor, bodyColor); spannable.setSpan(textAppearanceSpan, actionTextStartIndex, actionTextEndIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } setText(spannable); } /* (non-Javadoc) * @see com.socialize.ui.profile.activity.UserActivityAction#setContentFontSize(int) */ @Override public void setContentFontSize(int contentFontSize) { this.contentFontSize = contentFontSize; } /* (non-Javadoc) * @see com.socialize.ui.profile.activity.UserActivityAction#setTitleFontSize(int) */ @Override public void setTitleFontSize(int titleFontSize) { this.titleFontSize = titleFontSize; } public void setColors(Colors colors) { this.colors = colors; } public void setDisplayUtils(DisplayUtils deviceUtils) { this.displayUtils = deviceUtils; } public void setLogger(SocializeLogger logger) { this.logger = logger; } }