|
@@ -1,94 +1,67 @@
|
|
|
package com.sharix.sportsmanfriend.view.fragments;
|
|
|
|
|
|
import android.Manifest;
|
|
|
-import android.content.Context;
|
|
|
import android.content.pm.PackageManager;
|
|
|
-import android.os.Build;
|
|
|
+
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
-import androidx.constraintlayout.widget.ConstraintLayout;
|
|
|
+import androidx.annotation.Nullable;
|
|
|
+import androidx.core.app.ActivityCompat;
|
|
|
import androidx.core.content.ContextCompat;
|
|
|
import androidx.fragment.app.Fragment;
|
|
|
|
|
|
-import android.os.StrictMode;
|
|
|
-import android.preference.PreferenceManager;
|
|
|
+
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
+import android.widget.ImageButton;
|
|
|
+
|
|
|
+
|
|
|
+import com.google.android.gms.location.FusedLocationProviderClient;
|
|
|
+import com.google.android.gms.location.LocationServices;
|
|
|
|
|
|
import com.sharix.sportsmanfriend.R;
|
|
|
|
|
|
import org.osmdroid.api.IMapController;
|
|
|
-import org.osmdroid.config.Configuration;
|
|
|
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
|
|
|
import org.osmdroid.util.GeoPoint;
|
|
|
import org.osmdroid.views.MapView;
|
|
|
|
|
|
public class MapFragment extends Fragment {
|
|
|
|
|
|
-
|
|
|
- private static final String ARG_PARAM1 = "param1";
|
|
|
- private static final String ARG_PARAM2 = "param2";
|
|
|
-
|
|
|
- private String mParam1;
|
|
|
- private String mParam2;
|
|
|
-
|
|
|
- public MapFragment() {
|
|
|
- // Required empty public constructor
|
|
|
- }
|
|
|
-
|
|
|
- public static MapFragment newInstance(String param1, String param2) {
|
|
|
- MapFragment fragment = new MapFragment();
|
|
|
- Bundle args = new Bundle();
|
|
|
- args.putString(ARG_PARAM1, param1);
|
|
|
- args.putString(ARG_PARAM2, param2);
|
|
|
- fragment.setArguments(args);
|
|
|
- return fragment;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onCreate(Bundle savedInstanceState) {
|
|
|
- super.onCreate(savedInstanceState);
|
|
|
- if (getArguments() != null) {
|
|
|
- mParam1 = getArguments().getString(ARG_PARAM1);
|
|
|
- mParam2 = getArguments().getString(ARG_PARAM2);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private final int REQUEST_PERMISSIONS_REQUEST_CODE = 1;
|
|
|
+ private final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 2;
|
|
|
private MapView map = null;
|
|
|
- View view = null;
|
|
|
+ private IMapController mapController = null;
|
|
|
+ private View view = null;
|
|
|
+ private ImageButton btnZoomIn;
|
|
|
+ private ImageButton btnZoomOut;
|
|
|
+ private ImageButton btnMyLocation;
|
|
|
+ private double latitude, longitude;
|
|
|
+ private FusedLocationProviderClient fusedLocationProviderClient;
|
|
|
|
|
|
@Override
|
|
|
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
|
- Bundle savedInstanceState) {
|
|
|
-
|
|
|
- StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
|
|
- StrictMode.setThreadPolicy(policy);
|
|
|
+ public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
|
|
|
- Context ctx = getActivity().getApplicationContext();
|
|
|
- Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
|
view = inflater.inflate(R.layout.fragment_map, container, false);
|
|
|
|
|
|
- map = (MapView) view.findViewById(R.id.map);
|
|
|
- map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
|
|
|
- map.setMultiTouchControls(true);
|
|
|
+ btnZoomIn = view.findViewById(R.id.btn_zoomIn);
|
|
|
+ btnZoomOut = view.findViewById(R.id.btn_zoomOut);
|
|
|
+ btnMyLocation = view.findViewById(R.id.btnMyLocation);
|
|
|
|
|
|
- IMapController iMapController = map.getController();
|
|
|
- iMapController.setZoom(12);
|
|
|
- GeoPoint startPoint = new GeoPoint(55.934473, 37.497081);
|
|
|
- iMapController.setCenter(startPoint);
|
|
|
-
|
|
|
- if (Build.VERSION.SDK_INT >= 23) {
|
|
|
- if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
|
|
|
- ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
|
|
|
- ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
- String[] permissoes = {Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION};
|
|
|
- requestPermissions(permissoes, REQUEST_PERMISSIONS_REQUEST_CODE);
|
|
|
- }
|
|
|
- }
|
|
|
+ map = view.findViewById(R.id.map);
|
|
|
+ mapController = map.getController();
|
|
|
+ fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
|
|
|
+
|
|
|
+ configureMap();
|
|
|
+ askPermissions();
|
|
|
+ addClickEventToAllButtons();
|
|
|
|
|
|
return view;
|
|
|
}
|
|
@@ -98,11 +71,73 @@ public class MapFragment extends Fragment {
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
|
switch (requestCode) {
|
|
|
case REQUEST_PERMISSIONS_REQUEST_CODE: {
|
|
|
- if (grantResults.length > 0
|
|
|
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
|
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
|
+ getActivity().recreate();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
|
|
|
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
|
getActivity().recreate();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private void configureMap() {
|
|
|
+ map = (MapView) view.findViewById(R.id.map);
|
|
|
+ map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
|
|
|
+ map.setMultiTouchControls(true);
|
|
|
+ map.setMaxZoomLevel(18.0);
|
|
|
+
|
|
|
+ mapController.setZoom(15);
|
|
|
+ GeoPoint startPoint = new GeoPoint(55.934473, 37.497081);
|
|
|
+ mapController.setCenter(startPoint);
|
|
|
+
|
|
|
+ map.setBuiltInZoomControls(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void askPermissions() {
|
|
|
+ if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
|
|
|
+ ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
|
|
|
+ ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+ String[] permission = {Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION};
|
|
|
+ requestPermissions(permission, REQUEST_PERMISSIONS_REQUEST_CODE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addClickEventToAllButtons() {
|
|
|
+
|
|
|
+ btnZoomIn.setOnClickListener(v -> {
|
|
|
+ if (map.canZoomIn()) {
|
|
|
+ mapController.zoomIn();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ btnZoomOut.setOnClickListener(v -> {
|
|
|
+ if (map.canZoomOut()) {
|
|
|
+ mapController.zoomOut();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ btnMyLocation.setOnClickListener(v -> {
|
|
|
+ if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
|
|
|
+ && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+
|
|
|
+ String[] permission = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
|
|
|
+ requestPermissions(permission, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
|
|
|
+ }
|
|
|
+
|
|
|
+ fusedLocationProviderClient.getLastLocation()
|
|
|
+ .addOnSuccessListener(getActivity(), location -> {
|
|
|
+ if (location != null) {
|
|
|
+ latitude = location.getLatitude();
|
|
|
+ longitude = location.getLongitude();
|
|
|
+ mapController.setCenter(new GeoPoint(latitude, longitude));
|
|
|
+ mapController.setZoom(18);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
}
|