change client language from the app options (#155)

Bug: ActionBar Language does not change.
This commit is contained in:
Nico Alt 2015-04-08 20:53:04 +02:00
parent b751594bfe
commit 14adb2a302
6 changed files with 95 additions and 0 deletions

View File

@ -30,4 +30,45 @@
<item>lightWithDarkActionBar</item>
</string-array>
<string-array name="languageValues">
<item></item>
<item>ar</item>
<item>bg</item>
<item>ca</item>
<item>cs</item>
<item>de</item>
<item>el</item>
<item>en-rGB</item>
<item>eo</item>
<item>es</item>
<item>eu</item>
<item>fa</item>
<item>fi</item>
<item>fr</item>
<item>gl</item>
<item>gu</item>
<item>he</item>
<item>hu</item>
<item>it</item>
<item>ja</item>
<item>ko</item>
<item>lt</item>
<item>nb</item>
<item>nl</item>
<item>pl</item>
<item>pt-rBR</item>
<item>ro</item>
<item>ru</item>
<item>sk</item>
<item>sl</item>
<item>sr</item>
<item>sv</item>
<item>tr</item>
<item>ug</item>
<item>uk</item>
<item>zh</item>
<item>zh-rCN</item>
<item>zh-rHK</item>
</string-array>
</resources>

View File

@ -259,6 +259,8 @@
<string name="minsdk_up_to_maxsdk">%1$s up to %2$s</string>
<string name="not_on_same_wifi">Your device is not on the same WiFi as the local repo you just added! Try joining this network: %s</string>
<string name="requires_features">Requires: %1$s</string>
<string name="pref_language">Language</string>
<string name="pref_language_default">System Default</string>
<string name="app_icon">App icon</string>
<string name="repo_icon">Repo icon</string>

View File

@ -74,6 +74,10 @@
android:dependency="enableProxy" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/other">
<ListPreference android:title="@string/pref_language"
android:key="language"
android:defaultValue=""
android:entryValues="@array/languageValues" />
<CheckBoxPreference android:title="@string/cache_downloaded"
android:defaultValue="false"
android:key="cacheDownloaded" />

View File

@ -31,6 +31,7 @@ import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Build;
@ -39,6 +40,7 @@ import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.widget.Toast;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiscCache;
@ -58,6 +60,7 @@ import org.fdroid.fdroid.net.WifiStateChangeService;
import java.io.File;
import java.security.Security;
import java.util.Locale;
import java.util.Set;
public class FDroidApp extends Application {
@ -130,8 +133,25 @@ public class FDroidApp extends Application {
}
}
public static void updateLanguage(Context c) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(c);
String lang = prefs.getString("language", "");
updateLanguage(c, lang);
}
public static void updateLanguage(Context c, String lang) {
Configuration cfg = new Configuration();
if (!TextUtils.isEmpty(lang))
cfg.locale = new Locale(lang);
else
cfg.locale = Locale.getDefault();
c.getResources().updateConfiguration(cfg, null);
}
@Override
public void onCreate() {
updateLanguage(this);
super.onCreate();
// Needs to be setup before anything else tries to access it.

View File

@ -55,6 +55,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
public static final String PREF_LOCAL_REPO_BONJOUR = "localRepoBonjour";
public static final String PREF_LOCAL_REPO_NAME = "localRepoName";
public static final String PREF_LOCAL_REPO_HTTPS = "localRepoHttps";
public static final String PREF_LANGUAGE = "language";
public static final String PREF_ENABLE_PROXY = "enableProxy";
public static final String PREF_PROXY_HOST = "proxyHost";
public static final String PREF_PROXY_PORT = "proxyPort";

View File

@ -10,12 +10,16 @@ import android.preference.Preference;
import android.support.v4.preference.PreferenceFragment;
import android.text.TextUtils;
import org.fdroid.fdroid.FDroid;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.installer.CheckRootAsyncTask;
import org.fdroid.fdroid.installer.Installer;
import java.util.Locale;
public class PreferencesFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
@ -33,6 +37,7 @@ public class PreferencesFragment extends PreferenceFragment
Preferences.PREF_LOCAL_REPO_BONJOUR,
Preferences.PREF_LOCAL_REPO_NAME,
Preferences.PREF_LOCAL_REPO_HTTPS,
Preferences.PREF_LANGUAGE,
Preferences.PREF_CACHE_APK,
Preferences.PREF_EXPERT,
Preferences.PREF_ROOT_INSTALLER,
@ -134,6 +139,16 @@ public class PreferencesFragment extends PreferenceFragment
checkSummary(key, R.string.local_repo_https_on);
break;
case Preferences.PREF_LANGUAGE:
langSpinner(key);
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
FDroidApp.updateLanguage(this.getActivity());
}
break;
case Preferences.PREF_CACHE_APK:
checkSummary(key, R.string.cache_downloaded_on);
break;
@ -278,6 +293,18 @@ public class PreferencesFragment extends PreferenceFragment
});
}
private void langSpinner(String key) {
ListPreference pref = (ListPreference)findPreference(key);
final String[] langValues = getResources().getStringArray(R.array.languageValues);
String[] langNames = new String[langValues.length];
langNames[0] = getString(R.string.pref_language_default);
for (int i = 1; i < langValues.length; i++) {
Locale appLoc = new Locale(langValues[i]);
langNames[i] = appLoc.getDisplayLanguage(appLoc);
}
pref.setEntries(langNames);
}
@Override
public void onResume() {
super.onResume();