Add working language switcher

This commit is contained in:
Mieszko Wrzeszczyński 2018-11-03 15:02:44 +01:00
parent d2b5fbf35d
commit afbf736e63
12 changed files with 218 additions and 134 deletions

3
.gitignore vendored
View File

@ -1,6 +1,5 @@
# Built application files
*.apk
*.ap_
# Files for the ART/Dalvik VM
*.dex

View File

@ -5,6 +5,7 @@ import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
@ -18,6 +19,7 @@ import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -30,6 +32,7 @@ import com.uam.wmi.findmytutor.utils.ActiveFragment;
import com.uam.wmi.findmytutor.utils.PrefUtils;
public abstract class BaseActivity
extends AppCompatActivity
implements BottomNavigationView.OnNavigationItemSelectedListener {
@ -54,25 +57,24 @@ public abstract class BaseActivity
drawerNavigationView = findViewById(R.id.nav_view);
sideDrawer = findViewById(R.id.activity_container);
drawerNavigationView.setNavigationItemSelectedListener(
item -> {
String itemName = (String) item.getTitle();
Intent launchIntent;
if (itemName.equals("Whitelist")) {
if (itemName.equals(getResources().getString(R.string.navigation_item_whitelist))) {
/* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
startActivity(launchIntent);*/
} else if (itemName.equals("Blacklist")) {
} else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
/* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
startActivity(launchIntent);*/
} else if (itemName.equals("Profile")) {
} else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) {
/* launchIntent = new Intent(getApplicationContext(), ProfileActivity.class);
startActivity(launchIntent);*/
} else if (itemName.equals("Settings")) {
} else if (itemName.equals(getResources().getString(R.string.navigation_item_settings))) {
launchIntent = new Intent(getApplicationContext(), SettingsActivity.class);
startActivity(launchIntent);
} else if (itemName.equals("Log out")) {
} else if (itemName.equals(getResources().getString(R.string.navigation_item_logout))) {
stopBackgroundLocalizationTask();
PrefUtils.cleanUserLocalStorage(getApplicationContext());

View File

@ -51,7 +51,6 @@ public class LoginActivity extends AppCompatActivity {
private LdapService ldapService;
private UserService userService;
private CompositeDisposable disposable = new CompositeDisposable();
private Boolean isTutor = false;
@Override
protected void onCreate(Bundle savedInstanceState) {

View File

@ -6,10 +6,14 @@ import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.Toast;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.annotations.Marker;
@ -37,13 +41,13 @@ import io.reactivex.observers.DisposableSingleObserver;
import io.reactivex.schedulers.Schedulers;
import java.util.Locale;
public class MapActivity extends BaseActivity
implements OnMapReadyCallback {
String tag = "LifeCycleEvents";
private MapView mapView;
private MapboxMap mapboxMap;
private int mInterval = 10000;
@ -56,7 +60,8 @@ public class MapActivity extends BaseActivity
private Runnable mStatusChecker;
Locale myLocale;
String currentLanguage = "pl", currentLang;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -90,8 +95,14 @@ public class MapActivity extends BaseActivity
//start background task
startBackgroundLocalizationTask();
currentLanguage = getIntent().getStringExtra(currentLang);
}
@Override
public void onMapReady(MapboxMap map) {
mapboxMap = map;
@ -187,7 +198,21 @@ public class MapActivity extends BaseActivity
}
public void setLocale(String localeName) {
if (!localeName.equals(currentLanguage)) {
myLocale = new Locale(localeName);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MapActivity.class);
refresh.putExtra(currentLang, localeName);
startActivity(refresh);
} else {
Toast.makeText(this, "Language already selected!", Toast.LENGTH_SHORT).show();
}
}
@ -236,37 +261,6 @@ public class MapActivity extends BaseActivity
mapView.onSaveInstanceState(outState);
}
/*@Override
public void startLocalizationService() {
if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
if ((ActivityCompat.shouldShowRequestPermissionRationale(MapActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION))) {
} else {
ActivityCompat.requestPermissions(MapActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION
},
REQUEST_PERMISSIONS);
}
} else {
if (isTutor) {
Intent intent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
startService(intent);
}
} else {
Toast.makeText(getApplicationContext(), "Please enable the gps", Toast.LENGTH_SHORT).show();
}
}
}*/
@Override
protected int getContentViewId() {
return R.layout.activity_map;

View File

@ -1,9 +1,13 @@
package com.uam.wmi.findmytutor.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.preference.EditTextPreference;
@ -11,31 +15,82 @@ import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;
import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.utils.PrefUtils;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
public class SettingsActivity extends AppCompatPreferenceActivity {
private static final String TAG = SettingsActivity.class.getSimpleName();
Locale myLocale;
String currentLanguage = "pl", currentLang;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// load settings fragment
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
public void setLocale(String localeName) {
Locale myLocale = new Locale(localeName);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MapActivity.class);
refresh.putExtra(currentLang, localeName);
startActivity(refresh);
}
public static class MainPreferenceFragment extends PreferenceFragment {
@SuppressLint("ResourceType")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.pref_main);
Preference languagesList = findPreference(getResources().getString(R.string.key_language));
languagesList.setOnPreferenceChangeListener((preference, newValue) -> {
if (!newValue.toString().equals("0")){
((SettingsActivity)getActivity()).setLocale("pl");
PrefUtils.storeLocale(getActivity(),"pl");
}else{
((SettingsActivity)getActivity()).setLocale("en");
PrefUtils.storeLocale(getActivity(),"en");
}
return true;
});
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
@ -85,26 +140,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
return true;
}
};
/**
* Email client intent to send support mail
* Appends the necessary device information to email body
* useful when providing support
*/
public static 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);
context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client)));
}
}

View File

@ -2,20 +2,28 @@ package com.uam.wmi.findmytutor.activity;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.widget.Toast;
import com.uam.wmi.findmytutor.utils.PrefUtils;
import java.util.Locale;
public class StartupActivity extends AppCompatActivity {
private static final int AUTHENTICATION_REQUEST_CODE = 666;
String currentLang;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (PrefUtils.isLoggedIn(getApplicationContext())){
Intent startupIntent = new Intent(this, MapActivity.class);
startupIntent.putExtra(currentLang, PrefUtils.getLocale(getApplicationContext()));
startupIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(startupIntent);
finish();
@ -38,4 +46,8 @@ public class StartupActivity extends AppCompatActivity {
finish();
}
}

View File

@ -114,8 +114,15 @@ public class PrefUtils {
editor.apply();
}
public static String getUserName(Context context) {
return getSharedPreferences(context).getString("USER_NAME", null);
public static void storeLocale(Context context, String locale) {
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
editor.putString("LOCALE", locale);
editor.apply();
}
public static String getLocale(Context context) {
return getSharedPreferences(context).getString("LOCALE", null);
}
}

View File

@ -3,12 +3,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<PreferenceCategory android:title="@string/settings_category_general">
<SwitchPreference
android:defaultValue="true"
android:key="@string/key_notifications_enabled"
android:title="@string/title_notification" />
<ListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_language"
@ -19,6 +19,4 @@
android:title="@string/title_language" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -14,7 +14,6 @@
android:layout_marginBottom="@dimen/dimen_10"
android:fontFamily="sans-serif-medium"
android:lineSpacingExtra="8sp"
android:text="@string/lbl_new_note_title"
android:textColor="@color/colorAccent"
android:textSize="@dimen/lbl_new_note_title"
android:textStyle="normal" />

View File

@ -5,7 +5,7 @@
<item
android:id="@+id/nav_profile"
android:icon="@drawable/outline_person_white_24dp"
android:title="@string/nav_profile" />
android:title="@string/title_sharing" />
<item
android:id="@+id/nav_map"
android:icon="@drawable/outline_map_white_24dp"
@ -13,5 +13,5 @@
<item
android:id="@+id/nav_user_list"
android:icon="@drawable/mapbox_info_icon_default"
android:title="Active" />
android:title="@string/user_list_nav" />
</menu>

View File

@ -1,16 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_activity_login">Zaloguj</string>
<string name="prompt_password">Hasło (opcjonalne)</string>
<string name="action_sign_in_short">Zaloguj</string>
<string name="error_incorrect_password">Nieprawidłowe hasło</string>
<string name="error_invalid_password">Hasło jest zbyt krótkie</string>
<string name="error_invalid_email">Nieprawidłowy mail</string>
<string name="error_field_required">To pole jest wymagane</string>
<string name="prompt_password">Hasło</string>
<!--Ustawienia-->
<string name="title_sharing">Udostępnianie</string>
<string name="settings_category_location">Udostępnianie lokalizacji</string>
<string name="title_location_level">Poziom udostępniania</string>
@ -19,11 +16,6 @@
<string name="location_level_precise">Dokładna</string>
<string name="settings_location_level">Sczegółowość udostępniania</string>
<string name="key_location_level">key_location_level</string>
<string name="title_description">Status</string>
<string name="description_notdisturb">Nie przeszkadzać</string>
<string name="description_awaiting">Czekam na studentów</string>
<string name="description_onholidays">Na wakacjach</string>
<string name="settings_description">Opis</string>
<string name="key_description">key_description</string>
@ -36,7 +28,8 @@
<string name="settings_language">Wybierz język</string>
<string name="pref_header_about">O aplikacji</string>
<string name="summary_about">We are just like you :)\nA group of people trying to shape our everyday life into something useful. We hope to bring you the best product and quality of service.\nThank you for using our app !</string>
<string name="summary_about">
Jesteśmy grupą studentów, która chce pomoć w rozwoju naszego wydziału.\nDziękujemy za używanie naszej aplikacji.\nZespół FMT.!</string>
<string name="app_version">0.1.0</string>
<string name="summary_support">Masz jakieś pytania? Uwagi? Chętnie odpiszemy!</string>
<string name="title_send_feedback">Skontaktuj się z nami</string>
@ -46,4 +39,86 @@
<string name="url_terms">http://findmytutor.projektstudencki.pl/terms-of-service/</string>
<string name="title_version">Wersja</string>
<string name="choose_email_client">Wybierz klienta poczty</string>
<string name="app_name">FindMyTutor</string>
<string name="title_activity_startup">Find My Tutor</string>
<!-- Menu -->
<string name="nav_map">Mapa </string>
<string name="nav_notif">Notyfikacje</string>
<string name="nav_profile">Profil użytkownika</string>
<!--Side Menu-->
<string name="navigation_drawer_open">Otwórz menu</string>
<string name="navigation_drawer_close">Zamknij menu</string>
<string name="navigation_item_blacklist">Czarna lista</string>
<string name="navigation_item_whitelist">Biała lista</string>
<string name="navigation_item_settings">Ustawienia</string>
<string name="navigation_item_profile">Profil uzytkownika</string>
<string name="navigation_item_logout">Wyloguj</string>
<!-- Tutors list -->
<string name="action_settings">Ustawienia</string>
<string name="activity_title_home">Mapa</string>
<!-- Strings related to login -->
<string name="action_sign_in">Zaloguj!</string>
<string name="action_sign_out">Wyloguj!</string>
<string name="title_activity_main">MainActivity</string>
<string name="access_token" translatable="false">pk.eyJ1IjoiZG9tYWdhbHNreSIsImEiOiJjamd4am4zazYwNXo1MzBxeDZtYjA4d2s4In0.KzNdhc9V_-SYe14AZ-q3Ew</string>
<string name="action_black_list">Czarna lista</string>
<string name="action_white_list">Biała lista</string>
<string name="title_activity_settings">Ustawienia</string>
<!-- Strings related to SharingActivity -->
<string name="title_activity_sharing">Udostępnianie</string>
<!-- Strings related to settings -->
<string name="status_list_title">Wybierz status</string>
<string name="status_switch_title">Status</string>
<string name="description_busy">Zajęty</string>
<string name="description_available">Dostępny</string>
<string name="description_consultation">Konsultacje</string>
<string name="title_manual_status">Dodaj własny status</string>
<string name="manual_location">Ręczna lokalizacja</string>
<string name="title_list_manual_location">Wybierz ręczną lokalizacje</string>
<string name="title_manual_location">Dodaj ręczną lokalizacje</string>
<string name="assembly_a">Skrzydło A</string>
<string name="assembly_c">Skrzydło C</string>
<string name="passage_d">ŁącznikD</string>
<string name="key_language">key_language</string>
<string name="title_activity_settings2">Ustawienia</string>
<!-- Example General settings -->
<string name="pref_header_general">Ogólne ustawienia</string>
<!-- Example settings for Data & Sync -->
<string name="pref_header_data_sync">Data &amp; sync</string>
<string-array name="multi_select_list_preference_default_value" />
<!-- Example settings for Notifications -->
<string name="settings">Ustawienia</string>
<string name="ok">OK</string>
<string name="cancel">Zamknij</string>
<string name="userRoom"><b>Pokój</b></string>
<string name="userEmail"><b>Email</b></string>
<string name="userNote"><b>Notatka</b></string>
<string name="userDutyHoursHeader"><b>Dyżury</b></string>
<string name="dutyHours"> <b>Dyżury</b></string>
<string name="error_invalid_login_name">Niepoprawny format loginu.</string>
<string name="userDepartment">Zakład</string>
<string name="loading">Loading …</string>
<string name="logo_find_my_tutor">Logo find my tutor</string>
<string name="prompt_login">Login (Ldap)</string>
<string name="action_log_in">Zaloguj!</string>
<string name="user_list_nav">Lista użytkowników</string>
</resources>

View File

@ -1,12 +1,11 @@
<resources>
<string name="app_name" translatable="false">FindMyTutor</string>
<string name="title_activity_login">Sign in</string>
<string name="app_name" translatable="true">FindMyTutor</string>
<string name="title_activity_login">Log in</string>
<string name="title_activity_startup" translatable="false">Find My Tutor</string>
<!-- Menu -->
<string name="nav_map">Map</string>
<string name="nav_notif">Notification</string>
<string name="nav_profile">Profile</string>
<!--Side Menu-->
<string name="navigation_drawer_open">Drawer Open</string>
@ -19,13 +18,6 @@
<!-- Tutors list -->
<string name="action_settings">Settings</string>
<string name="activity_title_home">Notes</string>
<string name="msg_no_notes">No notes found!</string>
<string name="lbl_new_note_title">New Note</string>
<string name="hint_enter_note">Enter your note!</string>
<!-- Strings related to login -->
<string name="prompt_email" translatable="false">Email</string>
<string name="prompt_password">Password</string>
<string name="action_sign_in">Sign in or register</string>
<string name="action_sign_out">Sign out</string>
@ -34,11 +26,7 @@
<string name="error_invalid_password">This password is too short</string>
<string name="error_incorrect_password">This password is incorrect</string>
<string name="error_field_required">This field is required</string>
<string name="permission_rationale">"Contacts permissions are needed for providing email
completions."
</string>
<string name="permission_denied_explanation">Permission was denied, but is needed for core
functionality.</string>
<string name="title_activity_main" translatable="false">MainActivity</string>
<string name="access_token" translatable="false">pk.eyJ1IjoiZG9tYWdhbHNreSIsImEiOiJjamd4am4zazYwNXo1MzBxeDZtYjA4d2s4In0.KzNdhc9V_-SYe14AZ-q3Ew</string>
@ -103,7 +91,7 @@ functionality.</string>
<string name="app_version">0.1.0</string>
<string name="summary_support">Got any queries? We are happy to help!</string>
<string name="title_send_feedback">Send Feedback</string>
<string name="key_send_feedback">key_send_feedback</string>
<string name="key_send_feedback" translatable="false">key_send_feedback</string>
<string name="privacy_policy">Privacy Policy</string>
<string name="url_privacy">http://findmytutor.projektstudencki.pl/privacy-policy/</string>
<string name="title_terms">Terms &amp; Conditions</string>
@ -116,16 +104,6 @@ functionality.</string>
<!-- Example General settings -->
<string name="pref_header_general">General</string>
<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact
based on your message history
</string>
<string name="pref_title_display_name">Display name</string>
<string name="pref_default_display_name">John Smith</string>
<string name="pref_title_add_friends_to_messages">Add friends to messages</string>
<string-array name="pref_example_list_titles">
<item>Always</item>
<item>When possible</item>
@ -140,7 +118,6 @@ functionality.</string>
<!-- Example settings for Data & Sync -->
<string name="pref_header_data_sync">Data &amp; sync</string>
<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
@ -172,27 +149,13 @@ functionality.</string>
<string-array name="multi_select_list_preference_default_value" />
<string name="pref_title_system_sync_settings">System sync settings</string>
<!-- Example settings for Notifications -->
<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>
<string name="settings">Settings</string>
<string name="ok">OK</string>
<string name="request_updates">Request updates</string>
<string name="remove_updates">Remove updates</string>
<string name="unknown_location">Unknown location</string>
<string name="batched_location_updates">Batched location updates</string>
<plurals name="num_locations_reported">
<item quantity="zero">No location reported</item>
@ -200,20 +163,19 @@ functionality.</string>
<item quantity="other">%d locations reported</item>
</plurals>
<string name="title_activity_main2">Main2Activity</string>
<string name="there_is_no_users_in_system">There is no users in system</string>
<string name="cancel">Close</string>
<string name="userRoom"><b>Pokój</b></string>
<string name="userRoom"><b>Room</b></string>
<string name="userEmail"><b>Email</b></string>
<string name="userNote"><b>Notatka</b></string>
<string name="userDutyHoursHeader"><b>Dyżury</b></string>
<string name="dutyHours"> <b>Dyżury</b></string>
<string name="userNote"><b>Note</b></string>
<string name="userDutyHoursHeader"><b>Duty Hours</b></string>
<string name="dutyHours"> <b>Duty Hours</b></string>
<string name="error_invalid_login_name">Invalid format login. Use s11111 format</string>
<string name="userDepartment">Zakład</string>
<string name="loading">Loading ...</string>
<string name="userDepartment">Department</string>
<string name="loading">Loading </string>
<string name="logo_find_my_tutor">Logo find my tutor</string>
<string name="prompt_login">Login (sXXXXXX)</string>
<string name="action_log_in">Log in </string>
<string name="user_list_nav">Users list</string>
</resources>