/*******************************************************************************
* Copyleft 2013 Massimiliano Leone - massimiliano.leone@iubris.net .
*
* MenuUtilsLegacy.java is part of 'Ratafia'.
*
* 'Ratafia' is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* 'Ratafia' is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 'Ratafia'; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
******************************************************************************/
package net.iubris.ulysses.ui.utils.menu;
import net.iubris.apollus2.ui.activity._base.Refreshable;
import net.iubris.apollus2.ui.activity._base.Searchable;
import net.iubris.ulysses.R;
import net.iubris.ulysses.model.Location;
import net.iubris.ulysses.model.Place;
import net.iubris.ulysses.model.comparators.PlaceComparatorByAscendingAlphabetic;
import net.iubris.ulysses.model.comparators.PlaceComparatorByAscendingDistance;
import net.iubris.ulysses.model.comparators.PlaceComparatorByDiscendingRating;
import net.iubris.ulysses.ui.activity.details.StreetViewPanoramaActivity;
import net.iubris.ulysses.ui.fragments.details.gallery.DetailsFragmentGallery;
import net.iubris.ulysses.ui.intentable.IntentUtils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.v4.view.MenuItemCompat;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.widget.ArrayAdapter;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
public class MenuUtils {
public static <SA extends Activity & Searchable> MenuItem addSearchNew(Menu menu, final SA searchableActivity, String query) {
// Inflate the menu; this adds items to the action bar if it is present.
searchableActivity.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) searchableActivity.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(searchableActivity.getComponentName()));
// searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
searchView.setQuery(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) {
// Nel momento in cui viene eseguita una nuova ricerca, i filtri vengono resettati
// filterActivated = false;
// for (int i = 0; i < categoryFilters.size(); i++) {
// categoryFilters.get(i).resetFilter();
// }
// Evito che compaia la tastiera quando viene eseguita una nuova ricerca
searchView.clearFocus();
return false;
}
@Override
public boolean onQueryTextChange(String arg0) {
// filterActivated = false;
return false;
}
});
MenuItemCompat.setOnActionExpandListener(searchMenuItem, new android.support.v4.view.MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem arg0) {
return true; // true if the item should expand
}
@Override
public boolean onMenuItemActionCollapse(MenuItem arg0) {
searchableActivity.finish();
return false; // false if collapsing should be suppressed
}
});
return searchMenuItem;
}
public static MenuItem addSearchAction(Menu menu, Activity activity) {
activity.getMenuInflater().inflate(R.menu.main, menu);
final MenuItem searchMenuItem = menu.findItem(R.id.action_search);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView)
// menu.findItem(R.id.action_search).getActionView();
// (SearchView)searchMenuItem.getActionView();
MenuItemCompat.getActionView(searchMenuItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String arg0) {
if (searchMenuItem != null)
searchMenuItem.collapseActionView();
// false to let the SearchView perform the default action
return false;
}
@Override
public boolean onQueryTextChange(String arg0) {
// false if the SearchView should perform the default action
// of showing any suggestions if available
return false;
}
});
return searchMenuItem;
}
@SuppressLint("NewApi")
public static <SA extends Activity & Searchable> MenuItem addSearch(Menu menu, final SA searchableActivity/*, final Activity activity*/) {
/*
// old semi-working
// MenuItem menuItem = menu.add(R.string.menu__search)
// .setIcon(R.drawable.ic_action_search_white);
// if (Build.VERSION.SDK_INT > 10)
// menuItem
// .setActionView(R.layout.collapsible_edittext)
// .setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT| MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
MenuItem menuItem = menu.add(R.string.menu__search);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
SearchView searchView = new SearchView(searchableActivity);
// changeSearchTextColor(searchView);
menuItem
.setIcon(R.drawable.ic_action_search_white)
// .setActionView(R.layout.collapsible_edittext)
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT| MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
SearchManager searchManager = (SearchManager) searchableActivity.getSystemService(Context.SEARCH_SERVICE);
// SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(searchableActivity.getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener( new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchableActivity.search(query);
// new Intent(Intent.ACTION_SEARCH).
searchableActivity.onSearchRequested();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
} else {
menuItem
.setIcon(android.R.drawable.ic_menu_search)
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
//Log.d("MenuUtilsLegacy:64","onMenuItemClick");
searchableActivity.onSearchRequested();
return false;
}
});
}
return menuItem;*/
return net.iubris.apollus2.ui.fragments.tabspager.activity.MenuUtils.addSearch(menu, searchableActivity);
}
/*
@SuppressLint("NewApi")
private static void changeSearchTextColor(SearchView searchView) {
// searchView.setQueryHint("Type something...");
Resources resources = searchView.getContext().getResources();
int searchPlateId = resources.getIdentifier("android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
// searchPlate.setBackgroundColor(Color.DKGRAY);
int searchTextId = resources.getIdentifier("android:id/search_src_text", null, null);
TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
if (searchText!=null) {
// int color = resources.getString(R.string.searchview_text_color);
// searchText.setTextColor(color);
// searchText.setHintTextColor(Color.WHITE);
}
}
}*/
@SuppressLint({ "NewApi", "InlinedApi" })
public static <SA extends Activity & Searchable> MenuItem addSimpleSearch(Menu menu, final SA searchableActivity) {
MenuItem menuItem = menu.add(R.string.menu__search) .setIcon(R.drawable.ic_action_search_white);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
menuItem
.setActionView(R.layout.collapsible_edittext)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT| MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}
menuItem.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
menuItem.setOnActionExpandListener( new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});
/*searchView.setOnQueryTextListener( new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchableActivity.search(query);
// new Intent(Intent.ACTION_SEARCH).
// searchableActivity.onSearchRequested();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
}*/
return menuItem;
}
/*public static class Refresh {
public static class Activity {
@SuppressLint("NewApi")
static <RA extends Activity & Refreshable> void addRefresh(Menu menu, final RA refreshableActivity) {
_addRefresh(menu, refreshableActivity);
}
}
public static class Fragment {
@SuppressLint("NewApi")
static <RF extends Fragment & Refreshable> void addRefresh(Menu menu, final RF refreshableFragment) {
_addRefresh(menu, refreshableFragment);
}
}
}*/
@SuppressLint("NewApi")
public static void addRefresh(Menu menu, final Refreshable refreshable) {
MenuItem menuItem = menu.add(R.string.menu__refresh);
menuItem
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
refreshable.refresh();
return false;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
menuItem
.setIcon(R.drawable.ic_action_refresh_white)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
else
menuItem
.setIcon(android.R.drawable.ic_menu_rotate);
}
@SuppressLint("NewApi")
public static void addPanorama(Menu menu, final Location location, final Activity activity) {
MenuItem menuItem = menu.add("Panorama");
menuItem.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intent = new Intent();
intent.putExtra(DetailsFragmentGallery.EXTRA_ULYSSES_LOCATION, location);
intent.setClass(activity, StreetViewPanoramaActivity.class);
activity.startActivity(intent);
activity.overridePendingTransition(R.anim.flip_from, R.anim.flip_to);
return false;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
// menuItem.setIcon(R.drawable.ic_action_maps_pin_drop);
menuItem.setIcon(R.mipmap.ic_camera360);
}
@SuppressLint("NewApi")
public static void addCall(Menu menu, final String internationalPhoneNumber, final Activity activity) {
MenuItem menuItem = menu.add(R.string.menu__call).setOnMenuItemClickListener(
new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
IntentUtils.call(internationalPhoneNumber, activity);
return false;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
menuItem
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menuItem.setIcon(R.drawable.ic_action_maps_local_phone);
}
@SuppressLint("NewApi")
public static void addGPlus(Menu menu, final String gplusURi, final Activity activity) {
MenuItem menuItem = menu.add(R.string.menu__gplus).setOnMenuItemClickListener(
new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(gplusURi));
activity.startActivity(i);
return false;
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
menuItem
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menuItem.setIcon(R.drawable.common_signin_btn_icon_normal_dark);
}
// public static void addInfo(Menu menu) {
// MenuItem menuItem = menu.add(R.string.menu__about);
// menuItem.setIcon(android.R.drawable.ic_dialog_info)
// }
public static class List {
/*public static class Activity {
@SuppressLint("NewApi")
public static <T, AscendingByDistanceComparator extends Comparator<T>, DiscendingByRatingComparator extends Comparator<T>> void addSort(Menu menu, Context context, final ArrayAdapter<T> placesAdapter, final AscendingByDistanceComparator ascendingByDistanceComparator, final DiscendingByRatingComparator discendingByRatingComparator) {}
}
public static class Fragment {
@SuppressLint("NewApi")
public static <T, AscendingByDistanceComparator extends Comparator<T>, DiscendingByRatingComparator extends Comparator<T>> void addSort(Menu menu, Context context, final ArrayAdapter<T> placesAdapter, final AscendingByDistanceComparator ascendingByDistanceComparator, final DiscendingByRatingComparator discendingByRatingComparator) {}
}*/
@SuppressLint("NewApi")
public static /*<T, AscendingByDistanceComparator extends Comparator<T>,
DiscendingByRatingComparator extends Comparator<T>>*/
void addSort(Menu menu, Context context, final ArrayAdapter<Place> placesAdapter,
final PlaceComparatorByAscendingDistance ascendingByDistanceComparator,
final PlaceComparatorByDiscendingRating discendingByRatingComparator) {
SubMenu sortSubMenu = menu.addSubMenu(0, Menu.NONE, 0, R.string.menu__list_sort);
MenuItem sortMenuItem = sortSubMenu.getItem();
sortMenuItem.setIcon(R.drawable.ic_action_sort_white);
if (Build.VERSION.SDK_INT > 10) {
sortMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
sortSubMenu.add( context.getResources().getString(R.string.menu__list_sort_name) )
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
placesAdapter.sort( new PlaceComparatorByAscendingAlphabetic() );
return false;
}
})
.setIcon(android.R.drawable.ic_menu_sort_by_size);
sortSubMenu.add( context.getResources().getString(R.string.menu__list_sort_distance) )
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
placesAdapter.sort( ascendingByDistanceComparator);
return false;
}
})
.setIcon(android.R.drawable.ic_menu_sort_by_size);
if (discendingByRatingComparator.isExistingRating())
sortSubMenu.add( context.getResources().getString(R.string.menu__list_sort_rating) )
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
placesAdapter.sort( discendingByRatingComparator );
return false;
}
})
.setIcon(android.R.drawable.star_off);
}
}
public static class Map {
/*@SuppressLint("NewApi")
public static <A extends Activity, MLO extends MyLocationOverlay> void addHere(Menu menu, final A activity,
final MLO myLocationOverlay,
final MapView mapView) {
MenuItem menuItem = menu.add(R.string.actionbar_here)
.setIcon(R.drawable.ic_action_here_white)
.setOnMenuItemClickListener( new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Ln.d(myLocationOverlay.getLastFix());
final GeoPoint center = myLocationOverlay.getMyLocation();
if (center != null) {
mapView.getController().animateTo(center);
mapView.getController().setCenter( center );
mapView.getController().setZoom(16);
} else {
Ln.d("center is null");
}
return false;
}
});
if (Build.VERSION.SDK_INT > 10)
menuItem
.setActionView(R.layout.collapsible_edittext)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}*/
}
}