/*
* 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.action;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.location.Address;
import android.net.Uri;
import android.text.InputFilter;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.socialize.android.ioc.IBeanFactory;
import com.socialize.entity.SocializeAction;
import com.socialize.entity.User;
import com.socialize.log.SocializeLogger;
import com.socialize.ui.profile.activity.UserActivityListItem;
import com.socialize.ui.profile.activity.UserActivityView;
import com.socialize.ui.util.Colors;
import com.socialize.ui.util.CompatUtils;
import com.socialize.ui.util.DateUtils;
import com.socialize.ui.util.GeoUtils;
import com.socialize.util.DisplayUtils;
import com.socialize.util.Drawables;
import com.socialize.view.BaseView;
import java.util.Date;
/**
* @author Jason Polites
*/
public class ActionDetailContentView extends BaseView {
private ImageView profilePicture;
private TextView displayName;
private UserActivityListItem actionView;
private TextView actionLocation;
private GeoUtils geoUtils;
private DateUtils dateUtils;
private DisplayUtils displayUtils;
private Colors colors;
private Drawables drawables;
private LinearLayout actionLocationLine;
private TextView divider;
private IBeanFactory<UserActivityListItem> userActivityListItemFactory;
private LinearLayout headerView;
private SocializeLogger logger;
private IBeanFactory<UserActivityView> userActivityViewFactory;
private UserActivityView userActivityView;
public ActionDetailContentView(Context context) {
super(context);
}
public void init() {
final int imagePadding = displayUtils.getDIP(4);
final int margin = displayUtils.getDIP(8);
final int actionMargin = displayUtils.getDIP(4);
final int imageSize = displayUtils.getDIP(64);
final int editTextStroke = displayUtils.getDIP(2);
final float editTextRadius = editTextStroke;
final int titleColor = colors.getColor(Colors.TITLE);
LayoutParams masterLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
this.setLayoutParams(masterLayout);
this.setOrientation(LinearLayout.VERTICAL);
this.setPadding(0, 0, 0, 0);
this.setGravity(Gravity.TOP);
headerView = new LinearLayout(getContext());
LayoutParams masterLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
headerView.setLayoutParams(masterLayoutParams);
headerView.setOrientation(LinearLayout.HORIZONTAL);
headerView.setGravity(Gravity.TOP);
LinearLayout nameLayout = new LinearLayout(getContext());
LayoutParams nameLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
nameLayout.setLayoutParams(nameLayoutParams);
nameLayout.setOrientation(LinearLayout.VERTICAL);
nameLayout.setGravity(Gravity.TOP);
LayoutParams imageLayout = new LinearLayout.LayoutParams(imageSize,imageSize);
LayoutParams displayNameTextLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
LayoutParams actionLocationLineLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
LayoutParams actionLocationLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
LayoutParams actionLocationPinLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
masterLayout.setMargins(0, 0, 0, 0);
imageLayout.setMargins(margin, margin, margin, margin);
displayNameTextLayoutParams.setMargins(0, margin, margin, margin);
displayNameTextLayoutParams.weight = 1.0f;
actionLocationLayout.gravity = Gravity.LEFT;
actionLocationPinLayout.gravity = Gravity.CENTER_VERTICAL;
profilePicture = new ImageView(getContext());
displayName = new TextView(getContext());
actionView = userActivityListItemFactory.getBean();
actionLocation = new TextView(getContext());
ImageView locationPin = new ImageView(getContext());
locationPin.setImageDrawable(drawables.getDrawable("icon_location_pin.png"));
actionLocationLine = new LinearLayout(getContext());
actionLocationLine.addView(locationPin);
actionLocationLine.addView(actionLocation);
actionLocationLine.setLayoutParams(actionLocationLineLayout);
actionLocation.setLayoutParams(actionLocationLayout);
locationPin.setLayoutParams(actionLocationPinLayout);
actionLocation.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12);
actionLocation.setTextColor(Color.WHITE);
ColorDrawable actionbg = new ColorDrawable(Color.WHITE);
actionbg.setAlpha(32);
actionView.setBackground(actionbg);
actionView.setVisibility(View.GONE);
actionLocationLine.setVisibility(View.INVISIBLE);
LayoutParams actionWebViewLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
actionWebViewLayout.setMargins(margin, actionMargin, margin, actionMargin);
actionView.setLayoutParams(actionWebViewLayout);
GradientDrawable imageBG = new GradientDrawable(Orientation.BOTTOM_TOP, new int[] {Color.WHITE, Color.WHITE});
imageBG.setStroke(2, Color.BLACK);
imageBG.setAlpha(64);
profilePicture.setLayoutParams(imageLayout);
profilePicture.setPadding(imagePadding, imagePadding, imagePadding, imagePadding);
CompatUtils.setBackgroundDrawable(profilePicture, imageBG);
profilePicture.setScaleType(ScaleType.CENTER_CROP);
displayName.setTextColor(titleColor);
displayName.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 24);
displayName.setMaxLines(1);
displayName.setTypeface(Typeface.DEFAULT);
displayName.setSingleLine();
displayName.setLayoutParams(displayNameTextLayoutParams);
GradientDrawable textBG = new GradientDrawable(Orientation.BOTTOM_TOP, new int [] {colors.getColor(Colors.TEXT_BG), colors.getColor(Colors.TEXT_BG)});
textBG.setStroke(editTextStroke, colors.getColor(Colors.TEXT_STROKE));
textBG.setCornerRadius(editTextRadius);
InputFilter[] maxLength = new InputFilter[1];
maxLength[0] = new InputFilter.LengthFilter(128);
nameLayout.addView(displayName);
nameLayout.addView(actionLocationLine);
headerView.addView(profilePicture);
headerView.addView(nameLayout);
addView(headerView);
addView(actionView);
if(userActivityViewFactory != null) {
divider = new TextView(getContext());
CompatUtils.setBackgroundDrawable(divider, drawables.getDrawable("divider.png", true, false, true));
LayoutParams dividerLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, displayUtils.getDIP(30));
dividerLayout.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
dividerLayout.setMargins(0, margin, 0, 0);
divider.setLayoutParams(dividerLayout);
divider.setTextColor(Color.WHITE);
divider.setText("Recent Activity");
divider.setPadding(margin, 0, 0, 0);
divider.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12);
divider.setTypeface(Typeface.DEFAULT_BOLD);
divider.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
addView(divider);
LinearLayout activityHolder = new LinearLayout(getContext());
LayoutParams userActivityLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
LayoutParams activityHolderLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
activityHolderLayout.setMargins(0, 0, 0, 0);
userActivityLayout.setMargins(0, 0, 0, 0);
activityHolder.setLayoutParams(activityHolderLayout);
activityHolder.setPadding(margin, margin, margin, margin);
int activityBg = colors.getColor(Colors.ACTIVITY_BG);
GradientDrawable bg = makeGradient(activityBg, activityBg);
bg.setAlpha(144);
CompatUtils.setBackgroundDrawable(activityHolder, bg);
activityHolderLayout.weight = 1.0f;
userActivityView = userActivityViewFactory.getBean();
userActivityView.setLayoutParams(userActivityLayout);
activityHolder.addView(userActivityView);
addView(activityHolder);
}
}
public ImageView getProfilePicture() {
return profilePicture;
}
public TextView getDisplayName() {
return displayName;
}
public void setGeoUtils(GeoUtils geoUtils) {
this.geoUtils = geoUtils;
}
public DateUtils getDateUtils() {
return dateUtils;
}
public void setDateUtils(DateUtils dateUtils) {
this.dateUtils = dateUtils;
}
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 setUserActivityListItemFactory(IBeanFactory<UserActivityListItem> userActivityListItemFactory) {
this.userActivityListItemFactory = userActivityListItemFactory;
}
public void setUserActivityViewFactory(IBeanFactory<UserActivityView> userActivityViewFactory) {
this.userActivityViewFactory = userActivityViewFactory;
}
public void setLogger(SocializeLogger logger) {
this.logger = logger;
}
public void loadUserActivity(User user, SocializeAction current) {
if(userActivityView != null) {
userActivityView.loadUserActivity(user.getId(), current);
}
}
protected GradientDrawable makeGradient(int bottom, int top) {
return new GradientDrawable(
GradientDrawable.Orientation.BOTTOM_TOP,
new int[] { bottom, top });
}
public UserActivityView getUserActivityView() {
return userActivityView;
}
public void setAction(final SocializeAction action) {
if(actionView != null) {
actionView.setAction(getActivity(), action, new Date());
actionView.setVisibility(VISIBLE);
}
User user = action.getUser();
if(user != null) {
divider.setText("Recent Activity for " + user.getDisplayName());
}
if(actionLocation != null) {
if(action.isLocationShared() && action.getLat() != null && action.getLon() != null) {
Address address = geoUtils.geoCode(action.getLat(), action.getLon());
if(address != null) {
actionLocationLine.setVisibility(View.VISIBLE);
actionLocation.setText(geoUtils.getSimpleLocation(address));
actionLocation.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
String uri = "http://maps.google.com/?q=" + action.getLat() + "," + action.getLon() + "&z=17";
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(uri));
getActivity().startActivity(intent);
}
catch (Exception e) {
if(logger != null) {
logger.warn("Failed to load map view", e);
}
else {
SocializeLogger.w("Failed to load map view", e);
}
}
}
});
}
}
}
}
}