package com.miris.ui.activity;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.miris.R;
import com.miris.net.UserProImgData;
import com.miris.net.UserProfileListData;
import com.miris.ui.adapter.BlurBehind;
import com.miris.ui.adapter.OnBlurCompleteListener;
import com.miris.ui.adapter.UserProfileAdapter;
import com.miris.ui.utils.CircleTransformation;
import com.miris.ui.view.RevealBackgroundView;
import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
import butterknife.InjectView;
/**
* Created by Miris on 09.02.15.
*/
public class UserProfileActivity extends BaseDrawerActivity implements RevealBackgroundView.OnStateChangeListener {
public static final String ARG_REVEAL_START_LOCATION = "reveal_start_location";
public static final String USER_ID = "user_id";
private static final int USER_OPTIONS_ANIMATION_DELAY = 300;
private static final Interpolator INTERPOLATOR = new DecelerateInterpolator();
@InjectView(R.id.vRevealBackground)
RevealBackgroundView vRevealBackground;
@InjectView(R.id.rvUserProfile)
RecyclerView rvUserProfile;
@InjectView(R.id.ivUserProfilePhoto)
ImageView ivUserProfilePhoto;
@InjectView(R.id.vUserDetails)
View vUserDetails;
@InjectView(R.id.vUserStats)
View vUserStats;
@InjectView(R.id.vUserProfileRoot)
View vUserProfileRoot;
@InjectView(R.id.vUserName)
TextView vUserName;
@InjectView(R.id.vUserNickname)
TextView vUserNickname;
@InjectView(R.id.vUserLike)
TextView vUserLike;
@InjectView(R.id.vUserRegister)
TextView vUserRegister;
@InjectView(R.id.vUserCommit)
TextView vUserCommit;
private int avatarSize;
private String profilePhoto;
private String userId;
private UserProfileAdapter userPhotosAdapter;
List<ParseObject> userAcountList;
List<ParseObject> userImgList;
ProgressDialog myLoadingDialog;
public static void startUserProfileFromLocation(int[] startingLocation, Activity startingActivity, String userId) {
Intent intent = new Intent(startingActivity, UserProfileActivity.class);
intent.putExtra(ARG_REVEAL_START_LOCATION, startingLocation);
intent.putExtra(USER_ID, userId);
startingActivity.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
userId = getIntent().getStringExtra(USER_ID);
this.avatarSize = getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size);
new loadDataTask().execute();
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
setupUserProfileGrid();
setupRevealBackground(savedInstanceState);
}
private void setupUserProfileGrid() {
final StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
rvUserProfile.setLayoutManager(layoutManager);
rvUserProfile.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
userPhotosAdapter.setLockedAnimations(true);
}
});
}
private void setupRevealBackground(Bundle savedInstanceState) {
vRevealBackground.setOnStateChangeListener(this);
if (savedInstanceState == null) {
final int[] startingLocation = getIntent().getIntArrayExtra(ARG_REVEAL_START_LOCATION);
vRevealBackground.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
vRevealBackground.getViewTreeObserver().removeOnPreDrawListener(this);
vRevealBackground.startFromLocation(startingLocation);
return true;
}
});
} else {
vRevealBackground.setToFinishedFrame();
userPhotosAdapter.setLockedAnimations(true);
}
}
@Override
public void onStateChange(int state) {
if (RevealBackgroundView.STATE_FINISHED == state) {
rvUserProfile.setVisibility(View.VISIBLE);
vUserProfileRoot.setVisibility(View.VISIBLE);
userPhotosAdapter = new UserProfileAdapter(this);
rvUserProfile.setAdapter(userPhotosAdapter);
animateUserProfileHeader();
} else {
rvUserProfile.setVisibility(View.INVISIBLE);
vUserProfileRoot.setVisibility(View.INVISIBLE);
}
}
private void animateUserProfileHeader() {
vUserProfileRoot.setTranslationY(-vUserProfileRoot.getHeight());
ivUserProfilePhoto.setTranslationY(-ivUserProfilePhoto.getHeight());
vUserDetails.setTranslationY(-vUserDetails.getHeight());
vUserStats.setAlpha(0);
vUserProfileRoot.animate().translationY(0).setDuration(300).setInterpolator(INTERPOLATOR);
ivUserProfilePhoto.animate().translationY(0).setDuration(300).setStartDelay(100).setInterpolator(INTERPOLATOR);
vUserDetails.animate().translationY(0).setDuration(300).setStartDelay(200).setInterpolator(INTERPOLATOR);
vUserStats.animate().alpha(1).setDuration(200).setStartDelay(400).setInterpolator(INTERPOLATOR).start();
}
@Override
public void onDestroy() {
if (userProfileListData != null){
userProfileListData.clear();
}
if (userProImgData != null){
userProImgData.clear();
}
super.onDestroy();
}
class loadDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
showDialog();
}
@Override
protected Void doInBackground(Void... arg0) {
userProfileListData = new ArrayList<UserProfileListData>();
ParseQuery<ParseObject> memberQuery = ParseQuery.getQuery("miris_member");
memberQuery.whereEqualTo("user_id", userId);
memberQuery.getFirstInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject membermodule, ParseException e) {
if (e == null) {
String userImgurl = null;
userImgurl = ((ParseFile) membermodule.get("user_img")).getUrl();
userProfileListData.add(new UserProfileListData(
membermodule.get("user_id").toString(),
membermodule.get("user_name").toString(),
membermodule.get("user_age").toString(),
userImgurl,
membermodule.getInt("user_totallike"),
membermodule.getInt("user_totalcommit"),
membermodule.getInt("user_registernumber"),
membermodule.get("user_rank").toString()));
new loadImgDataTask().execute();
}
}
});
return null ;
}
@Override
protected void onPostExecute(Void result) {
}
}
class loadImgDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
userProImgData = new ArrayList<UserProImgData>();
ParseQuery<ParseObject> memberImgQuery = ParseQuery.getQuery("miris_notice");
memberImgQuery.whereEqualTo("user_id", userId);
try {
for (ParseObject img : memberImgQuery.find()) {
if (img.get("user_public").toString().equals("N")) {
if (!img.get("user_id").toString().equals(memberData.get(0).getuserId())) {
continue;
}
}
ParseFile userImgfile = null;
String userImgurlData = null;
userImgfile = (ParseFile) img.get("user_img");
if (userImgfile != null) {
userImgurlData = userImgfile.getUrl();
userProImgData.add(new UserProImgData(userImgurlData));
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return null ;
}
@Override
protected void onPostExecute(Void result) {
try {
Picasso.with(getApplicationContext())
.load(userProfileListData.get(0).getuser_img_url())
.placeholder(R.drawable.img_circle_placeholder)
.resize(avatarSize, avatarSize)
.centerCrop()
.transform(new CircleTransformation())
.into(ivUserProfilePhoto);
ivUserProfilePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getWindow().getDecorView().postDelayed(new Runnable() {
@Override
public void run() {
BlurBehind.getInstance().execute(mActivity, new OnBlurCompleteListener() {
@Override
public void onBlurComplete() {
Intent intent = new Intent(getApplicationContext(), PinchZoomActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
});
}
}, 1);
}
});
vUserName.setText(userProfileListData.get(0).getuser_name());
vUserNickname.setText(userProfileListData.get(0).getuser_rank());
vUserRegister.setText(String.valueOf(userProfileListData.get(0).getuser_registernumber()));
vUserLike.setText(String.valueOf(userProfileListData.get(0).getuser_TotalLike()));
vUserCommit.setText(String.valueOf(userProfileListData.get(0).getuser_TotalCommit()));
} catch (Exception e) {
e.printStackTrace();
}
if (userPhotosAdapter != null) {
userPhotosAdapter.updateItems(true);
}
if (myLoadingDialog != null) {
myLoadingDialog.dismiss();
}
}
}
private void showDialog() {
myLoadingDialog = new ProgressDialog(UserProfileActivity.this);
myLoadingDialog.setMessage(getString(R.string.show_lodingbar));
myLoadingDialog.setIndeterminate(false);
myLoadingDialog.setCancelable(false);
myLoadingDialog.show();
}
}