package com.hexonxons.leprawatch.fragment.user;
import java.util.Date;
import org.koroed.lepra.content.LepraProfile;
import org.koroed.lepra.content.LepraProfileContact;
import org.koroed.lepra.content.LepraUser;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.LocalBroadcastManager;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.devspark.robototextview.widget.RobotoTextView;
import com.hexonxons.leprawatch.R;
import com.hexonxons.leprawatch.fragment.EditFragment;
import com.hexonxons.leprawatch.system.Constants;
import com.nostra13.universalimageloader.core.ImageLoader;
public class UserProfileFragment extends Fragment
{
public static final String TAG = "UserProfileFragment";
// Lepra user.
private LepraUser mUser = null;
// User profile.
private LepraProfile mLepraProfile = null;
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
switch(intent.getAction())
{
case Constants.INTENT_FILTER.ACTION_GET_PROFILE_RESULT_FAIL:
{
break;
}
case Constants.INTENT_FILTER.ACTION_GET_PROFILE_RESULT_SUCCESS:
{
mLepraProfile = intent.getParcelableExtra(Constants.BUNDLE.KEY_USER_PROFILE);
// Remove loading view.
ViewGroup wrapper = (ViewGroup) getView().findViewById(R.id.user_profile_wrapper);
wrapper.removeAllViews();
// Inflate profile layout.
inflate(getActivity().getLayoutInflater(), wrapper);
// Invalidate ab menu after profile is loaded.
getActivity().supportInvalidateOptionsMenu();
break;
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
if(savedInstanceState == null)
{
mUser = getArguments().getParcelable(Constants.BUNDLE.KEY_USER);
}
else
{
mUser = savedInstanceState.getParcelable(Constants.BUNDLE.KEY_USER);
mLepraProfile = savedInstanceState.getParcelable(Constants.BUNDLE.KEY_USER_PROFILE);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ViewGroup wrapper = (ViewGroup) inflater.inflate(R.layout.user_profile_wrapper, container, false);
if(mLepraProfile == null)
{
// Inflate loading layout.
inflater.inflate(R.layout.loading, wrapper, true);
// Send request intent.
Intent intent = new Intent(Constants.INTENT_FILTER.ACTION_GET_PROFILE);
intent.putExtra(Constants.BUNDLE.KEY_USER, mUser);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
}
else
{
// Inflate profile layout.
inflate(inflater, wrapper);
}
return wrapper;
}
@Override
public void onResume()
{
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(Constants.INTENT_FILTER.ACTION_GET_PROFILE_RESULT_FAIL);
filter.addAction(Constants.INTENT_FILTER.ACTION_GET_PROFILE_RESULT_SUCCESS);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mBroadcastReceiver, filter);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
if(mLepraProfile != null)
{
inflater.inflate(R.menu.user_profile_menu, menu);
}
}
@Override
public void onSaveInstanceState(Bundle outState)
{
if(mLepraProfile != null)
{
outState.putParcelable(Constants.BUNDLE.KEY_USER_PROFILE, mLepraProfile);
}
outState.putParcelable(Constants.BUNDLE.KEY_USER, mUser);
}
@Override
public void onPause()
{
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mBroadcastReceiver);
super.onPause();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
{
getActivity().getSupportFragmentManager().popBackStack();
return true;
}
case R.id.action_write_message:
{
// Run edit fragment.
EditFragment fragment = new EditFragment();
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main, fragment, EditFragment.TAG)
.addToBackStack(EditFragment.TAG)
.commit();
return true;
}
default:
{
break;
}
}
return super.onOptionsItemSelected(item);
}
private void inflate(LayoutInflater inflater, ViewGroup container)
{
View view = inflater.inflate(R.layout.user_profile, container, true);
// Async load user image.
ImageLoader.getInstance().displayImage(mLepraProfile.userPic, (ImageView) view.findViewById(R.id.user_image));
// Set user login.
((RobotoTextView) view.findViewById(R.id.user_login)).setText(mLepraProfile.lepraUser.login);
((RobotoTextView) view.findViewById(R.id.user_login)).setTextColor(getResources().getColor(mLepraProfile.lepraUser.gender.compareTo("male") == 0 ? R.color.light_blue_500 : R.color.pink_500));
// Set user reg date.
((RobotoTextView) view.findViewById(R.id.user_registration_date)).setText("С нами с " + DateFormat.format("dd.MM.yyyy", new Date(mLepraProfile.userRegistrationDate)));
// Set user parent.
((RobotoTextView) view.findViewById(R.id.user_parent)).setText(getResources().getString(mLepraProfile.lepraUser.gender.compareTo("male") == 0 ? R.string.profile_male_parent : R.string.profile_female_parent) + " " + mLepraProfile.userParent);
// Set user karma.
((RobotoTextView) view.findViewById(R.id.user_karma)).setText("" + mLepraProfile.lepraUser.karma);
// Set user name.
((RobotoTextView) view.findViewById(R.id.user_name)).setText(mLepraProfile.userFullName);
// Set user residence.
((RobotoTextView) view.findViewById(R.id.user_residence)).setText(mLepraProfile.userResidence);
// Set user total written posts and comments.
((RobotoTextView) view.findViewById(R.id.user_about_total_written)).setText(mLepraProfile.userTotalWritten);
// Set user rating.
((RobotoTextView) view.findViewById(R.id.user_about_total_rating)).setText(mLepraProfile.userTotalRating);
// Set user votes count.
((RobotoTextView) view.findViewById(R.id.user_about_total_votes)).setText(mLepraProfile.userTotalVotes);
ViewGroup contactsWrapper = (ViewGroup) view.findViewById(R.id.user_contacts_wrapper);
// Set user sites.
for(LepraProfileContact contact : mLepraProfile.userContacts)
{
View contactView = inflater.inflate(R.layout.user_profile_contact_element, contactsWrapper, false);
((RobotoTextView) contactView.findViewById(R.id.user_profile_contact_element_name)).setText(contact.siteName);
((RobotoTextView) contactView.findViewById(R.id.user_profile_contact_element_data)).setText(contact.siteUrl);
contactView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
Uri uri = Uri.parse(((RobotoTextView) v.findViewById(R.id.user_profile_contact_element_data)).getText().toString());
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
catch(ActivityNotFoundException e)
{
}
}
});
contactsWrapper.addView(contactView);
}
}
}