diff --git a/app/src/main/assets/routes.json b/app/src/main/assets/routes.json index 46c734f..ccfba28 100644 --- a/app/src/main/assets/routes.json +++ b/app/src/main/assets/routes.json @@ -3,9 +3,35 @@ "name": "rondje stad", "locations": [ { - "name": "KesCrOkĂŠt breeda", - "coordinates": "2.4654645,6.2342323", - "description": "lekkere patatjes" + "name":"Prison Escape Kloosterlaan 168", + "coordinates":"51.59073795635181,4.784917104321059", + "description":"4811EE Breda", + "imageUrl":"NULL" + }, + { + "name":"De Koepel - FutureDome Events Nassausingel 26", + "coordinates":"51.590431588532105,4.786756741648511", + "description":"4811HP Breda", + "imageUrl":"NULL" + }, + + { + "name":"Escaping Breda: Escape Room Games Boschstraat 114", + "coordinates":" 51.59110835530862,4.784147222780912", + "description":"4811GK Breda", + "imageUrl":"NULL" + }, + { + "name":"MEZZ Breda Keizerstraat 101", + "coordinates":"51.58394697737321,4.779757901349616", + "description":"4811HL Breda", + "imageUrl":"NULL" + }, + { + "name":"Het Klooster Breda Schorsmolenstraat 13", + "coordinates":"51.58775443759389,4.765568874365066", + "description":"4811VN Breda", + "imageUrl":"NULL" } ], "totalDistance": 2.3434, diff --git a/app/src/main/java/com/a1/nextlocation/MainActivity.java b/app/src/main/java/com/a1/nextlocation/MainActivity.java index 9f7821e..a615490 100644 --- a/app/src/main/java/com/a1/nextlocation/MainActivity.java +++ b/app/src/main/java/com/a1/nextlocation/MainActivity.java @@ -1,9 +1,7 @@ package com.a1.nextlocation; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; import android.os.Bundle; import android.util.Log; @@ -38,7 +36,7 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - BottomNavigationView bottomNav = findViewById(R.id.navbar); + BottomNavigationView bottomNav = findViewById(R.id.navigation_bar); bottomNav.setOnNavigationItemSelectedListener(navListener); diff --git a/app/src/main/java/com/a1/nextlocation/data/Location.java b/app/src/main/java/com/a1/nextlocation/data/Location.java index e0eb89d..a0822fc 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Location.java +++ b/app/src/main/java/com/a1/nextlocation/data/Location.java @@ -90,8 +90,8 @@ public class Location implements Parcelable { public double[] getCoordinatesAsDoubles() { double[] res = new double[2]; - res[0] = getLat(); - res[1] = getLong(); + res[1] = getLat(); + res[0] = getLong(); return res; } diff --git a/app/src/main/java/com/a1/nextlocation/fragments/CouponFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/CouponFragment.java index 1faea7f..984e38c 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/CouponFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/CouponFragment.java @@ -1,7 +1,6 @@ package com.a1.nextlocation.fragments; import android.app.AlertDialog; -import android.content.DialogInterface; import android.os.Bundle; import androidx.fragment.app.Fragment; @@ -38,11 +37,11 @@ public class CouponFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_coupon, container, false); - this.couponRecyclerView = view.findViewById(R.id.couponRecyclerView); + this.couponRecyclerView = view.findViewById(R.id.coupon_recyclerview); this.couponRecyclerView.setHasFixedSize(true); this.layoutManager = new LinearLayoutManager(this.getContext()); - this.imageButton = view.findViewById(R.id.couponBackButton); + this.imageButton = view.findViewById(R.id.coupon_back_button); this.imageButton.setOnClickListener(v -> { StatisticFragment statisticFragment = new StatisticFragment(); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, statisticFragment).addToBackStack(null).commit(); diff --git a/app/src/main/java/com/a1/nextlocation/fragments/HomeFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/HomeFragment.java index f757c11..4e0db7b 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/HomeFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/HomeFragment.java @@ -6,6 +6,7 @@ import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; @@ -15,6 +16,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -31,7 +33,6 @@ import com.a1.nextlocation.network.ApiHandler; import com.a1.nextlocation.recyclerview.CouponListManager; import com.a1.nextlocation.recyclerview.CustomOverlay; import com.a1.nextlocation.recyclerview.LocationListManager; -import com.a1.nextlocation.recyclerview.RouteListManager; import org.osmdroid.api.IMapController; import org.osmdroid.bonuspack.routing.MapQuestRoadManager; @@ -41,6 +42,7 @@ import org.osmdroid.bonuspack.routing.RoadManager; import org.osmdroid.config.Configuration; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; +import org.osmdroid.views.overlay.ItemizedIconOverlay; import org.osmdroid.views.overlay.Overlay; import org.osmdroid.views.overlay.OverlayItem; import org.osmdroid.views.overlay.Polyline; @@ -54,7 +56,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -public class HomeFragment extends Fragment implements LocationListener { +public class HomeFragment extends Fragment { private final String userAgent = "com.ai.nextlocation.fragments"; public final static String MAPQUEST_API_KEY = "vuyXjqnAADpjeL9QwtgWGleIk95e36My"; private ImageButton imageButton; @@ -133,7 +135,7 @@ public class HomeFragment extends Fragment implements LocationListener { Configuration.getInstance().setUserAgentValue(userAgent); // create the map view - mapView = view.findViewById(R.id.mapView); + mapView = view.findViewById(R.id.map_view); mapView.setDestroyMode(false); mapView.setTag("mapView"); mapView.setMultiTouchControls(true); @@ -162,8 +164,6 @@ public class HomeFragment extends Fragment implements LocationListener { try { - - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if( location != null ) { currentLocation = new GeoPoint(location.getLatitude(), location.getLongitude()); @@ -181,6 +181,14 @@ public class HomeFragment extends Fragment implements LocationListener { } + + displayRoute(); + addLocations(); + + } + + private void displayRoute() { + if (roadOverlay == null) { if (CurrentRoute.INSTANCE.getCurrentRoute() != null) { roadOverlay = CurrentRoute.INSTANCE.getCurrentRoute(); @@ -193,6 +201,34 @@ public class HomeFragment extends Fragment implements LocationListener { mapView.invalidate(); Log.d(TAG, "initMap: successfully added road!"); } + } + + private void addLocations() { + List locations = LocationListManager.INSTANCE.getLocationList(); + final ArrayList items = new ArrayList<>(locations.size()); + Drawable marker = this.getResources().getDrawable(R.drawable.ic_baseline_location_on_24); + for (com.a1.nextlocation.data.Location location : locations) { + OverlayItem item = new OverlayItem(location.getName(),location.getDescription(),location.convertToGeoPoint()); + item.setMarker(marker); + items.add(item); + } + Overlay allLocationsOverlay = new ItemizedIconOverlay(items, + new ItemizedIconOverlay.OnItemGestureListener() { + @Override + public boolean onItemSingleTapUp(int index, OverlayItem item) { + + return false; + } + + @Override + public boolean onItemLongPress(int index, OverlayItem item) { + Toast.makeText(requireContext(), locations.get(index).getName(),Toast.LENGTH_SHORT).show(); + return true; + } + },requireContext()); + + mapView.getOverlays().add(allLocationsOverlay); + Log.d(TAG, "addLocations: successfully added locations"); } @@ -213,32 +249,4 @@ public class HomeFragment extends Fragment implements LocationListener { REQUEST_PERMISSIONS_REQUEST_CODE); } } - - /** - * animate to the new location - * @param location the new location - */ - @Override - public void onLocationChanged(@NonNull Location location) { - - currentLocation = new GeoPoint(location); - IMapController mapController = mapView.getController(); - mapController.animateTo(new GeoPoint(location.getLatitude(),location.getLongitude())); - } - - @Override - public void onProviderEnabled(@NonNull String provider) { - - } - - @Override - public void onProviderDisabled(@NonNull String provider) { - - } - - // this is deprecated but android is stupid and gives an error if I don't override it - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/a1/nextlocation/fragments/LocationDetailFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/LocationDetailFragment.java index 62b6313..82bcabb 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/LocationDetailFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/LocationDetailFragment.java @@ -19,20 +19,17 @@ public class LocationDetailFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_location_detail, container, false); -// -// this.imageButton = view.findViewById(R.id.detail_location_back_button); -// this.imageButton.setOnClickListener(v -> { -// LocationFragment locationFragment = new LocationFragment(); -// ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, locationFragment).addToBackStack(null).commit(); -// }); + this.imageButton = view.findViewById(R.id.detail_location_back_button); + this.imageButton.setOnClickListener(v -> { + LocationFragment locationFragment = new LocationFragment(); + ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, locationFragment).addToBackStack(null).commit(); + }); return view; } diff --git a/app/src/main/java/com/a1/nextlocation/fragments/LocationFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/LocationFragment.java index 237622d..03afb8e 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/LocationFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/LocationFragment.java @@ -14,11 +14,9 @@ import android.widget.ImageButton; import com.a1.nextlocation.R; import com.a1.nextlocation.data.Location; -import com.a1.nextlocation.recyclerview.CouponAdapter; import com.a1.nextlocation.recyclerview.LocationAdapter; import com.a1.nextlocation.recyclerview.LocationListManager; -import java.util.ArrayList; import java.util.List; public class LocationFragment extends Fragment { @@ -38,11 +36,11 @@ public class LocationFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_location, container, false); - this.locationRecyclerView = view.findViewById(R.id.locationRecyclerView); + this.locationRecyclerView = view.findViewById(R.id.location_recyclerview); this.locationRecyclerView.setHasFixedSize(true); this.layoutManager = new LinearLayoutManager(this.getContext()); - this.imageButton = view.findViewById(R.id.locationBackButton); + this.imageButton = view.findViewById(R.id.location_back_button); this.imageButton.setOnClickListener(v -> { HomeFragment homeFragment = new HomeFragment(); ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, homeFragment).addToBackStack(null).commit(); diff --git a/app/src/main/java/com/a1/nextlocation/fragments/RouteDetailFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/RouteDetailFragment.java index 17852b7..99e3445 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/RouteDetailFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/RouteDetailFragment.java @@ -3,14 +3,18 @@ package com.a1.nextlocation.fragments; import android.os.Bundle; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; +import android.widget.Toast; import com.a1.nextlocation.R; import com.a1.nextlocation.data.Route; +import com.a1.nextlocation.network.ApiHandler; public class RouteDetailFragment extends Fragment { @@ -32,10 +36,17 @@ public class RouteDetailFragment extends Fragment { this.routeDetailText = view.findViewById(R.id.routeDetailText); this.routeDetailText.setText(this.route.getName()); - - + Button startButton = view.findViewById(R.id.start_route_button); + startButton.setOnClickListener(this::startRoute); return view; } + + public void startRoute(View view) { + ApiHandler.INSTANCE.getDirections(route); + Toast.makeText(requireContext(),"Route started!",Toast.LENGTH_SHORT).show(); + ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, new HomeFragment()).addToBackStack(null).commit(); + + } } \ No newline at end of file diff --git a/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java index 26c5d31..71184c8 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java @@ -19,7 +19,6 @@ import com.a1.nextlocation.data.Route; import com.a1.nextlocation.recyclerview.RouteAdapter; import com.a1.nextlocation.recyclerview.RouteListManager; -import java.util.ArrayList; import java.util.List; import com.a1.nextlocation.data.Location; import com.a1.nextlocation.data.Route; @@ -45,7 +44,7 @@ public class RouteFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_route, container, false); - this.routeRecyclerView = view.findViewById(R.id.routeRecyclerView); + this.routeRecyclerView = view.findViewById(R.id.route_recyclerview); this.routeRecyclerView.setHasFixedSize(true); this.layoutManager = new LinearLayoutManager(this.getContext()); diff --git a/app/src/main/res/layout-land/fragment_route_detail.xml b/app/src/main/res/layout-land/fragment_route_detail.xml index b5863ad..ebd2b7e 100644 --- a/app/src/main/res/layout-land/fragment_route_detail.xml +++ b/app/src/main/res/layout-land/fragment_route_detail.xml @@ -13,14 +13,14 @@ android:layout_height="wrap_content" android:layout_margin="10dp" android:background="@drawable/ic_back_button_24" - app:layout_constraintBottom_toBottomOf="@+id/routeTitle" + app:layout_constraintBottom_toBottomOf="@+id/route_title" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@+id/routeTitle" - app:layout_constraintEnd_toStartOf="@id/routeTitle" + app:layout_constraintTop_toTopOf="@+id/route_title" + app:layout_constraintEnd_toStartOf="@id/route_title" /> + android:textSize="25dp" + app:layout_constraintBottom_toBottomOf="@id/top_bar" + app:layout_constraintStart_toEndOf="@id/info_button" + app:layout_constraintTop_toTopOf="@id/top_bar" /> \ No newline at end of file diff --git a/app/src/main/res/layout/coupon_item.xml b/app/src/main/res/layout/coupon_item.xml index 49e3b93..b1b303f 100644 --- a/app/src/main/res/layout/coupon_item.xml +++ b/app/src/main/res/layout/coupon_item.xml @@ -5,7 +5,7 @@ android:layout_height="wrap_content"> + app:layout_constraintTop_toBottomOf="@+id/coupon_back_button" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index f20aeb6..5a55efa 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -6,9 +6,8 @@ android:layout_height="match_parent" tools:context=".fragments.HomeFragment"> - @@ -24,6 +23,7 @@ android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginEnd="20dp" + android:backgroundTint="@color/secondaryColour" android:src="@drawable/ic_baseline_outlined_flag_24" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/fragment_location.xml b/app/src/main/res/layout/fragment_location.xml index 7f03472..deed47a 100644 --- a/app/src/main/res/layout/fragment_location.xml +++ b/app/src/main/res/layout/fragment_location.xml @@ -12,28 +12,31 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="9dp" + android:layout_marginTop="20dp" android:text="Locations" android:textSize="20sp" - app:layout_constraintStart_toEndOf="@id/locationBackButton" + app:layout_constraintStart_toEndOf="@id/location_back_button" app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/location_RV" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_location_detail.xml b/app/src/main/res/layout/fragment_location_detail.xml index 17b7203..c9e0124 100644 --- a/app/src/main/res/layout/fragment_location_detail.xml +++ b/app/src/main/res/layout/fragment_location_detail.xml @@ -44,11 +44,11 @@ android:id="@+id/detail_location_back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/ic_back_button_24" + android:layout_marginStart="10dp" + android:layout_marginTop="12dp" android:backgroundTint="@color/primaryColour" - app:layout_constraintBottom_toBottomOf="@+id/detail_location_name" - app:layout_constraintEnd_toStartOf="@+id/detail_location_name" + android:src="@drawable/ic_back_button_24" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@+id/detail_location_name" /> + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_route.xml b/app/src/main/res/layout/fragment_route.xml index 23b76a0..1c2a5d0 100644 --- a/app/src/main/res/layout/fragment_route.xml +++ b/app/src/main/res/layout/fragment_route.xml @@ -8,7 +8,7 @@ tools:context=".fragments.RouteFragment"> + app:layout_constraintTop_toBottomOf="@+id/route_back_button" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_route_detail.xml b/app/src/main/res/layout/fragment_route_detail.xml index 197630c..8b39d88 100644 --- a/app/src/main/res/layout/fragment_route_detail.xml +++ b/app/src/main/res/layout/fragment_route_detail.xml @@ -13,13 +13,13 @@ android:layout_height="wrap_content" android:layout_marginEnd="100dp" android:background="@drawable/ic_back_button_24" - app:layout_constraintBottom_toBottomOf="@id/routeTitle" - app:layout_constraintEnd_toStartOf="@id/routeTitle" + app:layout_constraintBottom_toBottomOf="@id/route_title" + app:layout_constraintEnd_toStartOf="@id/route_title" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@id/routeTitle" /> + app:layout_constraintTop_toTopOf="@id/route_title" /> - - - + app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/routeDetailText" + app:layout_constraintVertical_bias="0.671" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 6d629eb..c0cb215 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -30,7 +30,7 @@ app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/fragment_statistic.xml b/app/src/main/res/layout/fragment_statistic.xml index 7498fa9..5abfdc0 100644 --- a/app/src/main/res/layout/fragment_statistic.xml +++ b/app/src/main/res/layout/fragment_statistic.xml @@ -20,7 +20,7 @@ app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/location_item.xml b/app/src/main/res/layout/location_item.xml index d5cee0b..db57909 100644 --- a/app/src/main/res/layout/location_item.xml +++ b/app/src/main/res/layout/location_item.xml @@ -21,6 +21,6 @@ android:gravity="center" android:text="location" android:textSize="20dp" - app:layout_constraintStart_toEndOf="@+id/routeImage" /> + app:layout_constraintStart_toEndOf="@+id/route_Image" /> \ No newline at end of file diff --git a/app/src/main/res/layout/route_item.xml b/app/src/main/res/layout/route_item.xml index c6f675f..d9091d8 100644 --- a/app/src/main/res/layout/route_item.xml +++ b/app/src/main/res/layout/route_item.xml @@ -9,7 +9,7 @@ @@ -21,7 +21,7 @@ android:text="test text" android:gravity="center" android:textSize="20dp" - app:layout_constraintStart_toEndOf="@+id/routeImage" + app:layout_constraintStart_toEndOf="@+id/route_Image" /> \ No newline at end of file