From be2d66d4ab1c6e355ec662e61297a5b0eb3b577e Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Mon, 25 Nov 2013 10:11:53 -0800 Subject: [PATCH] Revert menu icon color for froyo phones --- .../mytracks/AbstractMyTracksActivity.java | 8 + .../apps/mytracks/MarkerListActivity.java | 2 +- .../apps/mytracks/SearchListActivity.java | 2 +- .../apps/mytracks/TrackDetailActivity.java | 2 +- .../apps/mytracks/TrackListActivity.java | 4 +- .../fragments/MarkerDetailFragment.java | 7 +- .../fragments/MyTracksMapFragment.java | 2 + .../apps/mytracks/util/Api8Adapter.java | 5 + .../apps/mytracks/util/Api9Adapter.java | 5 + .../apps/mytracks/util/ApiAdapter.java | 7 + .../apps/mytracks/util/TrackIconUtils.java | 156 +++++++++++------- 11 files changed, 138 insertions(+), 62 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java b/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java index a72323deb..d54a59d0d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java @@ -17,10 +17,12 @@ package com.google.android.apps.mytracks; import com.google.android.apps.mytracks.util.ApiAdapterFactory; +import com.google.android.apps.mytracks.util.TrackIconUtils; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.support.v4.app.FragmentActivity; +import android.view.Menu; import android.view.MenuItem; /** @@ -74,6 +76,12 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { finish(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + TrackIconUtils.setMenuIconColor(menu); + return super.onCreateOptionsMenu(menu); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java index ebd328b38..41ddec95a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MarkerListActivity.java @@ -248,7 +248,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker); searchMenuItem = menu.findItem(R.id.marker_list_search); ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); - return true; + return super.onCreateOptionsMenu(menu); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index b03a1c8d2..03c4cc38d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -289,7 +289,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements getMenuInflater().inflate(R.menu.search_list, menu); searchMenuItem = menu.findItem(R.id.search_list_search); ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, searchMenuItem, null); - return true; + return super.onCreateOptionsMenu(menu); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index ccd6ac6db..4674bebd7 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -380,7 +380,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity voiceFrequencyMenuItem = menu.findItem(R.id.track_detail_voice_frequency); splitFrequencyMenuItem = menu.findItem(R.id.track_detail_split_frequency); sensorStateMenuItem = menu.findItem(R.id.track_detail_sensor_state); - return true; + return super.onCreateOptionsMenu(menu); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 66b3ace31..49dc1a345 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -474,7 +474,8 @@ public class TrackListActivity extends AbstractSendToGoogleActivity exportAllMenuItem = menu.findItem(R.id.track_list_export_all); importAllMenuItem = menu.findItem(R.id.track_list_import_all); deleteAllMenuItem = menu.findItem(R.id.track_list_delete_all); - return true; + + return super.onCreateOptionsMenu(menu); } @Override @@ -739,6 +740,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity startGpsMenuItem.setTitle(isGpsStarted ? R.string.menu_stop_gps : R.string.menu_start_gps); startGpsMenuItem.setIcon( isGpsStarted ? R.drawable.ic_menu_stop_gps : R.drawable.ic_menu_start_gps); + TrackIconUtils.setMenuIconColor(startGpsMenuItem); } } if (refreshMenuItem != null) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MarkerDetailFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MarkerDetailFragment.java index 8e02dafbd..832a020d7 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MarkerDetailFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MarkerDetailFragment.java @@ -28,6 +28,7 @@ import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.PhotoUtils; import com.google.android.apps.mytracks.util.StatsUtils; import com.google.android.apps.mytracks.util.StringUtils; +import com.google.android.apps.mytracks.util.TrackIconUtils; import com.google.android.maps.mytracks.R; import android.content.Intent; @@ -113,12 +114,12 @@ public class MarkerDetailFragment extends Fragment { } myTracksProviderUtils = MyTracksProviderUtils.Factory.get(getActivity()); handler = new Handler(); + setHasOptionsMenu(true); } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - setHasOptionsMenu(true); View view = inflater.inflate(R.layout.marker_detail_fragment, container, false); photo = (ImageView) view.findViewById(R.id.marker_detail_waypoint_photo); @@ -187,8 +188,10 @@ public class MarkerDetailFragment extends Fragment { String photoUrl = waypoint.getPhotoUrl(); boolean hasPhoto = photoUrl != null && !photoUrl.equals(""); menu.findItem(R.id.marker_detail_view_photo).setVisible(hasPhoto); + + TrackIconUtils.setMenuIconColor(menu); } - + @Override public boolean onOptionsItemSelected(MenuItem item) { long markerId = getArguments().getLong(KEY_MARKER_ID); diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java index 1837e5cad..9537592de 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java @@ -33,6 +33,7 @@ import com.google.android.apps.mytracks.util.GoogleLocationUtils; import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.PreferencesUtils; +import com.google.android.apps.mytracks.util.TrackIconUtils; import com.google.android.gms.location.LocationListener; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; @@ -330,6 +331,7 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData @Override public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflator) { menuInflator.inflate(R.menu.map, menu); + TrackIconUtils.setMenuIconColor(menu); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java index 432be54c9..aef7cf8eb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api8Adapter.java @@ -78,6 +78,11 @@ public class Api8Adapter implements ApiAdapter { return true; } + @Override + public boolean revertMenuIconColor() { + return true; + } + @Override public BluetoothSocket getBluetoothSocket(BluetoothDevice bluetoothDevice) throws IOException { try { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api9Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api9Adapter.java index 168cd2a0d..667509578 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api9Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api9Adapter.java @@ -69,4 +69,9 @@ public class Api9Adapter extends Api8Adapter { public boolean isGeoCoderPresent() { return Geocoder.isPresent(); } + + @Override + public boolean revertMenuIconColor() { + return false; + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java index 9554a0baf..53aac42bb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/ApiAdapter.java @@ -86,6 +86,13 @@ public interface ApiAdapter { */ public boolean isGeoCoderPresent(); + /** + * Returns true to revert menu icon color. + *

+ * Due to changes in API level 9. + */ + public boolean revertMenuIconColor(); + /** * Gets a {@link BluetoothSocket}. *

diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/TrackIconUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/TrackIconUtils.java index 8d3fdc301..9ad9f7720 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/TrackIconUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/TrackIconUtils.java @@ -21,7 +21,11 @@ import com.google.android.maps.mytracks.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.drawable.Drawable; import android.util.Pair; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ImageView; @@ -33,92 +37,96 @@ import java.util.List; /** * Utilities for track icon. - * + * * @author Jimmy Shih */ public class TrackIconUtils { - private static final String AIRPLANE = "AIRPLANE"; + public static final String AIRPLANE = "AIRPLANE"; public static final String BIKE = "BIKE"; - private static final String BOAT = "BOAT"; + public static final String BOAT = "BOAT"; public static final String DRIVE = "DRIVE"; public static final String RUN = "RUN"; - private static final String SKI = "SKI"; - private static final String SNOW_BOARDING = "SNOW_BOARDING"; + public static final String SKI = "SKI"; + public static final String SNOW_BOARDING = "SNOW_BOARDING"; public static final String WALK = "WALK"; - private TrackIconUtils() {} + private static final int[] AIRPLANE_LIST = new int[] { R.string.activity_type_airplane, + R.string.activity_type_commercial_airplane, R.string.activity_type_rc_airplane }; + private static final int[] BIKE_LIST = new int[] { R.string.activity_type_biking, + R.string.activity_type_cycling, R.string.activity_type_dirt_bike, + R.string.activity_type_motor_bike, R.string.activity_type_mountain_biking, + R.string.activity_type_road_biking, R.string.activity_type_track_cycling }; + private static final int[] BOAT_LIST = new int[] { R.string.activity_type_boat, + R.string.activity_type_ferry, R.string.activity_type_motor_boating, + R.string.activity_type_rc_boat }; + private static final int[] DRIVE_LIST = new int[] { R.string.activity_type_atv, + R.string.activity_type_driving, R.string.activity_type_driving_bus, + R.string.activity_type_driving_car }; + private static final int[] RUN_LIST = new int[] { R.string.activity_type_running, + R.string.activity_type_street_running, R.string.activity_type_track_running, + R.string.activity_type_trail_running }; + private static final int[] SKI_LIST = new int[] { + R.string.activity_type_cross_country_skiing, R.string.activity_type_skiing }; + private static final int[] SNOW_BOARDING_LIST = new int[] { + R.string.activity_type_snow_boarding }; + private static final int[] WALK_LIST = new int[] { R.string.activity_type_hiking, + R.string.activity_type_off_trail_hiking, R.string.activity_type_speed_walking, + R.string.activity_type_trail_hiking, R.string.activity_type_walking }; - private static LinkedHashMap> map = - new LinkedHashMap>(); + private static final LinkedHashMap> + MAP = new LinkedHashMap>(); static { - map.put( + MAP.put( RUN, new Pair(R.string.activity_type_running, R.drawable.ic_track_run)); - map.put( + MAP.put( WALK, new Pair(R.string.activity_type_walking, R.drawable.ic_track_walk)); - map.put( + MAP.put( BIKE, new Pair(R.string.activity_type_biking, R.drawable.ic_track_bike)); - map.put(DRIVE, + MAP.put(DRIVE, new Pair(R.string.activity_type_driving, R.drawable.ic_track_drive)); - map.put( + MAP.put( SKI, new Pair(R.string.activity_type_skiing, R.drawable.ic_track_ski)); - map.put(SNOW_BOARDING, new Pair( + MAP.put(SNOW_BOARDING, new Pair( R.string.activity_type_snow_boarding, R.drawable.ic_track_snow_boarding)); - map.put(AIRPLANE, + MAP.put(AIRPLANE, new Pair(R.string.activity_type_airplane, R.drawable.ic_track_airplane)); - map.put( + MAP.put( BOAT, new Pair(R.string.activity_type_boat, R.drawable.ic_track_boat)); } - private static int[] airplane = new int[] { - R.string.activity_type_airplane, R.string.activity_type_commercial_airplane, - R.string.activity_type_rc_airplane}; - private static int[] bike = new int[] {R.string.activity_type_biking, - R.string.activity_type_cycling, - R.string.activity_type_dirt_bike, - R.string.activity_type_motor_bike, - R.string.activity_type_mountain_biking, - R.string.activity_type_road_biking, - R.string.activity_type_track_cycling}; - private static int[] boat = new int[] {R.string.activity_type_boat, R.string.activity_type_ferry, - R.string.activity_type_motor_boating, R.string.activity_type_rc_boat}; - private static int[] drive = new int[] { - R.string.activity_type_atv, R.string.activity_type_driving, - R.string.activity_type_driving_bus, R.string.activity_type_driving_car}; - private static int[] run = new int[] { - R.string.activity_type_running, R.string.activity_type_street_running, - R.string.activity_type_track_running, R.string.activity_type_trail_running}; - private static int[] ski = - new int[] {R.string.activity_type_cross_country_skiing, R.string.activity_type_skiing}; - private static int[] snowBoarding = new int[] {R.string.activity_type_snow_boarding}; - private static int[] walk = new int[] {R.string.activity_type_hiking, - R.string.activity_type_off_trail_hiking, R.string.activity_type_speed_walking, - R.string.activity_type_trail_hiking, R.string.activity_type_walking}; + private static final float[] REVERT_COLOR_MATRIX = { -1.0f, 0, 0, 0, 255, // red + 0, -1.0f, 0, 0, 255, // green + 0, 0, -1.0f, 0, 255, // blue + 0, 0, 0, 1.0f, 0 // alpha + }; + + private TrackIconUtils() {} /** * Gets the icon drawable. - * + * * @param iconValue the icon value */ public static int getIconDrawable(String iconValue) { if (iconValue == null || iconValue.equals("")) { return R.drawable.ic_track_generic; } - Pair pair = map.get(iconValue); + Pair pair = MAP.get(iconValue); return pair == null ? R.drawable.ic_track_generic : pair.second; } /** * Gets the icon activity type. - * + * * @param iconValue the icon value */ public static int getIconActivityType(String iconValue) { if (iconValue == null || iconValue.equals("")) { return R.string.activity_type_walking; } - Pair pair = map.get(iconValue); + Pair pair = MAP.get(iconValue); return pair == null ? R.string.activity_type_walking : pair.first; } @@ -127,7 +135,7 @@ public class TrackIconUtils { */ public static List getAllIconValues() { List values = new ArrayList(); - for (String value : map.keySet()) { + for (String value : MAP.keySet()) { values.add(value); } return values; @@ -135,7 +143,7 @@ public class TrackIconUtils { /** * Gets the icon value. - * + * * @param context the context * @param activityType the activity type */ @@ -143,28 +151,28 @@ public class TrackIconUtils { if (activityType == null || activityType.equals("")) { return ""; } - if (inList(context, activityType, airplane)) { + if (inList(context, activityType, AIRPLANE_LIST)) { return AIRPLANE; } - if (inList(context, activityType, bike)) { + if (inList(context, activityType, BIKE_LIST)) { return BIKE; } - if (inList(context, activityType, boat)) { + if (inList(context, activityType, BOAT_LIST)) { return BOAT; } - if (inList(context, activityType, drive)) { + if (inList(context, activityType, DRIVE_LIST)) { return DRIVE; } - if (inList(context, activityType, run)) { + if (inList(context, activityType, RUN_LIST)) { return RUN; } - if (inList(context, activityType, ski)) { + if (inList(context, activityType, SKI_LIST)) { return SKI; } - if (inList(context, activityType, snowBoarding)) { + if (inList(context, activityType, SNOW_BOARDING_LIST)) { return SNOW_BOARDING; } - if (inList(context, activityType, walk)) { + if (inList(context, activityType, WALK_LIST)) { return WALK; } return ""; @@ -178,7 +186,7 @@ public class TrackIconUtils { stringBuilder.append(iconValue); adapter.notifyDataSetChanged(); } - + public static ArrayAdapter getIconSpinnerAdapter( final Context context, String iconValue) { return new ArrayAdapter(context, android.R.layout.simple_spinner_item, @@ -198,7 +206,7 @@ public class TrackIconUtils { /** * Returns true if the activity type is in the list. - * + * * @param context the context * @param activityType the activity type * @param list the list @@ -211,4 +219,40 @@ public class TrackIconUtils { } return false; } + + /** + * Sets the menu icon color. + * + * @param menu the menu + */ + public static void setMenuIconColor(Menu menu) { + if (ApiAdapterFactory.getApiAdapter().revertMenuIconColor()) { + int size = menu.size(); + for (int i = 0; i < size; i++) { + MenuItem menuitem = menu.getItem(i); + revertMenuIconColor(menuitem); + } + } + } + + /** + * Sets the menu icon color. + * + * @param menuitem the menu item + */ + public static void setMenuIconColor(MenuItem menuitem) { + if (ApiAdapterFactory.getApiAdapter().revertMenuIconColor()) { + revertMenuIconColor(menuitem); + } + } + + /** + * Reverts the menu icon color. + * + * @param menuitem the menu item + */ + private static void revertMenuIconColor(MenuItem menuitem) { + Drawable drawable = menuitem.getIcon(); + drawable.setColorFilter(new ColorMatrixColorFilter(REVERT_COLOR_MATRIX)); + } }