Skip to content

Instantly share code, notes, and snippets.

@ziginsider
Created December 19, 2017 21:52
Show Gist options
  • Save ziginsider/9608cf960cae58bc5855aecbc1555371 to your computer and use it in GitHub Desktop.
Save ziginsider/9608cf960cae58bc5855aecbc1555371 to your computer and use it in GitHub Desktop.
package io.github.ziginsider.ideographicapp;
/**
* Created by zigin on 26.10.2016.
*/
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.OvershootInterpolator;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.miguelcatalan.materialsearchview.MaterialSearchView;
import java.util.ArrayList;
import data.AsyncProvider;
import data.Constants;
import data.DatabaseHandlerExternal;
import data.PersistantStorage;
import data.ViewPagerAdapter;
import model.Topics;
public class FragmentSlidingTabsRecycler extends Fragment {
private TabLayout tabLayout;
private ViewPager viewPager;
private ViewPagerAdapter adapter;
com.melnykov.fab.FloatingActionButton fab;
com.melnykov.fab.FloatingActionButton fabAdd;
TextView textTopicNameBottomSheet;
TextView textParentTopicNameBottomSheet;
TextView textNumberOfSubtopics;
TextView textNumberOfExp;
TextView textLabels;
ArrayList<String> listTopicLabels;
private DatabaseHandlerExternal dbConnExternal;
private int selectedTabPosition;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sliding_tabs_recycler, container, false);
getIDs(view);
//storage = new PersistantStorage();
setEvents();
return view;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
dbConnExternal = new DatabaseHandlerExternal(context);
}
private void getIDs(View view) {
viewPager = (ViewPager) view.findViewById(R.id.work_view_pager_recycler);
tabLayout = (TabLayout) view.findViewById(R.id.work_tab_layout_recycler);
adapter = new ViewPagerAdapter(getFragmentManager(), getActivity(), viewPager, tabLayout);
viewPager.setAdapter(adapter);
//viewPager.setPageTransformer(?,?);
}
public int getSelectedTabPosition() {
return selectedTabPosition;
}
public int getCountTabs() {
return adapter.getCount();
}
public String getSelectTabName() {
return adapter.getTitle(selectedTabPosition);
}
public String getNextTabName() {
return adapter.getTitle(selectedTabPosition + 1);
}
private void setEvents() {
//setTabSelectedListener
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
viewPager.setCurrentItem(tab.getPosition());
selectedTabPosition = viewPager.getCurrentItem();
Log.d("Zig", "Selected tab, position = " + tab.getPosition());
final FragmentWorkRecycler fragmentWorkRecycler = (FragmentWorkRecycler) adapter.
getItem(selectedTabPosition);
//fragmentWorkRecycler.showHideView();
//fragmentWorkRecycler.showListView();
//set Search
final MaterialSearchView searchView = (MaterialSearchView) getActivity().
findViewById(R.id.search_view_recycler);
searchView.closeSearch();
// TODO: 10.07.2017 search
fragmentWorkRecycler.cloneItems();
searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
@Override
public void onSearchViewShown() {
}
@Override
public void onSearchViewClosed() {
//fragmentWorkRecycler.showListView();
//fragmentWorkRecycler.cloneItems();
}
});
//searchView.get
searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
fragmentWorkRecycler.showSearchResultTopic(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
fragmentWorkRecycler.showSearchResult(newText);
return true;
}
});
//bottomsheet set
RelativeLayout rlBottomSheet = (RelativeLayout) getActivity().
findViewById(R.id.bottom_sheet);
final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(rlBottomSheet);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
fab = (com.melnykov.fab.FloatingActionButton) getActivity().findViewById(R.id.fab_recycler);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
InflateBottomSheet();
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
});
fabAdd = (com.melnykov.fab.FloatingActionButton) getActivity().findViewById(R.id.fab_add_desk);
fabAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(view.getContext(), WorkActivityRecycler_.class);
ArrayList<Integer> startTopicsList = new ArrayList<>();
startTopicsList.add(0); //set topics root = "Topics"
i.putExtra(Constants.EXTRA_TOPICS_OPEN_TABS, startTopicsList);
Activity activity = (Activity)view.getContext();
activity.startActivity(i);
activity.finish();
}
});
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_DRAGGING) {
InflateBottomSheet();
} else if (newState == BottomSheetBehavior.STATE_EXPANDED) {
//Toast.makeText(getActivity(), "Expanded Bottomsheet!", Toast.LENGTH_SHORT).show();
final OvershootInterpolator interpolator = new OvershootInterpolator();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
fab.animate().rotation(180f).withLayer().setDuration(300).setInterpolator(interpolator).start();
}
} else if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
//Toast.makeText(getActivity(), "Collapsed Bottomsheet!", Toast.LENGTH_SHORT).show();
final OvershootInterpolator interpolator = new OvershootInterpolator();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
fab.animate().rotation(0.0f).withLayer().setDuration(300).setInterpolator(interpolator).start();
}
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
super.onTabUnselected(tab);
}
});
}
public void InflateBottomSheet() {
FragmentWorkRecycler fragmentWorkRecycler = (FragmentWorkRecycler) adapter.
getItem(selectedTabPosition);
int idTopic = fragmentWorkRecycler.getmParentTopicId();
if (idTopic == 0) {
textTopicNameBottomSheet = (TextView) getActivity().
findViewById(R.id.txt_bs_topic_name);
textParentTopicNameBottomSheet = (TextView) getActivity().
findViewById(R.id.txt_bs_parent_topic_name);
textNumberOfSubtopics = (TextView) getActivity().
findViewById(R.id.txt_bs_number_of_subtopics);
textNumberOfExp = (TextView) getActivity().
findViewById(R.id.txt_bs_number_of_exp);
textLabels = (TextView) getActivity().
findViewById(R.id.txt_bs_labels);
textTopicNameBottomSheet.setText(Constants.TOPICS_ROOT_NAME);
textParentTopicNameBottomSheet.setVisibility(View.INVISIBLE);
textLabels.setText("");
textNumberOfSubtopics.setText(String.valueOf(dbConnExternal.getTopicCountByIdParent(idTopic)));
textNumberOfExp.setText(String.valueOf(dbConnExternal.getExpCountByIdParent(idTopic)));
} else {
textTopicNameBottomSheet = (TextView) getActivity().
findViewById(R.id.txt_bs_topic_name);
textParentTopicNameBottomSheet = (TextView) getActivity().
findViewById(R.id.txt_bs_parent_topic_name);
textNumberOfSubtopics = (TextView) getActivity().
findViewById(R.id.txt_bs_number_of_subtopics);
textNumberOfExp = (TextView) getActivity().
findViewById(R.id.txt_bs_number_of_exp);
textLabels = (TextView) getActivity().
findViewById(R.id.txt_bs_labels);
textParentTopicNameBottomSheet.setVisibility(View.VISIBLE);
//labels
listTopicLabels = dbConnExternal.getTopicLabels(idTopic);
StringBuilder sb = new StringBuilder();
for (String s : listTopicLabels) {
sb.append(s);
sb.append(" ");
sb.append("\t");
}
textLabels.setText(sb);
//parent topic
if (dbConnExternal.getTopicById(idTopic).getParentId() != 0) {
textParentTopicNameBottomSheet.setText(dbConnExternal.getTopicById
(dbConnExternal.getTopicById(idTopic).getParentId())
.getText());
} else {
textParentTopicNameBottomSheet.setText(Constants.TOPICS_ROOT_NAME);
}
textTopicNameBottomSheet.setText(dbConnExternal.getTopicById(idTopic).getText());
textNumberOfSubtopics.setText(String.valueOf(dbConnExternal.getTopicCountByIdParent(idTopic)));
textNumberOfExp.setText(String.valueOf(dbConnExternal.getExpCountByIdParent(idTopic)));
}
}
public void addPage(int idTopic) {
//show topic content
Bundle bundle = new Bundle();
bundle.putInt(Constants.BUNDLE_ID_TOPIC, idTopic);
FragmentWorkRecycler fragmentWorkRecycler = new FragmentWorkRecycler();
fragmentWorkRecycler.setArguments(bundle);
if (idTopic == 0) {
PersistantStorage.init(getContext());
PersistantStorage.addProperty(Constants.TOPICS_ROOT_NAME, "nichts");
adapter.addFragment(fragmentWorkRecycler, Constants.TOPICS_ROOT_NAME, 0);
} else {
PersistantStorage.init(getContext());
Topics topic = dbConnExternal.getTopicById(idTopic);
String nameParentTopic;
if (topic.getParentId() == 0) {
nameParentTopic = Constants.TOPICS_ROOT_NAME;
} else {
nameParentTopic = dbConnExternal.getTopicById(topic.getParentId()).getText();
}
if (!(nameParentTopic.equals(topic.getText()))) {
PersistantStorage.addProperty(topic.getText(), "nichts");
}
adapter.addFragment(fragmentWorkRecycler, topic.getText(), idTopic);
}
adapter.notifyDataSetChanged();
if (adapter.getCount() > 0) tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(adapter.getCount() - 1);
setupTabLayout();
}
public void removePage(int position) {
adapter.removeFragment(position);
setupTabLayout();
}
public void setupTabLayout() {
selectedTabPosition = viewPager.getCurrentItem();
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setCustomView(adapter.getTabView(i));
}
}
@Override
public void onDetach() {
super.onDetach();
dbConnExternal.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment