From 583305ff31b78595d7e9363591322d7a46848ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Mon, 5 Nov 2018 23:25:29 +0100 Subject: [PATCH 1/3] Add modal on marker click --- .../findmytutor/activity/LoginActivity.java | 2 +- .../wmi/findmytutor/activity/MapActivity.java | 145 ++++++++++++------ .../BackgroundLocalizationService.java | 2 +- .../wmi/findmytutor/service/UserService.java | 2 +- .../uam/wmi/findmytutor/utils/PrefUtils.java | 1 - .../main/res/drawable-v21/custom_marker.png | Bin 0 -> 923 bytes .../main/res/drawable-v24/custom_marker.png | Bin 0 -> 923 bytes app/src/main/res/drawable/custom_marker.png | Bin 0 -> 923 bytes app/src/main/res/layout/marker_modal.xml | 30 ++++ 9 files changed, 135 insertions(+), 47 deletions(-) create mode 100644 app/src/main/res/drawable-v21/custom_marker.png create mode 100644 app/src/main/res/drawable-v24/custom_marker.png create mode 100644 app/src/main/res/drawable/custom_marker.png create mode 100644 app/src/main/res/layout/marker_modal.xml diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java index bc7c95f..b1e8770 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java @@ -176,7 +176,7 @@ public class LoginActivity extends AppCompatActivity { private void getUserProfile(String userId) { - disposable.add(userService.getUserByID(userId) + disposable.add(userService.getUserById(userId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::saveUserProfileToSharedPreferences, this::handleError)); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java index 9eb5cc4..3d3476e 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java @@ -5,60 +5,68 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.Color; import android.location.Location; import android.location.LocationManager; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.LinearInterpolator; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; import android.widget.Toast; +import com.annimon.stream.Stream; +import com.auth0.android.jwt.Claim; +import com.auth0.android.jwt.JWT; import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; import com.mapbox.android.core.permissions.PermissionsListener; import com.mapbox.android.core.permissions.PermissionsManager; +import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.IconFactory; +import com.mapbox.mapboxsdk.annotations.Marker; +import com.mapbox.mapboxsdk.annotations.MarkerOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.location.LocationComponent; import com.mapbox.mapboxsdk.location.LocationComponentOptions; import com.mapbox.mapboxsdk.location.modes.CameraMode; import com.mapbox.mapboxsdk.location.modes.RenderMode; -import com.mapbox.mapboxsdk.style.layers.CircleLayer; -import com.mapbox.mapboxsdk.style.layers.Layer; -import com.mapbox.mapboxsdk.style.sources.VectorSource; - -import static com.mapbox.mapboxsdk.style.layers.Property.NONE; -import static com.mapbox.mapboxsdk.style.layers.Property.VISIBLE; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleColor; - -import android.graphics.Color; -import android.view.View; -import android.view.animation.LinearInterpolator; -import android.widget.Button; - -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleRadius; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; - -import com.mapbox.mapboxsdk.Mapbox; -import com.mapbox.mapboxsdk.annotations.Marker; -import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.CircleLayer; +import com.mapbox.mapboxsdk.style.layers.Layer; +import com.mapbox.mapboxsdk.style.sources.VectorSource; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.model.Coordinate; +import com.uam.wmi.findmytutor.model.DutyHourViewModel; +import com.uam.wmi.findmytutor.model.JwtToken; +import com.uam.wmi.findmytutor.model.TutorTabViewModel; +import com.uam.wmi.findmytutor.model.User; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.CoordinateService; +import com.uam.wmi.findmytutor.service.UserService; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; import com.uam.wmi.findmytutor.utils.mapUtils; import java.util.HashMap; import java.util.List; +import java.util.Locale; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -66,49 +74,52 @@ import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; import timber.log.Timber; -import java.util.Locale; + +import static com.mapbox.mapboxsdk.style.layers.Property.NONE; +import static com.mapbox.mapboxsdk.style.layers.Property.VISIBLE; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleColor; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleRadius; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; +import static com.uam.wmi.findmytutor.R.id.activity_content; public class MapActivity extends BaseActivity implements PermissionsListener, OnMapReadyCallback { - private String tag = getClass().getName(); + String currentLanguage = "pl", currentLang; + private String tag = getClass().getName(); private PermissionsManager permissionsManager; private LocationComponent locationComponent; - LocationManager mLocationManager; - - private CoordinateService coordinateService; - private CompositeDisposable disposable = new CompositeDisposable(); + private UserService userService; + private CompositeDisposable disposable = new CompositeDisposable(); private int mInterval = 10000; private Handler mHandler = new Handler(); private Runnable mStatusChecker; - private MapView mapView; private MapboxMap mapboxMap; private Marker droppedMarker; private HashMap coordsMap = new HashMap<>(); private HashMap markerHash = new HashMap<>(); - private int zoomParam = 17; private int bearingParam = 180; private int tiltParam = 30; - Locale myLocale; - String currentLanguage = "pl", currentLang; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final SharedPreferences sharedPref = getSharedPreferences("fmtPrefs", Context.MODE_PRIVATE); - final String authToken = sharedPref.getString("authToken", null); + // fetching coords service coordinateService = ApiClient.getClient(getApplicationContext()) .create(CoordinateService.class); + userService = ApiClient.getClient(getApplicationContext()) + .create(UserService.class); + mStatusChecker = () -> { try { fetchTopCoords(); @@ -137,19 +148,67 @@ public class MapActivity extends BaseActivity mStatusChecker.run(); enableLocationPlugin(); -// // TODO what should happend on click? -// mapboxMap.setOnMarkerClickListener(marker1 -> { -// -// // Show a toast with the title of the selected marker -//// Toast.makeText(MapActivity.this, marker.getTitle(), Toast.LENGTH_SHORT).show(); -// return true; -// }); + mapboxMap.setOnMarkerClickListener(marker -> { + createMarkerModal(marker.getTitle()); + return true; + }); setOnMapLongClickListener(); // addStaticLayer(); } + private void createMarkerModal(String userId) { + disposable.add(userService.getUserById(userId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::createMarkerModal, this::handleError)); + } + + private void createMarkerModal(User user) { + String cordStatus = coordsMap.get(user.getId()).getLabel(); + LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext()); + @SuppressLint("InflateParams") View view = layoutInflaterAndroid.inflate(R.layout.marker_modal, null); + + AlertDialog.Builder alertDialogBuilderUserInput = new android.support.v7.app.AlertDialog.Builder(this); + alertDialogBuilderUserInput.setView(view); + + alertDialogBuilderUserInput.setNegativeButton(R.string.cancel, (dialog, id) -> { + // User cancelled the dialog + }); + + TextView userName = view.findViewById(R.id.userName); + TextView status = view.findViewById(R.id.label); + + userName.setText(String.format("%s %s", user.getFirstName(), user.getLastName())); + status.setText(String.format("%s ", cordStatus)); + + final AlertDialog alertDialog = alertDialogBuilderUserInput.create(); + + alertDialog.show(); + } + + + private void handleError(Throwable error) { + showError(error); + } + + + private void showError(Throwable e) { + String message; + + if (e instanceof HttpException) { + ResponseBody responseBody = ((HttpException) e).response().errorBody(); + message = RestApiHelper.getErrorMessage(responseBody); + }else { + message = "Network Error!"; + } + + + Toast.makeText(MapActivity.this, message, Toast.LENGTH_SHORT).show(); + } + + private void setOnMapLongClickListener() { final boolean[] cancel = {false}; @@ -298,7 +357,6 @@ public class MapActivity extends BaseActivity @Override public void onSuccess(List coordsList) { - Log.e(tag, ""); for (Coordinate element : coordsList) { @@ -329,7 +387,6 @@ public class MapActivity extends BaseActivity markerAnimator.setInterpolator(new LinearInterpolator()); markerAnimator.start(); - // chba niepotrzbene mapboxMap.getMarkerViewManager().update(); @@ -339,10 +396,12 @@ public class MapActivity extends BaseActivity } } else { + Log.e(tag, "Marker Added: " + id); + coordsMap.put(id, element); Marker marker = mapboxMap.addMarker(new MarkerOptions() - .title(element.getLabel()) + .title(id) .position(new LatLng(element.getLatitude(), element.getLongitude()))); markerHash.put(id, marker); } @@ -493,7 +552,7 @@ public class MapActivity extends BaseActivity permissionsManager = new PermissionsManager(this); permissionsManager.requestLocationPermissions(this); - permissionsManager.onRequestPermissionsResult(0, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, new int[] {0}); + permissionsManager.onRequestPermissionsResult(0, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, new int[]{0}); } } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index cc20051..a9ba1f8 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -285,7 +285,7 @@ public class BackgroundLocalizationService extends Service { latitude, longitude, altitude, - PrefUtils.getUserFirstName(getApplicationContext()) + " " + PrefUtils.getUserLastName(getApplicationContext()), + "Jestem zajęty", PrefUtils.getUserId(getApplicationContext()) ); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java index e8f415f..aca16a4 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java @@ -40,7 +40,7 @@ public interface UserService { Single getPagedStudents(@Path("pageNum") String pageNum); @GET("api/users/{id}") - Single getUserByID(@Path("id") String userID); + Single getUserById(@Path("id") String userID); @PUT("api/users/{id}") Completable updateUserByID(@Path("id") String userID, @Body User user); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java index 39510c0..3d74475 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java @@ -56,7 +56,6 @@ public class PrefUtils { return getSharedPreferences(context).getString("USER_ID", null); } - public static String getUserStatus(Context context) { return getSharedPreferences(context).getString("USER_STATUS", "Android"); } diff --git a/app/src/main/res/drawable-v21/custom_marker.png b/app/src/main/res/drawable-v21/custom_marker.png new file mode 100644 index 0000000000000000000000000000000000000000..1df09fdf3fe1229c3801c3b14fe6446cadced80c GIT binary patch literal 923 zcmV;M17!S(P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D129QMK~!i%?b=Dm zPEj1k@zh@GKCQDP@iq?EB_TF64Z$*>SMk}M=73$d~=WFaYKo+DWh$`CRn z^E`ZidT!nR{h!BkpL6arC%>GrL~!&wc0PF%k<>$jo=(dx?))jrJSqr3g65zOP$p)Rj$I8Pe*Vb z!B(6s^sd8}CGKGilulR$``1oe3S}#7*%}1LHm;xBLQ`_7=Zd#(+70hqQJJy`wrnSY z(jB(amr(k_mL;CRi`G%z`EnSFhLJ7P+Ab*CYiRtYD}4{87t+Vmw8YR=vzZO=d^re3 zdmCG}2f=v;TXAP7A7IN88Y1cFk8%m#xuSbR(bL?PX^j`0W3UyEgK`44ETIS87EHhl zoQHQ_VkVS*uw_#boL1P1wW(4T!j@Iy4Z1k~XRe1(qZ(q~^qkd3 zD3f8!P9j>oVKE1a)qICmYet}I(VLC?@H!J>6RMs`D7E9u>Nd2KtVy(U^E#E4cAEM` zQL|_VsV`Gr=dwr^jWx|kguD{cLQ$Kpx`?-{E5~c--B{g3OYo!cI$Mk;ifO33Xcw1d zO4c^GZlm|X=}*$dXxCRa_eHUkdgUY9Cig)@M8n4WC3Ll_`sFq>8a79e{w1`~jPhEi x+RPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D129QMK~!i%?b=Dm zPEj1k@zh@GKCQDP@iq?EB_TF64Z$*>SMk}M=73$d~=WFaYKo+DWh$`CRn z^E`ZidT!nR{h!BkpL6arC%>GrL~!&wc0PF%k<>$jo=(dx?))jrJSqr3g65zOP$p)Rj$I8Pe*Vb z!B(6s^sd8}CGKGilulR$``1oe3S}#7*%}1LHm;xBLQ`_7=Zd#(+70hqQJJy`wrnSY z(jB(amr(k_mL;CRi`G%z`EnSFhLJ7P+Ab*CYiRtYD}4{87t+Vmw8YR=vzZO=d^re3 zdmCG}2f=v;TXAP7A7IN88Y1cFk8%m#xuSbR(bL?PX^j`0W3UyEgK`44ETIS87EHhl zoQHQ_VkVS*uw_#boL1P1wW(4T!j@Iy4Z1k~XRe1(qZ(q~^qkd3 zD3f8!P9j>oVKE1a)qICmYet}I(VLC?@H!J>6RMs`D7E9u>Nd2KtVy(U^E#E4cAEM` zQL|_VsV`Gr=dwr^jWx|kguD{cLQ$Kpx`?-{E5~c--B{g3OYo!cI$Mk;ifO33Xcw1d zO4c^GZlm|X=}*$dXxCRa_eHUkdgUY9Cig)@M8n4WC3Ll_`sFq>8a79e{w1`~jPhEi x+RPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D129QMK~!i%?b=Dm zPEj1k@zh@GKCQDP@iq?EB_TF64Z$*>SMk}M=73$d~=WFaYKo+DWh$`CRn z^E`ZidT!nR{h!BkpL6arC%>GrL~!&wc0PF%k<>$jo=(dx?))jrJSqr3g65zOP$p)Rj$I8Pe*Vb z!B(6s^sd8}CGKGilulR$``1oe3S}#7*%}1LHm;xBLQ`_7=Zd#(+70hqQJJy`wrnSY z(jB(amr(k_mL;CRi`G%z`EnSFhLJ7P+Ab*CYiRtYD}4{87t+Vmw8YR=vzZO=d^re3 zdmCG}2f=v;TXAP7A7IN88Y1cFk8%m#xuSbR(bL?PX^j`0W3UyEgK`44ETIS87EHhl zoQHQ_VkVS*uw_#boL1P1wW(4T!j@Iy4Z1k~XRe1(qZ(q~^qkd3 zD3f8!P9j>oVKE1a)qICmYet}I(VLC?@H!J>6RMs`D7E9u>Nd2KtVy(U^E#E4cAEM` zQL|_VsV`Gr=dwr^jWx|kguD{cLQ$Kpx`?-{E5~c--B{g3OYo!cI$Mk;ifO33Xcw1d zO4c^GZlm|X=}*$dXxCRa_eHUkdgUY9Cig)@M8n4WC3Ll_`sFq>8a79e{w1`~jPhEi x+R + + + + + + + From 5757a58edfe4d0f25466651a4d4f7abda9dccbd3 Mon Sep 17 00:00:00 2001 From: Marcin Jedynski Date: Tue, 6 Nov 2018 03:04:17 +0100 Subject: [PATCH 2/3] adjusted background task and shared pref file to work together throught PrefUtils --- .../findmytutor/activity/BaseActivity.java | 4 +- .../wmi/findmytutor/activity/MapActivity.java | 3 +- .../findmytutor/activity/SharingFragment.java | 47 +++++++++++++++++-- .../uam/wmi/findmytutor/model/Coordinate.java | 3 +- .../BackgroundLocalizationService.java | 6 ++- .../uam/wmi/findmytutor/utils/PrefUtils.java | 25 ++++++++-- app/src/main/res/layout/pref_sharing.xml | 17 ++++--- app/src/main/res/values-pl/strings.xml | 5 ++ app/src/main/res/values/strings.xml | 2 + 9 files changed, 90 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java index 4a2cea1..7792421 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java @@ -190,8 +190,8 @@ public abstract class BaseActivity } } - public void handleBackgroundTaskLifeCycle() { - if (PrefUtils.isEnableSharingLocalization(getApplicationContext())) { + public void handleBackgroundTaskLifeCycle(boolean isLocationEnabled) { + if (isLocationEnabled) { startBackgroundLocalizationTask(); } else { stopBackgroundLocalizationTask(); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java index 88014c1..1dae96f 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java @@ -188,7 +188,8 @@ public class MapActivity extends BaseActivity latLng.getLongitude(), latLng.getAltitude(), PrefUtils.getUserFirstName(getApplicationContext()) + " " + PrefUtils.getUserLastName(getApplicationContext()), - PrefUtils.getUserId(getApplicationContext()) + PrefUtils.getUserId(getApplicationContext()), + PrefUtils.getLocationLevel(getApplicationContext()) ); disposable.add( diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java index e671a31..475367c 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java @@ -14,13 +14,17 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.service.BackgroundLocalizationService; import com.uam.wmi.findmytutor.utils.PrefUtils; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; @@ -28,25 +32,51 @@ import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; public class SharingFragment extends PreferenceFragment { + private HashMap locationLevelMapping; +// private HashMap statusMapping; @SuppressLint("ResourceType") @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + locationLevelMapping = new HashMap(); + locationLevelMapping.put(0,"presence"); + locationLevelMapping.put(1,"approximated"); + locationLevelMapping.put(2,"exact"); + +/* statusMapping = new HashMap(); + statusMapping.put(0,"presence"); + statusMapping.put(1,"approximated"); + statusMapping.put(2,"exact");*/ + addPreferencesFromResource(R.layout.pref_sharing); Preference manualStatus = findPreference("key_manual_status"); Preference locationSharing = findPreference("key_sharing_enabled"); + Preference locationMode = findPreference("key_location_level"); + Preference statusList = findPreference("key_status_value"); + manualStatus.setOnPreferenceChangeListener((preference, newValue) -> { ListPreference lp = (ListPreference) findPreference("key_status_value"); updateListPreference(lp, newValue, "manual_statuses"); return true; }); + locationMode.setOnPreferenceChangeListener((preference, newValue) -> { + ListPreference lp = (ListPreference) preference; + PrefUtils.storeLocationMode(getApplicationContext(),locationLevelMapping.get(Integer.parseInt((String) newValue))); + return true; + }); + statusList.setOnPreferenceChangeListener((preference, newValue) -> { + ListPreference lp = (ListPreference) preference; + CharSequence [] entries = lp.getEntries(); + PrefUtils.storeStatus(getApplicationContext(),(String) entries[Integer.parseInt((String) newValue)]); + return true; + }); - locationSharing.setOnPreferenceChangeListener((buttonView, isChecked) -> { - PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) isChecked); - ((MapActivity)getActivity()).handleBackgroundTaskLifeCycle(); - + locationSharing.setOnPreferenceChangeListener((buttonView, newValue) -> { +// PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) isChecked); +// Toast.makeText(getApplicationContext(), Boolean.toString(PrefUtils.isEnableSharingLocalization(getApplicationContext())), Toast.LENGTH_LONG).show(); + ((MapActivity)getActivity()).handleBackgroundTaskLifeCycle((Boolean) newValue); return true; }); } @@ -64,15 +94,22 @@ public class SharingFragment extends PreferenceFragment { return view; } + public String getListPreferenceValue(String key){ + ListPreference lp = (ListPreference) findPreference(key); + return (String)lp.getEntry(); + + } protected void updateListPreference(ListPreference lp,Object newValue,String storageKey){ CharSequence [] entries = lp.getEntries(); Set defaultEntries = new HashSet(Arrays.asList(entries)); SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); + Set manualStatusSet = sharedPref.getStringSet(storageKey,defaultEntries); manualStatusSet.add((String) newValue); String [] manualStatusArr = manualStatusSet.toArray(new String[0]); Arrays.sort(manualStatusArr); setListPreferenceData(lp.getKey(),manualStatusArr); + SharedPreferences.Editor editor = sharedPref.edit(); editor.putStringSet(storageKey,manualStatusSet); editor.apply(); @@ -84,7 +121,7 @@ public class SharingFragment extends PreferenceFragment { CharSequence[] entryValues = new CharSequence [entries.length]; for (int i = 0; i < entries.length; i++){ - entryValues[i] = Integer.toString(i+1); + entryValues[i] = Integer.toString(i); } lp.setDefaultValue("1"); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java b/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java index 2280dd4..5c23701 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java @@ -44,7 +44,7 @@ public class Coordinate extends BaseResponse { @SerializedName("label") private String label; - public Coordinate (Double latitude, Double longitude, Double altitude, String label, String userId) { + public Coordinate (Double latitude, Double longitude, Double altitude, String label, String userId, String displayMode) { //if (!latitudeRange.contains(latitude)) throw new IllegalArgumentException("Inappropriate latitude value" + latitude); //if (!longtitudeRange.contains(longitude)) throw new IllegalArgumentException("Inappropriate longitude value" + longitude); @@ -53,6 +53,7 @@ public class Coordinate extends BaseResponse { this.altitude = altitude; this.label = label; this.userId = userId; + this.displayMode = displayMode; } public Coordinate (Double latitude) { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index 2412286..bf499d5 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -283,8 +283,10 @@ public class BackgroundLocalizationService extends Service { latitude, longitude, altitude, - PrefUtils.getUserFirstName(getApplicationContext()) + " " + PrefUtils.getUserLastName(getApplicationContext()), - PrefUtils.getUserId(getApplicationContext()) + PrefUtils.getUserFirstName(getApplicationContext()) + " " + PrefUtils.getUserLastName(getApplicationContext()) + " " + PrefUtils.getUserStatus(getApplicationContext()), + PrefUtils.getUserId(getApplicationContext()), + PrefUtils.getLocationLevel(getApplicationContext()) + ); disposable.add( diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java index f6b7d13..8dc795a 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java @@ -2,8 +2,10 @@ package com.uam.wmi.findmytutor.utils; import android.content.Context; import android.content.SharedPreferences; +import android.preference.ListPreference; +import android.preference.PreferenceFragment; import android.util.Log; - +import com.uam.wmi.findmytutor.activity.SharingFragment; import com.auth0.android.jwt.Claim; import com.auth0.android.jwt.JWT; @@ -15,7 +17,7 @@ public class PrefUtils { } public static SharedPreferences getSharedPreferences(Context context) { - return context.getSharedPreferences("APP_PREF", Context.MODE_PRIVATE); + return context.getSharedPreferences("com.uam.wmi.findmytutor_preferences", Context.MODE_PRIVATE); } @@ -55,7 +57,12 @@ public class PrefUtils { public static String getUserStatus(Context context) { - return getSharedPreferences(context).getString("USER_STATUS", "Android"); + return getSharedPreferences(context).getString("status_entry", "Available"); + } + public static void storeStatus(Context context, String status){ + SharedPreferences.Editor editor = getSharedPreferences(context).edit(); + editor.putString("status_entry", status); + editor.apply(); } public static void storeIsTutor(Context applicationContext, boolean isTutor) { @@ -79,12 +86,20 @@ public class PrefUtils { } public static boolean isEnableSharingLocalization(Context context) { - return getSharedPreferences(context).getBoolean("IS_ENABLE_SHARING_LOCALIZATION", false); + return getSharedPreferences(context).getBoolean("key_sharing_enabled", false); } public static void storeEnableSharingLocalization(Context context,Boolean isChecked) { SharedPreferences.Editor editor = getSharedPreferences(context).edit(); - editor.putBoolean("IS_ENABLE_SHARING_LOCALIZATION", isChecked); + editor.putBoolean("key_sharing_enabled", isChecked); + editor.apply(); + } + public static String getLocationLevel(Context context){ + return getSharedPreferences(context).getString("location_mode", "exact"); + } + public static void storeLocationMode(Context context, String mode){ + SharedPreferences.Editor editor = getSharedPreferences(context).edit(); + editor.putString("location_mode", mode); editor.apply(); } diff --git a/app/src/main/res/layout/pref_sharing.xml b/app/src/main/res/layout/pref_sharing.xml index 4a75c7b..95817ac 100644 --- a/app/src/main/res/layout/pref_sharing.xml +++ b/app/src/main/res/layout/pref_sharing.xml @@ -5,6 +5,7 @@ tools:ignore="MissingDefaultResource" android:layout_width="match_parent" android:layout_height="match_parent"> + - + + + - + + + - - - + \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c8102e5..60d4559 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -123,6 +123,11 @@ Zaloguj! Niepoprawny format loginu. Lista użytkowników + Wybierz lokalizacje + Nie dodano uprawnień do lokalizacji. + Ta aplikacja potrzebuje uprawnień do lokalizacji. + Ustawienia statusu + Ręczny wybór lokalizacji diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb46a55..198b7f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -47,6 +47,8 @@ Sharing Location sharing + Status settings + Manual location override Sharing level Only presence Approximated From 1094ef942b74fcd50107b2955165bc562f1d3e51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Tue, 6 Nov 2018 23:50:13 +0100 Subject: [PATCH 3/3] Add FusedLocalizationApi --- .idea/encodings.xml | 6 ----- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 4 +++ .../findmytutor/activity/BaseActivity.java | 15 ++++------- .../wmi/findmytutor/activity/MapActivity.java | 4 +-- .../activity/SettingsActivity.java | 7 ++++++ .../findmytutor/activity/StartupActivity.java | 4 --- .../activity/UsersListFragment.java | 5 ++-- .../BackgroundLocalizationService.java | 25 ++++++++++++++++--- .../uam/wmi/findmytutor/utils/PrefUtils.java | 5 ---- app/src/main/res/drawable/ic_cancel.xml | 4 +++ app/src/main/res/drawable/ic_launch.xml | 4 +++ app/src/main/res/values/strings.xml | 5 ++++ 13 files changed, 56 insertions(+), 33 deletions(-) delete mode 100644 .idea/encodings.xml create mode 100644 app/src/main/res/drawable/ic_cancel.xml create mode 100644 app/src/main/res/drawable/ic_launch.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 646dfea..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ab8ae7e..87b98e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,6 +57,7 @@ dependencies { implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' implementation 'com.auth0.android:jwtdecode:1.1.1' implementation 'com.annimon:stream:1.2.1' + implementation 'com.google.android.gms:play-services-location:16.0.0' // FloatingBarMenu implementation 'com.getbase:floatingactionbutton:1.10.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b1bc92..bb4aa0c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,10 @@ android:name=".activity.SettingsActivity" android:label="@string/title_activity_settings" /> + + { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java index 430311b..d0fd9dc 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java @@ -46,8 +46,4 @@ public class StartupActivity extends AppCompatActivity { finish(); } - - - - } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java index ecc460a..82888b2 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java @@ -105,7 +105,6 @@ public class UsersListFragment extends Fragment { } })); - } public void searchUser(String textToSearch) { @@ -217,11 +216,13 @@ public class UsersListFragment extends Fragment { } private void showError(Throwable e) { - String message = e.toString(); + String message; if (e instanceof HttpException) { ResponseBody responseBody = ((HttpException) e).response().errorBody(); message = RestApiHelper.getErrorMessage(responseBody); + }else{ + message = "Network Error !"; } Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_LONG) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index 24ebc30..2b3ca3c 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -23,6 +23,9 @@ import android.support.v4.app.ActivityCompat; import android.support.v4.app.NotificationCompat; import android.util.Log; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.tasks.OnSuccessListener; import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; import com.uam.wmi.findmytutor.model.Coordinate; import com.uam.wmi.findmytutor.network.ApiClient; @@ -31,6 +34,7 @@ import com.uam.wmi.findmytutor.utils.RestApiHelper; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executor; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -58,6 +62,7 @@ public class BackgroundLocalizationService extends Service { private Handler mHandler = new Handler(); private HandlerThread mHandlerThread = null; private Runnable mStatusChecker; + private FusedLocationProviderClient mFusedLocationClient; public BackgroundLocalizationService() { providers.add(LocationManager.GPS_PROVIDER); @@ -107,6 +112,9 @@ public class BackgroundLocalizationService extends Service { startForeground(1001, notification); } + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + + initializeLocationManager(); Integer providerIndex = 0; @@ -194,8 +202,21 @@ public class BackgroundLocalizationService extends Service { Log.e("Best localization:", String.valueOf(bestLocation)); - if (bestLocation != null) + /* if (bestLocation != null) fn_update(bestLocation); +*/ + + mFusedLocationClient.getLastLocation().addOnSuccessListener( + new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + if (location != null) { + mLastLocation = location; + fn_update(location); + } + } + + }); } private void fn_update(Location location) { @@ -321,7 +342,5 @@ public class BackgroundLocalizationService extends Service { return null; } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java index 193e29d..0982f5a 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java @@ -20,7 +20,6 @@ public class PrefUtils { return context.getSharedPreferences("com.uam.wmi.findmytutor_preferences", Context.MODE_PRIVATE); } - public static void getAllKeys(Context context){ Map keys = getSharedPreferences(context).getAll(); @@ -35,9 +34,6 @@ public class PrefUtils { editor.clear().apply(); } - - - public static void storeApiKey(Context context, String apiKey) { SharedPreferences.Editor editor = getSharedPreferences(context).edit(); editor.putString("API_KEY", apiKey); @@ -150,5 +146,4 @@ public class PrefUtils { editor.putBoolean("BACKGROUND_SERVICE_STATUS", status); editor.apply(); } - } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cancel.xml b/app/src/main/res/drawable/ic_cancel.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/app/src/main/res/drawable/ic_cancel.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launch.xml b/app/src/main/res/drawable/ic_launch.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/app/src/main/res/drawable/ic_launch.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 198b7f7..60e0d13 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,5 +189,10 @@ Log in Users list Invalid login format. + Locale utils + Permission denied + permission should be granted + +