Introduced material design icons.

This commit is contained in:
Dennis Guse
2019-09-12 23:23:39 +02:00
parent 10e4a52947
commit 2c49a4f3f1
88 changed files with 184 additions and 121 deletions
@@ -18,12 +18,9 @@ package de.dennisguse.opentracks;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.Menu;
import androidx.fragment.app.FragmentActivity;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* @author Jimmy Shih
*/
@@ -43,10 +40,4 @@ public abstract class AbstractActivity extends FragmentActivity {
* Gets the layout resource id.
*/
protected abstract int getLayoutResId();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
TrackIconUtils.setMenuIconColor(menu);
return super.onCreateOptionsMenu(menu);
}
}
@@ -528,8 +528,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
startGpsMenuItem.setVisible(!isRecording);
if (!isRecording) {
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);
startGpsMenuItem.setIcon(isGpsStarted ? R.drawable.ic_gps_off_24dp : R.drawable.ic_gps_fixed_24dp);
}
}
if (aggregatedStatisticsMenuItem != null) {
@@ -21,8 +21,6 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
@@ -68,15 +66,7 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment {
imageIds.add(TrackIconUtils.getIconDrawable(iconValue));
}
Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_track_airplane, options);
int padding = 32;
int width = options.outWidth + 2 * padding;
int height = options.outHeight + 2 * padding;
gridView.setColumnWidth(width);
final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(activity, imageIds, width, height, padding);
final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(imageIds);
gridView.setAdapter(imageAdapter);
final AlertDialog alertDialog = new AlertDialog.Builder(activity).setTitle(R.string.track_edit_activity_type_hint).setView(view).create();
@@ -16,7 +16,6 @@
package de.dennisguse.opentracks.fragments;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
@@ -26,6 +25,7 @@ import android.widget.ImageView;
import java.util.List;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.util.ResourceUtils;
/**
* Image adapter for choosing an activity type.
@@ -34,19 +34,11 @@ import de.dennisguse.opentracks.R;
*/
public class ChooseActivityTypeImageAdapter extends BaseAdapter {
private final Context context;
private final List<Integer> imageIds;
private final int width;
private final int height;
private final int padding;
private int selected = -1;
ChooseActivityTypeImageAdapter(Context context, List<Integer> imageIds, int width, int height, int padding) {
this.context = context;
ChooseActivityTypeImageAdapter(List<Integer> imageIds) {
this.imageIds = imageIds;
this.width = width;
this.height = height;
this.padding = padding;
}
@Override
@@ -76,19 +68,23 @@ public class ChooseActivityTypeImageAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView = new ImageView(parent.getContext());
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setAdjustViewBounds(true);
int padding = ResourceUtils.dpToPx(parent.getContext(), 8);
imageView.setPaddingRelative(padding, padding, padding, padding);
} else {
imageView = (ImageView) convertView;
}
if (position == selected) {
imageView.setBackgroundResource(R.drawable.list_selector_background_transition_holo_dark);
} else {
imageView.setBackgroundColor(Color.TRANSPARENT);
}
imageView.setImageResource(imageIds.get(position));
imageView.setMinimumHeight(height);
imageView.setMinimumWidth(width);
imageView.setPadding(padding, padding, padding, padding);
return imageView;
}
}
@@ -48,7 +48,6 @@ import de.dennisguse.opentracks.util.IntentUtils;
import de.dennisguse.opentracks.util.ListItemUtils;
import de.dennisguse.opentracks.util.StatsUtils;
import de.dennisguse.opentracks.util.StringUtils;
import de.dennisguse.opentracks.util.TrackIconUtils;
/**
* A fragment to show marker details.
@@ -179,8 +178,6 @@ public class MarkerDetailFragment extends Fragment {
inflater.inflate(R.menu.marker_detail, menu);
updateWaypoint(false);
TrackIconUtils.setMenuIconColor(menu);
}
@Override
@@ -515,8 +515,7 @@ public class TrackRecordingService extends Service {
track.setId(trackId);
track.setName(TrackNameUtils.getTrackName(this, trackId, now));
String category = PreferencesUtils.getString(
this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT);
String category = PreferencesUtils.getString(this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT);
track.setCategory(category);
track.setIcon(TrackIconUtils.getIconValue(this, category));
track.setTripStatistics(trackTripStatisticsUpdater.getTripStatistics());
@@ -64,14 +64,12 @@ public class ActivityTypePreference extends DialogPreference {
getContext(), R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT);
textView.setText(category);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getContext(), R.array.activity_types, android.R.layout.simple_dropdown_item_1line);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), R.array.activity_types, android.R.layout.simple_dropdown_item_1line);
textView.setAdapter(adapter);
textView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String iconValue = TrackIconUtils.getIconValue(
getContext(), (String) textView.getAdapter().getItem(position));
String iconValue = TrackIconUtils.getIconValue(getContext(), (String) textView.getAdapter().getItem(position));
TrackIconUtils.setIconSpinner(spinner, iconValue);
}
});
@@ -0,0 +1,17 @@
package de.dennisguse.opentracks.util;
import android.content.Context;
/**
* Utils related to handling Android resources.
*/
public class ResourceUtils {
/**
* Convert display density to physical pixel.
*/
public static int dpToPx(Context context, int dp) {
float density = context.getResources().getDisplayMetrics().density;
return Math.round(dp * density);
}
}
@@ -17,15 +17,7 @@
package de.dennisguse.opentracks.util;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
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;
@@ -67,14 +59,14 @@ public class TrackIconUtils {
private static final LinkedHashMap<String, Pair<Integer, Integer>> MAP = new LinkedHashMap<>();
static {
MAP.put(RUN, new Pair<>(R.string.activity_type_running, R.drawable.ic_track_run));
MAP.put(WALK, new Pair<>(R.string.activity_type_walking, R.drawable.ic_track_walk));
MAP.put(BIKE, new Pair<>(R.string.activity_type_biking, R.drawable.ic_track_bike));
MAP.put(DRIVE, new Pair<>(R.string.activity_type_driving, R.drawable.ic_track_drive));
MAP.put(RUN, new Pair<>(R.string.activity_type_running, R.drawable.ic_activity_run_24dp));
MAP.put(WALK, new Pair<>(R.string.activity_type_walking, R.drawable.ic_activity_walk_24dp));
MAP.put(BIKE, new Pair<>(R.string.activity_type_biking, R.drawable.ic_activity_bike_24dp));
MAP.put(DRIVE, new Pair<>(R.string.activity_type_driving, R.drawable.ic_activity_drive_24dp));
MAP.put(SKI, new Pair<>(R.string.activity_type_skiing, R.drawable.ic_track_ski));
MAP.put(SNOW_BOARDING, new Pair<>(R.string.activity_type_snow_boarding, R.drawable.ic_track_snow_boarding));
MAP.put(AIRPLANE, new Pair<>(R.string.activity_type_airplane, R.drawable.ic_track_airplane));
MAP.put(BOAT, new Pair<>(R.string.activity_type_boat, R.drawable.ic_track_boat));
MAP.put(AIRPLANE, new Pair<>(R.string.activity_type_airplane, R.drawable.ic_activity_flight_24dp));
MAP.put(BOAT, new Pair<>(R.string.activity_type_boat, R.drawable.ic_activity_boat_24dp));
}
private TrackIconUtils() {
@@ -163,10 +155,17 @@ public class TrackIconUtils {
@NonNull
@Override
public View getView(int position, View convertView, @NonNull android.view.ViewGroup parent) {
ImageView imageView = convertView != null ? (ImageView) convertView : new ImageView(getContext());
Bitmap source = BitmapFactory.decodeResource(context.getResources(), TrackIconUtils.getIconDrawable(getItem(position) + ""));
imageView.setImageBitmap(source);
imageView.setPadding(4, 4, -4, -4);
ImageView imageView;
if (convertView != null) {
imageView = (ImageView) convertView;
} else {
imageView = new ImageView(getContext());
}
imageView.setImageResource(TrackIconUtils.getIconDrawable(getItem(position) + ""));
int padding = ResourceUtils.dpToPx(getContext(), 1);
imageView.setPaddingRelative(padding, padding, padding, -padding);
return imageView;
}
};
@@ -187,38 +186,4 @@ public class TrackIconUtils {
}
return false;
}
/**
* Sets the menu icon color.
*
* @param menu the menu
*/
public static void setMenuIconColor(Menu menu) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuitem = menu.getItem(i);
setMenuIconColor(menuitem);
}
}
/**
* Sets the menu icon color.
*
* @param menuitem the menu item
*/
public static void setMenuIconColor(MenuItem menuitem) {
revertMenuIconColor(menuitem);
}
/**
* Reverts the menu icon color.
*
* @param menuitem the menu item
*/
private static void revertMenuIconColor(MenuItem menuitem) {
Drawable drawable = menuitem.getIcon();
if (drawable != null) {
final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(Color.rgb(255, 255, 255), PorterDuff.Mode.MULTIPLY);
drawable.setColorFilter(colorFilter);
}
}
}