mirror of
https://github.com/gsantner/dandelion
synced 2024-11-25 05:42:10 +01:00
Update to latest opoc version
* Move various clases * Especially improve language preference, backported from compat lib
This commit is contained in:
parent
1bb061b563
commit
dd0432f718
10 changed files with 281 additions and 115 deletions
|
@ -87,7 +87,7 @@ import com.github.dfa.diaspora_android.web.ProxyHandler;
|
|||
import com.github.dfa.diaspora_android.web.WebHelper;
|
||||
import com.github.dfa.diaspora_android.web.custom_tab.CustomTabActivityHelper;
|
||||
|
||||
import net.gsantner.opoc.util.SimpleMarkdownParser;
|
||||
import net.gsantner.opoc.format.markdown.SimpleMarkdownParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
|
|
@ -145,7 +145,11 @@ public class AppSettings extends AppSettingsBase {
|
|||
}
|
||||
|
||||
public void setPodAspects(DiasporaAspect[] aspects) {
|
||||
setStringArray(R.string.pref_key__podprofile_aspects, aspects, _prefPod);
|
||||
String[] strs = new String[aspects.length];
|
||||
for (int i = 0; i < strs.length; i++) {
|
||||
strs[i] = aspects[i].toShareAbleText();
|
||||
}
|
||||
setStringArray(R.string.pref_key__podprofile_aspects, strs, _prefPod);
|
||||
}
|
||||
|
||||
public DiasporaAspect[] getAspects() {
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
* FILTER_WEB is intended to be used at engines understanding most common HTML tags.
|
||||
*/
|
||||
|
||||
package net.gsantner.opoc.util;
|
||||
package net.gsantner.opoc.format.markdown;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileInputStream;
|
|
@ -11,16 +11,16 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* A ListPreference that displays a list of available languages
|
||||
* Requires:
|
||||
* The BuildConfig field "APPLICATION_LANGUAGES" which is a array of all available languages
|
||||
* opoc/ContextUtils
|
||||
The BuildConfig field "APPLICATION_LANGUAGES" which is a array of all available languages
|
||||
opoc/ContextUtils
|
||||
* BuildConfig field can be defined by using the method below
|
||||
|
||||
buildConfigField("String[]", "APPLICATION_LANGUAGES", '{' + getUsedAndroidLanguages().collect {"\"${it}\""}.join(",") + '}')
|
||||
buildConfigField "String[]", "APPLICATION_LANGUAGES", "${getUsedAndroidLanguages()}"
|
||||
|
||||
@SuppressWarnings(["UnnecessaryQualifiedReference", "SpellCheckingInspection", "GroovyUnusedDeclaration"])
|
||||
static String[] getUsedAndroidLanguages() {
|
||||
// Returns used android languages as a buildConfig array: {'de', 'it', ..}"
|
||||
static String getUsedAndroidLanguages() {
|
||||
Set<String> langs = new HashSet<>()
|
||||
new File('.').eachFileRecurse(groovy.io.FileType.DIRECTORIES) {
|
||||
final foldername = it.name
|
||||
|
@ -32,25 +32,25 @@ static String[] getUsedAndroidLanguages() {
|
|||
}
|
||||
}
|
||||
}
|
||||
return langs.toArray(new String[langs.size()])
|
||||
return '{' + langs.collect { "\"${it}\"" }.join(",") + '}'
|
||||
}
|
||||
|
||||
* Summary: Change language of this app. Restart app for changes to take effect
|
||||
|
||||
* Define element in Preferences-XML:
|
||||
<net.gsantner.opoc.ui.LanguagePreference
|
||||
<net.gsantner.opoc.preference.LanguagePreference
|
||||
android:icon="@drawable/ic_language_black_24dp"
|
||||
android:key="@string/pref_key__language"
|
||||
android:summary="@string/pref_desc__language"
|
||||
android:title="@string/pref_title__language"/>
|
||||
*/
|
||||
package net.gsantner.opoc.ui;
|
||||
package net.gsantner.opoc.preference.nonsupport;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.preference.ListPreference;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.preference.ListPreference;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
|
@ -69,7 +69,7 @@ public class LanguagePreference extends ListPreference {
|
|||
private static final String SYSTEM_LANGUAGE_CODE = "";
|
||||
|
||||
// The language of res/values/ -> (usually English)
|
||||
public String _systemLanguageName = "★System★";
|
||||
public String _systemLanguageName = "System";
|
||||
public String _defaultLanguageCode = "en";
|
||||
|
||||
public LanguagePreference(Context context) {
|
||||
|
@ -95,7 +95,7 @@ public class LanguagePreference extends ListPreference {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected boolean callChangeListener(Object newValue) {
|
||||
public boolean callChangeListener(Object newValue) {
|
||||
if (newValue instanceof String) {
|
||||
// Does not apply to existing UI, use recreate()
|
||||
new ContextUtils(getContext()).setAppLanguage((String) newValue);
|
||||
|
@ -118,7 +118,7 @@ public class LanguagePreference extends ListPreference {
|
|||
if (bcof instanceof String[]) {
|
||||
for (String langId : (String[]) bcof) {
|
||||
Locale locale = contextUtils.getLocaleByAndroidCode(langId);
|
||||
languages.add(summarizeLocale(locale) + ";" + langId);
|
||||
languages.add(summarizeLocale(locale, langId) + ";" + langId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,9 +133,9 @@ public class LanguagePreference extends ListPreference {
|
|||
entryval[i + 2] = languages.get(i).split(";")[1];
|
||||
}
|
||||
entryval[0] = SYSTEM_LANGUAGE_CODE;
|
||||
entries[0] = _systemLanguageName + "\n[" + summarizeLocale(context.getResources().getConfiguration().locale) + "]";
|
||||
entries[0] = _systemLanguageName + " » " + summarizeLocale(context.getResources().getConfiguration().locale, "");
|
||||
entryval[1] = _defaultLanguageCode;
|
||||
entries[1] = summarizeLocale(contextUtils.getLocaleByAndroidCode(_defaultLanguageCode));
|
||||
entries[1] = summarizeLocale(contextUtils.getLocaleByAndroidCode(_defaultLanguageCode), _defaultLanguageCode);
|
||||
|
||||
setEntries(entries);
|
||||
setEntryValues(entryval);
|
||||
|
@ -143,13 +143,21 @@ public class LanguagePreference extends ListPreference {
|
|||
|
||||
// Concat english and localized language name
|
||||
// Append country if country specific (e.g. Portuguese Brazil)
|
||||
private String summarizeLocale(Locale locale) {
|
||||
private String summarizeLocale(final Locale locale, final String localeAndroidCode) {
|
||||
String country = locale.getDisplayCountry(locale);
|
||||
String language = locale.getDisplayLanguage(locale);
|
||||
return locale.getDisplayLanguage(Locale.ENGLISH)
|
||||
String ret = locale.getDisplayLanguage(Locale.ENGLISH)
|
||||
+ " (" + language.substring(0, 1).toUpperCase(Locale.getDefault()) + language.substring(1)
|
||||
+ ((!country.isEmpty() && !country.toLowerCase(Locale.getDefault()).equals(language.toLowerCase(Locale.getDefault()))) ? (", " + country) : "")
|
||||
+ ")";
|
||||
|
||||
if (localeAndroidCode.equals("zh-rCN")) {
|
||||
ret = ret.substring(0, ret.indexOf(" ") + 1) + "Simplified" + ret.substring(ret.indexOf(" "));
|
||||
} else if (localeAndroidCode.equals("zh-rTW")) {
|
||||
ret = ret.substring(0, ret.indexOf(" ") + 1) + "Traditional" + ret.substring(ret.indexOf(" "));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Add current language to summary
|
||||
|
@ -158,7 +166,7 @@ public class LanguagePreference extends ListPreference {
|
|||
Locale locale = new ContextUtils(getContext()).getLocaleByAndroidCode(getValue());
|
||||
String prefix = TextUtils.isEmpty(super.getSummary())
|
||||
? "" : super.getSummary() + "\n\n";
|
||||
return prefix + summarizeLocale(locale);
|
||||
return prefix + summarizeLocale(locale, getValue());
|
||||
}
|
||||
|
||||
public String getSystemLanguageName() {
|
|
@ -28,6 +28,7 @@ import android.util.TypedValue;
|
|||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.webkit.WebView;
|
||||
|
||||
|
||||
@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection"})
|
||||
|
@ -93,16 +94,16 @@ public class ActivityUtils extends net.gsantner.opoc.util.ContextUtils {
|
|||
}
|
||||
|
||||
public void hideSoftKeyboard() {
|
||||
InputMethodManager inputMethodManager = (InputMethodManager) _activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
if (_activity.getCurrentFocus() != null && _activity.getCurrentFocus().getWindowToken() != null) {
|
||||
inputMethodManager.hideSoftInputFromWindow(_activity.getCurrentFocus().getWindowToken(), 0);
|
||||
InputMethodManager imm = (InputMethodManager) _activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
if (imm != null && _activity.getCurrentFocus() != null && _activity.getCurrentFocus().getWindowToken() != null) {
|
||||
imm.hideSoftInputFromWindow(_activity.getCurrentFocus().getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void showSoftKeyboard() {
|
||||
InputMethodManager inputMethodManager = (InputMethodManager) _activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
if (_activity.getCurrentFocus() != null && _activity.getCurrentFocus().getWindowToken() != null) {
|
||||
inputMethodManager.showSoftInput(_activity.getCurrentFocus(), InputMethodManager.SHOW_FORCED);
|
||||
InputMethodManager imm = (InputMethodManager) _activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
if (imm != null && _activity.getCurrentFocus() != null && _activity.getCurrentFocus().getWindowToken() != null) {
|
||||
imm.showSoftInput(_activity.getCurrentFocus(), InputMethodManager.SHOW_FORCED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,6 +127,16 @@ public class ActivityUtils extends net.gsantner.opoc.util.ContextUtils {
|
|||
dialog.show();
|
||||
}
|
||||
|
||||
public void showDialogWithRawFileInWebView(String fileInRaw, @StringRes int resTitleId) {
|
||||
WebView wv = new WebView(_context);
|
||||
wv.loadUrl("file:///android_res/raw/" + fileInRaw);
|
||||
AlertDialog.Builder dialog = new AlertDialog.Builder(_context)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.setTitle(resTitleId)
|
||||
.setView(wv);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
// Toggle with no param, else set visibility according to first bool
|
||||
public void toggleStatusbarVisibility(boolean... optionalForceVisible) {
|
||||
WindowManager.LayoutParams attrs = _activity.getWindow().getAttributes();
|
||||
|
@ -140,7 +151,7 @@ public class ActivityUtils extends net.gsantner.opoc.util.ContextUtils {
|
|||
_activity.getWindow().setAttributes(attrs);
|
||||
}
|
||||
|
||||
public void showRateOnGplayDialog() {
|
||||
public void showGooglePlayEntryForThisApp() {
|
||||
String pkgId = "details?id=" + _activity.getPackageName();
|
||||
Intent goToMarket = new Intent(Intent.ACTION_VIEW, Uri.parse("market://" + pkgId));
|
||||
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
|
||||
|
|
|
@ -16,29 +16,19 @@
|
|||
* getters/setters for the app's settings.
|
||||
* Example:
|
||||
public boolean isAppFirstStart(boolean doSet) {
|
||||
boolean value = getBool(prefApp, R.string.pref_key__app_first_start, true);
|
||||
int value = getInt(R.string.pref_key__app_first_start, -1);
|
||||
if (doSet) {
|
||||
setBool(prefApp, R.string.pref_key__app_first_start, false);
|
||||
setBool(true);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean isAppCurrentVersionFirstStart(boolean doSet) {
|
||||
int value = getInt(prefApp, R.string.pref_key__app_first_start_current_version, -1);
|
||||
int value = getInt(R.string.pref_key__app_first_start_current_version, -1);
|
||||
if (doSet) {
|
||||
setInt(prefApp, R.string.pref_key__app_first_start_current_version, BuildConfig.VERSION_CODE);
|
||||
setInt(R.string.pref_key__app_first_start_current_version, BuildConfig.VERSION_CODE);
|
||||
}
|
||||
return value != BuildConfig.VERSION_CODE && !BuildConfig.IS_TEST_BUILD;
|
||||
}
|
||||
|
||||
* Maybe add a singleton for this:
|
||||
* Whereas App.get() is returning ApplicationContext
|
||||
private AppSettings(Context _context) {
|
||||
super(_context);
|
||||
}
|
||||
|
||||
public static AppSettings get() {
|
||||
return new AppSettings(App.get());
|
||||
return value != BuildConfig.VERSION_CODE;
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -63,7 +53,7 @@ import java.util.List;
|
|||
* Default SharedPreference (_prefApp) will be taken if no SP is specified, else the first one
|
||||
*/
|
||||
@SuppressWarnings({"WeakerAccess", "unused", "SpellCheckingInspection", "SameParameterValue"})
|
||||
public class AppSettingsBase {
|
||||
public class AppSettingsBase implements PropertyBackend<String, AppSettingsBase> {
|
||||
protected static final String ARRAY_SEPARATOR = "%%%";
|
||||
protected static final String ARRAY_SEPARATOR_SUBSTITUTE = "§§§";
|
||||
public static final String SHARED_PREF_APP = "app";
|
||||
|
@ -190,36 +180,33 @@ public class AppSettingsBase {
|
|||
return gp(pref).getString(rstr(keyResourceId), rstr(keyResourceIdDefaultValue));
|
||||
}
|
||||
|
||||
public void setStringArray(@StringRes int keyResourceId, Object[] values, final SharedPreferences... pref) {
|
||||
setStringArray(rstr(keyResourceId), values, gp(pref));
|
||||
}
|
||||
|
||||
public void setStringArray(String key, Object[] values, final SharedPreferences... pref) {
|
||||
setStringArray(key, values, gp(pref));
|
||||
}
|
||||
|
||||
private void setStringArray(String key, Object[] values, final SharedPreferences pref) {
|
||||
private void setStringListOne(String key, List<String> values, final SharedPreferences pref) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Object value : values) {
|
||||
for (String value : values) {
|
||||
sb.append(ARRAY_SEPARATOR);
|
||||
sb.append(value.toString().replace(ARRAY_SEPARATOR, ARRAY_SEPARATOR_SUBSTITUTE));
|
||||
sb.append(value.replace(ARRAY_SEPARATOR, ARRAY_SEPARATOR_SUBSTITUTE));
|
||||
}
|
||||
setString(key, sb.toString().replaceFirst(ARRAY_SEPARATOR, ""), pref);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String[] getStringArray(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return getStringArray(rstr(keyResourceId), gp(pref));
|
||||
}
|
||||
|
||||
private String[] getStringArray(String key, final SharedPreferences... pref) {
|
||||
String value = gp(pref)
|
||||
private ArrayList<String> getStringListOne(String key, final SharedPreferences pref) {
|
||||
ArrayList<String> ret = new ArrayList<>();
|
||||
String value = pref
|
||||
.getString(key, ARRAY_SEPARATOR)
|
||||
.replace(ARRAY_SEPARATOR_SUBSTITUTE, ARRAY_SEPARATOR);
|
||||
if (value.equals(ARRAY_SEPARATOR)) {
|
||||
return new String[0];
|
||||
return ret;
|
||||
}
|
||||
return value.split(ARRAY_SEPARATOR);
|
||||
ret.addAll(Arrays.asList(value.split(ARRAY_SEPARATOR)));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void setStringArray(@StringRes int keyResourceId, String[] values, final SharedPreferences... pref) {
|
||||
setStringArray(rstr(keyResourceId), values, pref);
|
||||
}
|
||||
|
||||
public void setStringArray(String key, String[] values, final SharedPreferences... pref) {
|
||||
setStringListOne(key, Arrays.asList(values), gp(pref));
|
||||
}
|
||||
|
||||
public void setStringList(@StringRes int keyResourceId, List<String> values, final SharedPreferences... pref) {
|
||||
|
@ -230,12 +217,23 @@ public class AppSettingsBase {
|
|||
setStringArray(key, values.toArray(new String[values.size()]), pref);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String[] getStringArray(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return getStringArray(rstr(keyResourceId), pref);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String[] getStringArray(String key, final SharedPreferences... pref) {
|
||||
List<String> list = getStringListOne(key, gp(pref));
|
||||
return list.toArray(new String[list.size()]);
|
||||
}
|
||||
|
||||
public ArrayList<String> getStringList(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return new ArrayList<>(Arrays.asList(getStringArray(rstr(keyResourceId), gp(pref))));
|
||||
return getStringListOne(rstr(keyResourceId), gp(pref));
|
||||
}
|
||||
|
||||
public ArrayList<String> getStringList(String key, final SharedPreferences... pref) {
|
||||
return new ArrayList<>(Arrays.asList(getStringArray(key, gp(pref))));
|
||||
return getStringListOne(key, gp(pref));
|
||||
}
|
||||
|
||||
//#################################
|
||||
|
@ -266,56 +264,59 @@ public class AppSettingsBase {
|
|||
return Integer.valueOf(strNum);
|
||||
}
|
||||
|
||||
|
||||
public void setIntArray(@StringRes int keyResourceId, Object[] values, final SharedPreferences... pref) {
|
||||
setIntArray(rstr(keyResourceId), values, gp(pref));
|
||||
}
|
||||
|
||||
public void setIntArray(String key, Object[] values, final SharedPreferences... pref) {
|
||||
setIntArray(key, values, gp(pref));
|
||||
}
|
||||
|
||||
private void setIntArray(String key, Object[] values, final SharedPreferences pref) {
|
||||
private void setIntListOne(String key, List<Integer> values, final SharedPreferences pref) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Object value : values) {
|
||||
for (Integer value : values) {
|
||||
sb.append(ARRAY_SEPARATOR);
|
||||
sb.append(value.toString());
|
||||
}
|
||||
setString(key, sb.toString().replaceFirst(ARRAY_SEPARATOR, ""), pref);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Integer[] getIntArray(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return getIntArray(rstr(keyResourceId), gp(pref));
|
||||
}
|
||||
|
||||
private Integer[] getIntArray(String key, final SharedPreferences... pref) {
|
||||
String value = gp(pref).getString(key, ARRAY_SEPARATOR);
|
||||
private ArrayList<Integer> getIntListOne(String key, final SharedPreferences pref) {
|
||||
ArrayList<Integer> ret = new ArrayList<>();
|
||||
String value = pref.getString(key, ARRAY_SEPARATOR);
|
||||
if (value.equals(ARRAY_SEPARATOR)) {
|
||||
return new Integer[0];
|
||||
return ret;
|
||||
}
|
||||
String[] split = value.split(ARRAY_SEPARATOR);
|
||||
Integer[] ret = new Integer[split.length];
|
||||
for (int i = 0; i < ret.length; i++) {
|
||||
ret[i] = Integer.parseInt(split[i]);
|
||||
for (String s : value.split(ARRAY_SEPARATOR)) {
|
||||
ret.add(Integer.parseInt(s));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void setIntArray(@StringRes int keyResourceId, Integer[] values, final SharedPreferences... pref) {
|
||||
setIntArray(rstr(keyResourceId), values, gp(pref));
|
||||
}
|
||||
|
||||
public void setIntArray(String key, Integer[] values, final SharedPreferences... pref) {
|
||||
setIntListOne(key, Arrays.asList(values), gp(pref));
|
||||
}
|
||||
|
||||
public Integer[] getIntArray(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return getIntArray(rstr(keyResourceId), gp(pref));
|
||||
}
|
||||
|
||||
public Integer[] getIntArray(String key, final SharedPreferences... pref) {
|
||||
List<Integer> data = getIntListOne(key, gp(pref));
|
||||
return data.toArray(new Integer[data.size()]);
|
||||
}
|
||||
|
||||
|
||||
public void setIntList(@StringRes int keyResourceId, List<Integer> values, final SharedPreferences... pref) {
|
||||
setIntArray(rstr(keyResourceId), values.toArray(new Integer[values.size()]), pref);
|
||||
setIntListOne(rstr(keyResourceId), values, gp(pref));
|
||||
}
|
||||
|
||||
public void setIntList(String key, List<Integer> values, final SharedPreferences... pref) {
|
||||
setIntArray(key, values.toArray(new Integer[values.size()]), pref);
|
||||
setIntListOne(key, values, gp(pref));
|
||||
}
|
||||
|
||||
public ArrayList<Integer> getIntList(@StringRes int keyResourceId, final SharedPreferences... pref) {
|
||||
return new ArrayList<>(Arrays.asList(getIntArray(rstr(keyResourceId), gp(pref))));
|
||||
return getIntListOne(rstr(keyResourceId), gp(pref));
|
||||
}
|
||||
|
||||
public ArrayList<Integer> getIntList(String key, final SharedPreferences... pref) {
|
||||
return new ArrayList<>(Arrays.asList(getIntArray(key, gp(pref))));
|
||||
return getIntListOne(key, gp(pref));
|
||||
}
|
||||
|
||||
|
||||
|
@ -405,4 +406,95 @@ public class AppSettingsBase {
|
|||
public int getColor(@StringRes int keyResourceId, @ColorRes int defaultColor, final SharedPreferences... pref) {
|
||||
return gp(pref).getInt(rstr(keyResourceId), rcolor(defaultColor));
|
||||
}
|
||||
|
||||
//
|
||||
// PropertyBackend<String> implementations
|
||||
//
|
||||
@Override
|
||||
public String getString(String key, String defaultValue) {
|
||||
return getString(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInt(String key, int defaultValue) {
|
||||
return getInt(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLong(String key, long defaultValue) {
|
||||
return getLong(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getBool(String key, boolean defaultValue) {
|
||||
return getBool(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFloat(String key, float defaultValue) {
|
||||
return getFloat(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDouble(String key, double defaultValue) {
|
||||
return getDouble(key, defaultValue, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<Integer> getIntList(String key) {
|
||||
return getIntList(key, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> getStringList(String key) {
|
||||
return getStringList(key, _prefApp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setString(String key, String value) {
|
||||
setString(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setInt(String key, int value) {
|
||||
setInt(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setLong(String key, long value) {
|
||||
setLong(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setBool(String key, boolean value) {
|
||||
setBool(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setFloat(String key, float value) {
|
||||
setFloat(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setDouble(String key, double value) {
|
||||
setDouble(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setIntList(String key, List<Integer> value) {
|
||||
setIntListOne(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppSettingsBase setStringList(String key, List<String> value) {
|
||||
setStringListOne(key, value, _prefApp);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ import android.graphics.Canvas;
|
|||
import android.graphics.Color;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
@ -47,7 +46,6 @@ import android.support.annotation.StringRes;
|
|||
import android.support.graphics.drawable.VectorDrawableCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.AppCompatButton;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableString;
|
||||
|
@ -58,11 +56,12 @@ import android.util.DisplayMetrics;
|
|||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.webkit.WebView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.gsantner.opoc.format.markdown.SimpleMarkdownParser;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
@ -152,7 +151,11 @@ public class ContextUtils {
|
|||
Uri uri = Uri.parse(url);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
try {
|
||||
_context.startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -232,16 +235,6 @@ public class ContextUtils {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
public void showDialogWithRawFileInWebView(String fileInRaw, @StringRes int resTitleId) {
|
||||
WebView wv = new WebView(_context);
|
||||
wv.loadUrl("file:///android_res/raw/" + fileInRaw);
|
||||
AlertDialog.Builder dialog = new AlertDialog.Builder(_context)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.setTitle(resTitleId)
|
||||
.setView(wv);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
@SuppressWarnings("RestrictedApi")
|
||||
public void setTintColorOfButton(AppCompatButton button, @ColorRes int resColor) {
|
||||
|
@ -519,11 +512,7 @@ public class ContextUtils {
|
|||
public ContextUtils tintMenuItems(Menu menu, boolean recurse, @ColorInt int iconColor) {
|
||||
for (int i = 0; i < menu.size(); i++) {
|
||||
MenuItem item = menu.getItem(i);
|
||||
Drawable drawable = item.getIcon();
|
||||
if (drawable != null) {
|
||||
drawable.mutate();
|
||||
drawable.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
tintDrawable(item.getIcon(), iconColor);
|
||||
if (item.hasSubMenu() && recurse) {
|
||||
tintMenuItems(item.getSubMenu(), recurse, iconColor);
|
||||
}
|
||||
|
@ -531,6 +520,18 @@ public class ContextUtils {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Drawable tintDrawable(@DrawableRes int drawableRes, @ColorInt int color) {
|
||||
return tintDrawable(_context.getResources().getDrawable(drawableRes), color);
|
||||
}
|
||||
|
||||
public Drawable tintDrawable(@Nullable Drawable drawable, @ColorInt int color) {
|
||||
if (drawable != null) {
|
||||
drawable = DrawableCompat.wrap(drawable);
|
||||
DrawableCompat.setTint(drawable.mutate(), color);
|
||||
}
|
||||
return drawable;
|
||||
}
|
||||
|
||||
@SuppressLint("PrivateApi")
|
||||
public ContextUtils setSubMenuIconsVisiblity(Menu menu, boolean visible) {
|
||||
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* ------------------------------------------------------------------------------
|
||||
* Gregor Santner <gsantner.net> wrote this. You can do whatever you want
|
||||
* with it. If we meet some day, and you think it is worth it, you can buy me a
|
||||
* coke in return. Provided as is without any kind of warranty. Do not blame or
|
||||
* sue me if something goes wrong. No attribution required. - Gregor Santner
|
||||
*
|
||||
* License: Creative Commons Zero (CC0 1.0)
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
package net.gsantner.opoc.util;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings({"UnusedReturnValue", "SpellCheckingInspection"})
|
||||
public interface PropertyBackend<TKEY, TTHIS> {
|
||||
String getString(TKEY key, String defaultValue);
|
||||
|
||||
int getInt(TKEY key, int defaultValue);
|
||||
|
||||
long getLong(TKEY key, long defaultValue);
|
||||
|
||||
boolean getBool(TKEY key, boolean defaultValue);
|
||||
|
||||
float getFloat(TKEY key, float defaultValue);
|
||||
|
||||
double getDouble(TKEY key, double defaultValue);
|
||||
|
||||
List<Integer> getIntList(TKEY key);
|
||||
|
||||
List<String> getStringList(TKEY key);
|
||||
|
||||
TTHIS setString(TKEY key, String value);
|
||||
|
||||
TTHIS setInt(TKEY key, int value);
|
||||
|
||||
TTHIS setLong(TKEY key, long value);
|
||||
|
||||
TTHIS setBool(TKEY key, boolean value);
|
||||
|
||||
TTHIS setFloat(TKEY key, float value);
|
||||
|
||||
TTHIS setDouble(TKEY key, double value);
|
||||
|
||||
TTHIS setIntList(TKEY key, List<Integer> value);
|
||||
|
||||
TTHIS setStringList(TKEY key, List<String> value);
|
||||
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
android:summary="@string/pref_desc__sub_nav_slider"
|
||||
android:title="@string/pref_title__sub_nav_slider"/>
|
||||
|
||||
<net.gsantner.opoc.ui.LanguagePreference
|
||||
<net.gsantner.opoc.preference.nonsupport.LanguagePreference
|
||||
android:icon="@drawable/ic_language_black_48px"
|
||||
android:key="@string/pref_key__language"
|
||||
android:summary="@string/pref_desc__language"
|
||||
|
|
|
@ -9,7 +9,7 @@ buildscript {
|
|||
// https://developer.android.com/studio/releases/gradle-plugin.html
|
||||
ext.version_gradle_tools = "3.0.1"
|
||||
// https://developer.android.com/topic/libraries/support-library/revisions.html
|
||||
ext.version_library_appcompat = "27.0.2"
|
||||
ext.version_library_appcompat = "27.1.0"
|
||||
// https://github.com/JakeWharton/butterknife/releases
|
||||
ext.version_library_butterknife = "8.8.1"
|
||||
// https://github.com/atlassian/commonmark-java/releases
|
||||
|
@ -17,7 +17,7 @@ buildscript {
|
|||
// https://github.com/guardianproject/NetCipher/releases
|
||||
ext.version_library_netcipher = "2.0.0-alpha1"
|
||||
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin#LookAtCentral
|
||||
ext.version_plugin_kotlin = "1.2.10"
|
||||
ext.version_plugin_kotlin = "1.2.21"
|
||||
ext.enable_plugin_kotlin = false
|
||||
|
||||
repositories {
|
||||
|
|
Loading…
Reference in a new issue