Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Jun 22, 2022. It is now read-only.
This repository was archived by the owner on Jun 22, 2022. It is now read-only.

ListPreference + v1.2.4 bug #41

@dimkinware

Description

@dimkinware

Hello, I found a bug using v1.2.4 wih Preference dialog.
After changing language from selecting it from ListPreference dialog activity is recreated but language of the UI stays previous.
As I understand the reason is that in this case method Activity.getResources() is being called before Activity.attachBaseContext().
So LocalizationActivityDelegate.getResources() method change language in Resources object, then in subsequent attachBaseContext() method call next condition is not met:
if (!baseLocale.toString().equals(currentLocale.toString(), ignoreCase = true)) {

100% reproducing on Android 10 Pixel 2
v1.2.3 works fine.

To reproduce add next code in sample application:
SettingsActivity.java

package com.akexorcist.localizationapp.settingsactivity;

import android.os.Bundle;
import android.preference.PreferenceFragment;

import com.akexorcist.localizationactivity.ui.LocalizationActivity;
import com.akexorcist.localizationapp.R;

public class SettingsActivity extends LocalizationActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
        getFragmentManager().beginTransaction().replace(R.id.main_content, new GeneralPreferenceFragment()).commit();
    }

    public static class GeneralPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settings);
            setHasOptionsMenu(false);
            findPreference("language").setOnPreferenceChangeListener((preference, newValue) -> {
                String lang = newValue.toString();
                ((LocalizationActivity)getActivity()).setLanguage(lang);
                return true;
            });
        }
    }
}

settings_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".settingsactivity.SettingsActivity">
    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="?attr/actionBarSize" />
</FrameLayout>

settings.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/hello_world">
        <ListPreference
            android:defaultValue="en"
            android:entries="@array/pref_language_list_titles"
            android:entryValues="@array/pref_language_list_values"
            android:key="language"
            android:negativeButtonText="@null"
            android:positiveButtonText="@null"
            android:title="language" />
    </PreferenceCategory>
</PreferenceScreen>

strings_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="pref_language_list_titles" translatable="false">
        <item>America</item>
        <item>China</item>
        <item>Italy</item>
        <item>Japan</item>
        <item>Korea</item>
        <item>Portugal</item>
        <item>Thai</item>
    </string-array>
    <string-array name="pref_language_list_values" translatable="false">
        <item>en</item>
        <item>zh</item>
        <item>it</item>
        <item>ja</item>
        <item>ko</item>
        <item>pt</item>
        <item>th</item>
    </string-array>
</resources>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions