package net.iubris.ulysses.ui.fragments.tabspager.activity; import net.iubris.diane.searcher.exceptions.SearchException; import net.iubris.ulysses.R; import net.iubris.ulysses.search.activity.intentable.SearchTypable; import net.iubris.ulysses.tasks.search.localized.SearchLocalizedTask; import net.iubris.ulysses.ui.activity._base.Locatable; import net.iubris.ulysses.ui.activity._base.Searchable; import net.iubris.ulysses.ui.fragments._base.Updatable; import net.iubris.ulysses.ui.fragments.list._base.Markerable; import net.iubris.ulysses.ui.fragments.map._base.MarkerShowable; import net.iubris.ulysses.ui.fragments.tabspager.TabsPagerAdapter; import net.iubris.ulysses.ui.fragments.tabspager.selectable.FragmentSelectableViewPager; import net.iubris.ulysses.ui.fragments.tabspager.sliding.SlidingTabLayout; import roboguice.activity.RoboFragmentActivity; import roboguice.util.Ln; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.location.Location; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.ListFragment; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat.OnActionExpandListener; import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView.OnQueryTextListener; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.google.android.gms.maps.SupportMapFragment; public abstract class ListMapTabsSearchTypableLocatableActivity <ListFragmentMarkerable extends ListFragment & Markerable & Updatable, MarkerShowableMapFragment extends SupportMapFragment & MarkerShowable & Updatable> extends RoboFragmentActivity implements SearchTypable, Locatable, Searchable { private FragmentSelectableViewPager fragmentSelectableViewPager; private SlidingTabLayout slidingTabLayout; private TabsPagerAdapter tabsPageAdapter; protected ListFragmentMarkerable listFragment; protected MarkerShowableMapFragment mapFragment; private String query; private boolean savedSearch; protected static int LIST_FRAGMENT_INDEX = 0; protected static int MAP_FRAGMENT_INDEX = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(/*getLayoutResourceId()*/ R.layout.activity__search_results); } @Override protected void onStart() { super.onStart(); Ln.d("onStart"); FragmentManager fm = getSupportFragmentManager(); mapFragment = getMarkerShowableMapFragment(fm); doSomethingWithMapFragment(mapFragment); // TODO RESTORE // mapFragment.setTitle( resources.getString(R.string.fragment_map_title) ); // mapFragment.setProgressBarToolbar(progressBarToolbar); fragmentSelectableViewPager = (FragmentSelectableViewPager) findViewById(getViewPagerResourceId()/*R.id.viewpager*/); listFragment = getListFragmentMarkerable(fm); // TODO RESTORE // listFragment.setTitle( resources.getString(R.string.fragment_list_title) ); listFragment.setMarkerShowable(mapFragment, fragmentSelectableViewPager); doSomethingWithListFragment(listFragment); if (tabsPageAdapter==null) { tabsPageAdapter = new TabsPagerAdapter( getSupportFragmentManager(), listFragment, mapFragment ); } fragmentSelectableViewPager.setAdapter(tabsPageAdapter); slidingTabLayout = (SlidingTabLayout) findViewById(getSlidingTabsResourceId()/*R.id.sliding_tabs*/); slidingTabLayout.setViewPager(fragmentSelectableViewPager); } private void doSomethingWithListFragment(ListFragmentMarkerable listFragment) {} protected void doSomethingWithMapFragment(MarkerShowableMapFragment mapFragment) {} // protected abstract int getLayoutResourceId(); protected abstract int getViewPagerResourceId(); protected abstract int getSlidingTabsResourceId(); @SuppressWarnings("unchecked") public void refreshResults() { if(listFragment == null) { listFragment = (ListFragmentMarkerable) tabsPageAdapter.getItem( LIST_FRAGMENT_INDEX ); } listFragment.updateData(); if(mapFragment == null) { mapFragment = (MarkerShowableMapFragment) tabsPageAdapter.getItem( MAP_FRAGMENT_INDEX ); } mapFragment.updateData(); } @Override protected void onNewIntent(Intent intent) { super.setIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { // old // if (intent.getAction().equals(Intent.ACTION_SEARCH)) { // this.query = intent.getStringExtra(SearchManager.QUERY); // search(query); // } if (Intent.ACTION_SEARCH.equals(intent.getAction())) { if(savedSearch == false) { this.query = intent.getStringExtra(SearchManager.QUERY); } else { this.savedSearch = false; } // Avvio l'operazione di ricerca in background search(this.query); } } @Override public void search(String query) { try { // searchByAddressTask.execute(query); getSearchLocalizedTask().execute(query); } catch (SearchException e) { Toast.makeText(this, "search error: "+e.getMessage(), Toast.LENGTH_SHORT).show(); } // setSearchType(SearchType.LOCALIZED); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.search, menu); MenuItem searchMenuItem = menu.findItem(R.id.action_search); searchMenuItem.expandActionView(); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); final SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); // Assumes current activity is the searchable activity searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); // searchView.setIconifiedByDefault(false); // Do not iconify the // widget; expand it by default searchView.setQuery(this.query, false); // Evito che compaia la tastiera quando vengono visualizzati i risultati della ricerca searchView.clearFocus(); searchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String arg0) { // Evito che compaia la tastiera quando viene eseguita una nuova ricerca searchView.clearFocus(); return false; } @Override public boolean onQueryTextChange(String arg0) { return false; } }); MenuItemCompat.setOnActionExpandListener(searchMenuItem, new OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem arg0) { return true; // true if the item should expand } @Override public boolean onMenuItemActionCollapse(MenuItem arg0) { finish(); return false; // false if collapsing should be suppressed } }); return true; } protected abstract ListFragmentMarkerable getListFragmentMarkerable(FragmentManager fragmentManager); protected abstract MarkerShowableMapFragment getMarkerShowableMapFragment(FragmentManager fragmentManager); protected abstract SearchLocalizedTask getSearchLocalizedTask(); @Override public abstract Location getLocation(); }