package com.etiennelawlor.loop.fragments; import android.app.Activity; import android.app.SearchManager; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.speech.RecognizerIntent; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.etiennelawlor.loop.R; import com.etiennelawlor.loop.activities.SearchableActivity; import com.etiennelawlor.loop.bus.RxBus; import com.etiennelawlor.loop.bus.events.HideSearchSuggestionsEvent; import com.etiennelawlor.loop.bus.events.SearchPerformedEvent; import com.etiennelawlor.loop.bus.events.ShowSearchSuggestionsEvent; import com.etiennelawlor.loop.realm.RealmUtility; import com.etiennelawlor.loop.ui.MaterialSearchView; import com.etiennelawlor.loop.utilities.FontCache; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; /** * Created by etiennelawlor on 5/23/15. */ public class WatchNowFragment extends BaseFragment { // region Constants public static final String KEY_QUERY = "KEY_QUERY"; public static final String KEY_FILTER = "KEY_FILTER"; // endregion // region Views @BindView(R.id.viewpager) ViewPager viewPager; @BindView(R.id.tabs) TabLayout tabLayout; @BindView(R.id.material_sv) MaterialSearchView materialSearchView; // endregion // region Member Variables private Typeface font; private Unbinder unbinder; private CompositeSubscription compositeSubscription; // endregion // region Callbacks // endregion // region Constructors public WatchNowFragment() { } // endregion // region Factory Methods public static WatchNowFragment newInstance() { return new WatchNowFragment(); } public static WatchNowFragment newInstance(Bundle extras) { WatchNowFragment fragment = new WatchNowFragment(); fragment.setArguments(extras); return fragment; } // endregion // region Lifecycle Methods @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { // mQuery = getArguments().getString("query"); } setHasOptionsMenu(true); font = FontCache.getTypeface("Ubuntu-Medium.ttf", getContext()); compositeSubscription = new CompositeSubscription(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_watch_now, container, false); unbinder = ButterKnife.bind(this, rootView); return rootView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // ((AppCompatActivity) getActivity()).setSupportActionBar(mToolbar); // // final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar(); // ab.setHomeAsUpIndicator(R.drawable.ic_menu_light); // ab.setHomeAsUpIndicator(R.drawable.ic_menu_black); // ab.setDisplayHomeAsUpEnabled(true); // ab.setTitle("Watch Now"); // ab.setTitle(""); if (viewPager != null) { setupViewPager(viewPager); } tabLayout.setupWithViewPager(viewPager); tabLayout.setTabMode(TabLayout.MODE_FIXED); updateTabLayout(); setUpRxBusSubscription(); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @Override public void onDestroy() { super.onDestroy(); compositeSubscription.unsubscribe(); } // endregion @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); // inflater.inflate(R.menu.watch_now_menu, menu); // Get the SearchView and set the searchable configuration // SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); // SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); // // // Assumes current activity is the searchable activity // searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); // searchView.setQueryRefinementEnabled(true); // searchView.setIconifiedByDefault(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MaterialSearchView.REQUEST_VOICE && resultCode == Activity.RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (matches != null && matches.size() > 0) { String searchWrd = matches.get(0); if (!TextUtils.isEmpty(searchWrd)) { // mMaterialSearchView.setQuery(searchWrd); materialSearchView.setQuery(""); launchSearchActivity(searchWrd); } } return; } super.onActivityResult(requestCode, resultCode, data); } // region Helper Methods private void setupViewPager(ViewPager viewPager) { Adapter adapter = new Adapter(getChildFragmentManager()); MyFeedFragment myFeedFragment = MyFeedFragment.newInstance(); adapter.addFragment(myFeedFragment, getString(R.string.my_feed)); Bundle bundle = new Bundle(); bundle.putString(KEY_FILTER, "trending"); VideosFragment videosFragment2 = VideosFragment.newInstance(bundle); adapter.addFragment(videosFragment2, getString(R.string.trending)); viewPager.setAdapter(adapter); } // private Fragment setUpFragment(String query) { // Bundle bundle = new Bundle(); // bundle.putString(KEY_FILTER, query); // // return VideosFragment.newInstance(bundle); //// return PlaceholderFragment.newInstance(); // } private void launchSearchActivity(String query) { Intent intent = new Intent(getContext(), SearchableActivity.class); intent.setAction(Intent.ACTION_SEARCH); // intent.putExtra(SearchManager.QUERY, query); Bundle bundle = new Bundle(); bundle.putString(SearchManager.QUERY, query); intent.putExtras(bundle); getContext().startActivity(intent); } private void updateTabLayout(){ ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); int tabsCount = vg.getChildCount(); for (int j = 0; j < tabsCount; j++) { ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); int tabChildsCount = vgTab.getChildCount(); for (int i = 0; i < tabChildsCount; i++) { View tabViewChild = vgTab.getChildAt(i); if (tabViewChild instanceof TextView) { ((TextView) tabViewChild).setTypeface(font); } } } } private void setUpRxBusSubscription(){ Subscription rxBusSubscription = RxBus.getInstance().toObserverable() .observeOn(AndroidSchedulers.mainThread()) // UI Thread .subscribe(new Action1<Object>() { @Override public void call(Object event) { // if (event == null || !isResumed()) { // return; // } if (event == null || !isResumed()) { return; } if(event instanceof SearchPerformedEvent) { String query = ((SearchPerformedEvent)event).getQuery(); if (!TextUtils.isEmpty(query)) { materialSearchView.setQuery(""); launchSearchActivity(query); } } else if(event instanceof ShowSearchSuggestionsEvent) { String query = ((ShowSearchSuggestionsEvent)event).getQuery(); materialSearchView.addSuggestions(RealmUtility.getSuggestions(query)); } else if(event instanceof HideSearchSuggestionsEvent) { // showFAB(); } } }); compositeSubscription.add(rxBusSubscription); } // endregion // region Inner Classes public static class Adapter extends FragmentPagerAdapter { private final List<Fragment> fragments = new ArrayList<>(); private final List<String> fragmentTitles = new ArrayList<>(); public Adapter(FragmentManager fm) { super(fm); } public void addFragment(Fragment fragment, String title) { fragments.add(fragment); fragmentTitles.add(title); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { return fragmentTitles.get(position); } } // endregion }