Validate timezone and locale against what server supports

closes #654, AND-118
This commit is contained in:
Grishka 2023-11-21 22:31:26 +03:00
parent a05c917b2c
commit e1850e5282
2 changed files with 272 additions and 6 deletions

View File

@ -1,18 +1,15 @@
package org.joinmastodon.android.fragments.onboarding;
import android.app.ProgressDialog;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.os.LocaleList;
import android.text.Editable;
import android.text.Html;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -46,10 +43,13 @@ import org.jsoup.select.NodeVisitor;
import org.parceler.Parcels;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import androidx.annotation.Nullable;
@ -58,7 +58,6 @@ import me.grishka.appkit.api.APIRequest;
import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.fragments.ToolbarFragment;
import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.FragmentRootLinearLayout;
public class SignupFragment extends ToolbarFragment{
@ -79,6 +78,7 @@ public class SignupFragment extends ToolbarFragment{
private ProgressDialog progressDialog;
private HashSet<EditText> errorFields=new HashSet<>();
private ElevationOnScrollListener onScrollListener;
private Set<String> serverSupportedTimezones, serverSupportedLocales;
@Override
public void onCreate(Bundle savedInstanceState){
@ -87,6 +87,8 @@ public class SignupFragment extends ToolbarFragment{
instance=Parcels.unwrap(getArguments().getParcelable("instance"));
createAppAndGetToken();
setTitle(R.string.signup_title);
serverSupportedTimezones=Arrays.stream(getResources().getStringArray(R.array.server_supported_timezones)).collect(Collectors.toSet());
serverSupportedLocales=Arrays.stream(getResources().getStringArray(R.array.server_supported_locales)).collect(Collectors.toSet());
}
@Nullable
@ -190,7 +192,34 @@ public class SignupFragment extends ToolbarFragment{
edit.setError(null);
}
errorFields.clear();
new RegisterAccount(username, email, password.getText().toString(), getResources().getConfiguration().locale.getLanguage(), reason.getText().toString(), ZoneId.systemDefault().getId())
String locale=null;
String timezone=ZoneId.systemDefault().getId();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
LocaleList localeList=getResources().getConfiguration().getLocales();
for(int i=0;i<localeList.size();i++){
Locale l=localeList.get(i);
if(serverSupportedLocales.contains(l.toLanguageTag())){
locale=l.toLanguageTag();
break;
}else if(serverSupportedLocales.contains(l.getLanguage())){
locale=l.getLanguage();
break;
}
}
}else{
Locale l=getResources().getConfiguration().locale;
if(serverSupportedLocales.contains(l.toLanguageTag())){
locale=l.toLanguageTag();
}else if(serverSupportedLocales.contains(l.getLanguage())){
locale=l.getLanguage();
}
}
if(!serverSupportedTimezones.contains(timezone))
timezone=null;
new RegisterAccount(username, email, password.getText().toString(), locale, reason.getText().toString(), timezone)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Token result){

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="server_supported_timezones" translatable="false">
<item>Africa/Algiers</item>
<item>Africa/Cairo</item>
<item>Africa/Casablanca</item>
<item>Africa/Harare</item>
<item>Africa/Johannesburg</item>
<item>Africa/Monrovia</item>
<item>Africa/Nairobi</item>
<item>America/Argentina/Buenos_Aires</item>
<item>America/Bogota</item>
<item>America/Caracas</item>
<item>America/Chicago</item>
<item>America/Chihuahua</item>
<item>America/Denver</item>
<item>America/Godthab</item>
<item>America/Guatemala</item>
<item>America/Guyana</item>
<item>America/Halifax</item>
<item>America/Indiana/Indianapolis</item>
<item>America/Juneau</item>
<item>America/La_Paz</item>
<item>America/Lima</item>
<item>America/Los_Angeles</item>
<item>America/Mazatlan</item>
<item>America/Mexico_City</item>
<item>America/Monterrey</item>
<item>America/Montevideo</item>
<item>America/New_York</item>
<item>America/Phoenix</item>
<item>America/Puerto_Rico</item>
<item>America/Regina</item>
<item>America/Santiago</item>
<item>America/Sao_Paulo</item>
<item>America/St_Johns</item>
<item>America/Tijuana</item>
<item>Asia/Almaty</item>
<item>Asia/Baghdad</item>
<item>Asia/Baku</item>
<item>Asia/Bangkok</item>
<item>Asia/Chongqing</item>
<item>Asia/Colombo</item>
<item>Asia/Dhaka</item>
<item>Asia/Hong_Kong</item>
<item>Asia/Irkutsk</item>
<item>Asia/Jakarta</item>
<item>Asia/Jerusalem</item>
<item>Asia/Kabul</item>
<item>Asia/Kamchatka</item>
<item>Asia/Karachi</item>
<item>Asia/Kathmandu</item>
<item>Asia/Kolkata</item>
<item>Asia/Krasnoyarsk</item>
<item>Asia/Kuala_Lumpur</item>
<item>Asia/Kuwait</item>
<item>Asia/Magadan</item>
<item>Asia/Muscat</item>
<item>Asia/Novosibirsk</item>
<item>Asia/Rangoon</item>
<item>Asia/Riyadh</item>
<item>Asia/Seoul</item>
<item>Asia/Shanghai</item>
<item>Asia/Singapore</item>
<item>Asia/Srednekolymsk</item>
<item>Asia/Taipei</item>
<item>Asia/Tashkent</item>
<item>Asia/Tbilisi</item>
<item>Asia/Tehran</item>
<item>Asia/Tokyo</item>
<item>Asia/Ulaanbaatar</item>
<item>Asia/Urumqi</item>
<item>Asia/Vladivostok</item>
<item>Asia/Yakutsk</item>
<item>Asia/Yekaterinburg</item>
<item>Asia/Yerevan</item>
<item>Atlantic/Azores</item>
<item>Atlantic/Cape_Verde</item>
<item>Atlantic/South_Georgia</item>
<item>Australia/Adelaide</item>
<item>Australia/Brisbane</item>
<item>Australia/Canberra</item>
<item>Australia/Darwin</item>
<item>Australia/Hobart</item>
<item>Australia/Melbourne</item>
<item>Australia/Perth</item>
<item>Australia/Sydney</item>
<item>Etc/GMT+12</item>
<item>Etc/UTC</item>
<item>Europe/Amsterdam</item>
<item>Europe/Athens</item>
<item>Europe/Belgrade</item>
<item>Europe/Berlin</item>
<item>Europe/Bratislava</item>
<item>Europe/Brussels</item>
<item>Europe/Bucharest</item>
<item>Europe/Budapest</item>
<item>Europe/Copenhagen</item>
<item>Europe/Dublin</item>
<item>Europe/Helsinki</item>
<item>Europe/Istanbul</item>
<item>Europe/Kaliningrad</item>
<item>Europe/Kiev</item>
<item>Europe/Lisbon</item>
<item>Europe/Ljubljana</item>
<item>Europe/London</item>
<item>Europe/Madrid</item>
<item>Europe/Minsk</item>
<item>Europe/Moscow</item>
<item>Europe/Paris</item>
<item>Europe/Prague</item>
<item>Europe/Riga</item>
<item>Europe/Rome</item>
<item>Europe/Samara</item>
<item>Europe/Sarajevo</item>
<item>Europe/Skopje</item>
<item>Europe/Sofia</item>
<item>Europe/Stockholm</item>
<item>Europe/Tallinn</item>
<item>Europe/Vienna</item>
<item>Europe/Vilnius</item>
<item>Europe/Volgograd</item>
<item>Europe/Warsaw</item>
<item>Europe/Zagreb</item>
<item>Europe/Zurich</item>
<item>Pacific/Apia</item>
<item>Pacific/Auckland</item>
<item>Pacific/Chatham</item>
<item>Pacific/Fakaofo</item>
<item>Pacific/Fiji</item>
<item>Pacific/Guadalcanal</item>
<item>Pacific/Guam</item>
<item>Pacific/Honolulu</item>
<item>Pacific/Majuro</item>
<item>Pacific/Midway</item>
<item>Pacific/Noumea</item>
<item>Pacific/Pago_Pago</item>
<item>Pacific/Port_Moresby</item>
<item>Pacific/Tongatapu</item>
</string-array>
<string-array name="server_supported_locales" translatable="false">
<item>af</item>
<item>an</item>
<item>ar</item>
<item>ast</item>
<item>be</item>
<item>bg</item>
<item>bn</item>
<item>br</item>
<item>bs</item>
<item>ca</item>
<item>ckb</item>
<item>co</item>
<item>cs</item>
<item>cy</item>
<item>da</item>
<item>de</item>
<item>el</item>
<item>en</item>
<item>en-GB</item>
<item>eo</item>
<item>es</item>
<item>es-AR</item>
<item>es-MX</item>
<item>et</item>
<item>eu</item>
<item>fa</item>
<item>fi</item>
<item>fo</item>
<item>fr</item>
<item>fr-QC</item>
<item>fy</item>
<item>ga</item>
<item>gd</item>
<item>gl</item>
<item>he</item>
<item>hi</item>
<item>hr</item>
<item>hu</item>
<item>hy</item>
<item>id</item>
<item>ig</item>
<item>io</item>
<item>is</item>
<item>it</item>
<item>ja</item>
<item>ka</item>
<item>kab</item>
<item>kk</item>
<item>kn</item>
<item>ko</item>
<item>ku</item>
<item>kw</item>
<item>la</item>
<item>lt</item>
<item>lv</item>
<item>mk</item>
<item>ml</item>
<item>mr</item>
<item>ms</item>
<item>my</item>
<item>nl</item>
<item>nn</item>
<item>no</item>
<item>oc</item>
<item>pa</item>
<item>pl</item>
<item>pt-BR</item>
<item>pt-PT</item>
<item>ro</item>
<item>ru</item>
<item>sa</item>
<item>sc</item>
<item>sco</item>
<item>si</item>
<item>sk</item>
<item>sl</item>
<item>sq</item>
<item>sr</item>
<item>sr-Latn</item>
<item>sv</item>
<item>szl</item>
<item>ta</item>
<item>te</item>
<item>th</item>
<item>tr</item>
<item>tt</item>
<item>ug</item>
<item>uk</item>
<item>ur</item>
<item>vi</item>
<item>zgh</item>
<item>zh-CN</item>
<item>zh-HK</item>
<item>zh-TW</item>
</string-array>
</resources>