diff --git a/app/build.gradle b/app/build.gradle index ab9bf30..39e6734 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,6 +14,7 @@ android { versionName "1.0.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true + resConfigs "en", "pl" } buildTypes { release { @@ -37,10 +38,8 @@ dependencies { implementation "ch.acra:acra-limiter:$acraVersion" - implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:preference-v7:27.1.1' - implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:cardview-v7:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:support-v4:27.1.1' @@ -72,6 +71,7 @@ dependencies { // FloatingBarMenu implementation 'com.getbase:floatingactionbutton:1.10.1' implementation 'org.apache.commons:commons-collections4:4.0' - implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:design:27.1.1' + implementation 'com.akexorcist:localizationactivity:1.2.2' + implementation 'com.android.support:appcompat-v7:25.2.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fb52479..9f3de6a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" + android:configChanges="locale" tools:ignore="AllowBackup,GoogleAppIndexingWarning"> blacklistedUsers = new ArrayList<>(); private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL")); + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 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 caf7eae..d865b1c 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 @@ -3,6 +3,7 @@ package com.uam.wmi.findmytutor.activity; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; +import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; @@ -27,6 +28,7 @@ import com.uam.wmi.findmytutor.model.ValidateUser; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.LdapService; import com.uam.wmi.findmytutor.service.UserService; +import com.uam.wmi.findmytutor.utils.LocaleHelper; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; @@ -50,6 +52,11 @@ LoginActivity extends AppCompatActivity { private UserService userService; private CompositeDisposable disposable = new CompositeDisposable(); + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 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 b5603d3..c30cbe5 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 @@ -4,6 +4,7 @@ import android.Manifest; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; +import android.content.Context; import android.location.Location; import android.os.Bundle; import android.os.Handler; @@ -48,6 +49,7 @@ import com.uam.wmi.findmytutor.service.PredefinedCoordinatesService; import com.uam.wmi.findmytutor.service.UserService; import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; import com.uam.wmi.findmytutor.utils.EnableSharingDialog; +import com.uam.wmi.findmytutor.utils.LocaleHelper; import com.uam.wmi.findmytutor.utils.LocaleUtils; import com.uam.wmi.findmytutor.utils.ManualLocationUtils; import com.uam.wmi.findmytutor.utils.MapMarker; @@ -103,6 +105,11 @@ public class MapActivity extends BaseActivity private ApproximatedLocalization approximatedLocalization; private boolean shouldFetchNewCoords = true; + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java index fa54e0f..f77be00 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java @@ -1,6 +1,7 @@ package com.uam.wmi.findmytutor.activity; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; @@ -15,12 +16,15 @@ import android.util.Log; import android.view.MenuItem; import com.uam.wmi.findmytutor.R; +import com.uam.wmi.findmytutor.utils.LocaleHelper; +import com.uam.wmi.findmytutor.utils.LocaleUtils; import com.uam.wmi.findmytutor.utils.PrefUtils; import java.util.Locale; + public class SettingsActivity extends AppCompatPreferenceActivity { private static final String TAG = SettingsActivity.class.getSimpleName(); @@ -33,9 +37,15 @@ public class SettingsActivity extends AppCompatPreferenceActivity { getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit(); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + public void setLocale(String localeName) { + Context context = LocaleHelper.setLocale(this, localeName); + Resources res = context.getResources(); Locale myLocale = new Locale(localeName); - Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = myLocale; @@ -62,9 +72,12 @@ public class SettingsActivity extends AppCompatPreferenceActivity { languagesList.setOnPreferenceChangeListener((preference, newValue) -> { if (!newValue.toString().equals("0")){ + LocaleHelper.setLocale(getActivity(), "pl"); ((SettingsActivity)getActivity()).setLocale("pl"); PrefUtils.storeLocale(getActivity(),"pl"); + LocaleHelper.setLocale(getActivity(), "pl"); }else{ + LocaleHelper.setLocale(getActivity(), "en"); ((SettingsActivity)getActivity()).setLocale("en"); PrefUtils.storeLocale(getActivity(),"en"); } 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 38e7c0d..5ce1844 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 @@ -3,41 +3,36 @@ package com.uam.wmi.findmytutor.activity; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.FragmentTransaction; -import android.app.TimePickerDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; -import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.SwitchPreference; -import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TimePicker; import android.widget.Toast; import com.annimon.stream.IntPair; import com.annimon.stream.Stream; import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; import com.uam.wmi.findmytutor.R; -import com.uam.wmi.findmytutor.adapters.TutorsListAdapter; 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.PredefinedStatusesService; import com.uam.wmi.findmytutor.utils.EnableSharingDialog; +import com.uam.wmi.findmytutor.utils.LocaleHelper; 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; @@ -49,6 +44,7 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; + import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; @@ -63,9 +59,9 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere protected RightButtonPreference removeManualStatus; protected Preference manualStatus; protected ListPreference statusList; - private HashMap locationMap; - private ArrayList locationUUIDs; protected List predefinedCoordsList = new ArrayList<>(); + private HashMap locationMap; + private ArrayList locationUUIDs; private HashMap locationLevelMapping; private HashMap statusMapping; private PredefinedStatusesService statusesService; @@ -74,9 +70,9 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere private AlertDialog.Builder builder; private String[] statusesArray; private boolean statusSwitchFlag; - private ArrayList predefinedLocationsList; + private ArrayList predefinedLocationsList; - public static SharingFragment newInstance() { + public static SharingFragment newInstance() { return new SharingFragment(); } @@ -88,12 +84,12 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere .subscribeWith(new DisposableSingleObserver>() { @Override public void onSuccess(List strings) { - statusesArray = strings.toArray(new String[strings.size()]); - if(strings.isEmpty()){ - disableStatusPreferences(); - }else{ - enableStatusPreferences(); - } + statusesArray = strings.toArray(new String[strings.size()]); + if (strings.isEmpty()) { + disableStatusPreferences(); + } else { + enableStatusPreferences(); + } // Log.d("STATUSES",Integer.toString(statusesArray.length )); setListPreferenceData(statusList, statusesArray, null); } @@ -116,35 +112,36 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere public void onSuccess(List coords) { String currentCoordId = PrefUtils.getCurrentManualLocation(getApplicationContext()); - 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(); + 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); - if (!PrefUtils.getLocationLevel(getApplicationContext()).equals("manual")) { - preferenceCategory.removePreference(manualLocationList); - preferenceCategory.removePreference(removeManualLocation); - preferenceCategory.removePreference(manualLocationButton); - }else{ - if(!predefinedCoordsList.isEmpty()){ + if (!PrefUtils.getLocationLevel(getApplicationContext()).equals("manual")) { + preferenceCategory.removePreference(manualLocationList); + preferenceCategory.removePreference(removeManualLocation); + preferenceCategory.removePreference(manualLocationButton); + } else { + if (!predefinedCoordsList.isEmpty()) { - manualLocationList.setEnabled(true); - manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext())); - removeManualLocation.setEnabled(true); - locationSharing.setEnabled(true); - } - } + manualLocationList.setEnabled(true); + manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext())); + removeManualLocation.setEnabled(true); + locationSharing.setEnabled(true); + } + } String[] stringnames = predefinedLocationsNames.toArray(new String[0]); - predefinedLocationsList = new ArrayList<>(Arrays.asList(stringnames)); + predefinedLocationsList = new ArrayList<>(Arrays.asList(stringnames)); List activesId = Stream.of(coords).indexed() .filter(v -> v.getSecond().getPredefinedCoordinateId().equals(currentCoordId)).map(IntPair::getFirst).toList(); - if( activesId.size() == 0){ + if (activesId.size() == 0) { setListPreferenceData(manualLocationList, stringnames, null); - } - else { + } else { setListPreferenceData(manualLocationList, stringnames, activesId.get(0)); } @@ -175,11 +172,11 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere removeManualStatus = (RightButtonPreference) findPreference("remove_manual_status"); manualStatus = findPreference("key_manual_status"); statusList = (ListPreference) findPreference("key_status_value"); - statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class); - locationService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class); + statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class); + locationService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class); disposable = new CompositeDisposable(); statusesArray = new String[0]; - predefinedLocationsList = new ArrayList(); + predefinedLocationsList = new ArrayList(); getStatuses(disposable); getLocations(disposable); locationLevelMapping = new HashMap(); @@ -197,7 +194,6 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext())); - /** Main sharing switch**/ locationSharing.setOnPreferenceChangeListener((buttonView, newValue) -> { PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) newValue); @@ -209,19 +205,19 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere locationMode.setOnPreferenceChangeListener((preference, newValue) -> { ((MapActivity) getActivity()).stopBackgroundLocalizationTask(); ((MapActivity) getActivity()).startBackgroundLocalizationTask(); - PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue))); + PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue))); if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) { if (!predefinedCoordsList.isEmpty()) { - preferenceCategory.addPreference(manualLocationList); - preferenceCategory.addPreference(removeManualLocation); + preferenceCategory.addPreference(manualLocationList); + preferenceCategory.addPreference(removeManualLocation); } preferenceCategory.addPreference(manualLocationButton); } else { - locationSharing.setEnabled(true); + locationSharing.setEnabled(true); preferenceCategory.removePreference(manualLocationList); preferenceCategory.removePreference(manualLocationButton); - preferenceCategory.removePreference(removeManualLocation); + preferenceCategory.removePreference(removeManualLocation); } return true; }); @@ -251,8 +247,6 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere }); - - /** Button 'choose from map' button listener **/ manualLocationButton.setOnPreferenceChangeListener((preference, o) -> { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); @@ -270,17 +264,16 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere lp.setSummary(entries[Integer.parseInt((String) newValue)]); return true; }); - statusList.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { + statusList.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { - if(statusesArray.length == 0) - { - builder.setTitle("nie ma wody na pustyni"); - } - return true; - } - }); + if (statusesArray.length == 0) { + builder.setTitle("nie ma wody na pustyni"); + } + return true; + } + }); /** Custom status edittext change listener **/ manualStatus.setOnPreferenceChangeListener((preference, newValue) -> { @@ -291,39 +284,40 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere return true; }); - removeManualStatus.setOnPreferenceChangeListener((preference, newValue) -> { - showRemoveDialog(statusList.getEntries(),"status"); - return true; - }); + removeManualStatus.setOnPreferenceChangeListener((preference, newValue) -> { + showRemoveDialog(statusList.getEntries(), "status"); + return true; + }); - removeManualLocation.setOnPreferenceChangeListener(((preference, newValue) -> { - showRemoveDialog(manualLocationList.getEntries(),"location"); - 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]; + + 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); + 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.setMultiChoiceItems(entries, checked, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { - } - }); + } + }); builder.create().show(); } @@ -335,34 +329,34 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere return view; } - protected void removeEntries(String service, ArrayList toBeDeleted){ + 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); + 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) { + } + for (String uuid : uuidsToBeDeleted) { // predefinedCoordsList.removeIf(x -> x.getPredefinedCoordinateId().equals(uuid)); - predefinedCoordsList.removeAll(Stream.of(predefinedCoordsList).filter(x -> x.getPredefinedCoordinateId().equals(uuid)).toList()); - disposable.add(locationService.deleteUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), uuid) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::handleDeleteLocations, this::handleError)); - } - } + predefinedCoordsList.removeAll(Stream.of(predefinedCoordsList).filter(x -> x.getPredefinedCoordinateId().equals(uuid)).toList()); + 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) { @@ -390,13 +384,13 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere ; private void handleResponse(List resp) { - if(resp.size() == 1){ - enableStatusPreferences(); - if(PrefUtils.isStatusEnabled(getApplicationContext()) == false){ - PrefUtils.enableStatus(getApplicationContext()); - statusSwitch.setChecked(true); - } - } + if (resp.size() == 1) { + enableStatusPreferences(); + if (PrefUtils.isStatusEnabled(getApplicationContext()) == false) { + PrefUtils.enableStatus(getApplicationContext()); + statusSwitch.setChecked(true); + } + } String[] statusesArray = resp.toArray(new String[resp.size()]); setListPreferenceData(statusList, statusesArray, resp.size() - 1); statusList.setValueIndex(resp.size() - 1); @@ -415,79 +409,84 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere "Network error " + error.getMessage(), Toast.LENGTH_SHORT).show(); } } - private void handleDeleteStatuses(List resp){ - if(resp.isEmpty()){ - disableStatusPreferences(); - }else{ - String[] statusesArray = resp.toArray(new String[resp.size()]); - setListPreferenceData(statusList, statusesArray, null); - String currentEntry = PrefUtils.getUserStatus(getApplicationContext()); - if(resp.contains(currentEntry)){ - statusList.setValueIndex(resp.indexOf(currentEntry)); - }else{ - statusList.setValueIndex(0); - statusList.setSummary(resp.get(0)); - } - } - } - private void handleDeleteLocations(List resp){ - getLocations(disposable); - String currentEntry = PrefUtils.getCurrentManualLocation(getApplicationContext()); - if(resp.isEmpty()){ - disableManualLocationPreferences(); - }else{ - if(!Stream.of(resp).filter(x -> x.getName().equals(currentEntry)).toList().isEmpty()) - { - for (PredefinedCoordViewModel location: resp) { - if(location.getName().equals(currentEntry)){ - manualLocationList.setValueIndex(resp.indexOf(location)); - break; - } + private void handleDeleteStatuses(List resp) { + if (resp.isEmpty()) { + disableStatusPreferences(); + } else { + String[] statusesArray = resp.toArray(new String[resp.size()]); + setListPreferenceData(statusList, statusesArray, null); + String currentEntry = PrefUtils.getUserStatus(getApplicationContext()); + if (resp.contains(currentEntry)) { + statusList.setValueIndex(resp.indexOf(currentEntry)); + } else { + statusList.setValueIndex(0); + statusList.setSummary(resp.get(0)); } - }else{ - manualLocationList.setValueIndex(0); - manualLocationList.setSummary(resp.get(0).getName()); - //todo czy na pewno w shared pref sa dobre wartosci - } + } - } - } - private void disableStatusPreferences(){ - removeManualStatus.setEnabled(false); - statusList.setEnabled(false); - statusSwitch.setEnabled(false); - statusList.setSummary(""); - PrefUtils.disableStatus(getApplicationContext()); + } - } - private void enableStatusPreferences(){ - removeManualStatus.setEnabled(true); - statusList.setEnabled(true); - statusSwitch.setEnabled(true); - statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext())); - } - private void disableManualLocationPreferences(){ - removeManualLocation.setEnabled(false); - manualLocationList.setEnabled(false); - manualLocationList.setSummary(""); - locationSharing.setChecked(false); - locationSharing.setEnabled(false); - PrefUtils.disableSharing(getApplicationContext()); - ((MapActivity) getActivity()).handleBackgroundTaskLifeCycle(); - - } - private void enableManualLocationPreferences(){ - removeManualLocation.setEnabled(true); - manualLocationList.setEnabled(true); - - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - locationSharing.setChecked(PrefUtils.isEnableSharingLocalization(getApplicationContext())); + private void handleDeleteLocations(List resp) { + getLocations(disposable); + String currentEntry = PrefUtils.getCurrentManualLocation(getApplicationContext()); + if (resp.isEmpty()) { + disableManualLocationPreferences(); + } else { + if (!Stream.of(resp).filter(x -> x.getName().equals(currentEntry)).toList().isEmpty()) { + for (PredefinedCoordViewModel location : resp) { + if (location.getName().equals(currentEntry)) { + manualLocationList.setValueIndex(resp.indexOf(location)); + break; + } + } + } else { + manualLocationList.setValueIndex(0); + manualLocationList.setSummary(resp.get(0).getName()); + //todo czy na pewno w shared pref sa dobre wartosci + } } + } + + private void disableStatusPreferences() { + removeManualStatus.setEnabled(false); + statusList.setEnabled(false); + statusSwitch.setEnabled(false); + statusList.setSummary(""); + PrefUtils.disableStatus(getApplicationContext()); + + } + + private void enableStatusPreferences() { + removeManualStatus.setEnabled(true); + statusList.setEnabled(true); + statusSwitch.setEnabled(true); + statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext())); + } + + private void disableManualLocationPreferences() { + removeManualLocation.setEnabled(false); + manualLocationList.setEnabled(false); + manualLocationList.setSummary(""); + locationSharing.setChecked(false); + locationSharing.setEnabled(false); + PrefUtils.disableSharing(getApplicationContext()); + ((MapActivity) getActivity()).handleBackgroundTaskLifeCycle(); + + } + + private void enableManualLocationPreferences() { + removeManualLocation.setEnabled(true); + manualLocationList.setEnabled(true); + + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + locationSharing.setChecked(PrefUtils.isEnableSharingLocalization(getApplicationContext())); + + } @Override public void onResume() { @@ -507,4 +506,5 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere super.onDestroy(); disposable.dispose(); } + } 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 efcb3c9..dda6c33 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 @@ -1,6 +1,7 @@ package com.uam.wmi.findmytutor.activity; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; @@ -11,6 +12,7 @@ import android.widget.ScrollView; import android.widget.Toast; +import com.uam.wmi.findmytutor.utils.LocaleHelper; import com.uam.wmi.findmytutor.utils.PrefUtils; import java.util.Locale; @@ -19,6 +21,11 @@ public class StartupActivity extends AppCompatActivity { private static final int AUTHENTICATION_REQUEST_CODE = 666; String currentLang; + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java index 5e9adac..73034da 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java @@ -1,10 +1,9 @@ package com.uam.wmi.findmytutor.activity; +import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.design.widget.TextInputEditText; -import android.support.design.widget.TextInputLayout; -import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -29,12 +28,11 @@ import com.uam.wmi.findmytutor.model.User; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.TutorTabApi; import com.uam.wmi.findmytutor.service.UserService; -import com.uam.wmi.findmytutor.utils.InfoHelperUtils; +import com.uam.wmi.findmytutor.utils.LocaleHelper; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,12 +40,10 @@ import java.util.regex.Pattern; import butterknife.ButterKnife; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.observers.DisposableCompletableObserver; import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; import retrofit2.Response; - import static java.lang.String.valueOf; public class TutorTab extends AppCompatActivity { @@ -69,6 +65,9 @@ public class TutorTab extends AppCompatActivity { private DutyHoursAdapter dutyHoursAdapter; private RecyclerView.LayoutManager dutyHoursLayoutManager; private TutorTabViewModel newTab; + + + public boolean isEmailValid(String email) { String regExpn = @@ -94,17 +93,18 @@ public class TutorTab extends AppCompatActivity { super.onCreate(savedInstanceState); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); setContentView(R.layout.content_tutor_tab); - Toolbar toolbar = findViewById(R.id.toolbar); - toolbar.setTitle(getString(R.string.profile_activity_title)); - setSupportActionBar(toolbar); ButterKnife.bind(this); + Toolbar toolbar = findViewById(R.id.toolbar); + toolbar.setTitle(R.string.profile_activity_title); + setSupportActionBar(toolbar); + userName = findViewById(R.id.userName); - userNote = (TextInputEditText) findViewById(R.id.userNote); + userNote = findViewById(R.id.userNote); userRoom = findViewById(R.id.userRoom); userEmail = findViewById(R.id.userEmail); department = findViewById(R.id.userDepartment); - saveButon = findViewById(R.id.saveButon); + saveButon = findViewById(R.id.saveButton); scrapButton = findViewById(R.id.scrapTutorTab); addDutyButton = findViewById(R.id.addDuty); dutyHoursRecycller = findViewById(R.id.dutyHourView); @@ -304,4 +304,10 @@ public class TutorTab extends AppCompatActivity { Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + + } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java index f471947..6c43323 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/WhiteList.java @@ -1,8 +1,11 @@ package com.uam.wmi.findmytutor.activity; import android.annotation.SuppressLint; +import android.content.Context; import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; +import android.support.annotation.RequiresApi; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; @@ -35,6 +38,7 @@ import com.uam.wmi.findmytutor.model.StudentIdModel; import com.uam.wmi.findmytutor.model.User; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.service.UserService; +import com.uam.wmi.findmytutor.utils.LocaleHelper; import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RecyclerTouchListener; @@ -68,6 +72,7 @@ public class WhiteList extends AppCompatActivity { Switch aSwitch; @BindView(R.id.add_to_white_list_fab) FloatingActionButton addToWhiteListFab; + private CompositeDisposable disposable = new CompositeDisposable(); private UserService userService; private boolean didFetched = false; @@ -77,12 +82,19 @@ public class WhiteList extends AppCompatActivity { private List whitelistedUsers = new ArrayList<>(); private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL")); + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleHelper.onAttach(base)); + } + + @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); setContentView(R.layout.activity_white_list); ButterKnife.bind(this); + tutorId = PrefUtils.getUserId(getApplicationContext()); userService = ApiClient.getClient(getApplicationContext()) .create(UserService.class); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java index eb9ef4b..e58935c 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java @@ -54,7 +54,7 @@ public class TutorsListAdapter extends RecyclerView.Adapter> getCoordinatesByUserId(@Path("userId") String userId); @GET("api/coordinates/userTop/{userId}") - Single getTopCoordinatesByUserId(@Path("userId") String userId); + Single getTopCoordinateByUserId(@Path("userId") String userId); @GET("api/coordinates/top") Single> getTopCoordinates(); @@ -42,4 +42,6 @@ public interface CoordinateService { @DELETE("api/coordinates/{id}") Completable deleteCoordinatesById(@Path("id") String id); + + } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleHelper.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleHelper.java new file mode 100644 index 0000000..1eba814 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleHelper.java @@ -0,0 +1,80 @@ +package com.uam.wmi.findmytutor.utils; + + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.preference.PreferenceManager; + +import java.util.Locale; + +public class LocaleHelper { + + private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"; + + public static Context onAttach(Context context) { + String lang = getPersistedData(context, Locale.getDefault().getLanguage()); + return setLocale(context, lang); + } + + public static Context onAttach(Context context, String defaultLanguage) { + String lang = getPersistedData(context, defaultLanguage); + return setLocale(context, lang); + } + + public static String getLanguage(Context context) { + return getPersistedData(context, Locale.getDefault().getLanguage()); + } + + public static Context setLocale(Context context, String language) { + persist(context, language); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + return updateResources(context, language); + } + + return updateResourcesLegacy(context, language); + } + + private static String getPersistedData(Context context, String defaultLanguage) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + return preferences.getString(SELECTED_LANGUAGE, defaultLanguage); + } + + private static void persist(Context context, String language) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences.Editor editor = preferences.edit(); + + editor.putString(SELECTED_LANGUAGE, language); + editor.apply(); + } + + @TargetApi(Build.VERSION_CODES.N) + private static Context updateResources(Context context, String language) { + Locale locale = new Locale(language); + Locale.setDefault(locale); + + Configuration configuration = context.getResources().getConfiguration(); + configuration.setLocale(locale); + + return context.createConfigurationContext(configuration); + } + + @SuppressWarnings("deprecation") + private static Context updateResourcesLegacy(Context context, String language) { + Locale locale = new Locale(language); + Locale.setDefault(locale); + + Resources resources = context.getResources(); + + Configuration configuration = resources.getConfiguration(); + configuration.locale = locale; + + resources.updateConfiguration(configuration, resources.getDisplayMetrics()); + + return context; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleUtils.java index 7046b83..c33b194 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/LocaleUtils.java @@ -1,10 +1,32 @@ package com.uam.wmi.findmytutor.utils; +import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; +import android.os.Build; import android.support.v4.os.ConfigurationCompat; +import java.util.Locale; + public class LocaleUtils { - public static String getCurrentLocale(){ - return String.valueOf(ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())); + public static String getCurrentLocale() { + return String.valueOf(ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration())); + } + + private static Context updateResources(Context context, String language) { + Locale locale = new Locale(language); + Locale.setDefault(locale); + + Resources res = context.getResources(); + Configuration config = new Configuration(res.getConfiguration()); + if (Build.VERSION.SDK_INT >= 22) { + config.setLocale(locale); + context = context.createConfigurationContext(config); + } else { + config.locale = locale; + res.updateConfiguration(config, res.getDisplayMetrics()); + } + return context; } } + diff --git a/app/src/main/res/layout/activity_tutor_tab.xml b/app/src/main/res/layout/activity_tutor_tab.xml index 73279a0..20190f2 100644 --- a/app/src/main/res/layout/activity_tutor_tab.xml +++ b/app/src/main/res/layout/activity_tutor_tab.xml @@ -5,30 +5,29 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fontFamily="@font/lato_regular" + android:id="@+id/activity_tutor_tab" tools:context=".activity.TutorTab"> - + android:layout_height="match_parent" + android:fitsSystemWindows="true" + app:contentScrim="?attr/colorPrimary" + app:layout_scrollFlags="scroll|exitUntilCollapsed" + app:expandedTitleGravity="top|right" + app:toolbarId="@+id/toolbar" + /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_white_list.xml b/app/src/main/res/layout/activity_white_list.xml index 9426c75..448de85 100644 --- a/app/src/main/res/layout/activity_white_list.xml +++ b/app/src/main/res/layout/activity_white_list.xml @@ -40,7 +40,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" - android:text="@string/be_visible_for_these_users " + android:text="@string/be_visible_for_these_users" android:textSize="15sp"/> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:id="@+id/activity_tutor_content" + tools:context=".activity.TutorTab"> + - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/content_tutor_tab_layout.xml b/app/src/main/res/layout/content_tutor_tab_layout.xml index 3c3d7ca..7493a98 100644 --- a/app/src/main/res/layout/content_tutor_tab_layout.xml +++ b/app/src/main/res/layout/content_tutor_tab_layout.xml @@ -1,14 +1,15 @@ + android:fontFamily="@font/lato_regular" + tools:showIn="@layout/content_tutor_tab"> -