From 94368b05d11284bc9d19d910358e5ca8acfda112 Mon Sep 17 00:00:00 2001 From: "marcin.jedynski" Date: Thu, 3 Jan 2019 02:12:17 +0100 Subject: [PATCH] deleting works, needs some polishing like refreshing summaries and hiding buttons depending on the level of sharing --- .../wmi/findmytutor/activity/MapActivity.java | 5 +- .../findmytutor/activity/SharingFragment.java | 99 ++++++++++++++++++- .../adapters/DutyHoursAdapter.java | 14 ++- .../service/PredefinedCoordinatesService.java | 24 +++++ .../service/PredefinedStatusesService.java | 10 +- .../utils/RightButtonPreference.java | 30 ++++-- app/src/main/res/layout/pref_sharing.xml | 11 +++ app/src/main/res/values/array.xml | 16 +++ 8 files changed, 185 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/service/PredefinedCoordinatesService.java 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 b1e9a32..b70d370 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 @@ -44,6 +44,7 @@ import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel; 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.PredefinedCoordinatesService; import com.uam.wmi.findmytutor.service.PredefinedStatusesService; import com.uam.wmi.findmytutor.service.UserService; import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; @@ -365,7 +366,7 @@ public class MapActivity extends BaseActivity private void sendLocation(String body, LatLng latLng) { - PredefinedStatusesService predefinedStatusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class); + PredefinedCoordinatesService predefinedCoordinatesService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class); PredefinedCoordViewModel droppedMarkercoordinate = new PredefinedCoordViewModel( latLng.getLatitude(), @@ -379,7 +380,7 @@ public class MapActivity extends BaseActivity CompositeDisposable disposable = new CompositeDisposable(); disposable.add( - predefinedStatusesService.postUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), droppedMarkercoordinate) + predefinedCoordinatesService.postUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), droppedMarkercoordinate) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::SaveCurrentManualLocation, this::handleError) 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 1eee441..f955f6b 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 @@ -1,7 +1,9 @@ package com.uam.wmi.findmytutor.activity; import android.annotation.SuppressLint; +import android.app.AlertDialog; import android.app.FragmentTransaction; +import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.ListPreference; @@ -21,15 +23,21 @@ import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel; import com.uam.wmi.findmytutor.network.ApiClient; +import com.uam.wmi.findmytutor.service.PredefinedCoordinatesService; +import com.uam.wmi.findmytutor.service.PredefinedDataService; import com.uam.wmi.findmytutor.service.PredefinedStatusesService; import com.uam.wmi.findmytutor.utils.Const; +import com.uam.wmi.findmytutor.utils.CustomListPreference2; import com.uam.wmi.findmytutor.utils.EnableSharingDialog; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; import com.uam.wmi.findmytutor.utils.RightButtonPreference; import com.uam.wmi.findmytutor.utils.SharingLevel; +import org.apache.commons.collections4.BidiMap; + import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Objects; @@ -49,13 +57,19 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere protected ListPreference manualLocationList; protected PreferenceCategory preferenceCategory; protected RightButtonPreference manualLocationButton; + protected RightButtonPreference removeManualLocation; + protected RightButtonPreference removeManualStatus; protected Preference manualStatus; protected ListPreference statusList; + private HashMap locationMap; + private ArrayList locationUUIDs; protected List predefinedCoordsList = new ArrayList<>(); private HashMap locationLevelMapping; private HashMap statusMapping; private PredefinedStatusesService statusesService; + private PredefinedCoordinatesService locationService; private CompositeDisposable disposable; + private AlertDialog.Builder builder; public static SharingFragment newInstance() { return new SharingFragment(); @@ -82,7 +96,7 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere } void getLocations(CompositeDisposable disposable) { - disposable.add(statusesService.getUserPredefinedCoords(PrefUtils.getUserId(getApplicationContext())) + disposable.add(locationService.getUserPredefinedCoords(PrefUtils.getUserId(getApplicationContext())) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSingleObserver>() { @@ -91,7 +105,12 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere public void onSuccess(List coords) { String currentCoordId = PrefUtils.getCurrentManualLocation(getApplicationContext()); - List predefinedLocationsNames = Stream.of(coords).map(PredefinedCoordViewModel::getName).toList(); + locationMap = new HashMap(); + locationUUIDs = new ArrayList(); + for (PredefinedCoordViewModel i : coords) locationMap.put(i.getPredefinedCoordinateId(),i.getName()); + for (PredefinedCoordViewModel i : coords) locationUUIDs.add(i.getPredefinedCoordinateId()); + List predefinedLocationsNames = Stream.of(coords).map(PredefinedCoordViewModel::getName).toList(); + List predefinedLocationsUUIDs = Stream.of(coords).map(PredefinedCoordViewModel::getPredefinedCoordinateId).toList(); predefinedCoordsList.addAll(coords); String[] stringnames = predefinedLocationsNames.toArray(new String[0]); @@ -124,9 +143,13 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere preferenceCategory = (PreferenceCategory) findPreference("category_sharing"); manualLocationList = (ListPreference) findPreference("key_manual_location_value"); manualLocationButton = (RightButtonPreference) findPreference("manual_location_button"); + removeManualLocation = (RightButtonPreference) findPreference("remove_manual_location"); + builder = new AlertDialog.Builder(getActivity()); + removeManualStatus = (RightButtonPreference) findPreference("remove_manual_status"); manualStatus = findPreference("key_manual_status"); statusList = (ListPreference) findPreference("key_status_value"); - statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class); + statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class); + locationService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class); disposable = new CompositeDisposable(); getStatuses(disposable); getLocations(disposable); @@ -155,7 +178,6 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere locationMode.setOnPreferenceChangeListener((preference, newValue) -> { PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue))); - if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) { if (!predefinedCoordsList.isEmpty()) { preferenceCategory.addPreference(manualLocationList); @@ -226,6 +248,39 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere return true; }); + removeManualStatus.setOnPreferenceChangeListener((preference, newValue) -> { + showRemoveDialog(statusList.getEntries(),"status"); + return true; + }); + removeManualLocation.setOnPreferenceChangeListener(((preference, newValue) -> { + showRemoveDialog(manualLocationList.getEntries(),"location"); + return true; + + })); + } + public void showRemoveDialog(CharSequence[] entries, String service){ + boolean [] checked = new boolean[entries.length]; + ArrayList tobeDeleted = new ArrayList(); + Log.d("sharingDialog", "no to siup"); + builder.setPositiveButton("DELETE", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + for (int i=0; i< entries.length; i++){ + if(checked[i] == true) { + tobeDeleted.add((String) entries[i]); + } + } + removeEntries(service,tobeDeleted); + Log.d("MANAGE-PREF",tobeDeleted.toString()); + } + }); + builder.setMultiChoiceItems(entries, checked, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + + } + }); + builder.create().show(); } @Override @@ -236,6 +291,35 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere return view; } + protected void removeEntries(String service, ArrayList toBeDeleted){ + + Log.d("MANAGE-PREF", toBeDeleted.toString()); + if(service.equals("status")){ + for (String uuid:toBeDeleted) { + disposable.add(statusesService.deleteUserPredefinedStatus(PrefUtils.getUserId(getApplicationContext()), uuid) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::handleDeleteStatuses, this::handleError)); + } + }else { + ArrayList uuidsToBeDeleted = new ArrayList(); + for (String name:toBeDeleted) { + for (String uuid:locationUUIDs) { + if(locationMap.get(uuid).equals(name)){ + uuidsToBeDeleted.add(uuid); + } + } + } + for (String uuid : uuidsToBeDeleted) { + + disposable.add(locationService.deleteUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), uuid) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::handleDeleteLocations, this::handleError)); + } + } + } + protected void setListPreferenceData(ListPreference lp, String[] entries, Integer activeId) { try { @@ -281,6 +365,13 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere "Network error " + error.getMessage(), Toast.LENGTH_SHORT).show(); } } + private void handleDeleteStatuses(List resp){ + String[] statusesArray = resp.toArray(new String[resp.size()]); + setListPreferenceData(statusList, statusesArray, null); + } + private void handleDeleteLocations(List resp){ + getLocations(disposable); + } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java index ae2d465..39bc3a3 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java @@ -11,12 +11,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; - import com.annimon.stream.Collectors; import com.annimon.stream.Stream; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.model.DutyHourViewModel; - import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -114,16 +112,16 @@ public class DutyHoursAdapter extends RecyclerView.Adapter> getUserPredefinedCoords(@Path("tutorId") String tutorId); + + @POST("api/users/predefined/coordinate/{tutorId}") + Single postUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord); + + @HTTP(method = "DELETE", path = "api/users/predefined/coordinate/{tutorId}", hasBody = true) + Single> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body String uuid); +} diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/PredefinedStatusesService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/PredefinedStatusesService.java index 5af0c22..2a3e8cf 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/PredefinedStatusesService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/PredefinedStatusesService.java @@ -5,25 +5,27 @@ import io.reactivex.Single; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; +import retrofit2.http.HTTP; import retrofit2.http.POST; import retrofit2.http.Path; -public interface PredefinedStatusesService { +public interface PredefinedStatusesService { @GET("api/users/predefined/status/{tutorId}") Single> getUserPredefinedStatuses(@Path("tutorId") String tutorId); @POST("api/users/predefined/status/{tutorId}") Single> postUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status); - @DELETE("api/users/predefined/status/{tutorId}") +// @DELETE("api/users/predefined/status/{tutorId}") + @HTTP(method = "DELETE", path = "api/users/predefined/status/{tutorId}", hasBody = true) Single> deleteUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status); - @GET("api/users/predefined/coordinate/{tutorId}") +/* @GET("api/users/predefined/coordinate/{tutorId}") Single> getUserPredefinedCoords(@Path("tutorId") String tutorId); @POST("api/users/predefined/coordinate/{tutorId}") Single postUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord); @DELETE("api/users/predefined/coordinate/{tutorId}") - Single> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord); + Single> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);*/ } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/RightButtonPreference.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/RightButtonPreference.java index 5fdf137..d6b8515 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/RightButtonPreference.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/RightButtonPreference.java @@ -2,6 +2,8 @@ package com.uam.wmi.findmytutor.utils; import android.content.Context; import android.preference.Preference; import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; @@ -9,25 +11,41 @@ import com.uam.wmi.findmytutor.R; public class RightButtonPreference extends Preference { + + private Button prefButton; + private String buttonText; + public RightButtonPreference(Context context, AttributeSet attrs) { super(context, attrs); - setWidgetLayoutResource(R.layout.preference_button_widget); + setWidgetLayoutResource(R.layout.preference_button_widget); + for (int i=0;i + @@ -51,6 +57,11 @@ android:singleLine="true" android:title="@string/title_manual_status" /> + + diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 5de90b6..3ea922b 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -74,6 +74,7 @@ 2 + @string/lang_eng @string/lang_pol @@ -81,4 +82,19 @@ 0 1 + + + + Item 1 + Item 2 + Item 3 + Item 4 + + + + 0 + 1 + 2 + 3 +