From 6604dab5f9e4b504aab3ce4174eed0c8ebac5373 Mon Sep 17 00:00:00 2001 From: "de@itstall.de" <de@itstall.de> Date: Thu, 2 Apr 2020 09:46:21 +0200 Subject: [PATCH] Changed from GPS to Network provider --- app/build.gradle | 4 + .../controller/LocationListenerInterface.java | 2 +- .../freifunkfranken/view/MapsFragment.java | 68 +++++++++------- .../freifunkfranken/view/NextApFragment.java | 79 ++++++++++++------- app/src/main/res/layout/nextap_fragment.xml | 1 + 5 files changed, 99 insertions(+), 55 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1289e07..4e6fbec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } } diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/LocationListenerInterface.java b/app/src/main/java/de/itstall/freifunkfranken/controller/LocationListenerInterface.java index dca5c73..0731945 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/controller/LocationListenerInterface.java +++ b/app/src/main/java/de/itstall/freifunkfranken/controller/LocationListenerInterface.java @@ -2,7 +2,7 @@ package de.itstall.freifunkfranken.controller; import android.location.Location; -public interface LocationListenerInterface { +interface LocationListenerInterface { void onLocationChanged(Location location); void onStatusChanged(String provider); diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java index cbe0edd..02f5ffb 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java @@ -26,10 +26,12 @@ import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.karumi.dexter.Dexter; +import com.karumi.dexter.MultiplePermissionsReport; import com.karumi.dexter.PermissionToken; import com.karumi.dexter.listener.PermissionDeniedResponse; import com.karumi.dexter.listener.PermissionGrantedResponse; import com.karumi.dexter.listener.PermissionRequest; +import com.karumi.dexter.listener.multi.MultiplePermissionsListener; import com.karumi.dexter.listener.single.PermissionListener; import java.util.List; @@ -49,12 +51,6 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { private ProgressDialog progressDialog = null; private LocationManager locationManager; private CustomLocationListener customLocationListener; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - private CustomLocationListenerInterface locationListener = new CustomLocationListenerInterface() { @Override public void onLocationChanged(Location location) { @@ -73,6 +69,11 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { } }; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.maps_fragment, container, false); @@ -88,24 +89,35 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { customLocationListener = new CustomLocationListener(locationListener); locationManager = (LocationManager) rootView.getContext().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); - Dexter.withActivity((Activity) rootView.getContext()).withPermission(Manifest.permission.ACCESS_FINE_LOCATION).withListener(new PermissionListener() { - @Override - public void onPermissionGranted(PermissionGrantedResponse response) { - if (ActivityCompat.checkSelfPermission(rootView.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 25, customLocationListener); - } - } - - @Override - public void onPermissionDenied(PermissionDeniedResponse response) { - - } - - @Override - public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { - token.continuePermissionRequest(); - } - }).check(); + Dexter.withActivity((Activity) rootView.getContext()) + .withPermissions( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + .withListener(new MultiplePermissionsListener() { + @Override + public void onPermissionsChecked(MultiplePermissionsReport report) { + if (report.areAllPermissionsGranted()) { + if ( + ActivityCompat.checkSelfPermission( + rootView.getContext(), + Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + rootView.getContext(), + Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED + ) { + locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 25, customLocationListener); + } + } + } + + @Override + public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) { + token.continuePermissionRequest(); + } + } + ) + .check(); return rootView; } @@ -113,11 +125,13 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback { private void showApsOnMap() { List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("MapOfflineRouter", false), 0); - for(int i = 0; i < accessPointList.size(); i++) { + for (int i = 0; i < accessPointList.size(); i++) { LatLng ap = new LatLng(accessPointList.get(i).getLat(), accessPointList.get(i).getLon()); MarkerOptions markerOptions = new MarkerOptions().position(ap).title(accessPointList.get(i).getName()); - if(accessPointList.get(i).isOnline()) markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); - else markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); + if (accessPointList.get(i).isOnline()) + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); + else + markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); mMap.addMarker(markerOptions); } } diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java index a013afb..9831b93 100644 --- a/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java +++ b/app/src/main/java/de/itstall/freifunkfranken/view/NextApFragment.java @@ -19,11 +19,10 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.karumi.dexter.Dexter; +import com.karumi.dexter.MultiplePermissionsReport; import com.karumi.dexter.PermissionToken; -import com.karumi.dexter.listener.PermissionDeniedResponse; -import com.karumi.dexter.listener.PermissionGrantedResponse; import com.karumi.dexter.listener.PermissionRequest; -import com.karumi.dexter.listener.single.PermissionListener; +import com.karumi.dexter.listener.multi.MultiplePermissionsListener; import java.util.List; import java.util.Objects; @@ -34,10 +33,10 @@ import de.itstall.freifunkfranken.controller.RequestAps; import de.itstall.freifunkfranken.model.AccessPoint; public class NextApFragment extends Fragment { + public static Location location; private RecyclerView rvAps; private View rootView; private SharedPreferences sharedPreferences; - public static Location location; private LocationManager locationManager; @Override @@ -46,35 +45,61 @@ public class NextApFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView( + LayoutInflater inflater, + ViewGroup container, + Bundle savedInstanceState + ) { rootView = inflater.inflate(R.layout.nextap_fragment, container, false); - sharedPreferences = rootView.getContext().getSharedPreferences(getResources().getString(R.string.app_name), 0); + sharedPreferences = rootView.getContext() + .getSharedPreferences(getResources().getString(R.string.app_name), 0); rvAps = rootView.findViewById(R.id.rvAps); rvAps.setLayoutManager(new LinearLayoutManager(getActivity())); - locationManager = (LocationManager) rootView.getContext().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); - Dexter.withActivity((Activity) rootView.getContext()).withPermission(Manifest.permission.ACCESS_FINE_LOCATION).withListener(new PermissionListener() { - @Override - public void onPermissionGranted(PermissionGrantedResponse response) { - if (ActivityCompat.checkSelfPermission(rootView.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { - location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); - } - } - - @Override - public void onPermissionDenied(PermissionDeniedResponse response) { - - } - - @Override - public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { - token.continuePermissionRequest(); - } - }).check(); - - List<AccessPoint> accessPointList = new RequestAps(Objects.requireNonNull(this.getContext())).getSortedList(sharedPreferences.getBoolean("OfflineRouter", false), sharedPreferences.getInt("RouterCount", 10)); + locationManager = (LocationManager) rootView.getContext() + .getApplicationContext() + .getSystemService(Context.LOCATION_SERVICE); + Dexter.withActivity((Activity) rootView.getContext()) + .withPermissions( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + .withListener(new MultiplePermissionsListener() { + @Override + public void onPermissionsChecked(MultiplePermissionsReport report) { + if (report.areAllPermissionsGranted()) { + if ( + ActivityCompat.checkSelfPermission( + rootView.getContext(), + Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + && ActivityCompat.checkSelfPermission( + rootView.getContext(), + Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED + ) { + location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + } + } + } + + @Override + public void onPermissionRationaleShouldBeShown( + List<PermissionRequest> permissions, + PermissionToken token + ) { + token.continuePermissionRequest(); + } + } + ) + .check(); + + List<AccessPoint> accessPointList = new RequestAps( + Objects.requireNonNull(this.getContext())). + getSortedList( + sharedPreferences.getBoolean("OfflineRouter", false), + sharedPreferences.getInt("RouterCount", 10) + ); showApList(accessPointList); return rootView; diff --git a/app/src/main/res/layout/nextap_fragment.xml b/app/src/main/res/layout/nextap_fragment.xml index 2049797..810f6b4 100644 --- a/app/src/main/res/layout/nextap_fragment.xml +++ b/app/src/main/res/layout/nextap_fragment.xml @@ -8,6 +8,7 @@ android:id="@+id/rvAps" android:layout_width="match_parent" android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" -- GitLab