This commit is contained in:
Sem van der Hoeven
2021-01-12 14:04:25 +01:00
27 changed files with 445 additions and 74 deletions

View File

@@ -40,8 +40,10 @@ dependencies {
implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-maps:17.0.0'
testImplementation 'junit:junit:4.13.1' testImplementation 'junit:junit:4.13.1'
// implementation "com.android.support:support-compat:28.0.0"
// okhttp // okhttp
implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.0'

View File

@@ -25,6 +25,11 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<receiver android:name=".geofencing.GeoFenceBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
</application> </application>
</manifest> </manifest>

View File

@@ -1,6 +1,7 @@
package com.a1.nextlocation; package com.a1.nextlocation;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
@@ -12,6 +13,7 @@ import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import com.a1.nextlocation.data.Data;
import com.a1.nextlocation.data.Route; import com.a1.nextlocation.data.Route;
import com.a1.nextlocation.fragments.HelpPopup; import com.a1.nextlocation.fragments.HelpPopup;
import com.a1.nextlocation.fragments.HomeFragment; import com.a1.nextlocation.fragments.HomeFragment;
@@ -66,6 +68,8 @@ public class MainActivity extends AppCompatActivity implements Refreshable {
CouponListManager.INSTANCE.load(); CouponListManager.INSTANCE.load();
RouteListManager.INSTANCE.setContext(this); RouteListManager.INSTANCE.setContext(this);
RouteListManager.INSTANCE.load(); RouteListManager.INSTANCE.load();
Data.INSTANCE.setContext(this);
Data.INSTANCE.load();
if (savedInstanceState == null) { if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, homeFragment).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, homeFragment).commit();

View File

@@ -1,5 +1,12 @@
package com.a1.nextlocation.data; package com.a1.nextlocation.data;
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@@ -11,6 +18,26 @@ public enum Data {
private int locationsVisited = 0; private int locationsVisited = 0;
private long totalTime = 0; private long totalTime = 0;
private double zoom = 0; private double zoom = 0;
private SharedPreferences.Editor editor;
private Context context;
private LocationProximityListener locationProximityListener;
public void setContext(Context context) {
this.context = context;
}
public void setEditor(SharedPreferences.Editor editor) {
this.editor = editor;
}
public LocationProximityListener getLocationProximityListener() {
return locationProximityListener;
}
public void setLocationProximityListener(LocationProximityListener locationProximityListener) {
this.locationProximityListener = locationProximityListener;
}
private android.location.Location location; private android.location.Location location;
public double getZoom() { public double getZoom() {
@@ -21,10 +48,13 @@ public enum Data {
this.zoom = zoom; this.zoom = zoom;
} }
private final ArrayList<String> visitedNames = new ArrayList<>(); private ArrayList<String> visitedNames = new ArrayList<>();
public void addDistance(double d) { public void addDistance(double d) {
distanceTraveled += d; distanceTraveled += d;
editor.putString("distanceTraveled", String.valueOf(distanceTraveled));
editor.apply();
} }
public long getTotalTime() { public long getTotalTime() {
@@ -35,7 +65,6 @@ public enum Data {
totalTime += time; totalTime += time;
} }
public double getDistanceTraveled() { public double getDistanceTraveled() {
return distanceTraveled; return distanceTraveled;
} }
@@ -44,6 +73,9 @@ public enum Data {
if (!visitedNames.contains(location.getName())) { if (!visitedNames.contains(location.getName())) {
locationsVisited++; locationsVisited++;
visitedNames.add(location.getName()); visitedNames.add(location.getName());
saveVisitedNamesList();
editor.putInt("locationsVisited", locationsVisited);
editor.apply();
} }
} }
@@ -51,6 +83,31 @@ public enum Data {
return locationsVisited; return locationsVisited;
} }
@FunctionalInterface
public interface LocationProximityListener {
void onLocationVisited(Location location);
}
public void saveVisitedNamesList(){
Gson gson = new Gson();
String json = gson.toJson(visitedNames);
editor.putString("visitedNames", json);
editor.apply();
}
public ArrayList<String> loadAndGetVisitedNamesList(){
String json = context.getSharedPreferences("Data", Context.MODE_PRIVATE).getString("visitedNames", "[]");
Type type = new TypeToken<ArrayList<String>>() {}.getType();
visitedNames = new Gson().fromJson(json, type);
return visitedNames;
}
public void load(){
SharedPreferences prefs = context.getSharedPreferences("Data", Context.MODE_PRIVATE);
this.editor = prefs.edit();
Data.INSTANCE.addDistance(Double.parseDouble(prefs.getString("distanceTraveled", "0")));
this.locationsVisited = loadAndGetVisitedNamesList().size();
}
public android.location.Location getLocation() { public android.location.Location getLocation() {
return location; return location;

View File

@@ -25,6 +25,8 @@ public class Location implements Parcelable {
private String imageUrl; private String imageUrl;
private String iconUrl; private String iconUrl;
private boolean visited;
public Location(@NotNull String name, String coordinates, String description, @Nullable String imageUrl) { public Location(@NotNull String name, String coordinates, String description, @Nullable String imageUrl) {
this.name = name; this.name = name;
this.coordinates = coordinates; this.coordinates = coordinates;
@@ -171,4 +173,12 @@ public class Location implements Parcelable {
parcel.writeString(description); parcel.writeString(description);
parcel.writeString(imageUrl); parcel.writeString(imageUrl);
} }
public boolean isVisited() {
return visited;
}
public void setVisited(boolean visited) {
this.visited = visited;
}
} }

View File

@@ -13,6 +13,15 @@ public enum RouteHandler {
private int stepCount = 0; private int stepCount = 0;
private RouteFinishedListener routeFinishedListener; private RouteFinishedListener routeFinishedListener;
private long startedTime; private long startedTime;
private double currentRouteDuration;
public void setCurrentRouteDuration(double currentRouteDuration) {
this.currentRouteDuration = currentRouteDuration;
}
public double getCurrentRouteDuration() {
return currentRouteDuration;
}
private Polyline currentRouteLine; private Polyline currentRouteLine;
@@ -20,6 +29,7 @@ public enum RouteHandler {
this.currentRouteLine = currentRouteLine; this.currentRouteLine = currentRouteLine;
} }
public Polyline getCurrentRouteLine() { public Polyline getCurrentRouteLine() {
return currentRouteLine; return currentRouteLine;
} }

View File

@@ -2,7 +2,10 @@ package com.a1.nextlocation.fragments;
import android.Manifest; import android.Manifest;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.location.Location; import android.location.Location;
@@ -19,6 +22,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
@@ -26,6 +30,7 @@ import androidx.fragment.app.FragmentActivity;
import com.a1.nextlocation.R; import com.a1.nextlocation.R;
import com.a1.nextlocation.data.Data; import com.a1.nextlocation.data.Data;
import com.a1.nextlocation.data.RouteHandler; import com.a1.nextlocation.data.RouteHandler;
import com.a1.nextlocation.geofencing.GeofenceInitalizer;
import com.a1.nextlocation.json.DirectionsResult; import com.a1.nextlocation.json.DirectionsResult;
import com.a1.nextlocation.network.ApiHandler; import com.a1.nextlocation.network.ApiHandler;
import com.a1.nextlocation.recyclerview.LocationListManager; import com.a1.nextlocation.recyclerview.LocationListManager;
@@ -60,6 +65,8 @@ public class HomeFragment extends Fragment implements LocationListener {
private int color; private int color;
private Location currentLocation; private Location currentLocation;
private Overlay allLocationsOverlay; private Overlay allLocationsOverlay;
private GeofenceInitalizer initializer;
private final static String CHANNEL_ID = "next_location01";
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -71,6 +78,7 @@ public class HomeFragment extends Fragment implements LocationListener {
Manifest.permission.WRITE_EXTERNAL_STORAGE); Manifest.permission.WRITE_EXTERNAL_STORAGE);
color = requireContext().getColor(R.color.red); color = requireContext().getColor(R.color.red);
Data.INSTANCE.setLocationProximityListener(this::onLocationVisited);
} }
@Override @Override
@@ -132,6 +140,7 @@ public class HomeFragment extends Fragment implements LocationListener {
roadOverlay.setColor(color); roadOverlay.setColor(color);
// pass the line to the route handler // pass the line to the route handler
RouteHandler.INSTANCE.setCurrentRouteDuration(directionsResult.getDuration());
RouteHandler.INSTANCE.setCurrentRouteLine(roadOverlay); RouteHandler.INSTANCE.setCurrentRouteLine(roadOverlay);
Log.d(TAG, "onDirectionsAvailable: successfully added road!"); Log.d(TAG, "onDirectionsAvailable: successfully added road!");
@@ -141,6 +150,7 @@ public class HomeFragment extends Fragment implements LocationListener {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
initializer = new GeofenceInitalizer(requireContext(),requireActivity());
initMap(view); initMap(view);
} }
@@ -217,6 +227,8 @@ public class HomeFragment extends Fragment implements LocationListener {
} }
/** /**
* displays the route that is currently being followed as a red line * displays the route that is currently being followed as a red line
*/ */
@@ -245,11 +257,12 @@ public class HomeFragment extends Fragment implements LocationListener {
private void addLocations() { private void addLocations() {
// get the locations of the current route or all locations // get the locations of the current route or all locations
List<com.a1.nextlocation.data.Location> locations = RouteHandler.INSTANCE.isFollowingRoute() ? RouteHandler.INSTANCE.getCurrentRoute().getLocations() : LocationListManager.INSTANCE.getLocationList(); List<com.a1.nextlocation.data.Location> locations = RouteHandler.INSTANCE.isFollowingRoute() ? RouteHandler.INSTANCE.getCurrentRoute().getLocations() : LocationListManager.INSTANCE.getLocationList();
initializer.removeGeoFences();
final ArrayList<OverlayItem> items = new ArrayList<>(locations.size()); final ArrayList<OverlayItem> items = new ArrayList<>(locations.size());
// marker icon // marker icon
Drawable marker = ContextCompat.getDrawable(requireContext(), R.drawable.ic_baseline_location_on_24); Drawable marker = ContextCompat.getDrawable(requireContext(), R.drawable.ic_baseline_location_on_24);
marker.setAlpha(255); marker.setAlpha(255);
marker.setTint(getResources().getColor(R.color.primaryColour)); marker.setTint(getResources().getColor(R.color.secondaryColour));
// add all locations to the overlay itemss // add all locations to the overlay itemss
for (com.a1.nextlocation.data.Location location : locations) { for (com.a1.nextlocation.data.Location location : locations) {
@@ -299,6 +312,19 @@ public class HomeFragment extends Fragment implements LocationListener {
mapView.getOverlays().add(allLocationsOverlay); mapView.getOverlays().add(allLocationsOverlay);
Log.d(TAG, "addLocations: successfully added locations"); Log.d(TAG, "addLocations: successfully added locations");
addGeofences(locations);
}
/**
* adds the geofences for the currently active locations
* @param locations the locations to add geofences for
*/
private void addGeofences(List<com.a1.nextlocation.data.Location> locations) {
Log.d(TAG, "addGeofences: adding geofences!");
initializer.init(locations);
} }
/** /**
@@ -336,34 +362,62 @@ public class HomeFragment extends Fragment implements LocationListener {
if (currentLocation != null) { if (currentLocation != null) {
double distance = currentLocation.distanceTo(location); // in meters double distance = currentLocation.distanceTo(location); // in meters
// can't walk 100 meters in a few seconds // can't walk 100 meters in a few seconds
if (distance < 100) if (distance < 100) {
Data.INSTANCE.addDistance(distance); Data.INSTANCE.addDistance(distance);
Data.INSTANCE.setLocation(location); Data.INSTANCE.setLocation(location);
}
currentLocation = location;
//new thread because we don't want the main thread to hang, this method gets called a lot
Thread t = new Thread(() -> {
com.a1.nextlocation.data.Location last = null;
if (RouteHandler.INSTANCE.isFollowingRoute()) {
List<com.a1.nextlocation.data.Location> locs = RouteHandler.INSTANCE.getCurrentRoute().getLocations();
last = locs.get(locs.size() - 1);
} }
currentLocation = location;
for (com.a1.nextlocation.data.Location l : LocationListManager.INSTANCE.getLocationList()) {
// mark the location visited if we are less than 20 meters away //new thread because we don't want the main thread to hang, this method gets called a lot
if (com.a1.nextlocation.data.Location.getDistance(currentLocation.getLatitude(), currentLocation.getLongitude(), l.getLat(), l.getLong()) < 20) { Thread t = new Thread(() -> {
Data.INSTANCE.visitLocation(l); com.a1.nextlocation.data.Location last = null;
if (l.equals(last)) stopRoute(); if (RouteHandler.INSTANCE.isFollowingRoute()) {
List<com.a1.nextlocation.data.Location> locs = RouteHandler.INSTANCE.getCurrentRoute().getLocations();
last = locs.get(locs.size() - 1);
} }
}
Data.INSTANCE.setZoom(mapView.getZoomLevelDouble()); for (com.a1.nextlocation.data.Location l : LocationListManager.INSTANCE.getLocationList()) {
}); // mark the location visited if we are less than 20 meters away
if (com.a1.nextlocation.data.Location.getDistance(currentLocation.getLatitude(), currentLocation.getLongitude(), l.getLat(), l.getLong()) < 20) {
Data.INSTANCE.visitLocation(l);
if (l.equals(last)) stopRoute();
}
}
t.start(); Data.INSTANCE.setZoom(mapView.getZoomLevelDouble());
});
t.start();
}
}
public void onLocationVisited(com.a1.nextlocation.data.Location location) {
Data.INSTANCE.visitLocation(location);
showNotification(location);
}
private void showNotification(com.a1.nextlocation.data.Location location) {
NotificationManager mNotificationManager = (NotificationManager) requireActivity().getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, "next_location", importance);
notificationChannel.enableLights(true);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
mNotificationManager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(requireContext(),CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text,location.getName()))
.setAutoCancel(true);
mNotificationManager.notify(0,mBuilder.build());
} }
// empty override methods for the LocationListener // empty override methods for the LocationListener

View File

@@ -79,7 +79,7 @@ public class StatisticFragment extends Fragment {
private void initializeDistanceTextView(View view){ private void initializeDistanceTextView(View view){
distance = view.findViewById(R.id.statistics_km); distance = view.findViewById(R.id.statistics_km);
double dist = Data.INSTANCE.getDistanceTraveled()/1000; double dist = Double.parseDouble(getContext().getSharedPreferences("Data", Context.MODE_PRIVATE).getString("distanceTraveled", "0")) /1000;
if (getContext().getSharedPreferences("Settings", Context.MODE_PRIVATE).getBoolean("imperialSwitch", false)) if (getContext().getSharedPreferences("Settings", Context.MODE_PRIVATE).getBoolean("imperialSwitch", false))
distance.setText("" + String.format("%.1f",dist * 0.621371) + " mi"); distance.setText("" + String.format("%.1f",dist * 0.621371) + " mi");
else else

View File

@@ -0,0 +1,61 @@
package com.a1.nextlocation.geofencing;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.a1.nextlocation.data.Data;
import com.a1.nextlocation.data.Location;
import com.a1.nextlocation.recyclerview.LocationListManager;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofenceStatusCodes;
import com.google.android.gms.location.GeofencingEvent;
import java.util.List;
/**
* broadcast receiver for geofence events
*/
public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
private final String TAG = GeoFenceBroadcastReceiver.class.getCanonicalName();
@Override
public void onReceive(Context context, Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
Log.i(TAG, "onReceive: RECEIVED GEOFENCE STUFF");
if (geofencingEvent.hasError()) {
String errorMessage = GeofenceStatusCodes
.getStatusCodeString(geofencingEvent.getErrorCode());
Log.e(TAG, errorMessage);
return;
}
// Get the transition type.
int geofenceTransition = geofencingEvent.getGeofenceTransition();
switch (geofenceTransition) {
case Geofence.GEOFENCE_TRANSITION_ENTER:
List<Geofence> geofenceList = geofencingEvent.getTriggeringGeofences();
// loop through list of geofences
for (Geofence geofence : geofenceList) {
for (Location l : LocationListManager.INSTANCE.getLocationList()) {
if (geofence.getRequestId().equals(l.getName())) {
l.setVisited(true);
// let the homefragment know that we are close to a location
Data.INSTANCE.getLocationProximityListener().onLocationVisited(l);
Log.d(TAG, "onReceive: VISITED LOCATION " + l.getName());
break;
}
}
}
break;
case Geofence.GEOFENCE_TRANSITION_EXIT:
Log.d(TAG, "onReceive: exiting geofence...");
break;
}
}
}

View File

@@ -0,0 +1,51 @@
package com.a1.nextlocation.geofencing;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.provider.SyncStateContract;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingRequest;
import org.osmdroid.util.GeoPoint;
public class GeoFencingHelper extends ContextWrapper {
private PendingIntent pendingIntent;
public GeoFencingHelper(Context base) {
super(base);
}
public GeofencingRequest getGeoFencingRequest(Geofence geofence) {
GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
builder.addGeofence(geofence);
return builder.build();
}
public Geofence getGeofence(String ID, GeoPoint point, float radius) {
return new Geofence.Builder()
.setCircularRegion(point.getLatitude(), point.getLongitude(), radius)
.setRequestId(ID)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
Geofence.GEOFENCE_TRANSITION_EXIT)
.setLoiteringDelay(5000)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.build();
}
public PendingIntent getPendingIntent() {
if (pendingIntent != null) {
return pendingIntent;
}
Intent intent = new Intent(this, GeoFenceBroadcastReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
}

View File

@@ -0,0 +1,109 @@
package com.a1.nextlocation.geofencing;
import android.Manifest;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.a1.nextlocation.data.Data;
import com.a1.nextlocation.data.Location;
import com.a1.nextlocation.recyclerview.LocationListManager;
import com.google.android.gms.location.Geofence;
import com.google.android.gms.location.GeofencingClient;
import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import org.osmdroid.util.GeoPoint;
import java.util.List;
import static android.content.ContentValues.TAG;
public class GeofenceInitalizer {
private final Activity activity;
private GeofencingClient geofencingClient;
private GeoFencingHelper geoFencingHelper;
private final Context context;
private final String TAG = GeofenceInitalizer.class.getCanonicalName();
private List<Location> locations;
private int BACKGROUND_LOCATION_ACCESS_REQUEST_CODE = 10002;
public GeofenceInitalizer(Context context, Activity activity) {
this.context = context;
this.activity = activity;
}
public void init(List<Location> locations) {
if (!checkFineLocationPermission()) return;
geofencingClient = LocationServices.getGeofencingClient(context);
geoFencingHelper = new GeoFencingHelper(context);
this.locations = locations;
if (Build.VERSION.SDK_INT >= 29) {
//If API is higher then 29 we need background permission
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED) {
addFences();
} else {
//Permission is not granted!! Need to request it..
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACCESS_BACKGROUND_LOCATION)) {
//We show a dialog and ask for permission
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, BACKGROUND_LOCATION_ACCESS_REQUEST_CODE);
} else {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, BACKGROUND_LOCATION_ACCESS_REQUEST_CODE);
}
}
} else {
addFences();
}
}
private void addFences() {
for (Location location : locations) {
GeoPoint t = new GeoPoint(location.getLat(), location.getLong());
addGeofence(t, location.getName());
}
}
public void removeGeoFences() {
geofencingClient = LocationServices.getGeofencingClient(context);
geoFencingHelper = new GeoFencingHelper(context);
PendingIntent pendingIntent = geoFencingHelper.getPendingIntent();
geofencingClient.removeGeofences(pendingIntent)
.addOnSuccessListener(aVoid -> Log.d(TAG, "Geofence is removed... "))
.addOnFailureListener(e -> Log.d(TAG, e.getLocalizedMessage()));
if (this.locations != null) this.locations.clear();
}
private void addGeofence(GeoPoint p, String name) {
if (!checkFineLocationPermission()) return;
Geofence geofence = geoFencingHelper.getGeofence(name, p, 45);
GeofencingRequest geofencingRequest = geoFencingHelper.getGeoFencingRequest(geofence);
PendingIntent pendingIntent = geoFencingHelper.getPendingIntent();
geofencingClient.addGeofences(geofencingRequest, pendingIntent).addOnSuccessListener(v -> {
Log.i(TAG, "addGeofence: added geofence");
}).addOnFailureListener(v -> {
Log.e(TAG, "addGeofence: failure adding geofence " + v.getMessage());
});
Log.i(TAG, "addGeofence: added geofence to client");
}
private boolean checkFineLocationPermission() {
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
}

View File

@@ -6,7 +6,7 @@
android:tint="#333333" android:tint="#333333"
android:alpha="0.6"> android:alpha="0.6">
<path <path
android:fillColor="@android:color/white" android:fillColor="@color/primaryColour"
android:pathData="M8,16h8V8H8V16zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2L12,2z" android:pathData="M8,16h8V8H8V16zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2L12,2z"
android:fillType="evenOdd"/> android:fillType="evenOdd"/>
</vector> </vector>

View File

@@ -5,6 +5,6 @@
android:viewportHeight="24" android:viewportHeight="24"
android:tint="?attr/colorControlNormal"> android:tint="?attr/colorControlNormal">
<path <path
android:fillColor="@color/primaryColour" android:fillColor="@color/secondaryColour"
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/> android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
</vector> </vector>

View File

@@ -22,9 +22,9 @@
android:id="@+id/navigation_bar" android:id="@+id/navigation_bar"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/white" android:background="@color/primaryColour"
app:itemIconTint="@color/secondaryColour" app:itemIconTint="@color/secondaryColour"
app:itemTextColor="@color/primaryColour" app:itemTextColor="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View File

@@ -13,7 +13,7 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.4" app:layout_constraintHorizontal_bias="0.4"
@@ -26,7 +26,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:text="" android:text=""
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View File

@@ -24,7 +24,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
android:backgroundTint="@color/secondaryColour" android:backgroundTint="@color/primaryColour"
android:src="@drawable/ic_baseline_outlined_flag_24" android:src="@drawable/ic_baseline_outlined_flag_24"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@@ -37,7 +37,7 @@
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/location_list_button" app:layout_constraintTop_toBottomOf="@+id/location_list_button"
android:backgroundTint="@color/secondaryColour" android:backgroundTint="@color/primaryColour"
android:src="@drawable/ic_stop_icon"/> android:src="@drawable/ic_stop_icon"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -14,7 +14,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:text="" android:text=""
android:textColor="@color/white" android:textColor="@color/secondaryColour"
android:textSize="30sp" android:textSize="30sp"
android:gravity="center" android:gravity="center"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -35,7 +35,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="200dp" android:layout_height="200dp"
android:layout_margin="20dp" android:layout_margin="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:text="" android:text=""
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -45,8 +45,8 @@
android:id="@+id/detail_location_text" android:id="@+id/detail_location_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/secondaryColour"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/primaryColour"
android:text="" android:text=""
/> />
</ScrollView> </ScrollView>

View File

@@ -19,6 +19,7 @@
<TextView <TextView
android:id="@+id/route_title" android:id="@+id/route_title"
android:textColor="@color/secondaryColour"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="9dp" android:layout_margin="9dp"

View File

@@ -45,11 +45,11 @@
android:layout_margin="20dp" android:layout_margin="20dp"
android:background="@color/secondaryColour" android:background="@color/secondaryColour"
android:id="@+id/route_scroll_view" android:id="@+id/route_scroll_view"
app:layout_constraintBottom_toTopOf="@id/total_distance"
app:layout_constraintTop_toBottomOf="@id/route_detail_image" app:layout_constraintTop_toBottomOf="@id/route_detail_image"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
> app:layout_constraintBottom_toTopOf="@id/total_distance">
<TextView <TextView
android:id="@+id/route_detail_tekst" android:id="@+id/route_detail_tekst"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -66,7 +66,7 @@
android:layout_marginBottom="45dp" android:layout_marginBottom="45dp"
android:backgroundTint="@color/secondaryColour" android:backgroundTint="@color/secondaryColour"
android:text="@string/start_route" android:text="@string/start_route"
android:textColor="@color/buttonColour" android:textColor="@color/primaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498" app:layout_constraintHorizontal_bias="0.498"
@@ -78,9 +78,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:text="@string/total_distance" android:text="@string/total_distance"
android:textColor="@color/buttonColour" android:textColor="@color/secondaryColour"
app:layout_constraintBottom_toTopOf="@+id/start_route_button" app:layout_constraintBottom_toTopOf="@+id/start_route_button"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498" app:layout_constraintHorizontal_bias="0.498"

View File

@@ -25,7 +25,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="@string/settings" android:text="@string/settings"
android:textColor="@color/white" android:textColor="@color/secondaryColour"
android:textSize="30sp" android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -39,7 +39,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textView" app:layout_constraintTop_toBottomOf="@id/textView"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
> >
@@ -48,7 +48,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/language" android:text="@string/language"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk" app:layout_constraintEnd_toEndOf="@id/Balk"
@@ -59,7 +59,7 @@
android:id="@+id/Balk" android:id="@+id/Balk"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -84,7 +84,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toTopOf="@id/Box3" app:layout_constraintBottom_toTopOf="@id/Box3"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -96,7 +96,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/imperial_system" android:text="@string/imperial_system"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk2" app:layout_constraintEnd_toEndOf="@id/Balk2"
@@ -107,7 +107,7 @@
android:id="@+id/Balk2" android:id="@+id/Balk2"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/buttonColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -131,7 +131,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -142,7 +142,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/_65_mode" android:text="@string/_65_mode"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk3" app:layout_constraintEnd_toEndOf="@id/Balk3"

View File

@@ -14,7 +14,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="@string/statistics" android:text="@string/statistics"
android:textColor="@color/white" android:textColor="@color/secondaryColour"
android:textSize="30sp" android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -25,7 +25,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toTopOf="@id/Box2" app:layout_constraintBottom_toTopOf="@id/Box2"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -37,7 +37,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/total_distance" android:text="@string/total_distance"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk" app:layout_constraintEnd_toEndOf="@id/Balk"
@@ -48,7 +48,7 @@
android:id="@+id/Balk" android:id="@+id/Balk"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -59,7 +59,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="" android:text=""
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -74,7 +74,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toTopOf="@id/Box3" app:layout_constraintBottom_toTopOf="@id/Box3"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -86,7 +86,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/visited_locations" android:text="@string/visited_locations"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk2" app:layout_constraintEnd_toEndOf="@id/Balk2"
@@ -97,7 +97,7 @@
android:id="@+id/Balk2" android:id="@+id/Balk2"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -108,7 +108,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="" android:text=""
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -123,7 +123,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toTopOf="@id/Box4" app:layout_constraintBottom_toTopOf="@id/Box4"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -133,7 +133,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/total_time" android:text="@string/total_time"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk3" app:layout_constraintEnd_toEndOf="@id/Balk3"
@@ -144,7 +144,7 @@
android:id="@+id/Balk3" android:id="@+id/Balk3"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -155,7 +155,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="" android:text=""
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@@ -170,7 +170,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_marginHorizontal="20dp" android:layout_marginHorizontal="20dp"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.85" app:layout_constraintHorizontal_bias="0.85"
@@ -182,7 +182,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/coupons_collected" android:text="@string/coupons_collected"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/Balk4" app:layout_constraintEnd_toEndOf="@id/Balk4"
@@ -193,7 +193,7 @@
android:id="@+id/Balk4" android:id="@+id/Balk4"
android:layout_width="1dp" android:layout_width="1dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/black" android:background="@color/secondaryColour"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -204,7 +204,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="" android:text=""
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View File

@@ -16,9 +16,9 @@
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="50dp" android:layout_height="50dp"
android:text="@string/help" android:text="@string/help"
android:textColor="@color/black" android:textColor="@color/secondaryColour"
android:textAlignment="center" android:textAlignment="center"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:paddingVertical="10dp"/> android:paddingVertical="10dp"/>
<ScrollView <ScrollView
@@ -35,7 +35,7 @@
android:layout_width="280dp" android:layout_width="280dp"
android:layout_height="430dp" android:layout_height="430dp"
android:text="@string/help_discription" android:text="@string/help_discription"
android:textColor="@color/white" android:textColor="@color/secondaryColour"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
@@ -49,6 +49,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:backgroundTint="@color/buttonColour"
android:text="ok" android:text="ok"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/helpPopTitle" /> app:layout_constraintTop_toTopOf="@+id/helpPopTitle" />

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:id="@+id/locationItem" android:id="@+id/locationItem"
android:layout_margin="20dp"> android:layout_margin="20dp">
@@ -25,6 +25,7 @@
android:layout_height="47dp" android:layout_height="47dp"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"
android:gravity="left" android:gravity="left"
android:textColor="@color/secondaryColour"
android:text="" android:text=""
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/secondaryColour" android:background="@color/primaryColour"
android:id="@+id/routeItem" android:id="@+id/routeItem"
android:layout_margin="20dp"> android:layout_margin="20dp">
@@ -21,6 +21,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center" android:gravity="center"
android:textColor="@color/secondaryColour"
android:text="" android:text=""
android:textSize="20sp" android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"

View File

@@ -30,4 +30,6 @@
<string name="end_location">Eind locatie</string> <string name="end_location">Eind locatie</string>
<string name="start_location">Start locatie</string> <string name="start_location">Start locatie</string>
<string name="following_locations">"Deze route bevat de volgende locaties: "</string> <string name="following_locations">"Deze route bevat de volgende locaties: "</string>
<string name="notification_title">Je bent dicht bij een locatie!</string>
<string name="notification_text">Je bent bijna bij %1$s</string>
</resources> </resources>

View File

@@ -7,8 +7,8 @@
<color name="teal_700">#FF018786</color> <color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color> <color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="primaryColour">#FF115571</color> <color name="primaryColour">#FFFFFFFF</color>
<color name="secondaryColour">#FF31AFB4</color> <color name="secondaryColour">#FF000000</color>
<color name="buttonColour">#FF14212D</color> <color name="buttonColour">#FF000000</color>
<color name="red">#FF0000</color> <color name="red">#FF0000</color>
</resources> </resources>

View File

@@ -25,6 +25,8 @@
<string name="Chinese">Chinese</string> <string name="Chinese">Chinese</string>
<string name="help">HELP</string> <string name="help">HELP</string>
<string name="help_discription">Hasn\'t been translated yet</string> <string name="help_discription">Hasn\'t been translated yet</string>
<string name="notification_title">You\'re close to a location!</string>
<string name="notification_text">You\'re almost at %1$s</string>
<string name="following_locations">This route contains the following locations: </string> <string name="following_locations">This route contains the following locations: </string>
<string name="end_location">End location</string> <string name="end_location">End location</string>
<string name="start_location">Start location</string> <string name="start_location">Start location</string>