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);