Feature: Add logic to SetupActivity to set language at registration

This commit adds logic to the SetupActivity for a new user. The
purpose of this logic is for the device language to be sent
to the web app automatically during registration.
This commit is contained in:
Daniel Kaparunakis 2016-09-04 22:50:04 -05:00
parent 548fa9af6b
commit 22ccb1bcf7
7 changed files with 176 additions and 129 deletions

View file

@ -63,13 +63,13 @@
<item>es</item>
<item>fr</item>
<item>iw</item>
<item>hr-rHR</item>
<item>hr</item>
<item>in</item>
<item>it</item>
<item>ja</item>
<item>nl</item>
<item>pl</item>
<item>pt-rPT</item>
<item>pt</item>
<item>pt-rBR</item>
<item>ru</item>
<item>zh</item>

View file

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

View file

@ -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;
}
}

View file

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

View file

@ -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<Task> newTasks = this.taskSetupFragment.createSampleTasks();
this.completedSetup = true;

View file

@ -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<String, Object> 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 -> {
});
}
}

View file

@ -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<HabitRPGUser> updateUser(@Body Map<String, Object> updateDictionary);
@PUT("user/")
Observable<HabitRPGUser> registrationLanguage(@Header("Accept-Language") String registrationLanguage);
@GET("user/inventory/buy")
Observable<List<ItemData>> getInventoryBuyableGear();
@ -128,7 +131,6 @@ public interface ApiService {
@DELETE("tags/{id}")
Observable<Void> deleteTag(@Path("id") String id);
@POST("user/auth/local/register")
Observable<UserAuthResponse> registerUser(@Body UserAuth auth);