Facebook вход всплывающее окно меняет локали приложения Android - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь реализовать вход в Facebook для моего приложения для Android, но он работает ... хитрый: D

Мое приложение имеет многоязычные настройки (тексты, точки API ...).Таким образом, пользователь может выбрать язык приложения непосредственно в приложении, и все (ресурсы, предпочтения ...) будут меняться в зависимости от выбранных локалей.

НО, когда я нажимаю кнопку входа в Facebook, и появляется экран входа в систему ... мое приложениелокали немедленно меняются на мою систему. lang + en_US ... Поэтому, когда я изменяю настройки приложения на [sk_SK] и нажимаю «Войти через Facebook», у меня появляется [cs_CZ,en_US].

. Я сделал пример приложения дляпродемонстрируйте мою проблему с настоящим фиктивным «наблюдателем» за изменением локалей ...

Я тестирую его на Pixel 2XL с Android 9.

public class FacebookLoginActivity extends AppCompatActivity {
    private final String TAG = FacebookLoginActivity.this.getClass().getClass().getSimpleName();

    private static final String EMAIL = "email";

    CallbackManager callbackManager;

    // DUMMY OBSERVER
    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        String last = "";
        @Override
        public void run() {
            if (getApplicationContext() == null) return;

            Configuration configuration = getApplicationContext().getResources().getConfiguration();
            String actual = "Locale: " + configuration.getLocales().toString();
            if (!actual.equals(last)) {
                last = actual;
                Log.d(TAG, last);
            }
            handler.postDelayed(this, 50);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facebook_login);

        // RUN MY DUMMY LISTENER
        runnable.run();

        // FORCE APP TO USE SK LANG
        setLanguage(new Locale("sk", "SK"));

        // INIT FB LOGIN CODE
        callbackManager = CallbackManager.Factory.create();

        LoginButton loginButton = findViewById(R.id.login_button);
        loginButton.setReadPermissions(Arrays.asList(EMAIL));

        // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) { }

            @Override
            public void onCancel() { }

            @Override
            public void onError(FacebookException exception) { }
        });
    }

    // THIS IS HOW I CHANGE LOCALES
    private void setLanguage(Locale locale){
        Configuration configuration = getApplicationContext().getResources().getConfiguration();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configuration.setLocale(locale);
            getApplicationContext().createConfigurationContext(configuration);
        } else {
            configuration.locale = locale;
        }
        getApplicationContext().getResources().updateConfiguration(
                configuration,
                getApplicationContext().getResources().getDisplayMetrics()
        );
    }
}

У вас есть идеи?Почему это происходит?И как это исправить?

Спасибо за помощь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...