package com.aptoide.amethyst.fragments.timeline; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AbsListView; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.aptoide.amethyst.Aptoide; import com.aptoide.amethyst.R; import com.aptoide.amethyst.preferences.SecurePreferences; import com.aptoide.amethyst.utils.AptoideUtils; import com.aptoide.dataprovider.AptoideSpiceHttpService; import com.aptoide.dataprovider.webservices.json.GenericResponseV2; import com.bumptech.glide.Glide; import com.facebook.FacebookException; import com.facebook.widget.LoginButton; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.DurationInMillis; import java.util.Arrays; import java.util.List; import com.aptoide.amethyst.TimeLineNoFriendsInviteActivity; import com.aptoide.amethyst.adapter.timeline.TimeLineFriendsCheckableListAdapter; import com.aptoide.amethyst.ui.widget.CircleTransform; import com.aptoide.amethyst.webservices.timeline.ListUserFriendsRequest; import com.aptoide.amethyst.webservices.timeline.RegisterUserFriendsInviteRequest; import com.aptoide.amethyst.webservices.timeline.TimelineRequestListener; import com.aptoide.amethyst.webservices.timeline.json.Friend; import com.aptoide.amethyst.webservices.timeline.json.ListUserFriendsJson; /** * Created by fabio on 14-10-2015. */ public class FragmentSocialTimelineLayouts extends Fragment { public static final String LOGOUT_FIRST_ARG = "logoutFirst"; public static final String LOGGED_IN_ARG = "loggedIn"; public static final java.lang.String STATE_ARG = "state"; private View timeline_empty_start_invite; private View email_friends; private ListView listView; private View timeline_empty; private TimeLineFriendsCheckableListAdapter adapter; private View layout; private View layout_with_friends; private View loading; public enum State{ NONE, LOGGED_IN, LOGOUT_FIRST, FRIENDS_INVITE } // private Runnable analyticsRunnable; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { State state; if(getArguments()!=null){ state = State.values()[getArguments().getInt(STATE_ARG, 0)]; }else{ state = State.NONE; } switch (state){ case LOGGED_IN: // analyticsRunnable = analyticsJoinEvent(); return inflater.inflate(R.layout.page_timeline_logged_in, container, false); case LOGOUT_FIRST: // analyticsRunnable = analyticsLoginEvent(); return inflater.inflate(R.layout.page_timeline_logout_and_login, container, false); case FRIENDS_INVITE: return inflater.inflate(R.layout.page_timeline_empty, container, false); default: // analyticsRunnable = analyticsJoinEvent(); return inflater.inflate(R.layout.page_timeline_not_logged_in, container, false); } } // private Runnable analyticsJoinEvent() { // return new Runnable() { // @Override // public void run() { // Analytics.Facebook.join(); // } // }; // } // // private Runnable analyticsLoginEvent() { // return new Runnable() { // @Override // public void run() { // Analytics.Facebook.Login(); // } // }; // } SpiceManager manager = new SpiceManager(AptoideSpiceHttpService.class); private TextView friends_using_timeline; private View join_friends; private LinearLayout friends_list; public void setFriends(ListUserFriendsJson friends){ List<Friend> friendsList = friends.getActiveFriends() ; StringBuilder friendsString; int i = 0; if(friendsList !=null && !friendsList.isEmpty()){ int j = i; do { friendsString = new StringBuilder(friendsList.get(j).getUsername()); j++; }while (friendsString.length() == 0); for(i = j; i<friendsList.size() && i < 3 + j; i++){ String friendName = friendsList.get(i).getUsername(); if(!TextUtils.isEmpty(friendName)){ friendsString.append(", ").append(friendName); } } String text; text = getString(R.string.facebook_friends_list_using_timeline); if ( friendsList.size() - i <= 0 ){ text = friendsString.toString() + " " +text; }else{ text=friendsString.toString() +" "+ getString(R.string.and) +" "+ String.valueOf(friendsList.size() - i) +" "+ getString(R.string.more_friends) +" "+ text; } friends_using_timeline.setText(text); for(Friend friend : friendsList){ String avatar = friend.getAvatar(); final View v = LayoutInflater.from(getActivity()).inflate(R.layout.row_facebook_friends_on_timeline, friends_list, false); final ImageView avatarIv = (ImageView) v.findViewById(R.id.user_avatar); Glide.with(this).load(avatar).transform(new CircleTransform(getActivity())).into(avatarIv); friends_list.addView(v); } friends_list.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); friends_using_timeline.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); join_friends.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); join_friends.setVisibility(View.VISIBLE); }else{ friends_using_timeline.setText(getString(R.string.facebook_friends_list_using_timeline_empty)); join_friends.setVisibility(View.GONE); } } @Override public void onStart() { super.onStart(); manager.start(getActivity()); } @Override public void onStop() { super.onStop(); manager.shouldStop(); } public void getFriends(){ ListUserFriendsRequest request = new ListUserFriendsRequest(); String username = SecurePreferences.getInstance().getString("access_token", ""); manager.execute(request, "facebook-friends-" + username, DurationInMillis.ONE_HOUR ,new TimelineRequestListener<ListUserFriendsJson>() { @Override protected void caseOK(ListUserFriendsJson response) { setFriends((response)); } }); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); State state; if(getArguments()!=null){ state = State.values()[getArguments().getInt(STATE_ARG, 0)]; }else{ state = State.NONE; } switch (state){ case LOGGED_IN: showFriends(view); break; case FRIENDS_INVITE: showInviteFriends(view); break; default: case LOGOUT_FIRST: LoginButton fb_login_button = (LoginButton) view.findViewById(R.id.fb_login_button); fb_login_button.setReadPermissions(Arrays.asList("email", "user_friends")); fb_login_button.setOnErrorListener(new LoginButton.OnErrorListener() { @Override public void onError(FacebookException error) { error.printStackTrace(); Toast.makeText(Aptoide.getContext(), R.string.error_occured, Toast.LENGTH_LONG).show(); } }); fb_login_button.setFragment(getParentFragment()); fb_login_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // FlurryAgent.logEvent("Social_Timeline_Clicked_On_Login_With_Facebook"); } }); break; } } private void rebuildList() { ListUserFriendsRequest request = new ListUserFriendsRequest(); request.setOffset(0); request.setLimit(150); manager.execute(request, "friendslist" + SecurePreferences.getInstance().getString("access_token", "") , DurationInMillis.ONE_HOUR ,new TimelineRequestListener<ListUserFriendsJson>() { @Override protected void caseOK(ListUserFriendsJson response) { loading.setVisibility(View.GONE); adapter = new TimeLineFriendsCheckableListAdapter(getActivity(), response.getInactiveFriends()); //adapter.setOnItemClickListener(this); //adapter.setAdapterView(listView); if(response.getInactiveFriends().isEmpty()){ layout.setVisibility(View.VISIBLE); email_friends.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimeLineNoFriendsInviteActivity.sendMail(getActivity()); } }); }else{ layout_with_friends.setVisibility(View.VISIBLE); listView.setAdapter(adapter); } } }); } private void showInviteFriends(final View view) { loading = view.findViewById(android.R.id.empty); email_friends = view.findViewById(R.id.email_friends); listView = (ListView) view.findViewById(android.R.id.list); layout = view.findViewById(R.id.layout_no_friends); layout_with_friends = view.findViewById(R.id.layout_with_friends); View footer_friends_to_invite = LayoutInflater.from(getActivity()).inflate(R.layout.footer_invite_friends, null); listView.addFooterView(footer_friends_to_invite); listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); rebuildList(); Button invite = (Button) footer_friends_to_invite.findViewById(R.id.timeline_invite); final Context c = getActivity(); invite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // FlurryAgent.logEvent("Social_Timeline_Clicked_On_Invite_Friends"); RegisterUserFriendsInviteRequest request = new RegisterUserFriendsInviteRequest(); long[] ids = listView.getCheckItemIds(); if(ids.length>0) { for (long id : ids) { request.addEmail(adapter.getItem((int) id).getEmail()); } manager.execute(request, new TimelineRequestListener<GenericResponseV2>() { private void cleanUI(){ view.findViewById(R.id.layout_with_friends).setVisibility(View.VISIBLE); view.findViewById(android.R.id.empty).setVisibility(View.GONE); } @Override protected void caseFAIL() { cleanUI(); } @Override protected void caseOK(GenericResponseV2 response) { cleanUI(); Toast.makeText(c, c.getString(R.string.facebook_timeline_friends_invited), Toast.LENGTH_LONG).show(); } }); view.findViewById(R.id.layout_with_friends).setVisibility(View.GONE); view.findViewById(android.R.id.empty).setVisibility(View.VISIBLE); } else{ Toast.makeText(c, c.getString(R.string.select_friends_to_invite), Toast.LENGTH_LONG).show(); } } }); } public interface Callback { void onStartTimeline(); } public void showFriends(View view){ friends_using_timeline = (TextView) view.findViewById(R.id.friends_using_timeline); join_friends = view.findViewById(R.id.join_friends); getFriends(); friends_list = (LinearLayout) view.findViewById(R.id.friends_list); Button start_timeline = (Button) view.findViewById(R.id.start_timeline); start_timeline.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // FlurryAgent.logEvent("Social_Timeline_Clicked_On_Join_Social_Timeline"); AptoideUtils.SocialMedia.acceptTimeline(); ((Callback) getParentFragment()).onStartTimeline(); } }); } }