diff --git a/Habitica/res/values/values.xml b/Habitica/res/values/values.xml
index 39f341c24..031e924dd 100644
--- a/Habitica/res/values/values.xml
+++ b/Habitica/res/values/values.xml
@@ -63,13 +63,13 @@
- es
- fr
- iw
- - hr-rHR
+ - hr
- in
- it
- ja
- nl
- pl
- - pt-rPT
+ - pt
- pt-rBR
- ru
- zh
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
index ec1c5b9e5..e188d0763 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/APIHelper.java
@@ -1,13 +1,15 @@
package com.habitrpg.android.habitica;
+import android.app.Activity;
+import android.support.v7.app.AlertDialog;
+
+import com.amplitude.api.Amplitude;
+import com.crashlytics.android.Crashlytics;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
-
-import com.amplitude.api.Amplitude;
-import com.crashlytics.android.Crashlytics;
import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy;
import com.magicmicky.habitrpgwrapper.lib.api.ApiService;
import com.magicmicky.habitrpgwrapper.lib.api.Server;
@@ -17,8 +19,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.Customization;
import com.magicmicky.habitrpgwrapper.lib.models.FAQArticle;
import com.magicmicky.habitrpgwrapper.lib.models.Group;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest;
-import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult;
import com.magicmicky.habitrpgwrapper.lib.models.Purchases;
import com.magicmicky.habitrpgwrapper.lib.models.Skill;
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
@@ -67,14 +67,9 @@ import com.raizlabs.android.dbflow.structure.ModelAdapter;
import org.json.JSONException;
import org.json.JSONObject;
-import android.app.Activity;
-import android.os.Build;
-import android.support.v7.app.AlertDialog;
-
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.net.ConnectException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
@@ -82,11 +77,9 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLHandshakeException;
import okhttp3.Interceptor;
import okhttp3.MediaType;
@@ -95,8 +88,6 @@ import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
-import okio.Buffer;
-import retrofit2.Call;
import retrofit2.Converter;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.HttpException;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/LanguageHelper.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/LanguageHelper.java
new file mode 100644
index 000000000..890b75679
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/LanguageHelper.java
@@ -0,0 +1,120 @@
+package com.habitrpg.android.habitica.helpers;
+
+import java.util.Locale;
+
+/**
+ * Created by DanielKaparunakis on 9/2/16.
+ */
+public class LanguageHelper {
+
+ private Locale locale = null;
+ private String languageCode = null;
+ private boolean languageAvailable = false;
+
+ public LanguageHelper (String languagePreference) {
+ switch (languagePreference){
+ case "en":
+ locale = new Locale("en");
+ languageCode = "en";
+ languageAvailable = true;
+ break;
+ case "bg":
+ locale = new Locale("bg");
+ languageCode = "bg";
+ languageAvailable = true;
+ break;
+ case "de":
+ locale = new Locale("de");
+ languageCode = "de";
+ languageAvailable = true;
+ break;
+ case "en-rGB":
+ locale = new Locale("en", "GB");
+ languageCode = "en_GB";
+ languageAvailable = true;
+ break;
+ case "es":
+ locale = new Locale("es");
+ languageCode = "es";
+ languageAvailable = true;
+ break;
+ case "fr":
+ locale = new Locale("fr");
+ languageCode = "fr";
+ languageAvailable = true;
+ break;
+ case "iw":
+ locale = new Locale("iw");
+ languageCode = "he";
+ languageAvailable = true;
+ break;
+ case "hr":
+ locale = new Locale("hr", "HR");
+ languageCode = "hu";
+ languageAvailable = true;
+ break;
+ case "in":
+ locale = new Locale("in");
+ languageCode = "id";
+ languageAvailable = true;
+ break;
+ case "it":
+ locale = new Locale("it");
+ languageCode = "it";
+ languageAvailable = true;
+ break;
+ case "ja":
+ locale = new Locale("ja");
+ languageCode = "ja";
+ languageAvailable = true;
+ break;
+ case "nl":
+ locale = new Locale("nl");
+ languageCode = "nl";
+ languageAvailable = true;
+ break;
+ case "pl":
+ locale = new Locale("pl");
+ languageCode = "pl";
+ languageAvailable = true;
+ break;
+ case "pt":
+ locale = new Locale("pt","PT");
+ languageCode = "pt";
+ languageAvailable = true;
+ break;
+ case "pt-rBR":
+ locale = new Locale("pt","BR");
+ languageCode = "pt_BR";
+ languageAvailable = true;
+ break;
+ case "ru":
+ locale = new Locale("ru");
+ languageCode = "ru";
+ languageAvailable = true;
+ break;
+ case "zh":
+ locale = new Locale("zh");
+ languageCode = "zh";
+ languageAvailable = true;
+ break;
+ case "zh-rTW":
+ locale = new Locale("zh","TW");
+ languageCode = "zh_TW";
+ languageAvailable = true;
+ break;
+ }
+ }
+
+ public boolean isLanguageAvailable() {
+ return languageAvailable;
+ }
+
+ public String getLanguageCode() {
+ return languageCode;
+ }
+
+ public Locale getLocale() {
+ return locale;
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
index a36181a04..3b252d1d0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
@@ -1,25 +1,5 @@
package com.habitrpg.android.habitica.ui.activities;
-import com.amplitude.api.Amplitude;
-import com.facebook.AccessToken;
-import com.facebook.CallbackManager;
-import com.facebook.FacebookCallback;
-import com.facebook.FacebookException;
-import com.facebook.login.LoginResult;
-import com.facebook.login.widget.LoginButton;
-import com.habitrpg.android.habitica.APIHelper;
-import com.habitrpg.android.habitica.BuildConfig;
-import com.habitrpg.android.habitica.R;
-import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
-import com.habitrpg.android.habitica.components.AppComponent;
-import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
-import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
-import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
@@ -40,6 +20,26 @@ import android.widget.ProgressBar;
import android.widget.TableRow;
import android.widget.TextView;
+import com.amplitude.api.Amplitude;
+import com.facebook.AccessToken;
+import com.facebook.CallbackManager;
+import com.facebook.FacebookCallback;
+import com.facebook.FacebookException;
+import com.facebook.login.LoginResult;
+import com.facebook.login.widget.LoginButton;
+import com.habitrpg.android.habitica.APIHelper;
+import com.habitrpg.android.habitica.BuildConfig;
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
+import com.habitrpg.android.habitica.components.AppComponent;
+import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
+import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
import javax.inject.Inject;
import butterknife.BindView;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java
index 20f0dbffc..649aacefd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java
@@ -1,5 +1,13 @@
package com.habitrpg.android.habitica.ui.activities;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.Button;
+
import com.amplitude.api.Amplitude;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HostConfig;
@@ -20,15 +28,8 @@ import org.greenrobot.eventbus.Subscribe;
import org.json.JSONException;
import org.json.JSONObject;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.view.View;
-import android.widget.Button;
-
import java.util.List;
+import java.util.Locale;
import javax.inject.Inject;
@@ -149,6 +150,11 @@ public class SetupActivity extends BaseActivity implements View.OnClickListener,
@Override
public void onClick(View v) {
if (v == this.nextButton) {
+ String currentDeviceLanguage = Locale.getDefault().getLanguage();
+ apiHelper.apiService.registrationLanguage(currentDeviceLanguage)
+ .compose(apiHelper.configureApiCallObserver())
+ .subscribe(new MergeUserCallback(this, user), throwable -> {
+ });
if (this.pager.getCurrentItem() == 1) {
List newTasks = this.taskSetupFragment.createSampleTasks();
this.completedSetup = true;
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java
index d67f5c615..e60ad8a10 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java
@@ -6,17 +6,18 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
-import android.util.Log;
import com.habitrpg.android.habitica.APIHelper;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.NotificationPublisher;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.callbacks.MergeUserCallback;
+import com.habitrpg.android.habitica.helpers.LanguageHelper;
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
import com.habitrpg.android.habitica.prefs.TimePreference;
import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity;
@@ -204,98 +205,25 @@ public class PreferencesFragment extends BasePreferencesFragment implements
pushNotificationManager.removePushDeviceUsingStoredToken();
}
} else if (key.equals("language")) {
- Locale locale = null;
- String languageCode = null;
- Log.v("test",sharedPreferences.getString(key,"0"));
- switch (sharedPreferences.getString(key,"en")){
- case "en":
- locale = new Locale("en");
- languageCode = "en";
- break;
- case "bg":
- locale = new Locale("bg");
- languageCode = "bg";
- break;
- case "de":
- locale = new Locale("de");
- languageCode = "de";
- break;
- case "en-rGB":
- locale = new Locale("en", "GB");
- languageCode = "en_GB";
- break;
- case "es":
- locale = new Locale("es");
- languageCode = "es";
- break;
- case "fr":
- locale = new Locale("fr");
- languageCode = "fr";
- break;
- case "iw":
- locale = new Locale("iw");
- languageCode = "he";
- break;
- case "hr-rHR":
- locale = new Locale("hr", "HR");
- languageCode = "hu";
- break;
- case "in":
- locale = new Locale("in");
- languageCode = "id";
- break;
- case "it":
- locale = new Locale("it");
- languageCode = "it";
- break;
- case "ja":
- locale = new Locale("ja");
- languageCode = "ja";
- break;
- case "nl":
- locale = new Locale("nl");
- languageCode = "nl";
- break;
- case "pl":
- locale = new Locale("pl");
- languageCode = "pl";
- break;
- case "pt-rPT":
- locale = new Locale("pt","PT");
- languageCode = "pt";
- break;
- case "pt-rBR":
- locale = new Locale("pt","BR");
- languageCode = "pt_BR";
- break;
- case "ru":
- locale = new Locale("ru");
- languageCode = "ru";
- break;
- case "zh":
- locale = new Locale("zh");
- languageCode = "zh";
- break;
- case "zh-rTW":
- locale = new Locale("zh","TW");
- languageCode = "zh_TW";
- break;
+ LanguageHelper languageHelper = new LanguageHelper(sharedPreferences.getString(key,"en"));
+ Locale.setDefault(languageHelper.getLocale());
+ Configuration configuration = new Configuration();
+
+ if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN){
+ configuration.locale = languageHelper.getLocale();
+ } else {
+ configuration.setLocale(languageHelper.getLocale());
}
- Locale.setDefault(locale);
- Configuration configuration = new Configuration();
- configuration.locale = locale;
getActivity().getResources().updateConfiguration(configuration,
getActivity().getResources().getDisplayMetrics());
Map updateData = new HashMap<>();
- updateData.put("preferences.language", languageCode);
+ updateData.put("preferences.language", languageHelper.getLanguageCode());
apiHelper.apiService.updateUser(updateData)
.compose(apiHelper.configureApiCallObserver())
.subscribe(new MergeUserCallback(activity, user), throwable -> {
});
-
-
}
}
diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
index 7bc6c5031..0bcf7e42b 100644
--- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
+++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
@@ -28,10 +28,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
+import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
@@ -57,6 +57,9 @@ public interface ApiService {
@PUT("user/")
Observable updateUser(@Body Map updateDictionary);
+ @PUT("user/")
+ Observable registrationLanguage(@Header("Accept-Language") String registrationLanguage);
+
@GET("user/inventory/buy")
Observable> getInventoryBuyableGear();
@@ -128,7 +131,6 @@ public interface ApiService {
@DELETE("tags/{id}")
Observable deleteTag(@Path("id") String id);
-
@POST("user/auth/local/register")
Observable registerUser(@Body UserAuth auth);