Skip to content

Instantly share code, notes, and snippets.

@nickborysov
Last active September 8, 2017 11:04
Show Gist options
  • Select an option

  • Save nickborysov/d1d87e424703a128d1f8e9f17c8a1627 to your computer and use it in GitHub Desktop.

Select an option

Save nickborysov/d1d87e424703a128d1f8e9f17c8a1627 to your computer and use it in GitHub Desktop.

Revisions

  1. nickborysov revised this gist Sep 8, 2017. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion ProfileFragment
    Original file line number Diff line number Diff line change
    @@ -295,7 +295,6 @@ public class ProfileFragment extends Fragment implements ModeManager.ModeManager
    nameTextView.setText(user.getFullName());
    locationTextView.setText(user.getUserCity());
    }

    }

    private void setupTabLayout(@NonNull TabLayout.OnTabSelectedListener listener) {
  2. nickborysov revised this gist Sep 8, 2017. No changes.
  3. nickborysov created this gist Sep 8, 2017.
    345 changes: 345 additions & 0 deletions ProfileFragment
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,345 @@
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.annotation.StringRes;
    import android.support.design.widget.TabLayout;
    import android.support.v4.app.Fragment;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;

    import com.shai.evenz.R;
    import com.shai.evenz.business_layer.AppMode;
    import com.shai.evenz.business_layer.ModeManager;
    import com.shai.evenz.data_layer.controllers.AccountController;
    import com.shai.evenz.data_layer.data_sources.LikedEventsDataSource;
    import com.shai.evenz.data_layer.data_sources.PastEventsDataSource;
    import com.shai.evenz.data_layer.data_sources.SavedEventsDataSource;
    import com.shai.evenz.data_layer.data_sources.SuggestedEventsDataSource;
    import com.shai.evenz.data_layer.data_sources.TicketsDataSource;
    import com.shai.evenz.data_layer.models.Event;
    import com.shai.evenz.data_layer.models.User;
    import com.shai.evenz.presentation_layer.adapters.ProfileEventAdapter;
    import com.shai.evenz.presentation_layer.base.BaseViewHolder;
    import com.shai.evenz.presentation_layer.details.EventDetailsActivity;
    import com.shai.evenz.utils.Enums;
    import com.shai.evenz.utils.Fonts;
    import com.squareup.picasso.Picasso;

    import jp.wasabeef.picasso.transformations.CropCircleTransformation;

    public class ProfileFragment extends Fragment implements ModeManager.ModeManagerInterface {

    public static final String TAG = "ProfileFragment";

    private ProfileViewHolder viewHolder;

    private User user;

    private ProfileEventAdapter profileEventAdapter;

    private SuggestedEventsDataSource suggestedEventsDataSource;
    private LikedEventsDataSource likedEventsDataSource;
    private SavedEventsDataSource savedEventsDataSource;
    private TicketsDataSource ticketsDataSource;
    private PastEventsDataSource pastEventsDataSource;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_profile, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    AccountController accountController = new AccountController(getContext());
    user = accountController.fetchUser();

    setupDataSources();
    setupAdapters();

    viewHolder = new ProfileViewHolder(view);
    viewHolder.setupTabLayout(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
    final int tabPosition = tab.getPosition();
    setSuggestedEventsDataSource(tabPosition);
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
    });
    viewHolder.setupViews(user);
    viewHolder.setupRecyclerView(profileEventAdapter);


    }

    private void setSuggestedEventsDataSource(final int position) {
    new Thread(new Runnable() {
    @Override
    public void run() {
    switch (position) {
    case 0:
    profileEventAdapter.setSuggestedEventsDataSource(suggestedEventsDataSource);
    break;
    case 1:
    profileEventAdapter.setSuggestedEventsDataSource(likedEventsDataSource);
    break;
    case 2:
    profileEventAdapter.setSuggestedEventsDataSource(savedEventsDataSource);
    break;
    case 3:
    profileEventAdapter.setSuggestedEventsDataSource(ticketsDataSource);
    break;
    case 4:
    profileEventAdapter.setSuggestedEventsDataSource(pastEventsDataSource);
    break;
    }
    notifyRecyclerViewAdapter();
    }
    }).start();
    }

    private void notifyRecyclerViewAdapter() {
    viewHolder.recyclerView.post(new Runnable() {
    @Override
    public void run() {
    viewHolder.recyclerView.getAdapter().notifyDataSetChanged();
    }
    });
    }

    @Override
    public void onAttach(Context context) {
    super.onAttach(context);
    ModeManager.getInstance().addListener(this);
    }

    @Override
    public void onDetach() {
    super.onDetach();
    ModeManager.getInstance().removeListener(this);
    }

    private void setupAdapters() {
    profileEventAdapter = new ProfileEventAdapter();
    profileEventAdapter.setEventSelectedListener(new ProfileEventAdapter.EventSelectedListener() {
    @Override
    public void eventSelected(Event event) {
    Intent intent = new Intent(getContext(), EventDetailsActivity.class);
    intent.putExtra(Enums.ExtraKeys.EVENT.getExtraName(), event);
    getActivity().startActivityForResult(intent, Enums.ActivityRequests.EventDetails.getValue());
    }
    });
    profileEventAdapter.setSuggestedEventsDataSource(suggestedEventsDataSource);
    }

    private void setupDataSources() {
    suggestedEventsDataSource = new SuggestedEventsDataSource();
    suggestedEventsDataSource.userFacebookToken = user.getFbToken();

    likedEventsDataSource = new LikedEventsDataSource();
    likedEventsDataSource.userFacebookToken = user.getFbToken();

    savedEventsDataSource = new SavedEventsDataSource();
    savedEventsDataSource.userFacebookToken = user.getFbToken();

    ticketsDataSource = new TicketsDataSource();
    ticketsDataSource.userFacebookToken = user.getFbToken();

    pastEventsDataSource = new PastEventsDataSource();
    pastEventsDataSource.userFacebookToken = user.getFbToken();

    reloadAllData();
    }

    public ProfileFragment reloadAllData() {
    new Thread(new Runnable() {
    @Override
    public void run() {
    suggestedEventsDataSource.reloadData();
    likedEventsDataSource.reloadData();
    savedEventsDataSource.reloadData();
    ticketsDataSource.reloadData();
    pastEventsDataSource.reloadData();
    }
    }).start();
    return this;
    }

    public void checkEventData(final Event event) {
    new Thread(new Runnable() {
    @Override
    public void run() {
    likedEventsDataSource.checkForRemove(event);
    savedEventsDataSource.checkForRemove(event);
    notifyRecyclerViewAdapter();
    }
    }).start();
    }

    @Override
    public void modeManagerDidChangeMode(AppMode mode) {
    viewHolder.initMode(mode);
    }

    private static class ProfileViewHolder extends BaseViewHolder {

    ImageView userImageView;
    ImageView userBorderImageView;
    TextView nameTextView;
    TextView locationTextView;
    TabLayout tabLayout;
    RecyclerView recyclerView;
    View separatorView;
    View separatorAfterTabsView;

    int unSelectedTextColor;
    int selectedTextColor;

    public ProfileViewHolder(View itemView) {
    super(itemView);
    }

    @Override
    public void initViews() {
    userImageView = (ImageView) itemView.findViewById(R.id.profile_user_image_view);
    userBorderImageView = (ImageView) this.itemView.findViewById(R.id.profile_user_border_image_view);
    nameTextView = (TextView) itemView.findViewById(R.id.profile_user_name_text_view);
    locationTextView = (TextView) itemView.findViewById(R.id.profile_user_location_text_view);
    tabLayout = (TabLayout) itemView.findViewById(R.id.profile_tab_layout);
    recyclerView = (RecyclerView) itemView.findViewById(R.id.profile_recycler_view);
    separatorView = itemView.findViewById(R.id.profile_separator_view);
    separatorAfterTabsView = itemView.findViewById(R.id.profile_separator_after_tabs);

    nameTextView.setTypeface(Fonts.REGULAR.getTypeface(itemView.getContext()));
    locationTextView.setTypeface(Fonts.LIGHT.getTypeface(itemView.getContext()));
    }

    @Override
    public void configureDay() {
    int background = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_day_background);
    int textColor = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_day_text_color);
    int itemBackground = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_day_item_background);
    selectedTextColor = ContextCompat.getColor(itemView.getContext(),
    R.color.profile_tab_selected_text_color);
    unSelectedTextColor = ContextCompat.getColor(itemView.getContext(),
    R.color.profile_tab_unselected_day_text_color);

    itemView.setBackgroundColor(background);
    nameTextView.setTextColor(textColor);
    locationTextView.setTextColor(textColor);
    recyclerView.setBackgroundColor(background);
    ((View) userImageView.getParent()).setBackgroundColor(itemBackground);
    tabLayout.setBackgroundColor(itemBackground);

    separatorView.setBackgroundColor(unSelectedTextColor);
    separatorAfterTabsView.setBackgroundColor(unSelectedTextColor);
    tabLayout.setTabTextColors(unSelectedTextColor, selectedTextColor);
    }

    @Override
    public void configureNight() {
    int background = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_night_background);
    int textColor = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_night_text_color);
    int itemBackground = ContextCompat
    .getColor(itemView.getContext(), R.color.profile_night_item_background);
    selectedTextColor = ContextCompat.getColor(itemView.getContext(),
    R.color.profile_tab_selected_text_color);
    unSelectedTextColor = ContextCompat.getColor(itemView.getContext(),
    R.color.profile_tab_unselected_night_text_color);

    itemView.setBackgroundColor(background);
    nameTextView.setTextColor(textColor);
    locationTextView.setTextColor(textColor);
    recyclerView.setBackgroundColor(background);
    ((View) userImageView.getParent()).setBackgroundColor(itemBackground);
    tabLayout.setBackgroundColor(itemBackground);

    separatorView.setBackgroundColor(unSelectedTextColor);
    separatorAfterTabsView.setBackgroundColor(unSelectedTextColor);
    tabLayout.setTabTextColors(unSelectedTextColor, selectedTextColor);
    }

    private void setupViews(User user) {
    if (user != null) {
    if (user.getImageUrl() != null) {
    Picasso.with(userImageView.getContext())
    .load(user.getImageUrl())
    .transform(new CropCircleTransformation())
    .into(userImageView);
    }
    nameTextView.setText(user.getFullName());
    locationTextView.setText(user.getUserCity());
    }

    }

    private void setupTabLayout(@NonNull TabLayout.OnTabSelectedListener listener) {

    tabLayout.addTab(getTabWithText(R.string.profile_tab_suggested, selectedTextColor));
    tabLayout.addTab(getTabWithText(R.string.profile_tab_liked, unSelectedTextColor));
    tabLayout.addTab(getTabWithText(R.string.profile_tab_saved, unSelectedTextColor));
    tabLayout.addTab(getTabWithText(R.string.profile_tab_tickets, unSelectedTextColor));
    tabLayout.addTab(getTabWithText(R.string.profile_tab_past, unSelectedTextColor));

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
    ((TextView) tab.getCustomView()).setTextColor(selectedTextColor);
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    ((TextView) tab.getCustomView()).setTextColor(unSelectedTextColor);
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
    });
    tabLayout.addOnTabSelectedListener(listener);
    tabLayout.getTabAt(0).select();
    }

    private void setupRecyclerView(final ProfileEventAdapter adapter) {
    RecyclerView.LayoutManager manager = new LinearLayoutManager(itemView.getContext());
    recyclerView.setLayoutManager(manager);
    recyclerView.setAdapter(adapter);
    manager.scrollToPosition(adapter.getScrollPosition());
    }

    private TabLayout.Tab getTabWithText(@StringRes int textId, int textColor) {
    TabLayout.Tab tab = tabLayout.newTab().setCustomView(R.layout.view_profile_tab);
    TextView textView = ((TextView) tab.getCustomView());
    textView.setText(textId);
    textView.setTypeface(Fonts.REGULAR.getTypeface(itemView.getContext()));
    textView.setTextColor(textColor);
    return tab;
    }
    }
    }