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