diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f722392b1f689b8f7a03cb68f0b5c7f2e8fb62e5..1b6696f68c672937bc271e993cf4d19e53a93f38 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.chatman"> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <uses-permission android:name="android.permission. ACCESS_COARSE_LOCATION" /> + <application android:allowBackup="true" android:icon="@mipmap/chatman_launcher" diff --git a/android/app/src/main/java/com/chatman/helper/GpsHelper.java b/android/app/src/main/java/com/chatman/helper/GpsHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..a32a6564ee454006b632446b7916b0da9d808421 --- /dev/null +++ b/android/app/src/main/java/com/chatman/helper/GpsHelper.java @@ -0,0 +1,188 @@ +package com.chatman.helper; + +import android.Manifest; +import android.app.Activity; +import android.app.Service; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Bundle; +import android.os.IBinder; +import android.provider.Settings; +import android.support.v4.app.ActivityCompat; +import android.support.v7.app.AlertDialog; +import android.util.Log; + +/** + * + * http://velmm.com/how-to-get-current-latitude-and/ + * + * **/ +public class GpsHelper extends Service implements LocationListener { + + public static final String TAG = GpsHelper.class.getSimpleName(); + + private final Context mContext; + // flag for GPS status + boolean isGPSEnabled = false; + // flag for network status + boolean isNetworkEnabled = false; + // flag for GPS status + boolean canGetLocation = false; + Location location; // location + double latitude; // latitude + double longitude; // longitude + // The minimum distance to change Updates in meters + private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters + // The minimum time between updates in milliseconds + private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute + // Declaring a Location Manager + protected LocationManager locationManager; + public GpsHelper(Context context) { + this.mContext = context; + getLocation(); + } + public Location getLocation() { + try { + locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); + // getting GPS status + isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + // getting network status + isNetworkEnabled = locationManager + .isProviderEnabled(LocationManager.NETWORK_PROVIDER); + if (!isGPSEnabled && !isNetworkEnabled) { + // no network provider is enabled + } else { + this.canGetLocation = true; + // First get location from Network Provider + if (isNetworkEnabled) { + //check the network permission + if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions((Activity) mContext, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 101); + } + locationManager.requestLocationUpdates( + LocationManager.NETWORK_PROVIDER, + MIN_TIME_BW_UPDATES, + MIN_DISTANCE_CHANGE_FOR_UPDATES, this); + Log.d("Network", "Network"); + if (locationManager != null) { + location = locationManager + .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + if (location != null) { + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + } + // if GPS Enabled get lat/long using GPS Services + if (isGPSEnabled) { + if (location == null) { + //check the network permission + if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions((Activity) mContext, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 101); + } + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, + MIN_TIME_BW_UPDATES, + MIN_DISTANCE_CHANGE_FOR_UPDATES, this); + Log.d("GPS Enabled", "GPS Enabled"); + if (locationManager != null) { + location = locationManager + .getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (location != null) { + latitude = location.getLatitude(); + longitude = location.getLongitude(); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return location; + } + /** + * Stop using GPS listener + * Calling this function will stop using GPS in your app + * */ + public void stopUsingGPS(){ + if(locationManager != null){ + locationManager.removeUpdates(GpsHelper.this); + } + } + /** + * Function to get latitude + * */ + public double getLatitude(){ + if(location != null){ + latitude = location.getLatitude(); + } + // return latitude + Log.d(TAG, "getLatitude: " + latitude); + return latitude; + } + /** + * Function to get longitude + * */ + public double getLongitude(){ + if(location != null){ + longitude = location.getLongitude(); + } + // return longitude + Log.d(TAG, "getLongitude: " + longitude); + return longitude; + } + /** + * Function to check GPS/wifi enabled + * @return boolean + * */ + public boolean canGetLocation() { + return this.canGetLocation; + } + /** + * Function to show settings alert dialog + * On pressing Settings button will lauch Settings Options + * */ + public void showSettingsAlert(){ + AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); + // Setting Dialog Title + alertDialog.setTitle("GPS is settings"); + // Setting Dialog Message + alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); + // On pressing Settings button + alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog,int which) { + Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + mContext.startActivity(intent); + } + }); + // on pressing cancel button + alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + alertDialog.show(); + } + @Override + public void onLocationChanged(Location location) { + } + @Override + public void onProviderDisabled(String provider) { + } + @Override + public void onProviderEnabled(String provider) { + } + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } + @Override + public IBinder onBind(Intent arg0) { + return null; + } +} diff --git a/android/app/src/main/res/drawable/ic_add_grey.xml b/android/app/src/main/res/drawable/ic_add_grey.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b79b5d8a508fb7e0af19cd3dd14b0b77121b586 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_add_grey.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#D8D8D8" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/> +</vector> diff --git a/android/app/src/main/res/layout/fragment_home.xml b/android/app/src/main/res/layout/fragment_home.xml index 7722c349fcac9a5ca1d5238c059186d37f4da85b..da79f046657fced4c1e9e2336ad3ce7ea3472fb3 100644 --- a/android/app/src/main/res/layout/fragment_home.xml +++ b/android/app/src/main/res/layout/fragment_home.xml @@ -15,4 +15,15 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> + <android.support.design.widget.FloatingActionButton + android:id="@+id/fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="32dp" + android:layout_marginBottom="32dp" + android:src="@drawable/ic_add_grey" + android:backgroundTint="@color/colorPrimary" + app:layout_constraintBottom_toBottomOf="@+id/chat_list_rv" + app:layout_constraintEnd_toEndOf="parent" /> + </android.support.constraint.ConstraintLayout> \ No newline at end of file