package bg.mentormate.academy.radarapp.views; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ToggleButton; import com.parse.GetCallback; import com.parse.ParseException; import com.parse.ParseObject; import com.parse.SaveCallback; import java.util.List; import bg.mentormate.academy.radarapp.R; import bg.mentormate.academy.radarapp.models.Follow; import bg.mentormate.academy.radarapp.models.User; import bg.mentormate.academy.radarapp.tools.NotificationHelper; /** * Created by tl on 18.02.15. */ public class FollowButton extends ToggleButton { public FollowButton(Context context) { super(context); } public FollowButton(Context context, AttributeSet attrs) { super(context, attrs); } public FollowButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setData(final User currentUser, final User followUser) { final Follow follow = currentUser.getFollow(); follow.fetchIfNeededInBackground(new GetCallback<ParseObject>() { @Override public void done(ParseObject parseObject, ParseException e) { final List<User> followingUsers = follow.getFollowings(); // Don't show the Follow button, when it's you if (followUser.equals(currentUser)) { setVisibility(View.GONE); return; } if (followingUsers.contains(followUser)) { setColorToggleOn(); setChecked(true); } else { setColorToggleOff(); setChecked(false); } setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onFollowClicked(followingUsers, followUser, currentUser); } }); } }); } private void setColorToggleOn() { setBackgroundColor(getResources().getColor(R.color.br_toggle_on)); setTextColor(getResources().getColor(android.R.color.white)); } private void setColorToggleOff() { setBackgroundColor(getResources().getColor(R.color.br_button)); setTextColor(getResources().getColor(R.color.br_text)); } private void onFollowClicked(List<User> followingUsers, final User followingUser, final User currentUser) { if (followingUsers.contains(followingUser)) { setColorToggleOff(); followingUsers.remove(followingUser); } else { setColorToggleOn(); followingUsers.add(followingUser); } currentUser.getFollow().saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (e == null) { followingUser.getFollow().fetchIfNeededInBackground(new GetCallback<ParseObject>() { @Override public void done(ParseObject parseObject, ParseException e) { if (e == null) { Follow follow = (Follow) parseObject; List<User> followers = follow.getFollowers(); if (followers.contains(currentUser)) { followers.remove(currentUser); } else { followers.add(currentUser); } follow.saveInBackground(); } else { NotificationHelper.alert(getContext(), getContext().getString(R.string.dialog_error_title), e.getMessage()); } } }); } else { NotificationHelper.alert(getContext(), getContext().getString(R.string.dialog_error_title), e.getMessage()); } } }); } }