package it.fdev.unisaconnect;
import it.fdev.unisaconnect.data.StaffMember;
import it.fdev.unisaconnect.map.MapFocusPoint;
import it.fdev.utils.DrawableManager;
import it.fdev.utils.DrawableManager.DrawableManagerListener;
import it.fdev.utils.MySimpleFragment;
import it.fdev.utils.Utils;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
public class FragmentStaffDetails extends MySimpleFragment {
public static final String ARG_DETAILS = "details";
private StaffMember mStaffMember;
private DrawableManager mDrawableManager;
private ImageLoader mImageLoader;
private ImageView picture, pictureSmall;
private View imageContainer;
private VideoView videoView;
private View infoCard, mapCard, emailCard, ricevimentoCard, websiteCard, phoneCard, faxCard;
private TextView fullnameText, roleText, deptText, mapText, emailText, ricevimentoText, websiteText;
private TextView phone1Text, phone2Text, phone3Text, phone4Text;
private TextView fax1Text, fax2Text, fax3Text, fax4Text;
private View mapSeparator;
private View mapButton;
private final double imageScreenPercentageHeight = 0.4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDrawableManager = new DrawableManager();
mImageLoader = ImageLoader.getInstance();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_staff_details, container, false);
}
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mStaffMember = getArguments().getParcelable(ARG_DETAILS);
if (mStaffMember == null || !(mStaffMember instanceof StaffMember)) {
mActivity.goToLastFrame();
return;
}
infoCard = (View) view.findViewById(R.id.info_card);
mapCard = (View) view.findViewById(R.id.map_card);
emailCard = (View) view.findViewById(R.id.email_card);
ricevimentoCard = (View) view.findViewById(R.id.ricevimento_card);
websiteCard = (View) view.findViewById(R.id.website_card);
phoneCard = (View) view.findViewById(R.id.phone_card);
faxCard = (View) view.findViewById(R.id.fax_card);
picture = (ImageView) view.findViewById(R.id.picture);
pictureSmall = (ImageView) view.findViewById(R.id.picture_small);
imageContainer = view.findViewById(R.id.image_container);
videoView = (VideoView) view.findViewById(R.id.video);
fullnameText = (TextView) view.findViewById(R.id.fullname);
roleText = (TextView) view.findViewById(R.id.roleText);
deptText = (TextView) view.findViewById(R.id.departmentText);
deptText = (TextView) view.findViewById(R.id.departmentText);
mapText = (TextView) view.findViewById(R.id.mapText);
emailText = (TextView) view.findViewById(R.id.emailText);
ricevimentoText = (TextView) view.findViewById(R.id.ricevimentoText);
websiteText = (TextView) view.findViewById(R.id.websiteText);
phone1Text = (TextView) view.findViewById(R.id.phone1Text);
phone2Text = (TextView) view.findViewById(R.id.phone2Text);
phone3Text = (TextView) view.findViewById(R.id.phone3Text);
phone4Text = (TextView) view.findViewById(R.id.phone4Text);
fax1Text = (TextView) view.findViewById(R.id.fax1Text);
fax2Text = (TextView) view.findViewById(R.id.fax2Text);
fax3Text = (TextView) view.findViewById(R.id.fax3Text);
fax4Text = (TextView) view.findViewById(R.id.fax4Text);
mapSeparator = view.findViewById(R.id.map_separator);
mapButton = view.findViewById(R.id.map_button);
// Scelgo l'altezza dell'immagine in base alla grandezza del display
Display display = mActivity.getWindowManager().getDefaultDisplay();
int totalHeight;
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
totalHeight = display.getHeight(); // deprecated
} else {
Point size = new Point();
display.getSize(size);
totalHeight = size.y;
}
picture.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
(int) (totalHeight * imageScreenPercentageHeight)));
attachLongpressCopy(R.string.informazioni, fullnameText);
attachLongpressCopy(R.string.informazioni, roleText);
attachLongpressCopy(R.string.informazioni, deptText);
attachLongpressCopy(R.string.informazioni, mapText);
attachLongpressCopy(R.string.email, emailText);
attachLongpressCopy(R.string.ricevimento, ricevimentoText);
attachLongpressCopy(R.string.website, websiteText);
attachLongpressCopy(R.string.telefono, phone1Text);
attachLongpressCopy(R.string.telefono, phone2Text);
attachLongpressCopy(R.string.telefono, phone3Text);
attachLongpressCopy(R.string.telefono, phone4Text);
attachLongpressCopy(R.string.fax, fax1Text);
attachLongpressCopy(R.string.fax, fax2Text);
attachLongpressCopy(R.string.fax, fax3Text);
attachLongpressCopy(R.string.fax, fax4Text);
picture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
emailText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Utils.sendMail(mActivity, mStaffMember.getEmail(), "", "");
}
});
websiteText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(mStaffMember.getWebsite()));
startActivity(i);
}
});
mapButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mStaffMember.getLatitudine() <= 0 || mStaffMember.getLongitudine() <= 0) {
return;
} else {
FragmentMap fragmentMap = FragmentMap.newInstance();
Bundle args = new Bundle();
MapFocusPoint mapFocusPoint = createMapFocusPointFromStaffMember(mStaffMember);
args.putSerializable(FragmentMap.MAP_FOCUS_POINT_ARG, mapFocusPoint);
fragmentMap.setArguments(args);
mActivity.switchContent(fragmentMap);
}
}
});
phone1Text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Utils.startDial(mActivity, mStaffMember.getPhoneList().get(0));
}
});
phone2Text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Utils.startDial(mActivity, mStaffMember.getPhoneList().get(1));
}
});
phone3Text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Utils.startDial(mActivity, mStaffMember.getPhoneList().get(2));
}
});
phone4Text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Utils.startDial(mActivity, mStaffMember.getPhoneList().get(3));
}
});
return;
}
private void attachLongpressCopy(final int title, TextView v) {
v.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
copyText(getString(title), (TextView) v);
return true;
}
});
}
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void copyText(String titolo, TextView textView) {
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) mActivity
.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(textView.getText());
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) mActivity
.getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText(titolo, textView.getText());
clipboard.setPrimaryClip(clip);
}
Toast.makeText(mActivity, getString(R.string.testo_copiato), Toast.LENGTH_SHORT).show();
}
@Override
public void onResume() {
super.onResume();
showData();
}
public void showData() {
if (!isAdded()) {
return;
}
if (mStaffMember == null)
return;
String fullname = mStaffMember.getFullname();
String role = mStaffMember.getRole();
String department = mStaffMember.getDepartment();
String map = mStaffMember.getMapInfo();
String email = mStaffMember.getEmail();
String ricevimento = mStaffMember.getRicevimento();
String website = mStaffMember.getWebsite();
double latitudine = mStaffMember.getLatitudine();
double longitudine = mStaffMember.getLongitudine();
ArrayList<String> phones = mStaffMember.getPhoneList();
ArrayList<String> faxes = mStaffMember.getFaxList();
if (mStaffMember.getImgSmallURL() == null || mStaffMember.getImgSmallURL().isEmpty()) {
imageContainer.setVisibility(View.GONE);
} else if (mStaffMember.getMatricola().equals("028309")) {
// fullnameText.setVisibility(View.INVISIBLE);
videoView.setVisibility(View.VISIBLE);
imageContainer.setVisibility(View.VISIBLE);
picture.setVisibility(View.INVISIBLE);
pictureSmall.setVisibility(View.INVISIBLE);
Uri videoURI = Uri.parse("android.resource://" + mActivity.getPackageName() + "/" + R.raw.v028309);
videoView.setVideoURI(videoURI);
videoView.start();
videoView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
videoView.seekTo(0);
videoView.start();
return true;
}
});
} else {
// picture.setVisibility(View.GONE);
// pictureSmall.setVisibility(View.GONE);
// loadingContainer.setVisibility(View.VISIBLE);
mImageLoader.displayImage(mStaffMember.getImgSmallURL(), pictureSmall, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
imageContainer.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
pictureSmall.setVisibility(View.VISIBLE);
// loadingContainer.setVisibility(View.GONE);
if (Utils.hasConnection(mActivity)) {
// loadingContainer.setVisibility(View.VISIBLE);
mDrawableManager.fetchDrawableOnThread(mStaffMember.getImgBigURL(),
new DrawableManagerListener() {
@Override
public void onLoadingComplete(Drawable image) {
Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); // add
// this
fadeIn.setDuration(300);
AnimationSet animation = new AnimationSet(false); // change
// to
// false
animation.addAnimation(fadeIn);
picture.setAnimation(animation);
// Animation fadeOut = new
// AlphaAnimation(1, 0);
// fadeOut.setInterpolator(new
// AccelerateInterpolator()); //and this
// fadeOut.setStartOffset(1000);
// fadeOut.setDuration(500);
// AnimationSet animation1 = new
// AnimationSet(false); //change to
// false
// animation1.addAnimation(fadeOut);
// pictureSmall.setAnimation(animation1);
picture.setImageDrawable(image);
// pictureSmall.setVisibility(View.GONE);
picture.setVisibility(View.VISIBLE);
// loadingContainer.setVisibility(View.GONE);
}
@Override
public void onLoadingError() {
// loadingContainer.setVisibility(View.GONE);
picture.setVisibility(View.GONE);
// pictureSmall.setVisibility(View.VISIBLE);
}
});
} else {
// loadingContainer.setVisibility(View.GONE);
picture.setVisibility(View.GONE);
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
}
fullnameText.setText(fullname);
if ((role == null || role.isEmpty()) && (department == null || department.isEmpty())) {
infoCard.setVisibility(View.GONE);
}
if (role == null || role.isEmpty()) {
roleText.setVisibility(View.GONE);
} else {
roleText.setText(role);
}
if (department == null || department.isEmpty()) {
deptText.setVisibility(View.GONE);
} else {
deptText.setText(department);
}
if (map == null || map.isEmpty()) {
mapCard.setVisibility(View.GONE);
} else {
mapText.setText(map);
}
if (email == null || email.isEmpty()) {
emailCard.setVisibility(View.GONE);
} else {
emailText.setText(email);
}
if (ricevimento == null || ricevimento.isEmpty()) {
ricevimentoCard.setVisibility(View.GONE);
} else {
ricevimentoText.setText(ricevimento);
}
if (website == null || website.isEmpty()) {
websiteCard.setVisibility(View.GONE);
} else {
websiteText.setText(website);
}
if (latitudine > 0 && longitudine > 0) {
mapSeparator.setVisibility(View.VISIBLE);
mapButton.setVisibility(View.VISIBLE);
} else {
mapSeparator.setVisibility(View.GONE);
mapButton.setVisibility(View.GONE);
}
// AAARRRGGG impara a programmare! -> layoutInflater!!!
if (phones.size() > 0)
phone1Text.setText(phones.get(0));
else {
phoneCard.setVisibility(View.GONE);
}
if (phones.size() > 1)
phone2Text.setText(phones.get(1));
else
phone2Text.setVisibility(View.GONE);
if (phones.size() > 2)
phone3Text.setText(phones.get(2));
else
phone3Text.setVisibility(View.GONE);
if (phones.size() > 3)
phone4Text.setText(phones.get(3));
else
phone4Text.setVisibility(View.GONE);
if (faxes.size() > 0)
fax1Text.setText(faxes.get(0));
else {
faxCard.setVisibility(View.GONE);
}
if (faxes.size() > 1)
fax2Text.setText(faxes.get(1));
else
fax2Text.setVisibility(View.GONE);
if (faxes.size() > 2)
fax3Text.setText(faxes.get(2));
else
fax3Text.setVisibility(View.GONE);
if (faxes.size() > 3)
fax4Text.setText(faxes.get(3));
else
fax4Text.setVisibility(View.GONE);
}
@Override
public int getTitleResId() {
return R.string.rubrica;
}
private MapFocusPoint createMapFocusPointFromStaffMember(StaffMember staffMember) {
MapFocusPoint mapFocusPoint = new MapFocusPoint();
mapFocusPoint.setTitle(staffMember.getFullname());
mapFocusPoint.setSubtitle(formatMapInfo(staffMember.getMapInfo()));
mapFocusPoint.setLatitude(staffMember.getLatitudine());
mapFocusPoint.setLongitude(staffMember.getLongitudine());
return mapFocusPoint;
}
private String formatMapInfo(String mapInfo) {
String[] splittedMapInfo = mapInfo.split(",\\s*");
StringBuilder formattedMapInfo = new StringBuilder();
formattedMapInfo.append(splittedMapInfo[1]).append(", ").append(splittedMapInfo[2]).append(", ")
.append(splittedMapInfo[3]);
return formattedMapInfo.toString();
}
}