/*
* Copyright (C) 2014 Michell Bak
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.miz.mizuu.fragments;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.widget.Toast;
import com.miz.mizuu.R;
import com.miz.utils.FileUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import static com.miz.functions.PreferenceKeys.LANGUAGE_PREFERENCE;
public class Prefs extends PreferenceFragment {
private Preference mLanguagePref, mCopyDatabase;
private Locale[] mSystemLocales;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int res=getActivity().getResources().getIdentifier(getArguments().getString("resource"), "xml", getActivity().getPackageName());
addPreferencesFromResource(res);
mCopyDatabase = getPreferenceScreen().findPreference("prefsCopyDatabase");
if (mCopyDatabase != null)
mCopyDatabase.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
String path = FileUtils.copyDatabase(getActivity());
if (!TextUtils.isEmpty(path)) {
Toast.makeText(getActivity(), getString(R.string.database_copied) + "\n(" + path + ")", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), R.string.errorSomethingWentWrong, Toast.LENGTH_SHORT).show();
}
return true;
}
});
mLanguagePref = getPreferenceScreen().findPreference(LANGUAGE_PREFERENCE);
if (mLanguagePref != null)
mLanguagePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
mSystemLocales = Locale.getAvailableLocales();
String[] languageCodes = Locale.getISOLanguages();
final ArrayList<Locale> mTemp = new ArrayList<Locale>();
for (String code : languageCodes) {
if (code.length() == 2) { // We're only interested in two character codes
Locale l = new Locale(code);
if (hasLocale(l))
mTemp.add(l);
}
}
Collections.sort(mTemp, new Comparator<Locale>() {
@Override
public int compare(Locale lhs, Locale rhs) {
return lhs.getDisplayLanguage(Locale.getDefault()).compareToIgnoreCase(rhs.getDisplayLanguage(Locale.getDefault()));
}
});
String[] items = new String[mTemp.size()];
for (int i = 0; i < mTemp.size(); i++)
items[i] = mTemp.get(i).getDisplayLanguage(Locale.getDefault());
final String[] codes = new String[mTemp.size()];
for (int i = 0; i < mTemp.size(); i++)
codes[i] = mTemp.get(i).getLanguage();
mTemp.clear();
int checkedItem = getIndexForLocale(codes, PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(LANGUAGE_PREFERENCE, "en"));
if (checkedItem == -1)
checkedItem = getIndexForLocale(codes, "en"); // "en" by default
AlertDialog.Builder bldr = new AlertDialog.Builder(getActivity());
bldr.setTitle(R.string.set_pref_language_title);
bldr.setSingleChoiceItems(items, checkedItem, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
savePreference(LANGUAGE_PREFERENCE, codes[which]);
dialog.dismiss();
}
});
bldr.show();
return true;
}
});
}
private void savePreference(String key, String value) {
PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putString(key, value).commit();
}
private boolean hasLocale(Locale l) {
for (Locale locale : mSystemLocales)
if (locale.equals(l))
return true;
return false;
}
public int getIndexForLocale(String[] languages, String locale) {
for (int i = 0; i < languages.length; i++)
if (languages[i].equalsIgnoreCase(locale))
return i;
return -1;
}
}