From 64b24cef1b9827670b11a0a1c2cd3b8a14d4cdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Fri, 9 Nov 2018 00:49:09 +0100 Subject: [PATCH 01/36] Add approximated localizations --- app/build.gradle | 2 +- app/src/main/assets/building.geojson | 386 ++++++++++++++++++ .../wmi/findmytutor/activity/MapActivity.java | 1 + .../uam/wmi/findmytutor/model/Coordinate.java | 3 +- .../BackgroundLocalizationService.java | 15 +- .../utils/ApproximatedLocalization.java | 64 +++ .../uam/wmi/findmytutor/utils/mapUtils.java | 2 + app/src/main/res/values/colors.xml | 10 +- 8 files changed, 474 insertions(+), 9 deletions(-) create mode 100644 app/src/main/assets/building.geojson create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java diff --git a/app/build.gradle b/app/build.gradle index 87b98e5..aad18fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,7 +58,7 @@ dependencies { 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' - + implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:4.0.0' // FloatingBarMenu implementation 'com.getbase:floatingactionbutton:1.10.1' diff --git a/app/src/main/assets/building.geojson b/app/src/main/assets/building.geojson new file mode 100644 index 0000000..e000dd8 --- /dev/null +++ b/app/src/main/assets/building.geojson @@ -0,0 +1,386 @@ +{ + "features": [ + { + "type": "Feature", + "properties": { + "name": "Skrzydło B" + }, + "geometry": { + "coordinates": [ + [ + [ + 16.92618, + 52.466248 + ], + [ + 16.926435, + 52.466201 + ], + [ + 16.92646, + 52.466255 + ], + [ + 16.926516, + 52.466244 + ], + [ + 16.926999, + 52.46711 + ], + [ + 16.926796, + 52.467145 + ], + [ + 16.926782, + 52.467117 + ], + [ + 16.926784, + 52.467121 + ], + [ + 16.926691, + 52.467139 + ], + [ + 16.926662, + 52.46709 + ], + [ + 16.926757, + 52.467072 + ], + [ + 16.926544, + 52.466691 + ], + [ + 16.926434, + 52.46671 + ], + [ + 16.926396, + 52.466655 + ], + [ + 16.926519, + 52.466628 + ], + [ + 16.926323, + 52.466281 + ], + [ + 16.926213, + 52.466307 + ], + [ + 16.92618, + 52.466248 + ] + ] + ], + "type": "Polygon" + }, + "id": "41798cf663bc55c10e6c51c3fe174eda" + }, + { + "type": "Feature", + "properties": { + "name": "Biblioteka" + }, + "geometry": { + "coordinates": [ + [ + [ + 16.927048, + 52.46721 + ], + [ + 16.926627, + 52.467295 + ], + [ + 16.926732, + 52.467482 + ], + [ + 16.926876, + 52.467461 + ], + [ + 16.926967, + 52.467428 + ], + [ + 16.927014, + 52.467402 + ], + [ + 16.927171, + 52.467359 + ], + [ + 16.9271, + 52.467202 + ], + [ + 16.927048, + 52.46721 + ] + ] + ], + "type": "Polygon" + }, + "id": "7328c3c9dffd3e76be8d3dcef4f58ddc" + }, + { + "type": "Feature", + "properties": { + "name": "Łącznik" + }, + "geometry": { + "coordinates": [ + [ + [ + 16.926759, + 52.466683 + ], + [ + 16.927088, + 52.46661 + ], + [ + 16.927019, + 52.466502 + ], + [ + 16.9267, + 52.466571 + ], + [ + 16.926759, + 52.466683 + ] + ] + ], + "type": "Polygon" + }, + "id": "8c19ee28e4c07ece9756fd21f290713b" + }, + { + "type": "Feature", + "properties": { + "name": "Skrzydło A" + }, + "geometry": { + "coordinates": [ + [ + [ + 16.926771, + 52.466106 + ], + [ + 16.926898, + 52.466079 + ], + [ + 16.926926, + 52.466126 + ], + [ + 16.927026, + 52.466107 + ], + [ + 16.92723, + 52.466473 + ], + [ + 16.927184, + 52.466483 + ], + [ + 16.927243, + 52.466586 + ], + [ + 16.927334, + 52.46656 + ], + [ + 16.927602, + 52.466889 + ], + [ + 16.927275, + 52.466959 + ], + [ + 16.926771, + 52.466106 + ] + ] + ], + "type": "Polygon" + }, + "id": "c33bfba772c85cc38ae417843d31b1ff" + }, + { + "type": "Feature", + "properties": { + "name": "Aule" + }, + "geometry": { + "coordinates": [ + [ + [ + 16.92731, + 52.467158 + ], + [ + 16.927315, + 52.46718 + ], + [ + 16.927348, + 52.467199 + ], + [ + 16.927393, + 52.467224 + ], + [ + 16.927426, + 52.467239 + ], + [ + 16.927476, + 52.467258 + ], + [ + 16.92755, + 52.467264 + ], + [ + 16.927625, + 52.467263 + ], + [ + 16.927699, + 52.467246 + ], + [ + 16.92776, + 52.467212 + ], + [ + 16.927821, + 52.467158 + ], + [ + 16.927838, + 52.467099 + ], + [ + 16.927827, + 52.467059 + ], + [ + 16.927793, + 52.467012 + ], + [ + 16.927738, + 52.466976 + ], + [ + 16.927661, + 52.466949 + ], + [ + 16.927581, + 52.466939 + ], + [ + 16.927534, + 52.466938 + ], + [ + 16.927467, + 52.466949 + ], + [ + 16.927387, + 52.467047 + ], + [ + 16.927315, + 52.467153 + ], + [ + 16.92731, + 52.467158 + ] + ] + ], + "type": "Polygon" + }, + "id": "c779419e3fd7faef8555e1099547a82c" + }, + { + "type": "Feature", + "properties": { + "name": "Hol", + "point" : [52.467088, 16.927150] + }, + "geometry": { + "coordinates": [ + [ + [ + 16.926625, + 52.467294 + ], + [ + 16.926568, + 52.46719 + ], + [ + 16.927008, + 52.467108 + ], + [ + 16.926953, + 52.467024 + ], + [ + 16.927463, + 52.466919 + ], + [ + 16.927467, + 52.466956 + ], + [ + 16.927316, + 52.467153 + ], + [ + 16.926907, + 52.467235 + ], + [ + 16.926625, + 52.467294 + ] + ] + ], + "type": "Polygon" + }, + "id": "facdd5349991758b9ad99d4e123c91cc" + } + ], + "type": "FeatureCollection" +} \ No newline at end of file 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 47da9ea..ab134d2 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 @@ -235,6 +235,7 @@ public class MapActivity extends BaseActivity latLng.getLatitude(), latLng.getLongitude(), latLng.getAltitude(), + "approx", PrefUtils.getUserFirstName(getApplicationContext()) + " " + PrefUtils.getUserLastName(getApplicationContext()), PrefUtils.getUserId(getApplicationContext()), PrefUtils.getLocationLevel(getApplicationContext()) 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 5c23701..1f838e4 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, String displayMode) { + public Coordinate (Double latitude, Double longitude, Double altitude, String approximatedLocation, 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.approximatedLocation = approximatedLocation; this.displayMode = displayMode; } 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 2b3ca3c..44a0d08 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 @@ -27,14 +27,16 @@ 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.mapbox.geojson.Point; import com.uam.wmi.findmytutor.model.Coordinate; import com.uam.wmi.findmytutor.network.ApiClient; +import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; +import com.uam.wmi.findmytutor.utils.mapUtils; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.Executor; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -43,6 +45,7 @@ import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; import timber.log.Timber; +import static com.mapbox.geojson.Point.fromLngLat; import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus; public class BackgroundLocalizationService extends Service { @@ -64,6 +67,8 @@ public class BackgroundLocalizationService extends Service { private Runnable mStatusChecker; private FusedLocationProviderClient mFusedLocationClient; + + public BackgroundLocalizationService() { providers.add(LocationManager.GPS_PROVIDER); providers.add(LocationManager.NETWORK_PROVIDER); @@ -74,6 +79,7 @@ public class BackgroundLocalizationService extends Service { new LocationListener(LocationManager.NETWORK_PROVIDER), new LocationListener(LocationManager.PASSIVE_PROVIDER) }; + } @Override @@ -292,20 +298,27 @@ public class BackgroundLocalizationService extends Service { private CoordinateService coordinateService = ApiClient.getClient(getApplicationContext()) .create(CoordinateService.class); + ApproximatedLocalization approximatedLocalization; + private Task(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); altitude = location.getAltitude(); + approximatedLocalization = new ApproximatedLocalization(mapUtils.loadJsonFromAsset(getApplicationContext(),"building.geojson")); } @Override protected Object doInBackground(Object[] objects) { +/* + Point point = approximatedLocalization.getPointerBuildingPart("Aule"); + Log.e("APPROXIMATED", String.valueOf(point));*/ try { Coordinate coordinate = new Coordinate( latitude, longitude, altitude, + approximatedLocalization.getNameOfBuildingPart(Point.fromLngLat(longitude, latitude)), PrefUtils.getUserStatus(getApplicationContext()), PrefUtils.getUserId(getApplicationContext()), PrefUtils.getLocationLevel(getApplicationContext()) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java new file mode 100644 index 0000000..56308d1 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java @@ -0,0 +1,64 @@ +package com.uam.wmi.findmytutor.utils; + +import android.support.annotation.NonNull; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.mapbox.geojson.BoundingBox; +import com.mapbox.geojson.Feature; +import com.mapbox.geojson.FeatureCollection; +import com.mapbox.geojson.Geometry; +import com.mapbox.geojson.Point; +import com.mapbox.geojson.Polygon; +import com.mapbox.geojson.gson.BoundingBoxDeserializer; +import com.mapbox.geojson.gson.GeoJsonAdapterFactory; +import com.mapbox.geojson.gson.GeometryDeserializer; +import com.mapbox.geojson.gson.PointDeserializer; +import com.mapbox.turf.TurfJoins; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ApproximatedLocalization { + private FeatureCollection buildingSchema = null; + + public ApproximatedLocalization(String buildingObject){ + buildingSchema = fromJson(buildingObject); + } + + private FeatureCollection fromJson(@NonNull String json) { + GsonBuilder gson = new GsonBuilder(); + gson.registerTypeAdapterFactory(GeoJsonAdapterFactory.create()); + gson.registerTypeAdapter(Point.class, new PointDeserializer()); + gson.registerTypeAdapter(Geometry.class, new GeometryDeserializer()); + gson.registerTypeAdapter(BoundingBox.class, new BoundingBoxDeserializer()); + return gson.create().fromJson(json, FeatureCollection.class); + } + + public String getNameOfBuildingPart(Point point) { + + for(Feature feature : Objects.requireNonNull(buildingSchema.features())){ + boolean isInside = TurfJoins.inside(point, (Polygon) Objects.requireNonNull(feature.geometry())); + + if (isInside){ + return Objects.requireNonNull(Objects.requireNonNull(feature.getStringProperty("name"))); + } + } + + return null; + } +/* + public Point getMiddlePointForBuildingPart(String BuildingPart) { + for(Feature feature : Objects.requireNonNull(buildingSchema.features())){ + String partName = feature.getStringProperty("name"); + + if(BuildingPart.equals(partName)) { + JsonElement pointsList = feature.getProperty("point"); + return Point.fromLngLat(pointsList.getAsNumber().doubleValue(), pointsList.getAsJsonArray().get(1)); + } + } + + return Point.fromLngLat(0,0); + }*/ +} diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java index a58ca10..6c7b948 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java @@ -2,6 +2,7 @@ package com.uam.wmi.findmytutor.utils; import android.animation.TypeEvaluator; import android.content.Context; +import android.content.res.AssetManager; import com.mapbox.mapboxsdk.geometry.LatLng; @@ -41,4 +42,5 @@ public class mapUtils { return null; } } + } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index efbf417..be1a4f3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,19 +1,17 @@ - @color/mapboxGray - @color/mapboxGrayDark10 - @color/mapboxPink - #cf5e5e + #476483 + #3A3553 + #CF0E0F + #89c3c3c3 #89c3c3c3 #858585 #232323 - #d1e200f6 #ffffff #80ffffff - #F5F5F5 #dfdfdf From 77b7c50e4e2e68ced55bf36a468a96aea353e174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Fri, 9 Nov 2018 00:50:15 +0100 Subject: [PATCH 02/36] Add approximated localization --- .../uam/wmi/findmytutor/utils/ApproximatedLocalization.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java index 56308d1..71074ca 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java @@ -2,8 +2,7 @@ package com.uam.wmi.findmytutor.utils; import android.support.annotation.NonNull; import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; +; import com.mapbox.geojson.BoundingBox; import com.mapbox.geojson.Feature; import com.mapbox.geojson.FeatureCollection; @@ -16,8 +15,6 @@ import com.mapbox.geojson.gson.GeometryDeserializer; import com.mapbox.geojson.gson.PointDeserializer; import com.mapbox.turf.TurfJoins; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; public class ApproximatedLocalization { From 35311af6454014cd193405d116d08e7791ca707d Mon Sep 17 00:00:00 2001 From: Marcin Jedynski Date: Sun, 11 Nov 2018 15:31:11 +0100 Subject: [PATCH 03/36] added string values and options to drawer --- app/src/main/res/menu/activity_main_drawer.xml | 14 ++++++++++++-- app/src/main/res/values-pl/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index d9c6b19..6797c97 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -14,13 +14,23 @@ android:icon="@drawable/outline_person_white_24dp" android:title="@string/navigation_item_profile" /> - + + + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 60d4559..52c7a2b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -128,6 +128,8 @@ Ta aplikacja potrzebuje uprawnień do lokalizacji. Ustawienia statusu Ręczny wybór lokalizacji + Wyślij nam feedback + Zgłoś błąd diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4e9ea1..5bd1a8e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,8 @@ Drawer Closed Blacklist Whitelist + Send us feedback + Report a bug Settings Profile Log out From 9f23aae6204c5adb70ae5a89af07fdf2d0ca1fb2 Mon Sep 17 00:00:00 2001 From: Marcin Jedynski Date: Sun, 11 Nov 2018 15:54:35 +0100 Subject: [PATCH 04/36] added bug icon to resources --- app/src/main/res/drawable/bug_icon.xml | 4 ++++ app/src/main/res/menu/activity_main_drawer.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/bug_icon.xml diff --git a/app/src/main/res/drawable/bug_icon.xml b/app/src/main/res/drawable/bug_icon.xml new file mode 100644 index 0000000..c3458e1 --- /dev/null +++ b/app/src/main/res/drawable/bug_icon.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 6797c97..5ea7575 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -21,7 +21,7 @@ android:title="@string/navigation_item_feedback" /> From 1323c02b301589fdc6ff101ba93c5fe4526500c6 Mon Sep 17 00:00:00 2001 From: Marcin Jedynski Date: Sun, 11 Nov 2018 19:55:17 +0100 Subject: [PATCH 05/36] added code for sending email --- .../findmytutor/activity/BaseActivity.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 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 2f4cba0..7f28ea3 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 @@ -3,6 +3,7 @@ package com.uam.wmi.findmytutor.activity; import android.Manifest; import android.app.Fragment; import android.app.FragmentTransaction; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; @@ -76,17 +77,17 @@ public abstract class BaseActivity if (itemName.equals(getResources().getString(R.string.navigation_item_whitelist))) { /* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class); startActivity(launchIntent);*/ - } else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) { + } else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) { /* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class); startActivity(launchIntent);*/ - } else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) { + } else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) { /* launchIntent = new Intent(getApplicationContext(), ProfileActivity.class); startActivity(launchIntent);*/ - } else if (itemName.equals(getResources().getString(R.string.navigation_item_settings))) { + } else if (itemName.equals(getResources().getString(R.string.navigation_item_settings))) { launchIntent = new Intent(getApplicationContext(), SettingsActivity.class); startActivity(launchIntent); - } else if (itemName.equals(getResources().getString(R.string.navigation_item_logout))) { + } else if (itemName.equals(getResources().getString(R.string.navigation_item_logout))) { if(PrefUtils.isBackgroundLocationServiceRunning(getApplicationContext())) { stopBackgroundLocalizationTask(); } @@ -101,8 +102,13 @@ public abstract class BaseActivity } startActivity(i); finish(); + } else if (itemName.equals(getResources().getString(R.string.navigation_item_feedback))) { + sendFeedback(getApplicationContext()); - } + } else if (itemName.equals(getResources().getString(R.string.navigation_item_bug))) { + + + } sideDrawer.closeDrawers(); @@ -351,6 +357,28 @@ public abstract class BaseActivity MenuItem item = navigationView.getMenu().findItem(itemId); item.setChecked(true); } + /** + * Email client intent to send support mail + * Appends the necessary device information to email body + * useful when providing support + */ + static public void sendFeedback(Context context) { + String body = null; + try { + body = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; + body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " + + Build.VERSION.RELEASE + "\n App Version: " + body + "\n Device Brand: " + Build.BRAND + + "\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER; + } catch (PackageManager.NameNotFoundException e) { + } + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType("message/rfc822"); + intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"team@findmytutor.com"}); + intent.putExtra(Intent.EXTRA_SUBJECT, "Query from android app"); + intent.putExtra(Intent.EXTRA_TEXT, body); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client))); + } abstract int getNavigationMenuItemId(); From c9b4548f45f4f3e4af006e953d0f36f97c35200d Mon Sep 17 00:00:00 2001 From: Marcin Jedynski Date: Mon, 12 Nov 2018 00:51:35 +0100 Subject: [PATCH 06/36] added modal asking for user data for bug/feedback report --- .../findmytutor/activity/BaseActivity.java | 81 ++++++++++++++++--- app/src/main/res/layout/feedback_modal.xml | 37 +++++++++ app/src/main/res/values/strings.xml | 7 ++ 3 files changed, 114 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/layout/feedback_modal.xml 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 7f28ea3..04988e6 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 @@ -4,6 +4,7 @@ import android.Manifest; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; @@ -17,16 +18,26 @@ import android.support.v4.content.ContextCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.FrameLayout; +import android.widget.ListView; +import android.widget.TextView; import android.widget.Toast; +import com.annimon.stream.Stream; import com.uam.wmi.findmytutor.R; +import com.uam.wmi.findmytutor.model.DutyHourViewModel; +import com.uam.wmi.findmytutor.model.TutorTabViewModel; +import com.uam.wmi.findmytutor.model.User; import com.uam.wmi.findmytutor.service.BackgroundLocalizationService; import com.uam.wmi.findmytutor.utils.ActiveFragment; import com.uam.wmi.findmytutor.utils.PrefUtils; @@ -35,6 +46,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.observers.DisposableSingleObserver; +import io.reactivex.schedulers.Schedulers; + import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus; @@ -103,11 +118,9 @@ public abstract class BaseActivity startActivity(i); finish(); } else if (itemName.equals(getResources().getString(R.string.navigation_item_feedback))) { - sendFeedback(getApplicationContext()); - + showNoteDialog(BaseActivity.this, R.string.email_subject_feedback); } else if (itemName.equals(getResources().getString(R.string.navigation_item_bug))) { - - + showNoteDialog(BaseActivity.this, R.string.email_subject_bug); } sideDrawer.closeDrawers(); @@ -362,22 +375,68 @@ public abstract class BaseActivity * Appends the necessary device information to email body * useful when providing support */ - static public void sendFeedback(Context context) { + private void sendFeedback(Context context, int subject, String mode) { + String appVersion = null; String body = null; try { - body = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; - body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " + - Build.VERSION.RELEASE + "\n App Version: " + body + "\n Device Brand: " + Build.BRAND + - "\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER; + appVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; + if( mode == "full"){ + body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " + + Build.VERSION.RELEASE + "\n App Version: " + appVersion + "\n Device Brand: " + Build.BRAND + + "\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER + "\n Marian Kowalski!!!"; + } else if ( mode == "anonymous"){ + body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " + + Build.VERSION.RELEASE + "\n App Version: " + appVersion + "\n Device Brand: " + Build.BRAND + + "\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER; + } } catch (PackageManager.NameNotFoundException e) { } Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"team@findmytutor.com"}); - intent.putExtra(Intent.EXTRA_SUBJECT, "Query from android app"); + intent.putExtra(Intent.EXTRA_EMAIL, new String[]{context.getString(R.string.fmt_email)}); + intent.putExtra(Intent.EXTRA_SUBJECT, context.getString(subject)); intent.putExtra(Intent.EXTRA_TEXT, body); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client))); + } + + private void showNoteDialog(Context context, int subject) { + LayoutInflater layoutInflaterAndroid = LayoutInflater.from(BaseActivity.this); + //View view = layoutInflaterAndroid.inflate(R.layout.feedback_modal, null); + AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(BaseActivity.this); + //alertDialogBuilderUserInput.setView(view); + alertDialogBuilderUserInput.setNegativeButton(R.string.cancel, (dialog, id) -> { + // User cancelled the dialog + }); + final AlertDialog alertDialog = alertDialogBuilderUserInput.create(); + alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,"OK", new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + // Write your code here to execute after dialog + // closed + Toast.makeText(getApplicationContext(), + "You clicked on OK", Toast.LENGTH_SHORT).show(); + } + }); + +/* Button yes = (Button) alertDialog.findViewById(R.id.feedback_modal_yes); + Button no = (Button) alertDialog.findViewById(R.id.feedback_modal_no);*/ +/* yes.setOnClickListener(new View.OnClickListener(){ + public void onClick(View v){ + sendFeedback(context,subject,"full"); + } + }); + no.setOnClickListener(new View.OnClickListener(){ + public void onClick(View v){ + sendFeedback(context,subject,"anonymous"); + } + });*/ + alertDialog.show(); + + + + + } abstract int getNavigationMenuItemId(); diff --git a/app/src/main/res/layout/feedback_modal.xml b/app/src/main/res/layout/feedback_modal.xml new file mode 100644 index 0000000..56ed62c --- /dev/null +++ b/app/src/main/res/layout/feedback_modal.xml @@ -0,0 +1,37 @@ + + + + + + +