/*
* 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.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.*;
import com.socialize.Socialize;
import com.socialize.android.ioc.IBeanFactory;
import com.socialize.entity.SocializeAction;
import com.socialize.ui.SocializeEntityLoader;
import com.socialize.ui.util.Colors;
import com.socialize.ui.util.CompatUtils;
import com.socialize.ui.util.DateUtils;
import com.socialize.util.DisplayUtils;
import com.socialize.util.Drawables;
import java.util.Date;
/**
* @author Jason Polites
*/
public class UserActivityListItem extends TableLayout {
private TextView date;
private ImageView icon;
private ImageView locationIcon;
private UserActivityAction actionText;
private Drawable background;
private DisplayUtils displayUtils;
private Colors colors;
private Drawables drawables;
private DateUtils dateUtils;
private int padding;
private int bgColor;
private int topColor;
private int bottomColor;
private int contentFontSize = 12;
private int titleFontSize = 11;
private IBeanFactory<UserActivityAction> userActivityActionTextFactory;
public UserActivityListItem(Context context) {
super(context);
}
public UserActivityListItem(Context context, boolean singleLine) {
super(context);
}
public void init() {
padding = displayUtils.getDIP(4);
bgColor = colors.getColor(Colors.LIST_ITEM_BG);
topColor = colors.getColor(Colors.LIST_ITEM_TOP);
bottomColor = colors.getColor(Colors.LIST_ITEM_BOTTOM);
int contentMargin = displayUtils.getDIP(4);
setOrientation(LinearLayout.HORIZONTAL);
setGravity(Gravity.TOP);
setPadding(padding,padding,padding,padding);
// Make the middle column fill the width
setColumnStretchable(2, true);
// Make sure we don't overflow
setColumnShrinkable(2, true);
TableRow firstRow = new TableRow(getContext());
TableRow secondRow = new TableRow(getContext());
View location = createLocation();
View icon = createIcon();
View content = createTitle();
View date = createDate();
icon.setPadding(padding, padding, padding, padding);
content.setPadding(padding, padding, padding, padding);
date.setPadding(padding, padding, padding, padding);
location.setPadding(padding, padding, padding, padding);
TableRow.LayoutParams iconParams = new TableRow.LayoutParams();
TableRow.LayoutParams locationIconParams = new TableRow.LayoutParams();
TableRow.LayoutParams contentParams = new TableRow.LayoutParams();
TableRow.LayoutParams dateParams = new TableRow.LayoutParams();
iconParams.column = 1;
iconParams.gravity = Gravity.TOP | Gravity.LEFT;
contentParams.column = 2;
contentParams.gravity = Gravity.TOP | Gravity.LEFT;
contentParams.setMargins(0, contentMargin, 0, 0);
locationIconParams.column = 3;
locationIconParams.gravity = Gravity.TOP | Gravity.RIGHT;
dateParams.width = TableRow.LayoutParams.FILL_PARENT;
dateParams.gravity = Gravity.BOTTOM | Gravity.RIGHT;
dateParams.span = 4;
location.setLayoutParams(locationIconParams);
icon.setLayoutParams(iconParams);
content.setLayoutParams(contentParams);
date.setLayoutParams(dateParams);
firstRow.addView(icon);
firstRow.addView(content);
firstRow.addView(location);
secondRow.addView(date);
addView(firstRow);
addView(secondRow);
}
protected View createTitle() {
actionText = userActivityActionTextFactory.getBean();
return (View) actionText;
}
protected View createIcon() {
icon = new ImageView(getContext());
return icon;
}
protected View createLocation() {
locationIcon = new ImageView(getContext());
locationIcon.setImageDrawable(drawables.getDrawable("icon_location_pin.png"));
return locationIcon;
}
protected View createDate() {
date = new TextView(getContext());
date.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
date.setTextColor(Color.LTGRAY);
date.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
return date;
}
public void setAction(Context context, final SocializeAction action, Date now) {
if(background == null) {
background = makeDefaultBackground();
}
CompatUtils.setBackgroundDrawable(this, background);
actionText.setTitleFontSize(titleFontSize);
actionText.setContentFontSize(contentFontSize);
actionText.setAction(context, action);
Long actionDate = action.getDate();
if(actionDate != null && actionDate.longValue() > 0) {
long diff = (now.getTime() - actionDate.longValue());
date.setText(dateUtils.getTimeString(diff) + " ");
}
else {
date.setText("");
}
if(!action.isLocationShared()) {
locationIcon.setVisibility(GONE);
}
switch(action.getActionType()) {
case COMMENT:
icon.setImageDrawable(drawables.getDrawable("icon_comment.png"));
break;
case LIKE:
icon.setImageDrawable(drawables.getDrawable("icon_like_hi.png"));
break;
case SHARE:
icon.setImageDrawable(drawables.getDrawable("icon_share.png"));
break;
}
final SocializeEntityLoader entityLoader = Socialize.getSocialize().getEntityLoader();
if(entityLoader != null && entityLoader.canLoad(getContext(), action.getEntity())) {
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
entityLoader.loadEntity((Activity) getContext(), action.getEntity());
}
});
}
}
public void setDisplayUtils(DisplayUtils deviceUtils) {
this.displayUtils = deviceUtils;
}
public void setColors(Colors colors) {
this.colors = colors;
}
public void setDrawables(Drawables drawables) {
this.drawables = drawables;
}
public void setDateUtils(DateUtils dateUtils) {
this.dateUtils = dateUtils;
}
public void setUserActivityActionTextFactory(IBeanFactory<UserActivityAction> userActivityActionTextFactory) {
this.userActivityActionTextFactory = userActivityActionTextFactory;
}
public void setBackground(Drawable background) {
this.background = background;
}
protected Drawable makeDefaultBackground() {
// TODO: Make a singleton
ColorDrawable shadow = makeColorDrawable(bottomColor);
ColorDrawable highlight = makeColorDrawable(topColor);
ColorDrawable surface = makeColorDrawable(bgColor);
LayerDrawable layers = new LayerDrawable(new Drawable[] {shadow, highlight, surface});
layers.setLayerInset(0, 0, 0, 0, 0);
layers.setLayerInset(1, 1, 0, 0, 1);
layers.setLayerInset(2, 1, 1, 1, 1);
return layers;
}
public void setContentFontSize(int contentFontSize) {
this.contentFontSize = contentFontSize;
}
public void setTitleFontSize(int titleFontSize) {
this.titleFontSize = titleFontSize;
}
protected ColorDrawable makeColorDrawable(int color) {
return new ColorDrawable(color);
}
}