Last active
September 8, 2017 11:04
-
-
Save nickborysov/d1d87e424703a128d1f8e9f17c8a1627 to your computer and use it in GitHub Desktop.
Revisions
-
nickborysov revised this gist
Sep 8, 2017 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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) { -
nickborysov revised this gist
Sep 8, 2017 . No changes.There are no files selected for viewing
-
nickborysov created this gist
Sep 8, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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; } } }