Skip to content

Commit 4fd5464

Browse files
authored
Merge pull request #49 from pulkit4tech/bug
#48 : Prompt user to turn on GPS for better results
2 parents 2b04a76 + a7710dc commit 4fd5464

File tree

5 files changed

+61
-13
lines changed

5 files changed

+61
-13
lines changed

app/src/main/java/com/pulkit4tech/privy/MainActivity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import com.pulkit4tech.privy.data.json.PostPrivyRequest;
4646
import com.pulkit4tech.privy.fragments.PrivyMapsFragment;
4747
import com.pulkit4tech.privy.utilities.NetworkRequest;
48-
import com.pulkit4tech.privy.utilities.NoLocationPermission;
48+
import com.pulkit4tech.privy.fragments.NoLocationPermission;
4949

5050
import java.util.ArrayList;
5151

Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package com.pulkit4tech.privy.utilities;
1+
package com.pulkit4tech.privy.fragments;
22

33
import android.os.Bundle;
44
import android.support.annotation.Nullable;
55
import android.support.v4.app.Fragment;
66
import android.view.LayoutInflater;
77
import android.view.View;
88
import android.view.ViewGroup;
9+
import android.widget.TextView;
910

1011
import com.pulkit4tech.privy.R;
1112

@@ -14,6 +15,9 @@ public class NoLocationPermission extends Fragment {
1415
@Nullable
1516
@Override
1617
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
17-
return inflater.inflate(R.layout.error_msg_layout, container, false);
18+
View view = inflater.inflate(R.layout.error_msg_layout, container, false);
19+
TextView errorMsg = (TextView) view.findViewById(R.id.error_msg);
20+
errorMsg.setText(getString(R.string.location_permission_failed));
21+
return view;
1822
}
1923
}

app/src/main/java/com/pulkit4tech/privy/fragments/PrivyMapsFragment.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class PrivyMapsFragment extends Fragment implements OnMapReadyCallback {
4040
private Context mContext;
4141
private CameraPosition MY_LOCATION_CAMERA_POS;
4242
private HashMap<String, MarkerData> universalMarkers;
43+
private LocationServices locationService;
4344

4445
// My location
4546
private LocationData myLocationData;
@@ -119,7 +120,9 @@ public boolean onMyLocationButtonClick() {
119120
}
120121

121122
private void getMyCurrentLocation() {
122-
LocationServices locationService = new LocationServices(mContext);
123+
if(locationService == null)
124+
locationService = new LocationServices(mContext);
125+
123126
myLocationData = locationService.getCurrentLocation();
124127
if (myLocationData != null) {
125128

app/src/main/java/com/pulkit4tech/privy/utilities/LocationServices.java

+47-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package com.pulkit4tech.privy.utilities;
22

33
import android.Manifest;
4+
import android.app.Activity;
45
import android.content.Context;
6+
import android.content.Intent;
57
import android.content.pm.PackageManager;
68
import android.location.Criteria;
79
import android.location.Location;
810
import android.location.LocationManager;
911
import android.location.LocationListener;
1012
import android.os.Bundle;
13+
import android.provider.Settings;
14+
import android.support.design.widget.Snackbar;
1115
import android.support.v4.app.ActivityCompat;
12-
import android.widget.Toast;
16+
import android.view.View;
1317

1418
import com.google.android.gms.maps.model.LatLng;
1519

20+
import com.pulkit4tech.privy.R;
1621
import com.pulkit4tech.privy.data.LocationData;
1722

1823
import static android.content.Context.LOCATION_SERVICE;
@@ -28,12 +33,10 @@ public LocationServices(Context context) {
2833

2934
public LocationData getCurrentLocation() {
3035
LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
31-
Criteria criteria = new Criteria();
32-
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
33-
criteria.setAltitudeRequired(false);
34-
criteria.setBearingRequired(false);
35-
criteria.setCostAllowed(true);
36-
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
36+
if(!checkGPSon(locationManager)){
37+
promptToEnableGPS();
38+
}
39+
Criteria criteria = setCriteria();
3740
String bestProvider = locationManager.getBestProvider(criteria, true);
3841
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
3942
// ActivityCompat#requestPermissions
@@ -52,6 +55,20 @@ public LocationData getCurrentLocation() {
5255
return myLocation;
5356
}
5457

58+
private void promptToEnableGPS() {
59+
snackMsgWithAction(mContext.getString(R.string.enable_gps_msg));
60+
}
61+
62+
private Criteria setCriteria() {
63+
Criteria criteria = new Criteria();
64+
criteria.setAccuracy(Criteria.ACCURACY_FINE);
65+
criteria.setAltitudeRequired(false);
66+
criteria.setBearingRequired(false);
67+
criteria.setCostAllowed(true);
68+
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
69+
return criteria;
70+
}
71+
5572

5673
@Override
5774
public void onLocationChanged(Location location) {
@@ -70,11 +87,32 @@ public void onStatusChanged(String s, int i, Bundle bundle) {
7087

7188
@Override
7289
public void onProviderEnabled(String s) {
73-
90+
snackMsg(mContext.getString(R.string.gps_enable_request_success));
7491
}
7592

7693
@Override
7794
public void onProviderDisabled(String s) {
78-
Toast.makeText(mContext, "Provider Disabled", Toast.LENGTH_SHORT).show();
95+
promptToEnableGPS();
96+
}
97+
98+
private boolean checkGPSon(LocationManager manager){
99+
return manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
100+
}
101+
102+
private void snackMsg(String msg) {
103+
Snackbar.make(((Activity) mContext).findViewById(R.id.coordinator_layout), msg, Snackbar.LENGTH_LONG).show();
104+
}
105+
106+
private void snackMsgWithAction(String msg){
107+
Snackbar snackbar = Snackbar.make(((Activity) mContext).findViewById(R.id.coordinator_layout),msg,Snackbar.LENGTH_LONG);
108+
snackbar.setAction(R.string.turn_on, new View.OnClickListener() {
109+
@Override
110+
public void onClick(View view) {
111+
// start intent to turn on GPS
112+
Intent onGPS = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
113+
mContext.startActivity(onGPS);
114+
}
115+
});
116+
snackbar.show();
79117
}
80118
}

app/src/main/res/values/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,7 @@
3333
<string name="app_feedback_mail">[email protected]</string>
3434
<string name="feedback_subject">Feedback</string>
3535
<string name="send_feedback_msg">Send Feedback:</string>
36+
<string name="enable_gps_msg">Please enable GPS for better results.</string>
37+
<string name="gps_enable_request_success">Thank you for enabling gps.</string>
38+
<string name="turn_on">TURN ON</string>
3639
</resources>

0 commit comments

Comments
 (0)