Skip to content

Commit c098f64

Browse files
committed
Detect user location
1 parent 13ff4dc commit c098f64

File tree

10 files changed

+186
-72
lines changed

10 files changed

+186
-72
lines changed

.idea/.name

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 8 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/jarRepositories.xml

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dependencies {
3535
implementation fileTree(dir: 'libs', include: ['*.jar'])
3636
implementation 'androidx.appcompat:appcompat:1.0.2'
3737
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
38+
implementation 'org.jetbrains:annotations-java5:15.0'
3839
testImplementation 'junit:junit:4.12'
3940
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
4041
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<uses-library android:name="org.apache.http.legacy" android:required="false" />
1919
<meta-data android:name="com.google.android.geo.API_KEY"
20-
android:value="AIzaSyB6pGRqJd5r608l3gou4OIKExdWcBFtPKU"/>
20+
android:value="AIzaSyD4SHywIY-5Z4t_zs1O89Iy9eyvNt2QfdY"/>
2121
<meta-data
2222
android:name="com.google.android.gms.version"
2323
android:value="@integer/google_play_services_version"/>
Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.example.webapplicationwithspring;
2-
3-
import androidx.appcompat.app.AppCompatActivity;
4-
52
import android.app.Dialog;
63
import android.content.Intent;
4+
import androidx.appcompat.app.AppCompatActivity;
75
import android.os.Bundle;
86
import android.util.Log;
97
import android.view.View;
@@ -12,13 +10,14 @@
1210

1311
import com.google.android.gms.common.ConnectionResult;
1412
import com.google.android.gms.common.GoogleApiAvailability;
15-
import com.google.android.gms.maps.GoogleMap;
1613

17-
public class MainActivity extends AppCompatActivity {
14+
public class MainActivity extends AppCompatActivity {
1815

19-
GoogleMap map;
2016
private static final String TAG = "MainActivity";
21-
private static final int ERROR = 9001;
17+
18+
private static final int ERROR_DIALOG_REQUEST = 9001;
19+
20+
2221
@Override
2322
protected void onCreate(Bundle savedInstanceState) {
2423
super.onCreate(savedInstanceState);
@@ -30,31 +29,35 @@ protected void onCreate(Bundle savedInstanceState) {
3029
}
3130

3231
private void init(){
33-
Button buttonMap = (Button) findViewById(R.id.btnMap);
34-
buttonMap.setOnClickListener(new View.OnClickListener() {
32+
Button btnMap = (Button) findViewById(R.id.btnMap);
33+
btnMap.setOnClickListener(new View.OnClickListener() {
3534
@Override
36-
public void onClick(View v) {
35+
public void onClick(View view) {
3736
Intent intent = new Intent(MainActivity.this, MapActivity.class);
3837
startActivity(intent);
3938
}
4039
});
4140
}
4241

43-
44-
private boolean isServicesOK(){
45-
Log.d(TAG,"isServiceOK: check goole services version" );
42+
public boolean isServicesOK(){
43+
Log.d(TAG, "isServicesOK: checking google services version");
4644

4745
int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this);
46+
4847
if(available == ConnectionResult.SUCCESS){
49-
Log.d(TAG,"isServiceOK: Services works ok");
48+
//everything is fine and the user can make map requests
49+
Log.d(TAG, "isServicesOK: Google Play Services is working");
5050
return true;
51-
} else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)){
52-
Log.d(TAG, "error occured");
53-
Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR);
51+
}
52+
else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)){
53+
//an error occured but we can resolve it
54+
Log.d(TAG, "isServicesOK: an error occured but we can fix it");
55+
Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, available, ERROR_DIALOG_REQUEST);
5456
dialog.show();
55-
} else {
56-
Toast.makeText(this, "You cant make a request", Toast.LENGTH_SHORT).show();
57+
}else{
58+
Toast.makeText(this, "You can't make map requests", Toast.LENGTH_SHORT).show();
5759
}
5860
return false;
5961
}
62+
6063
}
Lines changed: 119 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,165 @@
11
package com.example.webapplicationwithspring;
2-
2+
import android.*;
33
import android.Manifest;
4-
import android.app.Activity;
5-
import android.app.AppComponentFactory;
6-
import android.content.Context;
74
import android.content.pm.PackageManager;
5+
import android.location.Location;
86
import android.os.Bundle;
9-
import android.util.Log;
10-
import android.widget.Toast;
7+
import org.jetbrains.annotations.Nullable;
118

129
import androidx.annotation.NonNull;
13-
import androidx.annotation.Nullable;
1410
import androidx.appcompat.app.AppCompatActivity;
1511
import androidx.core.app.ActivityCompat;
1612
import androidx.core.content.ContextCompat;
13+
14+
import android.util.Log;
15+
import android.widget.Toast;
16+
17+
import com.google.android.gms.location.FusedLocationProviderClient;
18+
import com.google.android.gms.location.LocationServices;
19+
import com.google.android.gms.maps.CameraUpdateFactory;
1720
import com.google.android.gms.maps.GoogleMap;
1821
import com.google.android.gms.maps.OnMapReadyCallback;
1922
import com.google.android.gms.maps.SupportMapFragment;
23+
import com.google.android.gms.maps.model.LatLng;
24+
import com.google.android.gms.tasks.OnCompleteListener;
25+
import com.google.android.gms.tasks.Task;
26+
27+
/**
28+
* Created by User on 10/2/2017.
29+
*/
30+
31+
public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {
2032

21-
public class MapActivity extends AppCompatActivity implements OnMapReadyCallback{
33+
@Override
34+
public void onMapReady(GoogleMap googleMap) {
35+
Toast.makeText(this, "Map is Ready", Toast.LENGTH_SHORT).show();
36+
Log.d(TAG, "onMapReady: map is ready");
37+
mMap = googleMap;
38+
39+
if (mLocationPermissionsGranted) {
40+
getDeviceLocation();
41+
42+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
43+
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
44+
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
45+
return;
46+
}
47+
mMap.setMyLocationEnabled(true);
48+
mMap.getUiSettings().setMyLocationButtonEnabled(false);
49+
50+
}
51+
}
2252

2353
private static final String TAG = "MapActivity";
54+
2455
private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
25-
private static final String COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION;
26-
private Boolean mLocationPermissionGranted = false;
27-
private static final int L_PERMISSION_REQUEST_CODE = 1234;
28-
private GoogleMap gMap;
56+
private static final String COURSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION;
57+
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
58+
private static final float DEFAULT_ZOOM = 15f;
59+
60+
//vars
61+
private Boolean mLocationPermissionsGranted = false;
62+
private GoogleMap mMap;
63+
private FusedLocationProviderClient mFusedLocationProviderClient;
2964

3065
@Override
31-
public void onCreate(@Nullable Bundle savedInstanceState){
66+
protected void onCreate(@Nullable Bundle savedInstanceState) {
3267
super.onCreate(savedInstanceState);
3368
setContentView(R.layout.activity_map);
69+
3470
getLocationPermission();
3571
}
3672

73+
private void getDeviceLocation(){
74+
Log.d(TAG, "getDeviceLocation: getting the devices current location");
75+
76+
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
77+
78+
try{
79+
if(mLocationPermissionsGranted){
80+
81+
final Task location = mFusedLocationProviderClient.getLastLocation();
82+
location.addOnCompleteListener(new OnCompleteListener() {
83+
@Override
84+
public void onComplete(@NonNull Task task) {
85+
if(task.isSuccessful()){
86+
Log.d(TAG, "onComplete: found location!");
87+
Location currentLocation = (Location) task.getResult();
88+
89+
moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),
90+
DEFAULT_ZOOM);
91+
92+
}else{
93+
Log.d(TAG, "onComplete: current location is null");
94+
Toast.makeText(MapActivity.this, "unable to get current location", Toast.LENGTH_SHORT).show();
95+
}
96+
}
97+
});
98+
}
99+
}catch (SecurityException e){
100+
Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage() );
101+
}
102+
}
103+
104+
private void moveCamera(LatLng latLng, float zoom){
105+
Log.d(TAG, "moveCamera: moving the camera to: lat: " + latLng.latitude + ", lng: " + latLng.longitude );
106+
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
107+
}
108+
37109
private void initMap(){
38-
Log.d(TAG, "initMAp : initialization");
110+
Log.d(TAG, "initMap: initializing map");
39111
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
112+
40113
mapFragment.getMapAsync(MapActivity.this);
41114
}
42115

43116
private void getLocationPermission(){
44-
Log.d(TAG, "getLocation permission : gettionf location permissions");
45-
String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,
46-
Manifest.permission.ACCESS_FINE_LOCATION};
47-
48-
if(ContextCompat.checkSelfPermission(this.getApplicationContext(), FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
49-
if(ContextCompat.checkSelfPermission(this.getApplicationContext(), COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)
50-
mLocationPermissionGranted = true;
51-
else{
52-
ActivityCompat.requestPermissions(this, permissions, L_PERMISSION_REQUEST_CODE);
117+
Log.d(TAG, "getLocationPermission: getting location permissions");
118+
String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,
119+
Manifest.permission.ACCESS_COARSE_LOCATION};
120+
121+
if(ContextCompat.checkSelfPermission(this.getApplicationContext(),
122+
FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
123+
if(ContextCompat.checkSelfPermission(this.getApplicationContext(),
124+
COURSE_LOCATION) == PackageManager.PERMISSION_GRANTED){
125+
mLocationPermissionsGranted = true;
126+
initMap();
127+
}else{
128+
ActivityCompat.requestPermissions(this,
129+
permissions,
130+
LOCATION_PERMISSION_REQUEST_CODE);
53131
}
132+
}else{
133+
ActivityCompat.requestPermissions(this,
134+
permissions,
135+
LOCATION_PERMISSION_REQUEST_CODE);
54136
}
55137
}
56138

57139
@Override
58140
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
59-
Log.d(TAG, "onRequestPermissionResult : called");
60-
mLocationPermissionGranted = false;
61-
switch (requestCode){
62-
case L_PERMISSION_REQUEST_CODE: {
63-
if(grantResults.length>0){
64-
for(int i =0; i < grantResults.length; i++){
141+
Log.d(TAG, "onRequestPermissionsResult: called.");
142+
mLocationPermissionsGranted = false;
143+
144+
switch(requestCode){
145+
case LOCATION_PERMISSION_REQUEST_CODE:{
146+
if(grantResults.length > 0){
147+
for(int i = 0; i < grantResults.length; i++){
65148
if(grantResults[i] != PackageManager.PERMISSION_GRANTED){
66-
mLocationPermissionGranted = false;
67-
Log.d(TAG, "onRequestPermissionResult : remission failed");
149+
mLocationPermissionsGranted = false;
150+
Log.d(TAG, "onRequestPermissionsResult: permission failed");
68151
return;
69152
}
70153
}
71-
Log.d(TAG, "onRequestPermissionResult : remission fgranted");
72-
mLocationPermissionGranted = true;
154+
Log.d(TAG, "onRequestPermissionsResult: permission granted");
155+
mLocationPermissionsGranted = true;
156+
//initialize our map
73157
initMap();
74158
}
75159
}
76160
}
77161
}
78162

79-
@Override
80-
public void onMapReady(GoogleMap googleMap) {
81-
Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show();
82-
Log.d(TAG, "On map: MAP is ready here");
83-
gMap = googleMap;
84-
}
163+
85164
}
165+
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
android:orientation="vertical" android:layout_width="match_parent"
3+
android:layout_width="match_parent"
44
android:layout_height="match_parent">
55

6-
<fragment
7-
xmlns:android="http://schemas.android.com/apk/res/android"
6+
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
87
xmlns:tools="http://schemas.android.com/tools"
98
android:layout_width="match_parent"
109
android:layout_height="match_parent"
1110
android:id="@+id/map"
12-
tools:context=".MapActivity"
13-
android:name="com.google.android.gms.maps.SupportMapFragment"
14-
/>
11+
tools:context=".MapsActivity"
12+
android:name="com.google.android.gms.maps.SupportMapFragment" />
13+
14+
1515

1616
</RelativeLayout>

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77

88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:3.5.3'
10+
classpath 'com.android.tools.build:gradle:4.0.2'
1111

1212
// NOTE: Do not place your application dependencies here; they belong
1313
// in the individual module build.gradle files
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Tue Oct 06 22:28:10 MSK 2020
1+
#Sun Oct 11 01:48:24 MSK 2020
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

0 commit comments

Comments
 (0)