From 91cce77b771f57febac69c8b2c0089c8630a9303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Laiz=20G=C3=B3mez?= Date: Sat, 4 May 2019 13:40:53 +0200 Subject: [PATCH] Multiples cambios MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eliminado fichero antiguo de ajustes de Android Studio Adaptado PlayTourFragment para múltiples formas de juego Añadidas claves ajenas a entidades Close #22 --- android-studio-settings/settings.jar | Bin 11842 -> 0 bytes .../martinlaizg/geofind/CompletePlace.java | 27 +++++ .../data/access/api/RetrofitInstance.java | 4 +- .../data/access/database/entities/Place.java | 6 +- .../data/access/database/entities/Tour.java | 9 +- .../views/fragment/play/PlayMapFragment.java | 106 ++++++------------ .../views/fragment/play/PlayTourFragment.java | 61 ++++++---- .../views/viewmodel/PlayTourViewModel.java | 1 + .../res/layout/fragment_complete_place.xml | 14 +++ .../main/res/navigation/main_navigation.xml | 34 +++++- app/src/main/res/values-en/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 12 files changed, 167 insertions(+), 99 deletions(-) delete mode 100644 android-studio-settings/settings.jar create mode 100644 app/src/main/java/com/martinlaizg/geofind/CompletePlace.java create mode 100644 app/src/main/res/layout/fragment_complete_place.xml diff --git a/android-studio-settings/settings.jar b/android-studio-settings/settings.jar deleted file mode 100644 index bd65d3dfc46ce0fcc13623028f7c85005539f7dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11842 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 { - if(!done) { - Toast.makeText(requireContext(), viewModel.getError().getMessage(), - Toast.LENGTH_SHORT).show(); - return; - } - Log.d(TAG, "updateView: Place done"); - Bundle b = new Bundle(); - b.putInt(TOUR_ID, viewModel.getTour().getId()); - Navigation.findNavController(requireActivity(), R.id.main_fragment_holder) - .navigate(R.id.reload_play_map, b); - }); - } - - // Move map camera - LatLngBounds.Builder builder = new LatLngBounds.Builder(); - builder.include(new LatLng(usrLocation.getLatitude(), usrLocation.getLongitude())); - builder.include(place.getPosition()); - CameraUpdate cu; - LatLngBounds cameraPosition = builder.build(); - if(distance < DISTANCE_TO_FIX_ZOOM) { - cu = CameraUpdateFactory.newLatLngZoom(cameraPosition.getCenter(), MAX_ZOOM); - } else { - cu = CameraUpdateFactory.newLatLngBounds(cameraPosition, MAP_PADDING); - } - googleMap.getUiSettings().setMyLocationButtonEnabled(true); - googleMap.animateCamera(cu); - Log.d(TAG, "updateView: zoom=" + googleMap.getCameraPosition().zoom); - - // Add place marker - googleMap.addMarker(new MarkerOptions().position(place.getPosition())); + + if(place != null && googleMap != null && usrLocation != null) { + // Set distance + place_distance.setText(getResources().getString(R.string.place_distance, distance.intValue())); + + // Move map camera + LatLngBounds.Builder builder = new LatLngBounds.Builder(); + builder.include(new LatLng(usrLocation.getLatitude(), usrLocation.getLongitude())); + builder.include(place.getPosition()); + CameraUpdate cu; + LatLngBounds cameraPosition = builder.build(); + if(distance < DISTANCE_TO_FIX_ZOOM) { + cu = CameraUpdateFactory.newLatLngZoom(cameraPosition.getCenter(), MAX_ZOOM); + } else { + cu = CameraUpdateFactory.newLatLngBounds(cameraPosition, MAP_PADDING); } + googleMap.getUiSettings().setMyLocationButtonEnabled(true); + googleMap.animateCamera(cu); + Log.d(TAG, "updateView: zoom=" + googleMap.getCameraPosition().zoom); + + // Add place marker + googleMap.addMarker(new MarkerOptions().position(place.getPosition())); } } + + @Override + void setUpView() { + place_name.setText(place.getName()); + place_description.setText(place.getDescription()); + int numCompletedPlaces = viewModel.getPlay().getPlaces().size() + 1; + int numPlaces = viewModel.getPlay().getTour().getPlaces().size(); + place_complete.setText(getResources().getString(R.string.tour_completenes, numCompletedPlaces, numPlaces)); + + } } diff --git a/app/src/main/java/com/martinlaizg/geofind/views/fragment/play/PlayTourFragment.java b/app/src/main/java/com/martinlaizg/geofind/views/fragment/play/PlayTourFragment.java index 8f3ff16..a9c9041 100644 --- a/app/src/main/java/com/martinlaizg/geofind/views/fragment/play/PlayTourFragment.java +++ b/app/src/main/java/com/martinlaizg/geofind/views/fragment/play/PlayTourFragment.java @@ -10,6 +10,7 @@ import android.preference.PreferenceManager; import android.util.Log; import android.view.View; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -31,23 +32,24 @@ abstract class PlayTourFragment static final int PERMISSION_ACCESS_COARSE_AND_FINE_LOCATION = 1; + private static final float DISTANCE_TO_COMPLETE = 10; private static final long LOC_TIME_REQ = 500; private static final float LOC_DIST_REQ = 5; Place place; PlayTourViewModel viewModel; Location usrLocation; + Location placeLocation; + Float distance; private LocationManager locationManager; @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { + public void onRequestPermissionsResult( + int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if(requestCode == PERMISSION_ACCESS_COARSE_AND_FINE_LOCATION && permissions.length >= 2) { - if(permissions[0].equals(Manifest.permission.ACCESS_COARSE_LOCATION) && - grantResults[0] == PackageManager.PERMISSION_GRANTED && - permissions[1].equals(Manifest.permission.ACCESS_FINE_LOCATION) && - grantResults[1] == PackageManager.PERMISSION_GRANTED) { + if(permissions[0].equals(Manifest.permission.ACCESS_COARSE_LOCATION) && grantResults[0] == PackageManager.PERMISSION_GRANTED && + permissions[1].equals(Manifest.permission.ACCESS_FINE_LOCATION) && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG(), "onRequestPermissionsResult: success"); } Log.d(TAG(), "onRequestPermissionsResult: deny"); @@ -64,17 +66,18 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat if(b != null) { tour_id = b.getInt(TOUR_ID); } - User u = Preferences - .getLoggedUser(PreferenceManager.getDefaultSharedPreferences(requireContext())); + User u = Preferences.getLoggedUser(PreferenceManager.getDefaultSharedPreferences(requireContext())); viewModel.loadPlay(u.getId(), tour_id).observe(requireActivity(), place -> { if(place == null) { Log.i(TAG(), "onViewCreated: tour completed"); - Navigation.findNavController(requireActivity(), R.id.main_fragment_holder) - .navigate(R.id.toCompleteTour); + Navigation.findNavController(requireActivity(), R.id.main_fragment_holder).navigate(R.id.toCompleteTour); return; } this.place = place; - updateView(); + placeLocation = new Location(""); + placeLocation.setLatitude(place.getLat()); + placeLocation.setLongitude(place.getLon()); + setUpView(); }); } @@ -82,22 +85,15 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat public void onResume() { super.onResume(); Log.i(TAG(), "onResume: check location permissions"); - locationManager = (LocationManager) requireActivity() - .getSystemService(Context.LOCATION_SERVICE); - if(requireActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != - PackageManager.PERMISSION_GRANTED && - requireActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != - PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, - PERMISSION_ACCESS_COARSE_AND_FINE_LOCATION); + locationManager = (LocationManager) requireActivity().getSystemService(Context.LOCATION_SERVICE); + if(requireActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && + requireActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_ACCESS_COARSE_AND_FINE_LOCATION); return; } usrLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); Log.i(TAG(), "onResume: start request location updates"); - locationManager - .requestLocationUpdates(LocationManager.GPS_PROVIDER, LOC_TIME_REQ, LOC_DIST_REQ, - this); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOC_TIME_REQ, LOC_DIST_REQ, this); updateView(); } @@ -110,10 +106,29 @@ public void onPause() { abstract void updateView(); + abstract void setUpView(); + @Override public void onLocationChanged(@NonNull Location location) { Log.i(TAG(), "onLocationChanged: "); usrLocation = location; + + // Set distance + distance = usrLocation.distanceTo(placeLocation); + Log.d(TAG(), "updateView: distance=" + distance + "m"); + if(distance < DISTANCE_TO_COMPLETE) { + Log.i(TAG(), "updateView: user arrive to the place"); + viewModel.completePlace(place.getId()).observe(this, done -> { + if(!done) { + Toast.makeText(requireContext(), viewModel.getError().getMessage(), Toast.LENGTH_SHORT).show(); + return; + } + Log.d(TAG(), "updateView: Place done"); + Bundle b = new Bundle(); + b.putInt(TOUR_ID, viewModel.getTour().getId()); + Navigation.findNavController(requireActivity(), R.id.main_fragment_holder).navigate(R.id.reload_play_map, b); + }); + } updateView(); } diff --git a/app/src/main/java/com/martinlaizg/geofind/views/viewmodel/PlayTourViewModel.java b/app/src/main/java/com/martinlaizg/geofind/views/viewmodel/PlayTourViewModel.java index d1d14ca..10f2d90 100644 --- a/app/src/main/java/com/martinlaizg/geofind/views/viewmodel/PlayTourViewModel.java +++ b/app/src/main/java/com/martinlaizg/geofind/views/viewmodel/PlayTourViewModel.java @@ -83,4 +83,5 @@ public MutableLiveData completePlace(Integer place_id) { public Tour getTour() { return play.getTour(); } + } diff --git a/app/src/main/res/layout/fragment_complete_place.xml b/app/src/main/res/layout/fragment_complete_place.xml new file mode 100644 index 0000000..d32a67d --- /dev/null +++ b/app/src/main/res/layout/fragment_complete_place.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml index ffaa218..ccd9136 100644 --- a/app/src/main/res/navigation/main_navigation.xml +++ b/app/src/main/res/navigation/main_navigation.xml @@ -110,7 +110,11 @@ app:popExitAnim="@anim/slide_out_right" /> + app:destination="@id/navPlayTour" + app:enterAnim="@anim/slide_in_right" + app:exitAnim="@anim/slide_out_left" + app:popEnterAnim="@anim/slide_in_left" + app:popExitAnim="@anim/slide_out_right" /> + app:enterAnim="@anim/slide_in_right" + app:exitAnim="@anim/slide_out_left" + app:launchSingleTop="true" + app:popEnterAnim="@anim/slide_in_left" + app:popExitAnim="@anim/slide_out_right" /> + + \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index d8461d4..7319d24 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -72,4 +72,6 @@ Satellite Map type The tour has been completed + Place completed + Tour completed \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c477664..c2e0eb0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -79,4 +79,6 @@ Satellite Map type The tour has been completed + Place completed + Tour completed