From 1bb061b563cc03678b962cd0879913936d52b944 Mon Sep 17 00:00:00 2001 From: x m l p <704948+xmgz@users.noreply.github.com> Date: Thu, 22 Feb 2018 22:42:50 +0100 Subject: [PATCH 01/31] Update galician translation, by @xmgz (#189) --- app/src/main/res/values-gl/strings-about.xml | 8 +++--- .../res/values-gl/strings-preferences.xml | 11 ++++---- app/src/main/res/values-gl/strings.xml | 26 +++++++++---------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-gl/strings-about.xml b/app/src/main/res/values-gl/strings-about.xml index c7764df1..77429410 100644 --- a/app/src/main/res/values-gl/strings-about.xml +++ b/app/src/main/res/values-gl/strings-about.xml @@ -1,5 +1,5 @@ - + Sobre Licenza @@ -9,10 +9,10 @@ Nodo diaspora* Rexistro de depuración Rexistro de depuración (polo miúdo) - Versión da App: %1$s + Versión do App: %1$s Versión Android: %1$s Nome do dispositivo: %1$s - Sobrenome: %1$s + Alcume: %1$s Nome do perfil do nodo: %1$s Dominio do nodo: %1$s Ficheiro de depuración copiado ao portapapeis @@ -20,7 +20,7 @@ Contribúa ao código! dandelion* é desenvolto libre, libre de Liberdade, e segue o espíritu que marca o proxecto diaspora*. Se quere contribuír, adiante! Por agora somos un equipo pequeno, así que agradecemos calquer tipo de axuda! Obteña as fontes - Traduza a app! + Traduza o app! Non está o aplicativo no seu idioma? Pode cambiar eso! Por qué non nos axuda traducíndoa? Utilizamos a plataforma github para que calquera poida traducir a app. Deixame traducir Qué lle parece! diff --git a/app/src/main/res/values-gl/strings-preferences.xml b/app/src/main/res/values-gl/strings-preferences.xml index 213ee5d9..e198fa0e 100644 --- a/app/src/main/res/values-gl/strings-preferences.xml +++ b/app/src/main/res/values-gl/strings-preferences.xml @@ -1,5 +1,6 @@ - + + @@ -12,7 +13,7 @@ Operabilidade - Deslizador para navegar + Cadro de navegación Controle a visibiidade das entradas no cadro de navegación Usuaria Xeral @@ -33,14 +34,14 @@ Idioma Idioma do sistema - Estableza o tamaño do texto na VistaWeb + Estableza o tamaño do texto na Vista Web Tamaño do texto Normal Grande Enorme Cargar imaxes - Xestionar a carga de imaxes ex. para aforrar datos do móbil + Xestionar a carga de imaxes por ex. para aforrar datos do móbil Rotación da pantalla Controlar a rotación automática da pantalla @@ -81,5 +82,5 @@ Eliminar todas os axustes locais do app e desconectar todas as contas Esto restablecerá todos os axustes do aplicativo ao valor por omisión e desconectarao de todos os nodos. As súas imaxes descargadas permanecerán. Seguro que quere proceder? Habilitar un AdBlocker básico. Poderían verse anuncios por exemplo en vistas incrustadas - Bloquear anunciios + Bloquear publicidade diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 42cf0b09..50fec360 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -1,13 +1,13 @@ - + - Refrescar + Actualizar Axustes Notificacións - Conversas - Conversa + Conversa + Fío de comentarios Perfil Aspecto Actividades @@ -25,18 +25,18 @@ Comentario nunha publicación Gústame Mencionado - Rechouchiado + Compartido Comezou a compartir Problema: non se obtivo a lista de nodos! - Desculpe, debe ter conexión a internet para esa tarefa + Desculpe, precisa unha conexión a internet para esa tarefa Confirmación Quere saír? Máis Sobre | Axuda Etiquetas seguidas - Actividades públicas + Actividade pública Informes Compartir ligazón como texto Compartir captura de páxina @@ -46,13 +46,13 @@ Enderezo da ligazón copiado … Nova mensaxe Ir arriba - Buscar personas ou etiquetas + Buscar persoas ou etiquetas Saír do app - Cambiar a vista móbil/escritorio + Vista móbil/escritorio Compartir… - por etiquetas - por xente - Por favor engada un nome + Etiquetas + Persoas + Por favor, engada un nome Compartir ligazón Gardar imaxe Compartir imaxe @@ -63,7 +63,7 @@ Non se cargou a imaxe Ten que permitir \"Permiso de acceso a almacenamento\" para gardar capturas. Despois de iso debería - pechar o aplicativo ou reiniciar o dispositivo. Se non permite acceder ao almacenamento pero que utilizar máis tarde a captura de pantalla, poderá permitir entón o acceso abrindo: preferencias do sistema - apps - dandelion* no dispositivo. + pechar o aplicativo ou reiniciar o dispositivo. Si non permite acceder ao almacenamento pero que utilizar máis tarde a captura de pantalla, poderá permitir entón o acceso abrindo: preferencias do sistema - apps - dandelion* no dispositivo. Na sección de permisos pode activar o \"permiso de acceso a almacenamento\". Ten que permitir \"Permiso de acceso a almacenamento\" para gardar/subir imaxes. Despois de iso debería pechar o aplicativo ou reiniciar o dispositivo. Se non permite acceder ao almacenamento, para poder gardar imaxes posteriormente, deberá abrir: preferencias do sistema - apps - dandelion* no dispositivo. From dd0432f718a96eb9f57a5cd442c066711ba513f2 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 2 Mar 2018 15:56:14 +0100 Subject: [PATCH 02/31] Update to latest opoc version * Move various clases * Especially improve language preference, backported from compat lib --- .../activity/MainActivity.java | 2 +- .../diaspora_android/util/AppSettings.java | 6 +- .../markdown}/SimpleMarkdownParser.java | 2 +- .../nonsupport}/LanguagePreference.java | 44 ++-- .../net/gsantner/opoc/util/ActivityUtils.java | 25 +- .../gsantner/opoc/util/AppSettingsBase.java | 222 +++++++++++++----- .../net/gsantner/opoc/util/ContextUtils.java | 39 +-- .../gsantner/opoc/util/PropertyBackend.java | 50 ++++ app/src/main/res/xml/preferences__master.xml | 2 +- build.gradle | 4 +- 10 files changed, 281 insertions(+), 115 deletions(-) rename app/src/main/java/net/gsantner/opoc/{util => format/markdown}/SimpleMarkdownParser.java (99%) rename app/src/main/java/net/gsantner/opoc/{ui => preference/nonsupport}/LanguagePreference.java (81%) create mode 100644 app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index a75014cb..1b71a177 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -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; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 0e151304..28914097 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -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() { diff --git a/app/src/main/java/net/gsantner/opoc/util/SimpleMarkdownParser.java b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java similarity index 99% rename from app/src/main/java/net/gsantner/opoc/util/SimpleMarkdownParser.java rename to app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java index 88aaad3e..3907cb47 100644 --- a/app/src/main/java/net/gsantner/opoc/util/SimpleMarkdownParser.java +++ b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java @@ -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; diff --git a/app/src/main/java/net/gsantner/opoc/ui/LanguagePreference.java b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java similarity index 81% rename from app/src/main/java/net/gsantner/opoc/ui/LanguagePreference.java rename to app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java index 4bda3ba1..a47a1a8d 100644 --- a/app/src/main/java/net/gsantner/opoc/ui/LanguagePreference.java +++ b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java @@ -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 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: - */ -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() { @@ -178,4 +186,4 @@ public class LanguagePreference extends ListPreference { _defaultLanguageCode = defaultLanguageCode; loadLangs(getContext()); } -} +} \ No newline at end of file diff --git a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java index 033e53e4..677700be 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java @@ -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 | diff --git a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java b/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java index 22015408..a78dfdb8 100644 --- a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java +++ b/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java @@ -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 { 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 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 getStringListOne(String key, final SharedPreferences pref) { + ArrayList 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 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 list = getStringListOne(key, gp(pref)); + return list.toArray(new String[list.size()]); + } + public ArrayList 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 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 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 getIntListOne(String key, final SharedPreferences pref) { + ArrayList 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 data = getIntListOne(key, gp(pref)); + return data.toArray(new Integer[data.size()]); + } + + public void setIntList(@StringRes int keyResourceId, List 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 values, final SharedPreferences... pref) { - setIntArray(key, values.toArray(new Integer[values.size()]), pref); + setIntListOne(key, values, gp(pref)); } public ArrayList 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 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 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 getIntList(String key) { + return getIntList(key, _prefApp); + } + + @Override + public ArrayList 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 value) { + setIntListOne(key, value, _prefApp); + return this; + } + + @Override + public AppSettingsBase setStringList(String key, List value) { + setStringListOne(key, value, _prefApp); + return this; + } } diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index d5102d85..efbd8423 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -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); - _context.startActivity(intent); + 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")) { diff --git a/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java b/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java new file mode 100644 index 00000000..b6758fbf --- /dev/null +++ b/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java @@ -0,0 +1,50 @@ +/* + * ------------------------------------------------------------------------------ + * Gregor Santner 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 { + 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 getIntList(TKEY key); + + List 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 value); + + TTHIS setStringList(TKEY key, List value); + +} diff --git a/app/src/main/res/xml/preferences__master.xml b/app/src/main/res/xml/preferences__master.xml index 9b3586f7..db8ba451 100644 --- a/app/src/main/res/xml/preferences__master.xml +++ b/app/src/main/res/xml/preferences__master.xml @@ -17,7 +17,7 @@ android:summary="@string/pref_desc__sub_nav_slider" android:title="@string/pref_title__sub_nav_slider"/> - Date: Mon, 5 Mar 2018 14:23:51 +0100 Subject: [PATCH 03/31] Redo icon as adaptive icon --- README.md | 2 +- app/src/main/ic_launcher-web.png | Bin 16446 -> 30155 bytes app/src/main/ic_launcher_test-web.png | Bin 0 -> 27466 bytes .../ui/theme/ThemedActivity.java | 11 +- .../res/drawable-anydpi-v26/ic_launcher.xml | 5 + .../drawable-anydpi-v26/ic_launcher_round.xml | 5 + .../drawable-anydpi-v26/ic_launcher_test.xml | 5 + .../ic_launcher_test_round.xml | 5 + .../main/res/drawable-hdpi/ic_launcher.png | Bin 1420 -> 3193 bytes .../res/drawable-hdpi/ic_launcher_round.png | Bin 0 -> 3193 bytes .../res/drawable-hdpi/ic_launcher_test.png | Bin 2947 -> 2966 bytes .../drawable-hdpi/ic_launcher_test_round.png | Bin 0 -> 2966 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 929 -> 2051 bytes .../res/drawable-mdpi/ic_launcher_round.png | Bin 0 -> 2051 bytes .../res/drawable-mdpi/ic_launcher_test.png | Bin 2014 -> 1909 bytes .../drawable-mdpi/ic_launcher_test_round.png | Bin 0 -> 1909 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 2017 -> 4651 bytes .../res/drawable-xhdpi/ic_launcher_round.png | Bin 0 -> 4651 bytes .../res/drawable-xhdpi/ic_launcher_test.png | Bin 3983 -> 4242 bytes .../drawable-xhdpi/ic_launcher_test_round.png | Bin 0 -> 4242 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 3275 -> 7104 bytes .../res/drawable-xxhdpi/ic_launcher_round.png | Bin 0 -> 7104 bytes .../res/drawable-xxhdpi/ic_launcher_test.png | Bin 6168 -> 6492 bytes .../ic_launcher_test_round.png | Bin 0 -> 6492 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 4541 -> 10262 bytes .../drawable-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10262 bytes .../res/drawable-xxxhdpi/ic_launcher_test.png | Bin 8359 -> 9329 bytes .../ic_launcher_test_round.png | Bin 0 -> 9329 bytes .../res/drawable/ic_launcher_background.xml | 9 + .../res/drawable/ic_launcher_foreground.xml | 12 + .../drawable/ic_launcher_test_background.xml | 9 + .../drawable/ic_launcher_test_foreground.xml | 12 + metadata/en-US/full_description.txt | 2 +- sc_edit.svg | 386 ------------------ 34 files changed, 66 insertions(+), 397 deletions(-) create mode 100644 app/src/main/ic_launcher_test-web.png create mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_test.xml create mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml create mode 100644 app/src/main/res/drawable-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/drawable-hdpi/ic_launcher_test_round.png create mode 100644 app/src/main/res/drawable-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/drawable-mdpi/ic_launcher_test_round.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_launcher_test_round.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher_test_round.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_launcher_test_round.png create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_test_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_test_foreground.xml delete mode 100644 sc_edit.svg diff --git a/README.md b/README.md index bfaca926..8efb06ce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![GitHub release](https://img.shields.io/github/tag/diaspora-for-android/dandelion.svg)](https://github.com/diaspora-for-android/dandelion/releases) [![Build Status](https://travis-ci.org/Diaspora-for-Android/dandelion.svg?branch=master)](https://travis-ci.org/Diaspora-for-Android/dandelion) -[![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fdiaspora-for-android%2Fdandelion.git) +[![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fdiaspora-for-android%2Fdandelion.git&mail=gro.xobliam@@rentnasg) [![Chat - Matrix](https://img.shields.io/badge/chat-on%20matrix-blue.svg)](https://matrix.to/#/#dandelion:matrix.org) [![Chat - FreeNode IRC](https://img.shields.io/badge/chat-on%20irc-blue.svg)](https://kiwiirc.com/client/irc.freenode.net/?nick=dandelion-anon|?##dandelion) [![Donate Bitcoin](https://img.shields.io/badge/donate-bitcoin-orange.svg)](http://gsantner.net/#donate) [![Donate LiberaPay](https://img.shields.io/badge/donate-liberapay-orange.svg)](https://liberapay.com/gsantner/donate) diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png index 39e2810350a6c1ccde8232d88df709e803be646c..0a8685ceb61ac4116c857becbf2a868c1bc5620b 100644 GIT binary patch literal 30155 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 LbyTVzSx5X2`)pu- diff --git a/app/src/main/ic_launcher_test-web.png b/app/src/main/ic_launcher_test-web.png new file mode 100644 index 0000000000000000000000000000000000000000..8f31241ccf6f7919d00dcbc52cf4bea04b7ed43a GIT binary patch literal 27466 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 UPX!wAoCgA3GPW>!XXuLiKgC@BZvX%Q literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java index fd3aaef7..bec88c4e 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java @@ -22,6 +22,7 @@ import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.pm.ActivityInfo; import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v7.app.AppCompatActivity; @@ -69,15 +70,7 @@ public abstract class ThemedActivity extends AppCompatActivity { */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void updateRecentAppColor() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - BitmapDrawable drawable = ((BitmapDrawable) getDrawable(R.drawable.ic_launcher)); - if (drawable != null) { - setTaskDescription(new ActivityManager.TaskDescription( - getResources().getString(R.string.app_name), - drawable.getBitmap(), - getAppSettings().getPrimaryColor())); - } - } + } protected void updateScreenRotation() { diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..bbd3e021 --- /dev/null +++ b/app/src/main/res/drawable-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..bbd3e021 --- /dev/null +++ b/app/src/main/res/drawable-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher_test.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher_test.xml new file mode 100644 index 00000000..f1b3aaa2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi-v26/ic_launcher_test.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml new file mode 100644 index 00000000..f1b3aaa2 --- /dev/null +++ b/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png index 4e38e5c29aa4578e59c5d93fdadf1c03a2e3ceda..6f647c49b725a8f3af32f80553be7cb10834025e 100644 GIT binary patch delta 3189 zcmV-*42tuN3;7t3BYzA)Nkls_CY?6|lNlrp|fLr~B8h_inv^-+RCQFCMR34`f3m6@T?JDeUk6KL<884D}C6 zMFZe}hfgy&r>_BqJ%JcUJi_?!j?N$Cld5tVo~#s$Q_6>fz-Rale(Oq~z2ji-y51p7 zQoKyb)WOnZ+B}s}WAow#Dc`JN}e|xGg@E!Bp6Sh6`n;u}$xB3uVOMm$FIFHi5 zbJ7%b5S6UDfR)z=g$1Ow)1K2#Sb(8VeXz(i@wH9q)PJo6%z6!#Qszm?RNv|YV|3TK zm#54%+JM43fG+Lzv-%MjiEP`vMzs+G)64+#)C$0u1B$+8vZ@7iGNr3k!SPC{8H!!~ zjLu_Zir=gVib>JwKsZWq7Id^KNbH4%%gX%mohk-JKq)Txg)1RE)dp0tSAu-BRX}2i zPbw=7A%AYnfYVceG3!k-MT<24@obBdH;Xu(bxZX;pTlch~ZITCMvxX2=&#CGVJ zSURgWfnxv?M7X3Zpt3Z&2VFK2=CNtM<6@G zIlT}ZBajjbN+jzto%L;eA%NIW-jfNrv&1dle1HEOHqEBX0O=xDQb|l-0Y?W?vhp`7 zu>^@@a<+7Bs4>N!G_go3l_|AsZqZi&BDUaQBiWL#6|Kn_p>K2N0Fo(=^)>G?9BMf9 z$L5|SL#?9#vF_%XP&k7L=}-F_IBmtP>M4~_h{UTeg>-zVF{C9;D$VHaQLCd#q-5ir zOMe|BY{tzzw-!!h6T&|2L0}uUliKzcbUic#1W=NRC7svJXFdm@)3<9(~&tvwW2`BiCLGPD@LRk(~Uw9=-Cu(kc;69G6$k zU+@=^+2m2@J@NS~>6tmX)x!F|E2aTDeSfi@~0~BBdfOLst z?7ecAkTiilCI-<<7;`6>omaMIG%*Lzr9A5Zq|1qLG;?2iVlK@&mj@X0&z8J+u78Ku zgdHjrw!a)r{8(i+BAEl|dVT{Mzg=bW9O!Ej?$h@@ZUCgsA=6b&8!!y;WzOfl)7c`>3{aA}a_m&~=Z5;#X#^XjbKFtsyuVe)Q9MXbYg^g(C zmld3bd*RxjjlmA%5Ox zWvHZ5Ytnd->iTB%tGo%xt4z01R%_AG8+9lLdrB24n_J8R#D&y0G@}(?RB)FtZn{^&4~o`H7}*T^ zog*;!Q_m$pS06N36dYC#UajK{AS&*G#%11E;UNR2BqKApu%!(rvL#iE5(F= zDX)QW+v}gI(Wq1<^5i_5&THV$j2op_w9-+`Wx7ltP2iTK%?VWKQGef5b{L!*O*7hl zwi>TJxFrh9i|00f`i=2}Q_l@sS;Xg{fk708SR?c4>)j2V?{;PjK)kPPLa*&qajc&l(GLd&N&_N?Tu0k%zW$2%M+N8n;}LN_17qOS&U*}a$WE~QYz)_-9t>WLz2e%V z1|xm}-g#@EaeoN+!+=3T*?vei;`7hqtUTyb4kKE!vK3|%T|@UK0tSJRIkslDCh=^C z_=k>^CKOdzVweF*AHb2QRznXpO;a;U#+kLb_A~!jh90V#bl_BCp4yX9W0~O^pK>Uv{T%UE=QsLeQlQj&FpNkqXmw(hEzf|+aLK(64>q=Bv*G!0e z*`W$T_MAtrq!O5m{uXR!FnH#pXFHc!JAMx*S!x0w42L2%Fiq8=vSj12Dl#eN$$4m( z(*^40Jj9=}>20vxB>%MAzy*7>+(jF*f9S325j*=l%wxs5Ol-4&vHf}LUkHK@{Mp;X zsKjE_9eOzdpHu3YOs!?l}oh zQ#}})JG#Q`IB=1JgJ0-0D(=39epcU?mf+EmOB9{08R8ofOuQ#3wR7tfr9r8HsQa*m ze@}%~Sd>iJN4Q8%Y>{kvfL!PO>0`pTlVe}%%6~#v8=lKlc>LidSbZTK+!5Te*Mq|h zEw^PSet=@C=AEb;4GyD1=Yvg*Z7+WCy~7=0b&P9p;!5%6Us`(` zNPjwTVs5uO&)B#Iww^FHarTk|8z<=>oPfJup7lYrI5w9CiExs5LL=!SukPvl4<2*GQJjcsXG?`D&_gLoW z=OCO3Z$9vJ3Rv)_$C|5!Ot#%>%{7f3%YSpQPKhN*u=-M=lmGls(3#QQ;=7>xIf_Ey zE>JvM#|eVvr!pjQ4-h-#NDAML~ zh@qge8X(#Y8B2W6C|`zWAH7_R`6)f!BxV20C^FIQqu`2jN5* z+Y*>_<4;+)La_Ywj}Yl-eu6hKs9IUDUc|HDT9ix-vv=kei7-4=ayTz?pqRR)h!Sg#^R;aZ5&z2HRN`Ya)BNIT^d-TAmL zN&F)OeZw`J#w~&AiU4wL(4hx-jk%*gk3Y$g8Fm1a-(Yv&V3#>*+XPEbri<2JSHSEY zOpucqOM3b3b3{qnQd7SdWzHE+`oMkBNvroDYldzsfaNz3?lxqzL)-#}@$6mQ z$y_iEoP^|7v`Com1keWBk_?!5ir>J#1j@6CofsN~BTb+!&wI`wSc*&pKErq9Hv&et b5$^v005r7Ydg22000000NkvXXu0mjfKQ<6T delta 1402 zcmV-=1%>+g7>o;$BYy=`NklUZulkI*1rib!ebK1FTjbSfG-)5@ zNljGHXwt~;5{eRAFW6#YLqwwn5eTv*5^O~=5G|G43Ph}yg;H^6w!7U+cW3s}q&fco zbW+&u&dk}K%god{$(L@nGkeZ_^Pm5E&RMb~Xh92F(EdklMSmoDM_WW~4@H%CLlGqg zh=(Fc1^()Q856qsUEI8;yDhAC;Ju5G5^~e>i1G+LWG`S8Ko~I^3M+m1oA}$lrDfS$ zS=u)p*!hb!K_@RuA*i?@ zDKe8?!Uy>IuSH9OejhK(QrMj>r%4580_X6>kTpRUlNDJCJJC}5*32PG8QfPVtO-h_ zq!C1BbAQ~l(<`j>$r{+MVQYf^nXJk*`@OALFXrmQs?93Zb-RDFCP>XoC1{koZpGT! zicJbh=Bi}ql1?^%mnRRupR&Am&natyvZb1BKlg1_$(#Fgr2p6y7m}#zZdjmW?WkjC zrtU#&fYW1Tvh{GDJo@28-L?Bpmn;d=%JT`j_kSIgyaA;A_@_qn%ItO3+BCVpJH;c2 z?Qou6vlUOKjy|*TZ4l?ceD@3%$dlkje|yH7AS8BqR3WS1R>|x8vgC(9u9MP;&I37i zDS~IG(LYS7)Hc9)rfN&jjVM>`|9^BuBU+{A_&Y}~YCNV{jE0~%OD9i#lBOnyCrU6K z?|<5&vJw=h@t_r!PWpZ-xIz#D16)RrTA`63ou!jApp4xjXwS(as|4vZ1kJE?ayN+i zt9!HL@CD5fdl|%_6+@R|11NGvf@XvhR7VzApY=f2_X5a53wP>DnRFe>lLy~R@p2Yt zgikRm+yi87*lTa9X@C(v`crE@NQv;Kb${VXng(c+TP0>U=$9uxnh;z!Q5Qew!L;#KQMstqwnV^bmhm>?jBOc#2L8i2tW2o?Sf0~@V>g;H40n;vmAb;v* z#+;Vx&gF)%I^p!tVN<_624v<+&SYXe&6R{1@04rzK;Ds@L+9%w@z*FU9fmYWzAGtL zUP*h*_c*00#?nyi8~*rc!HAWtazW4T$TYndlVn%Y z6zfAKrz-_D?g0q|B3mL4SJ*cn-*`G)bskxK=i#)5XFe|I+hnm`3|=NUvhu zoyJ^mJ5rxt`f{j9T`>__dKR^K;pK0#WJIZu2Pl*5sEAJ_bds5>8LK`#vv@(|@|RW} zJxpiVm5y9n{t_&p3YOsUSrQy9;-ufS5-bA_7Lv2?@QL}DoS5*PKP%T?x^u;+n^^{M z>{538m?ZgXJCrnX8g~Bl`9kNoxrf!uTQY@Nt6)=aur1u}6Bk@KSOEI;_Q3+~98Hn% z-O&`y(znYtCf5Xqo6!1DUH>j^`FI?-b`c+s6SSZOEoheQKVm}54FxeMB>(^b07*qo IM6N<$f{rn>hX4Qo diff --git a/app/src/main/res/drawable-hdpi/ic_launcher_round.png b/app/src/main/res/drawable-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..6f647c49b725a8f3af32f80553be7cb10834025e GIT binary patch literal 3193 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_launcher_test.png b/app/src/main/res/drawable-hdpi/ic_launcher_test.png index 2e1ab3f50c9880b38d64fa0266807273f46429aa..c30acbbc11b057b8c92c096e7c46282165446a46 100644 GIT binary patch delta 2961 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 Hu0mjfrIfsq delta 2941 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 diff --git a/app/src/main/res/drawable-hdpi/ic_launcher_test_round.png b/app/src/main/res/drawable-hdpi/ic_launcher_test_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c30acbbc11b057b8c92c096e7c46282165446a46 GIT binary patch literal 2966 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 M07*qoM6N<$f_3$@+yDRo literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png index 375b47d7696e8a59bb3d65b8c31bb7aa27646dfd..a9db7c164b9abd95a07a9e49626b936e2bfd8abf 100644 GIT binary patch delta 2038 zcmVkm+#aRcY@8GHSS~o&o=R+iE{20NX;hLqf%p7>G5d}U~M$I6T)Eh}Tok}KAcL*7!Bo&mF zRH${VP+I01{*4`@-U#;$I}yh8JT3bv=x_`$OQKM>;&(*KDXWFMCky8AiqlN6w1xv; zte+b`lL|VTlz&m>y+HR6a#goA0%OexF>}$;hL~V2?5OzQ1tyuSS%4SJHvlK(RJTM< z{Ri(twBPT&GF3jTVQFpq!7J$Pgk0TaTwF$V2?gD+JK?zuM3^-c)OPzx@WIQe;|8sR z*7~@BW2A?ho3ln$s_i6r*?^R*&jWbS5a+*WD20s^&VL$-&n{pHP6A1of`^n>pJ2h8 zCLInjQ&#+wG$RRX0^5+|Nx3T4r1{|k&nJP`?GmQNN1*iMI$K&43fC=0u1e?-dOv(j;t!m;5tK;Z3Jg0)|IM| zZ|s8@%YUxKF%qTFu2}o!hTLrHqJCIrex^o&yIBdqGF4$;odBgu;>w;(4$GL>#|j2U zl6Yk}Py046_{Lr}O3%@uYemhBWaKrWC12OrX9=)EBDO+IUPLb|@X}^tWtJm+{~Zjr zQrm$#J3ASn8#~a4$2E?Lg&hxX8DoLL&J_sXZGWZHC301(F@@Q&*s>!vsH)CHK%?tG zq2FsAkXC6Vj#svNufHB-EN+IhM8uUvaP5NKf!muvZId2_ovL*}K&yMejl@xRwwO{X zX93ABWxCM3@1I1Wq@Nnl+LK!J))zGLQ&>k}S~7)}9;!iW(zU|tf?S2B#1x!msxz;> zaDO5aD*hBo;N2q{q-)iq#uh!gSJ8%!-PWPdG%Z?jRD-H{1RC(~Q5kjU&3!c5bgmX% zy4Q?K)$L4d%s)U2B!J^!`#*UYvniE&gl4)CiBFY62tcabf1?3)=sS%-LG)PE4IQYh z-E^(3qZ8eK+JtQ0jmaHA1bXxbUA+X5b}_hUgbdVP;D z0+KkTPP8^Hz+{09m!}IQzz^j2vCkjJ{{Nt|4YjoC2L!Fv=}~q`D@wlBfEFLDv45$# z0|MS39S$-Q5QUzTkO|MU_H>{AI0FSA)1XqSy}=$+E>+gpjByFyW4B=j)xU)b5?rt+qtp0QMzj@0np~U z(^@9q^8v&6-tht1Xzo7Rb^`d_H-F}SKE~|IZ{(cCv45Yjl>ij60$d09KpUF%xX9I` ztl}24R12x|(C>|Cda|tqR7mvc?F@|Bg~86X5>BGX>=um6U8rOibmdQ&M3t9L1!Y zs6*v+JJWfF;7sG!i)1Rc61dM}oTb7~*D~qXmUh}V>TV9?9kZ=~Ar3?vu5JY%6Y53= zS@do?|r5=aVaPIE#URd2u%Noc33p*$o&ipAVTB`G~g_6~1W4DpR8G z7D3m;?!+=j4|FOw_SI!6Aw>MY&zZhs2wcf(@QJD}$UKsrrOziX*?$!Z*ycqRx>$3x z_=?w>^ZOy^GUgkB(>X3}_7L$E*mX{R1(*gsTIB8Y!9*gT4Zog;Jt&^2dpJpO;JZPA z-r-j+0u~mNwNGu>cmPxRi6VZx&RK#r=`gts1AhI_zrZs@21|c_Kga`)u~__l)?K?m zBs^tFz+)lE%Z}DMo_~`GSOAaR#yk8nXnq=lfvvbUyx1Fo1POj9+4;DWJtd=i97Ti& zoS91^E$Q@JnR*b`v=6+QI|YpaKXhNTb*(5mw~)1l+C;?ClgB}FJKSRg4x1D_rzkq7 z(0$>SFxKbsnu6VCfWQt4%>)u~5)kMaa%_)p%)KXIYR)2@P=A9zVpXswY>a>f@EkCg zN668=c`+?{!x%`bOpCL(d|S7T1V( zl-7eVpJR)ZzHggz^I;5(g?sS50o)wp**Q~2vy)=7i~WB7KPf4q U9Dr~;w*UYD07*qoM6N<$g0f=kH2?qr delta 908 zcmV;719SX?5TOTr3D31JlKO4 z4|)-$h~C!5-Vp+Uu>&2HY!rfsqbDWCHt8%?vD zWOjCvwjm2YD4Ffd@7wtvzi-B5YCMf+>7SOa@2e~}Ut5z^uz#Da!n0X2#=9sM^ z`7Cfv!$v4>6Mv~S`NExGb|)oZJxfUbUraCswvugNnZUu4=b2OGx?TY`T@+!n0{pwB z*N_1jU3J1}kvcIJfpj{(2=?(A!^Ms+a7k%5y5*IGIT~8%^aHg4L$4(s!5k~AVo~POPJf0$xu-vlRR-Mo5MN|`rz-?wAL9^+$_Vl|VLvHWm55^y@5hYAUJE3{ zL9B%>eIiUpD(?bjDTBq#%O#B#1Jfjp>&PTv4}T4Zm<=eKM)ef3LY%xC(IorzcLL^< z>ff>WZM-0|wwiV>QX&sbe?cjwBI%!zvtxZkMr#>&`+b~Ek=lH1T*aLG+ni=zKROc5 zZ8^zQuO{a;-#Ow6@fCA=woXHXV zJb#sd_2<;@94GIj6!L$m`5nT1p;G zeL0si*P^Lk@y9B4aj>=Gj~46VaJMdw*X!bfqefRunW|nf)x{-W-CVO$Ty#%rU3BBv ivbyMQJdMX>`U_b37y;_bw>1C&002ovP6b4+LSTY+3a=yp diff --git a/app/src/main/res/drawable-mdpi/ic_launcher_round.png b/app/src/main/res/drawable-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a9db7c164b9abd95a07a9e49626b936e2bfd8abf GIT binary patch literal 2051 zcmV+e2>kbnP)km+#aRcY@1J|%?L4b z(b0yOU@h#Z_}~R5nXFlW7tA*RC*)MOL{9w&??SZS@4YfrKCEGBZTrD1=@H5Al#`$_P@%cw;(4$GL>#|j2Ul6Yk}Py046_{Lr}O3%@uYemhBWaKrWC12Or zX9=)EBDO+IUPLb|@X}^tWtJm+{~ZjrQrm$#J3ASn8#~a4$2E?Lg&hxX8DoLL&J_sX zZKcyCa#gD_h1s##vLiL9s?J0}qw7GS-)kL^R%s-TSGIbuzaC^PZici(#Fa&G?SkEb z+nYdblOBbgs&zm>t9!tW#8G#)m{KZd0m&|9y3oAupG2XgpBm8GlUnrF7c}xySVv%5 zGKH2NszGbgwZiLyT!p5@6r5$MGq1gHA`&Y86iVRTBO0V@)uYB1J-S!XhK}9Vq0lrf zT5(i^s(Az&@b6I>b?D7~G}?5o7G1j6j7rt*Ol-_QKno;*<6!$gc^I=Pm3o9`x)F&_ zl|l$Ws@#900d?p*jX**4Skw(2sIA>}t*xUI-GADKY8pGt#=>=JX1(CbERjB{n6x<2 z-AKSUI(rH(U>YF=W`C|mHy^f`0kTEF8c;I?wH9&ZTJMk}q>+F)@`gW=SluXuz^oKC zI&h;ARcP87t=j?~toLI{AI0FSA)1XqSy}=$+E>+gpjByFyW4B= zj)xU)b5?rt+qtp0QMzj@0np~U(^@9q^8v&6-tht1Xzo7Rb^`d_H|Bmm#_Y;(RaDzaxW-!u@~!X@P8WDfU=g!OBD-Q z_xZz_-%h(pVvBFv(oTb>BY&tv<#apKd4}LjDQKa+BfQM z4&)uPt$-m8L>sPd1s@aYMh02Ak(uYnmO*!N{Byse~rh=fYyx%w=)kF)u< zlG~n*7tI#Kw$0uxNxo-L(#>jULD?*P)`#-3v|&gYXWayW~DfO&B?^_=!so!Jc- zEuRmW82N~|6&1c{$0}2z?-oJV!|uc~M-Ox=H}=(KDIrAszt5SzV+dTyYVe7wF33ER zou$twFWD6e*ycqRx>$3x_=?w>^ZOy^GUgkB(>X3}_7L$E*mX{R1(*gsTIB8Y!9*gT z4Zog;Jt&^2dpJpO;JZPA-r-j+0u~mNwNGu>cmPxRi6VZx&RK#r=`gts1AhI_zrZs@ z21|c_Kga`)u~__l)?K?mBs^tFz+)lE%Z}DMo|6e!0FT|qJNzGWKgdJxvM54@Q>1&skebYHY}ttdLTkhO-|M8wjQ z$3b#C++zd|n-n~!C_1Omec_fc*5~n>g573-zzzz{1QKu(5a=0lY>#iuy(eI5&LW&p zgFj+buqSMcfCcazFqcQj(Y<)?S+EAX))4#+fy=?*Qr<4E9&%Sf`h8k7nVC3$ChSX-SjMrtBP;1LlG`t;+L`um-otcr0F6X1WFjuXru^yJYWm zS1W)pB9Ru?hsfy#d@Dv#&B_BunzqH;bl%HaMxU5 h46~DBvWxwG{y!-xq8xy5JGTG;002ovPDHLkV1k__=8FIT literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_launcher_test.png b/app/src/main/res/drawable-mdpi/ic_launcher_test.png index 7f0dec563a533d9e0f902afaf9114f5871df46d9..f23d1091a45a101b7374ccb4f1c3a2449e3d30f9 100644 GIT binary patch delta 1895 zcmV-t2blQY5A_a^BYy`xNkl2RHdSK{O{3J*XcJ?T8XH@yt;7&(t=0(j2wD(OP(i?G zd3|qoW_EU2ftg*wOuUROFeV#%_WJ z7QW_t{EXWOZK+SU6JgUUXF1;t3kcw00@!Fb1LmodM()dF*hWCGCmp{0=oJ2~qZwRE zfG@g%ZX-bdb$>;;t&$9n#bZh_AzIis@u3V%Qj$i>N+sYTm8&D z&AJ9x(c)UN9ut&Ev7m;8P62*fcY^ms!e)RS3QU~`wttl4b4~C@Pk?tJVJ5vMz)41U zONp)1JfCZZRAs<+H+VM^NR#<6+W;9It`kbXrw*lxfW;mb0mEbioB|P}#}!*L51H&$ zyL0B-o&W-Ek}GA$!wQeCBr%#A34N%;MJYFHR+^~8X~P4tAURl&=SKvgJ<-p*b%MTg zj8L970DnT;SwUh%4Hnpa;PKd+^HP%x(uv6{q=UaN=)(x-W+Y2UQVP-f5s;)}}rVQ2N;v5sMn{TDxI<*xnTI1nsw-O(8 z#O%0Q0`bNBXJ`-W*ami)0MGW$qBYpu+$;lSX=!P}ntv;? zsi{%Ecdw}l&z1d#wbj>M+VcHR*S@Ga4v4^|;eDaMOdvfPqHHF(p@zVW(V=+!@BtS< zT7<2^Yla#El!jipC_z%Mo}$Cs>e z+EOVINDg$kO{<6K&TC3PqKUKMr^)!?~w$muV2O0FO2hgG2azZNs&PeYr z&K2^#5-|UEj}Oj9bJ7NCCcxhlu}DkvnnZ zdm&hzsk0Hk`TTu+E=jMM!1%$in}0Ct1?*xeq01Z$D-@>#T`ni44hz8Vc5ZIxE(eM~ zBappuNsbvS&i~Pl+`4%aw47Q9rNpyQu$nQuloH92Fp3`DQEP>1!-KGR%X%TZ2mr}t z%8nnwdE+8w_u|#J{#LD`I<3T_)pNB4umSE`!eFf6J>qICmD3@#?>wrdoPXw--n6U$ zuauv|x|%9nH9K9dizJf!$V$BOUb=8rh!;-3TFU9HI5=F#*b+v||nw61Y(B(5<^-Hl-MK^98{*qkewW3K42X-=gb=!gB7~wI_=}Z(UD2SjgIy!qB^`) zJSA)M84)LNVJy}`x;C>;ufV&xQ*ZXegn>{vJ|4;>Ye+;i90a$?FZmpKUYK<* zeZIHXFZq;#os=Yy;D3_<%cuyy53C7LZZpZ}mXdV-n$_$m%A|L0JO+~o#j?oV3wm_ymAr}!{MhH;u!+m)S9*f89Ql9sPHAE#r zBw-|pQK2v;Io$6(DhBt`idjlCT0sD-$)9hs@HOA#XWWL{a$q0oJ475KNF1|A{xiXf zLq#AQcov$`l!1XTAtD%TEPT!P_?g%yOzflY_CI@gvIu7i_FK_+CF}72AD$8=SiGm_ hHay#6cJbQJ{|7ZWOwK!d)rbH9002ovPDHLkV1gL(i)8=+ delta 2001 zcmV;?2QK*a4&D!tBYyw{XF*Lt006O%3;baP0000WV@Og>004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw00006VoOIv00000008+zyMF)x010qNS#tma#Hj!R z#Hj)8Ya7r2000McNliru;R6#C10)#1T$lg=2F*!CK~!ko-G7=}Y*ghI$A4?@>2!Lb zErW_+Z54Y-BLzfTKs1yhMDT9BN2B4v3*rMtV~h#vNj&FhFj0@1U<1Z@dC+)6QG*3h zivnW7Dy={-R@&2}q)3*c>FizXQYCGg3fQ6vxp-TzrN zG#@ZW|4yUU3&j(lxjO{{G2j;iYk=uvP}&Q$rka6$$w-(E!PjV!j+KqqI&0EIY)Qls zSW+67HfzQheAseyN^Ki1os8ITsgqTCGO!Amatb?zDH_8hM;eGo9Rqk=3)ZzM75@s? z_Y^fDKz}WuVx!=(`BIfGl_{Wy%&aW@r=N*LAU@RnJ4btaQ*BhKkJErUFvnJ*3MVbGWkGqxrL6eZt91R^%n#pg zWPj&3wW@W`k8r=6~fr_Q9Z>Pk7UYzC|Uxq`->J1~+9+^c7f zj}nzpj~+&nnqj~Na~4RBe<@0s=n?s8JC-<=aiGN@K4N_i!Zxe zU3keNrp;c!|xO0coG=D17SO;PWWavpMY5L^({i=M{{HSd4WoA=U zUMWT8l_+a4E|Ds$u9R8xuOclyBkrElXD^TsUw?^X$AV4>oTafIi4}3ClOEr);M|gO z$)8eYTT~=LE_i*J3BdytO}$7>E|_9jmZJ#dX{>Qo$m^ufHv|s+uY-@@{EupF{C{2@ z5B86!HU^IN(!Q@jOpj@}m>aywS_%6R&VY_zT6pE(k4T>1Px1LPnR&?~HGTF1CZAhM zx-TnfxexXqp?zbGo=w!OQhzwZc!;obqBm_gf75{4^$&%uLi`?8krzOI$r zygY7Q_L#cnu7~W~jDZtud~Xe#)_=W8>(33+d$?CnA*Z-#^nw~|9D#m4mpYGzfN6$w zk&!h{O|7UJ7KZ8Z&~xyB`e9q0Af)7Rjj=zG1_I&1!ENv3O;6*NdmrVz^Dj!eL%8C$ zQ+kYQ;QqGt( zi4;jRMQ-eGb* zI){#HjL{QWb9ZRo)SKCOesmS(v#O)KALu*G>ZcxH*VZlk+VYd+7ZzCs z#pO}goKsrP{^p-ld-EP~A%Eaj;2EGdJP*XWpd-=LV}lXVP&c!6(f z*I|0#XkS0CzwkI6t&J+WA`LJucf8v%bCbpxKNA;Eh!XSl$(lM5IB{ZthV7f_Y->`5 z#Z$@kpCR>MeWGffewbh&C?cWjdb$tFkwd>p#k?hW(!8`a)vK4ETz@8CZ+OoQ{61i% zj>6DfoQOb|ZmY|jlu@M=ZF`!eVe98uCxU$N+Vj%c{)fwCR zMQD}YdI~pltr|m@-C``RagT^X_}Jd37hO4H489Y%Pp319yl=amjv>*kkMB8pYdlt- zzYq9yIPkUvY)EX?rM2Ks244rAMOb&O#uGeC%30E5@;NdU&nAItGR|JM3BDjChy&c%aSU%`>KqPWZP4riT ze%&aZ+P@m4K#0)<{C{VE04s+@Ulw=LY5)KLC3HntbYx+4WjbSWWnpw>05UK!H!UzT zEipM%GB7$YGfFx%F)J`JIxsMH^FKZS001R)MObuXVRU6WZEs|0W_bWIFflhRFf%PN jIaD$*IxsUjGd3$QF*-0X$jq=600000NkvXXu0mjf&|RN4 diff --git a/app/src/main/res/drawable-mdpi/ic_launcher_test_round.png b/app/src/main/res/drawable-mdpi/ic_launcher_test_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f23d1091a45a101b7374ccb4f1c3a2449e3d30f9 GIT binary patch literal 1909 zcmV-*2a5QKP)2RHdSK{ zO{3J*XcJ?T8XH@yt;7&(t=0(j2wD(OP(i?Gd3|qoW_EU2ftg*wOzlBS8OkMYye!43EWQN--f?*f;T^ z3`|mzM#@Sh;3Aj@;G zfE@}p*<8w{$Mo)luAz>!HCcsHXcuR?`(>$MRhE!$1b~ku85=fKzFxvnb9j+5f zzo!nRih#u)76HR#1Dpa8qsJ9nG7p*TRl9TM+nxXdZIUZx$HNMbt|T#<8VP-5EkmpAPp*_*hyLE!TbBs`)HUL7~SwUh%4Hnpa;PKd+^HP%8TlwG}K{LwMc>M4I7eHEst-))C8UmDwYDR`boJ=4i1`O1oUJZeQks&9kOR`$kO{<6K&TC3PqKUKMr^)!?~w$muV2O0FO2hg zG2azZNs&PeYr&K2^#5-|UEj}Oj9bJ7NCCcxhlu}DkvnnZdm&hzsk0Hk`TTu+E=jMM!1%$in=tDI>|!aQ%Nz_V z6sH4SE+?iA3&8JoZf@r;2Z}!9)JgTLf=9%8KtN^c+pToMEDqJ-?U9O8HlKaR?yz*YUa8`&HPQO~p>8v<7 zMp*m0Yz3q^7#j;KwYZTa^RuFH?IT=cy14MoA0MqgfK9@-QgELXhx_=uY%8Vh*?=I3 z$uU5=*IUXC)(UU7l$2;H`UN^lh;|!$kx^i346Nr3v{oxTrcJ#t`=cXa17q}fKBQn2 zF);zkp0r~X^8M3l5Q^c4$Jz7+xCN@!IdJOClNp%0=u6T@+76p453#fUkDaHevDn2s~ z4vHiMlXjQeu+EHFI7Ao{7>nw61Y(B(5<^-Hl-MK^98{*qkewW3K42X-=gb=!gB7~w zI_=}Z(UD2SjgIy!qB^`)JSA)M84)LNVJy}`x;C>;ufV&xQ*ZXegn>{vJ|4;>Ye+;i z90a$?FZmpKUYK<*eZIHXFZq;#os=Yy;FAE$s0hCgtO-zVGs)+cl63x>)$AzB zq<3yS29HH!en?{vWgVg}-~SCk%)#tZ;d(uc8X4iYJ~I}M(GKahK&Cw*7ZF`X2vF|B zeR&KXi^uFzp7(_{L?uBaVI+xBp)e&m-0wXq2KUm6SxPfnK>(}CpKr48HQ(cB+=kn7 zAL=_q93w~^vq%0j!HPpgARKrWn$eVjfiNK=7;G$j&G-13*d|Quqwn@Vdw8-4XA1UP v(RU^5@c$p45+zu?r{^|2+hTU{+Ry(7H91VqJA2iL00000NkvXXu0mjfw6}(o literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png index 16dc7a29644ef968e6f940f2380f0b3639a36c3d..c97e5b53f9e84de99f5eb59d4b7acc9478c0c55c 100644 GIT binary patch literal 4651 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 diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher_test_round.png b/app/src/main/res/drawable-xhdpi/ic_launcher_test_round.png new file mode 100644 index 0000000000000000000000000000000000000000..43025584e6ae0ac3b1b6b21a84298fe93c8404e5 GIT binary patch literal 4242 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 literal 4541 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_launcher_test.png b/app/src/main/res/drawable-xxxhdpi/ic_launcher_test.png index dbb8dee887023ffb0c8e951d1d0057eee23745b2..72aabea6a26504d924f796d3f1a863ea0781ea92 100644 GIT binary patch literal 9329 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�bkp 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 od!H!C{~vg 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 f1LOqwFdqL8_RYO + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..2610c60c --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_test_background.xml b/app/src/main/res/drawable/ic_launcher_test_background.xml new file mode 100644 index 00000000..e7de1de8 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_test_background.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_launcher_test_foreground.xml b/app/src/main/res/drawable/ic_launcher_test_foreground.xml new file mode 100644 index 00000000..2610c60c --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_test_foreground.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt index 2332973c..120c4be9 100644 --- a/metadata/en-US/full_description.txt +++ b/metadata/en-US/full_description.txt @@ -12,7 +12,7 @@ It adds useful features to your networking experience: Support the project: - ✋ Translate using Stringlate + ✋ Translate using StringlateJoin discussion on MatrixMore information about contributionsSupport main developer diff --git a/sc_edit.svg b/sc_edit.svg deleted file mode 100644 index b5074d99..00000000 --- a/sc_edit.svg +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - From 5921549a9c6d76c130dc7f2004eec83d114ef476 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Mon, 5 Mar 2018 23:37:24 +0100 Subject: [PATCH 04/31] Fix secondlion BuildConfig, githash --- app/build.gradle | 4 +- .../activity/AspectListFragment.java | 2 +- .../activity/TagListFragment.java | 2 +- .../ui/theme/ThemedColorPickerPreference.java | 2 +- .../nonsupport/LanguagePreference.java | 2 +- .../net/gsantner/opoc/util/ContextUtils.java | 50 +++++++++++++------ build.gradle | 9 ++-- 7 files changed, 48 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 82a4c23a..eb3165e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,9 @@ android { targetSdkVersion version_setup_targetSdk buildConfigField "boolean", "IS_TEST_BUILD", "false" buildConfigField "boolean", "IS_GPLAY_BUILD", "false" - buildConfigField "String[]", "APPLICATION_LANGUAGES", "${getUsedAndroidLanguages()}" + buildConfigField "String[]", "DETECTED_ANDROID_LOCALES", "${findUsedAndroidLocales()}" buildConfigField "String", "GITHASH", "\"${getGitHash()}\"" + resValue "string", "manifest_package_id", "com.github.dfa.diaspora_android" applicationId "com.github.dfa.diaspora_android" versionName "1.1.0" @@ -53,6 +54,7 @@ android { flavorGplay { buildConfigField "boolean", "IS_GPLAY_BUILD", "true" }*/ + flavorTest { applicationId "com.github.dfa.secondlion" resValue 'string', 'app_name', "secondlion*" diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java index 5e615f2a..9da6a6de 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java @@ -167,7 +167,7 @@ public class AspectListFragment extends ThemedFragment implements OnSomethingCli final DiasporaAspect aspect = aspectList[position]; holder.title.setText(aspect.name); if (position % 2 == 1) { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().color(R.color.alternate_row_color)); + holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().rcolor(R.color.alternate_row_color)); holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); } else { holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java index 8502be10..7e6cb353 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java @@ -166,7 +166,7 @@ public class TagListFragment extends ThemedFragment implements OnSomethingClickL final String tag = followedTagsList[position]; holder.title.setText(tag); if (position % 2 == 1) { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().color(R.color.alternate_row_color)); + holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().rcolor(R.color.alternate_row_color)); holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); } else { holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java index 6b61210e..524c1b65 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java @@ -50,7 +50,7 @@ public class ThemedColorPickerPreference extends Preference implements Themeable AppSettings appSettings = AppSettings.get(); String key = getKey(); - int color = ContextUtils.get().color(R.color.primary); + int color = ContextUtils.get().rcolor(R.color.primary); if ((appSettings.isKeyEqual(key, R.string.pref_key__primary_color_shade))) { color = appSettings.getPrimaryColor(); } else if ((appSettings.isKeyEqual(key, R.string.pref_key__accent_color_shade))) { diff --git a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java index a47a1a8d..7b4616b1 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java +++ b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java @@ -114,7 +114,7 @@ public class LanguagePreference extends ListPreference { // Fetch readable details ContextUtils contextUtils = new ContextUtils(context); List languages = new ArrayList<>(); - Object bcof = contextUtils.getBuildConfigValue("APPLICATION_LANGUAGES"); + Object bcof = contextUtils.getBuildConfigValue("DETECTED_ANDROID_LOCALES"); if (bcof instanceof String[]) { for (String langId : (String[]) bcof) { Locale locale = contextUtils.getLocaleByAndroidCode(langId); diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index efbd8423..a37102bc 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -100,18 +100,23 @@ public class ContextUtils { public static final String ARRAY = "array"; public static final String DIMEN = "dimen"; public static final String MENU = "menu"; + public static final String BOOL = "bool"; public static final String RAW = "raw"; } - public String str(@StringRes int strResId) { + public String rstr(@StringRes int strResId) { return _context.getString(strResId); } - public Drawable drawable(@DrawableRes int resId) { + public String rstr(String strResKey) { + return rstr(getResId(ResType.STRING, strResKey)); + } + + public Drawable rdrawable(@DrawableRes int resId) { return ContextCompat.getDrawable(_context, resId); } - public int color(@ColorRes int resId) { + public int rcolor(@ColorRes int resId) { return ContextCompat.getColor(_context, resId); } @@ -159,14 +164,23 @@ public class ContextUtils { } /** - * Get field from PackageId.BuildConfig + * Get field from ${applicationId}.BuildConfig * May be helpful in libraries, where a access to * BuildConfig would only get values of the library - * rather than the app ones + * rather than the app ones. It awaits a string resource + * of the package set in manifest (root element). + * Falls back to applicationId of the app which may differ from manifest. */ public Object getBuildConfigValue(String fieldName) { + String pkg; try { - Class c = Class.forName(_context.getPackageName() + ".BuildConfig"); + pkg = rstr("manifest_package_id"); + } catch (Resources.NotFoundException ex) { + pkg = _context.getPackageName(); + } + pkg += ".BuildConfig"; + try { + Class c = Class.forName(pkg); return c.getField(fieldName).get(null); } catch (Exception e) { e.printStackTrace(); @@ -174,7 +188,7 @@ public class ContextUtils { } } - public boolean getBuildConfigBoolean(String fieldName, boolean defaultValue) { + public boolean bcbool(String fieldName, boolean defaultValue) { Object field = getBuildConfigValue(fieldName); if (field != null && field instanceof Boolean) { return (Boolean) field; @@ -182,27 +196,35 @@ public class ContextUtils { return defaultValue; } + public String bcstr(String fieldName, String defaultValue) { + Object field = getBuildConfigValue(fieldName); + if (field != null && field instanceof String) { + return (String) field; + } + return defaultValue; + } + public boolean isGooglePlayBuild() { - return getBuildConfigBoolean("IS_GPLAY_BUILD", true); + return bcbool("IS_GPLAY_BUILD", true); } public boolean isFossBuild() { - return getBuildConfigBoolean("IS_FOSS_BUILD", false); + return bcbool("IS_FOSS_BUILD", false); } // Requires donate__bitcoin_* resources (see below) to be available as string resource public void showDonateBitcoinRequest(@StringRes final int strResBitcoinId, @StringRes final int strResBitcoinAmount, @StringRes final int strResBitcoinMessage, @StringRes final int strResAlternativeDonateUrl) { if (!isGooglePlayBuild()) { String btcUri = String.format("bitcoin:%s?amount=%s&label=%s&message=%s", - str(strResBitcoinId), str(strResBitcoinAmount), - str(strResBitcoinMessage), str(strResBitcoinMessage)); + rstr(strResBitcoinId), rstr(strResBitcoinAmount), + rstr(strResBitcoinMessage), rstr(strResBitcoinMessage)); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(btcUri)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { _context.startActivity(intent); } catch (ActivityNotFoundException e) { - openWebpageInExternalBrowser(str(strResAlternativeDonateUrl)); + openWebpageInExternalBrowser(rstr(strResAlternativeDonateUrl)); } } } @@ -239,7 +261,7 @@ public class ContextUtils { @SuppressWarnings("RestrictedApi") public void setTintColorOfButton(AppCompatButton button, @ColorRes int resColor) { button.setSupportBackgroundTintList(ColorStateList.valueOf( - color(resColor) + rcolor(resColor) )); } @@ -272,7 +294,7 @@ public class ContextUtils { return new SimpleMarkdownParser() .parse(_context.getResources().openRawResource(rawMdFile), prepend, SimpleMarkdownParser.FILTER_ANDROID_TEXTVIEW) - .replaceColor("#000001", color(getResId(ResType.COLOR, "accent"))) + .replaceColor("#000001", rcolor(getResId(ResType.COLOR, "accent"))) .removeMultiNewlines().replaceBulletCharacter("*").getHtml(); } catch (IOException e) { e.printStackTrace(); diff --git a/build.gradle b/build.gradle index f86d3bbf..3f0532f1 100644 --- a/build.gradle +++ b/build.gradle @@ -63,7 +63,7 @@ task copyRepoFiles(type: Copy) { @SuppressWarnings(["UnnecessaryQualifiedReference", "SpellCheckingInspection", "GroovyUnusedDeclaration"]) // Returns used android languages as a buildConfig array: {'de', 'it', ..}" -static String getUsedAndroidLanguages() { +static String findUsedAndroidLocales() { Set langs = new HashSet<>() new File('.').eachFileRecurse(groovy.io.FileType.DIRECTORIES) { final foldername = it.name @@ -80,12 +80,13 @@ static String getUsedAndroidLanguages() { ext.getGitHash = { -> try { - def stdout = new ByteArrayOutputStream() exec { + def stdout = new ByteArrayOutputStream() + exec { commandLine 'git', 'rev-parse', 'HEAD' standardOutput = stdout } return stdout.toString().trim() - } catch (Exception e) { - return '???' + } catch (Exception ignored) { + return 'unknown' } } From 6cac47763c00d3f9e11969e721ebb372ebe4084f Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Mon, 5 Mar 2018 23:45:10 +0100 Subject: [PATCH 05/31] Release v1.1.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index eb3165e8..3838b62b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { resValue "string", "manifest_package_id", "com.github.dfa.diaspora_android" applicationId "com.github.dfa.diaspora_android" - versionName "1.1.0" - versionCode 29 + versionName "1.1.1" + versionCode 30 vectorDrawables.useSupportLibrary = true From 43a2ad25bcb101e721bf71d9da42cf9f256f448e Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Mon, 12 Mar 2018 00:05:53 +0100 Subject: [PATCH 06/31] Update opoc license headers --- .../activity/MainActivity.java | 8 +- .../diaspora_android/ui/BadgeDrawable.java | 2 +- .../format/markdown/SimpleMarkdownParser.java | 23 +- .../nonsupport/LanguagePreference.java | 21 +- .../net/gsantner/opoc/util/ActivityUtils.java | 19 +- .../java/net/gsantner/opoc/util/AdBlock.java | 19 +- .../gsantner/opoc/util/AppSettingsBase.java | 19 +- .../net/gsantner/opoc/util/ContextUtils.java | 210 ++++++++++-------- .../gsantner/opoc/util/PropertyBackend.java | 19 +- 9 files changed, 177 insertions(+), 163 deletions(-) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 1b71a177..348643db 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -693,10 +693,10 @@ public class MainActivity extends ThemedActivity } } - final boolean darkBg = ContextUtils.get().shouldColorOnTopBeLight(AppSettings.get().getPrimaryColor()); - ContextUtils.get() - .tintMenuItems(menu, true, ContextCompat.getColor(this, darkBg ? R.color.white : R.color.black)) - .setSubMenuIconsVisiblity(menu, true); + ContextUtils cu = ContextUtils.get(); + final boolean darkBg = cu.get().shouldColorOnTopBeLight(AppSettings.get().getPrimaryColor()); + cu.tintMenuItems(menu, true, ContextCompat.getColor(this, darkBg ? R.color.white : R.color.black)); + cu.setSubMenuIconsVisiblity(menu, true); return true; } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/BadgeDrawable.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/BadgeDrawable.java index 5d3ddbee..39701d29 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/BadgeDrawable.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/BadgeDrawable.java @@ -71,7 +71,7 @@ public class BadgeDrawable extends Drawable { Rect bounds = getBounds(); float width = bounds.right - bounds.left; float height = bounds.bottom - bounds.top; - float oneDp = ContextUtils.get().dp2px(1); + float oneDp = ContextUtils.get().convertDpToPx(1); // Position the badge in the top-right quadrant of the icon. float radius = ((Math.max(width, height) / 2)) / 2; diff --git a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java index 3907cb47..089910c0 100644 --- a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java +++ b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java @@ -1,20 +1,15 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2016- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ /* - * Get updates: - * https://github.com/gsantner/onePieceOfCode/blob/master/java/SimpleMarkdownParser.java - * Apply to TextView: - * See https://github.com/gsantner/onePieceOfCode/blob/master/android/ContextUtils.java * Parses most common markdown tags. Only inline tags are supported, multiline/block syntax * is not supported (citation, multiline code, ..). This is intended to stay as easy as possible. * diff --git a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java index 7b4616b1..52dfc3d1 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java +++ b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java @@ -1,14 +1,13 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2017- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ /* * Requires: @@ -186,4 +185,4 @@ public class LanguagePreference extends ListPreference { _defaultLanguageCode = defaultLanguageCode; loadLangs(getContext()); } -} \ No newline at end of file +} diff --git a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java index 677700be..53a86cc1 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java @@ -1,14 +1,13 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2016- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ package net.gsantner.opoc.util; import android.app.Activity; diff --git a/app/src/main/java/net/gsantner/opoc/util/AdBlock.java b/app/src/main/java/net/gsantner/opoc/util/AdBlock.java index 6c61038c..304a4b85 100644 --- a/app/src/main/java/net/gsantner/opoc/util/AdBlock.java +++ b/app/src/main/java/net/gsantner/opoc/util/AdBlock.java @@ -1,14 +1,13 @@ -/* - * ---------------------------------------------------------------------------- * - * Gregor Santner wrote this file. You can do whatever - * you want with this stuff. If we meet some day, and you think this stuff is - * worth it, you can buy me a coke in return. Provided as is without any kind - * of warranty. No attribution required. - Gregor Santner +/*####################################################### * - * License of this file: Creative Commons Zero (CC0 1.0) - * http://creativecommons.org/publicdomain/zero/1.0/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2017- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ /* * Place adblock hosts file in raw: src/main/res/raw/adblock_domains__xyz.txt diff --git a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java b/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java index a78dfdb8..755e320d 100644 --- a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java +++ b/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java @@ -1,14 +1,13 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2016- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ /* * This is a wrapper for settings based on SharedPreferences diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index a37102bc..79cc1686 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -1,14 +1,13 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2016- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ package net.gsantner.opoc.util; import android.annotation.SuppressLint; @@ -20,7 +19,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; @@ -46,19 +44,17 @@ 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.widget.AppCompatButton; import android.text.Html; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.util.DisplayMetrics; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import net.gsantner.opoc.format.markdown.SimpleMarkdownParser; @@ -69,11 +65,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.graphics.Bitmap.CompressFormat; -@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection", "deprecation", "ObsoleteSdkInt", "ConstantConditions", "UnusedReturnValue"}) +@SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "ObsoleteSdkInt", "deprecation", "SpellCheckingInspection"}) public class ContextUtils { //######################## //## Members, Constructors @@ -155,7 +154,7 @@ public class ContextUtils { public void openWebpageInExternalBrowser(final String url) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); try { _context.startActivity(intent); } catch (ActivityNotFoundException e) { @@ -220,7 +219,7 @@ public class ContextUtils { rstr(strResBitcoinMessage), rstr(strResBitcoinMessage)); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(btcUri)); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); try { _context.startActivity(intent); } catch (ActivityNotFoundException e) { @@ -257,36 +256,43 @@ public class ContextUtils { return sb.toString(); } - @SuppressLint("RestrictedApi") - @SuppressWarnings("RestrictedApi") - public void setTintColorOfButton(AppCompatButton button, @ColorRes int resColor) { - button.setSupportBackgroundTintList(ColorStateList.valueOf( - rcolor(resColor) - )); - } - - @SuppressLint("MissingPermission") // ACCESS_NETWORK_STATE required + /** + * Get internet connection state - the permission ACCESS_NETWORK_STATE is required + * + * @return True if internet connection available + */ public boolean isConnectedToInternet() { - ConnectivityManager con = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo activeNetInfo = con == null ? null : con.getActiveNetworkInfo(); - return activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); + try { + ConnectivityManager con = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); + @SuppressLint("MissingPermission") NetworkInfo activeNetInfo = + con == null ? null : con.getActiveNetworkInfo(); + return activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); + } catch (Exception ignored) { + throw new RuntimeException("Error: Developer forgot to declare a permission"); + } } - public boolean isConnectedToInternet(@Nullable @StringRes Integer warnMessageStringRes) { - final boolean result = isConnectedToInternet(); - if (!result && warnMessageStringRes != null) - Toast.makeText(_context, _context.getString(warnMessageStringRes), Toast.LENGTH_SHORT).show(); - - return result; + public boolean isAppInstalled(String packageName) { + PackageManager pm = _context.getApplicationContext().getPackageManager(); + try { + pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); + return true; + } catch (PackageManager.NameNotFoundException e) { + return false; + } } - public void restartApp(Class classToStartupWith) { - Intent restartIntent = new Intent(_context, classToStartupWith); - PendingIntent restartIntentP = PendingIntent.getActivity(_context, 555, - restartIntent, PendingIntent.FLAG_CANCEL_CURRENT); + public void restartApp(Class classToStart) { + Intent inte = new Intent(_context, classToStart); + PendingIntent inteP = PendingIntent.getActivity(_context, 555, inte, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager mgr = (AlarmManager) _context.getSystemService(Context.ALARM_SERVICE); - mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, restartIntentP); - System.exit(0); + if (mgr != null) { + mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, inteP); + } else { + inte.addFlags(FLAG_ACTIVITY_NEW_TASK); + _context.startActivity(inte); + } + Runtime.getRuntime().exit(0); } public String loadMarkdownForTextViewFromRaw(@RawRes int rawMdFile, String prepend) { @@ -348,7 +354,6 @@ public class ContextUtils { + (0.114 * Color.blue(colorOnBottomInt))))); } - @SuppressWarnings("deprecation") public Spanned htmlToSpanned(String html) { Spanned result; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { @@ -359,41 +364,53 @@ public class ContextUtils { return result; } - public void setClipboard(String text) { + public boolean setClipboard(String text) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - ((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)).setText(text); + android.text.ClipboardManager cm = ((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); + if (cm != null) { + cm.setText(text); + return true; + } } else { - ClipData clip = ClipData.newPlainText(_context.getPackageName(), text); - ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(clip); - } - } - - public String[] getClipboard() { - String[] ret; - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - ret = new String[]{((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)).getText().toString()}; - } else { - ClipData data = ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)).getPrimaryClip(); - ret = new String[data.getItemCount()]; - for (int i = 0; i < data.getItemCount() && i < ret.length; i++) { - ret[i] = data.getItemAt(i).getText().toString(); + android.content.ClipboardManager cm = ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); + if (cm != null) { + ClipData clip = ClipData.newPlainText(_context.getPackageName(), text); + cm.setPrimaryClip(clip); + return true; } } - return ret; + return false; } - public float px2dp(final float px) { + public List getClipboard() { + List clipper = new ArrayList<>(); + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { + android.text.ClipboardManager cm = ((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); + if (cm != null) { + clipper.add(cm.getText().toString()); + } + + } else { + android.content.ClipboardManager cm = ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); + if (cm != null && cm.hasPrimaryClip()) { + ClipData data = cm.getPrimaryClip(); + for (int i = 0; i < data.getItemCount() && i < data.getItemCount(); i++) { + clipper.add(data.getItemAt(i).getText().toString()); + } + } + + } + return clipper; + } + + public float convertPxToDp(final float px) { return px / _context.getResources().getDisplayMetrics().density; } - public float dp2px(final float dp) { + public float convertDpToPx(final float dp) { return dp * _context.getResources().getDisplayMetrics().density; } - public void setViewVisible(View view, boolean visible) { - view.setVisibility(visible ? View.VISIBLE : View.GONE); - } - public static void setDrawableWithColorToImageView(ImageView imageView, @DrawableRes int drawableResId, @ColorRes int colorResId) { imageView.setImageResource(drawableResId); imageView.setColorFilter(ContextCompat.getColor(imageView.getContext(), colorResId)); @@ -453,31 +470,40 @@ public class ContextUtils { return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } - public File writeImageToFileJpeg(File imageFile, Bitmap image) { + public boolean writeImageToFileJpeg(File imageFile, Bitmap image) { return writeImageToFile(imageFile, image, Bitmap.CompressFormat.JPEG, 95); } - - public File writeImageToFileDetectFormat(File imageFile, Bitmap image, int quality) { - CompressFormat format = CompressFormat.JPEG; - String lc = imageFile.getAbsolutePath().toLowerCase(Locale.ROOT); - if (lc.endsWith(".png")) { - format = CompressFormat.PNG; + /** + * Write bitmap to the filesystem + * + * @param targetFile The file to be written in + * @param image The image as android {@link Bitmap} + * @param format One format of {@link CompressFormat}, null will determine based on filename + * @param quality Quality level, defaults to 95 + * @return True if writing was successful + */ + public boolean writeImageToFile(File targetFile, Bitmap image, CompressFormat format, Integer quality) { + File folder = new File(targetFile.getParent()); + if (quality == null || quality < 0 || quality > 100) { + quality = 95; } - if (lc.endsWith(".webp")) { - format = CompressFormat.WEBP; + if (format == null) { + format = CompressFormat.JPEG; + String lc = targetFile.getAbsolutePath().toLowerCase(Locale.ROOT); + if (lc.endsWith(".png")) { + format = CompressFormat.PNG; + } + if (lc.endsWith(".webp")) { + format = CompressFormat.WEBP; + } } - return writeImageToFile(imageFile, image, format, quality); - } - - public File writeImageToFile(File imageFile, Bitmap image, CompressFormat format, int quality) { - File folder = new File(imageFile.getParent()); if (folder.exists() || folder.mkdirs()) { FileOutputStream stream = null; try { - stream = new FileOutputStream(imageFile); // overwrites this image every time + stream = new FileOutputStream(targetFile); // overwrites this image every time image.compress(format, quality, stream); - return imageFile; + return true; } catch (FileNotFoundException ignored) { } finally { try { @@ -488,13 +514,13 @@ public class ContextUtils { } } } - return null; + return false; } - public Bitmap drawTextToDrawable(@DrawableRes int resId, String text, int textSize) { + public Bitmap drawTextOnDrawable(@DrawableRes int resId, String text, int textSize) { Resources resources = _context.getResources(); float scale = resources.getDisplayMetrics().density; - Bitmap bitmap = getBitmapFromDrawable(resId); + Bitmap bitmap = bitmapToDrawable(resId); bitmap = bitmap.copy(bitmap.getConfig(), true); Canvas canvas = new Canvas(bitmap); @@ -512,7 +538,7 @@ public class ContextUtils { return bitmap; } - public Bitmap getBitmapFromDrawable(int drawableId) { + public Bitmap bitmapToDrawable(@DrawableRes int drawableId) { Bitmap bitmap = null; Drawable drawable = ContextCompat.getDrawable(_context, drawableId); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && (drawable instanceof VectorDrawable || drawable instanceof VectorDrawableCompat)) { @@ -520,8 +546,7 @@ public class ContextUtils { drawable = (DrawableCompat.wrap(drawable)).mutate(); } - bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); @@ -531,7 +556,8 @@ public class ContextUtils { return bitmap; } - public ContextUtils tintMenuItems(Menu menu, boolean recurse, @ColorInt int iconColor) { + @SuppressWarnings("ConstantConditions") + public void tintMenuItems(Menu menu, boolean recurse, @ColorInt int iconColor) { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); tintDrawable(item.getIcon(), iconColor); @@ -539,7 +565,6 @@ public class ContextUtils { tintMenuItems(item.getSubMenu(), recurse, iconColor); } } - return this; } public Drawable tintDrawable(@DrawableRes int drawableRes, @ColorInt int color) { @@ -554,16 +579,15 @@ public class ContextUtils { return drawable; } - @SuppressLint("PrivateApi") - public ContextUtils setSubMenuIconsVisiblity(Menu menu, boolean visible) { + public void setSubMenuIconsVisiblity(Menu menu, boolean visible) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { - Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); + @SuppressLint("PrivateApi") Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, visible); } catch (Exception ignored) { + Log.d(getClass().getName(), "Error: 'setSubMenuIconsVisiblity' not supported on this device"); } } - return this; } } diff --git a/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java b/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java index b6758fbf..d618955e 100644 --- a/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java @@ -1,14 +1,13 @@ -/* - * ------------------------------------------------------------------------------ - * Gregor Santner 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/ - * ---------------------------------------------------------------------------- - */ + * Maintained by Gregor Santner, 2018- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ package net.gsantner.opoc.util; import java.util.List; From 586875e32ba2eca98a704e18078115ac6f4b2946 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 00:14:54 +0200 Subject: [PATCH 07/31] Update gsantner-opoc to latest state --- .../diaspora_android/util/AppSettings.java | 4 +- .../format/markdown/SimpleMarkdownParser.java | 2 +- .../{util => preference}/PropertyBackend.java | 4 +- .../SharedPreferencesPropertyBackend.java} | 86 ++--- .../net/gsantner/opoc/util/ContextUtils.java | 311 +++++++++++------- 5 files changed, 233 insertions(+), 174 deletions(-) rename app/src/main/java/net/gsantner/opoc/{util => preference}/PropertyBackend.java (94%) rename app/src/main/java/net/gsantner/opoc/{util/AppSettingsBase.java => preference/SharedPreferencesPropertyBackend.java} (89%) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 28914097..1b3d2bff 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -26,7 +26,7 @@ import com.github.dfa.diaspora_android.data.DiasporaAspect; import com.github.dfa.diaspora_android.data.DiasporaPodList.DiasporaPod; import com.github.dfa.diaspora_android.web.ProxyHandler; -import net.gsantner.opoc.util.AppSettingsBase; +import net.gsantner.opoc.preference.SharedPreferencesPropertyBackend; import org.json.JSONException; import org.json.JSONObject; @@ -38,7 +38,7 @@ import java.util.List; * Created by gsantner (http://gsantner.net/) on 20.03.16. Part of dandelion*. */ @SuppressWarnings("ConstantConditions") -public class AppSettings extends AppSettingsBase { +public class AppSettings extends SharedPreferencesPropertyBackend { private final SharedPreferences _prefPod; private DiasporaPod currentPod0Cached; diff --git a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java index 089910c0..744bd0b4 100644 --- a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java +++ b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java @@ -33,7 +33,7 @@ import java.io.InputStreamReader; /** * Simple Markdown Parser */ -@SuppressWarnings({"WeakerAccess", "CaughtExceptionImmediatelyRethrown", "SameParameterValue", "unused", "SpellCheckingInspection", "RepeatedSpace", "SingleCharAlternation"}) +@SuppressWarnings({"WeakerAccess", "CaughtExceptionImmediatelyRethrown", "SameParameterValue", "unused", "SpellCheckingInspection", "RepeatedSpace", "SingleCharAlternation", "Convert2Lambda"}) public class SimpleMarkdownParser { //######################## //## Statics diff --git a/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java similarity index 94% rename from app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java rename to app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java index d618955e..c27d9bce 100644 --- a/app/src/main/java/net/gsantner/opoc/util/PropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java @@ -8,11 +8,11 @@ * https://www.apache.org/licenses/LICENSE-2.0 * #########################################################*/ -package net.gsantner.opoc.util; +package net.gsantner.opoc.preference; import java.util.List; -@SuppressWarnings({"UnusedReturnValue", "SpellCheckingInspection"}) +@SuppressWarnings({"UnusedReturnValue", "SpellCheckingInspection", "unused", "SameParameterValue"}) public interface PropertyBackend { String getString(TKEY key, String defaultValue); diff --git a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java similarity index 89% rename from app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java rename to app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java index 755e320d..275d88a5 100644 --- a/app/src/main/java/net/gsantner/opoc/util/AppSettingsBase.java +++ b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java @@ -31,7 +31,7 @@ } */ -package net.gsantner.opoc.util; +package net.gsantner.opoc.preference; import android.annotation.SuppressLint; import android.content.Context; @@ -48,36 +48,36 @@ import java.util.List; /** - * Wrapper for settings based on SharedPreferences with keys in resources + * Wrapper for settings based on SharedPreferences, optionally with keys in resources * Default SharedPreference (_prefApp) will be taken if no SP is specified, else the first one */ @SuppressWarnings({"WeakerAccess", "unused", "SpellCheckingInspection", "SameParameterValue"}) -public class AppSettingsBase implements PropertyBackend { +public class SharedPreferencesPropertyBackend implements PropertyBackend { protected static final String ARRAY_SEPARATOR = "%%%"; protected static final String ARRAY_SEPARATOR_SUBSTITUTE = "§§§"; public static final String SHARED_PREF_APP = "app"; - //######################## - //## Members, Constructors - //######################## + // + // Members, Constructors + // protected final SharedPreferences _prefApp; protected final String _prefAppName; protected final Context _context; - public AppSettingsBase(final Context context) { + public SharedPreferencesPropertyBackend(final Context context) { this(context, SHARED_PREF_APP); } - public AppSettingsBase(final Context context, final String prefAppName) { + public SharedPreferencesPropertyBackend(final Context context, final String prefAppName) { _context = context.getApplicationContext(); _prefAppName = TextUtils.isEmpty(prefAppName) ? _context.getPackageName() + "_preferences" : prefAppName; _prefApp = _context.getSharedPreferences(_prefAppName, Context.MODE_PRIVATE); } - //##################### - //## Methods - //##################### + // + // Methods + // public Context getContext() { return _context; } @@ -136,9 +136,9 @@ public class AppSettingsBase implements PropertyBackend return (pref != null && pref.length > 0 ? pref[0] : _prefApp); } - //################################# - //## Getter for resources - //################################# + // + // Getter for resources + // public String rstr(@StringRes int stringKeyResourceId) { return _context.getString(stringKeyResourceId); } @@ -148,9 +148,9 @@ public class AppSettingsBase implements PropertyBackend } - //################################# - //## Getter & Setter for String - //################################# + // + // Getter & Setter for String + // public void setString(@StringRes int keyResourceId, String value, final SharedPreferences... pref) { gp(pref).edit().putString(rstr(keyResourceId), value).apply(); } @@ -235,9 +235,9 @@ public class AppSettingsBase implements PropertyBackend return getStringListOne(key, gp(pref)); } - //################################# - //## Getter & Setter for integer - //################################# + // + // Getter & Setter for integer + // public void setInt(@StringRes int keyResourceId, int value, final SharedPreferences... pref) { gp(pref).edit().putInt(rstr(keyResourceId), value).apply(); } @@ -319,9 +319,9 @@ public class AppSettingsBase implements PropertyBackend } - //################################# - //## Getter & Setter for Long - //################################# + // + // Getter & Setter for Long + // public void setLong(@StringRes int keyResourceId, long value, final SharedPreferences... pref) { gp(pref).edit().putLong(rstr(keyResourceId), value).apply(); } @@ -338,9 +338,9 @@ public class AppSettingsBase implements PropertyBackend return gp(pref).getLong(key, defaultValue); } - //################################# - //## Getter & Setter for Float - //################################# + // + // Getter & Setter for Float + // public void setFloat(@StringRes int keyResourceId, float value, final SharedPreferences... pref) { gp(pref).edit().putFloat(rstr(keyResourceId), value).apply(); } @@ -357,9 +357,9 @@ public class AppSettingsBase implements PropertyBackend return gp(pref).getFloat(key, defaultValue); } - //################################# - //## Getter & Setter for Double - //################################# + // + // Getter & Setter for Double + // public void setDouble(@StringRes int keyResourceId, double value, final SharedPreferences... pref) { setLong(rstr(keyResourceId), Double.doubleToRawLongBits(value)); } @@ -376,9 +376,9 @@ public class AppSettingsBase implements PropertyBackend return Double.longBitsToDouble(getLong(key, Double.doubleToRawLongBits(defaultValue), gp(pref))); } - //################################# - //## Getter & Setter for boolean - //################################# + // + // Getter & Setter for boolean + // public void setBool(@StringRes int keyResourceId, boolean value, final SharedPreferences... pref) { gp(pref).edit().putBoolean(rstr(keyResourceId), value).apply(); } @@ -395,9 +395,9 @@ public class AppSettingsBase implements PropertyBackend return gp(pref).getBoolean(key, defaultValue); } - //################################# - //## Getter & Setter for Color - //################################# + // + // Getter & Setter for Color + // public int getColor(String key, @ColorRes int defaultColor, final SharedPreferences... pref) { return gp(pref).getInt(key, rcolor(defaultColor)); } @@ -450,49 +450,49 @@ public class AppSettingsBase implements PropertyBackend } @Override - public AppSettingsBase setString(String key, String value) { + public SharedPreferencesPropertyBackend setString(String key, String value) { setString(key, value, _prefApp); return this; } @Override - public AppSettingsBase setInt(String key, int value) { + public SharedPreferencesPropertyBackend setInt(String key, int value) { setInt(key, value, _prefApp); return this; } @Override - public AppSettingsBase setLong(String key, long value) { + public SharedPreferencesPropertyBackend setLong(String key, long value) { setLong(key, value, _prefApp); return this; } @Override - public AppSettingsBase setBool(String key, boolean value) { + public SharedPreferencesPropertyBackend setBool(String key, boolean value) { setBool(key, value, _prefApp); return this; } @Override - public AppSettingsBase setFloat(String key, float value) { + public SharedPreferencesPropertyBackend setFloat(String key, float value) { setFloat(key, value, _prefApp); return this; } @Override - public AppSettingsBase setDouble(String key, double value) { + public SharedPreferencesPropertyBackend setDouble(String key, double value) { setDouble(key, value, _prefApp); return this; } @Override - public AppSettingsBase setIntList(String key, List value) { + public SharedPreferencesPropertyBackend setIntList(String key, List value) { setIntListOne(key, value, _prefApp); return this; } @Override - public AppSettingsBase setStringList(String key, List value) { + public SharedPreferencesPropertyBackend setStringList(String key, List value) { setStringListOne(key, value, _prefApp); return this; } diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index 79cc1686..68c0c4d7 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -14,7 +14,6 @@ import android.annotation.SuppressLint; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.ActivityNotFoundException; -import android.content.ClipData; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; @@ -28,6 +27,7 @@ import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; +import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; @@ -65,8 +65,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; @@ -74,9 +72,9 @@ import static android.graphics.Bitmap.CompressFormat; @SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "ObsoleteSdkInt", "deprecation", "SpellCheckingInspection"}) public class ContextUtils { - //######################## - //## Members, Constructors - //######################## + // + // Members, Constructors + // protected Context _context; public ContextUtils(Context context) { @@ -87,57 +85,81 @@ public class ContextUtils { return _context; } - //######################## - //## Resources - //######################## - static class ResType { - public static final String DRAWABLE = "drawable"; - public static final String STRING = "string"; - public static final String PLURAL = "plural"; - public static final String COLOR = "color"; - public static final String STYLE = "style"; - public static final String ARRAY = "array"; - public static final String DIMEN = "dimen"; - public static final String MENU = "menu"; - public static final String BOOL = "bool"; - public static final String RAW = "raw"; + + // + // Class Methods + // + public enum ResType { + ID, BOOL, INTEGER, COLOR, STRING, ARRAY, DRAWABLE, PLURALS, + ANIM, ATTR, DIMEN, LAYOUT, MENU, RAW, STYLE, XML, } + /** + * Find out the nuermical ressource id by given {@link ResType} + * + * @return A valid id if the id could be found, else 0 + */ + public int getResId(ResType resType, final String name) { + return _context.getResources().getIdentifier(name, resType.name().toLowerCase(), _context.getPackageName()); + } + + /** + * Get String by given string ressource id (nuermic) + */ public String rstr(@StringRes int strResId) { return _context.getString(strResId); } + /** + * Get String by given string ressource identifier (textual) + */ public String rstr(String strResKey) { - return rstr(getResId(ResType.STRING, strResKey)); + try { + return rstr(getResId(ResType.STRING, strResKey)); + } catch (Resources.NotFoundException e) { + return null; + } } + /** + * Get drawable from given ressource identifier + */ public Drawable rdrawable(@DrawableRes int resId) { return ContextCompat.getDrawable(_context, resId); } + /** + * Get color by given color ressource id + */ public int rcolor(@ColorRes int resId) { return ContextCompat.getColor(_context, resId); } - public int getResId(final String type, final String name) { - return _context.getResources().getIdentifier(name, type, _context.getPackageName()); - } - - public boolean areResIdsAvailable(final String type, final String... names) { - for (String name : names) { - if (getResId(type, name) == 0) { + /** + * Checks if all given (textual) ressource ids are available + * + * @param resType A {@link ResType} + * @param resIdsTextual A (textual) identifier to be awaited at R.restype.resIdsTextual + * @return True if all given ids are available + */ + public boolean areRessourcesAvailable(final ResType resType, final String... resIdsTextual) { + for (String name : resIdsTextual) { + if (getResId(resType, name) == 0) { return false; } } return true; } - //######################## - //## Methods - //######################## - - public String colorToHexString(int intColor) { - return String.format("#%06X", 0xFFFFFF & intColor); + /** + * Convert an int color to a hex string. Optionally including alpha value. + * + * @param intColor The color coded in int + * @param withAlpha Optional; Set first bool parameter to true to also include alpha value + */ + public String colorToHexString(int intColor, boolean... withAlpha) { + boolean a = withAlpha != null && withAlpha.length >= 1 && withAlpha[0]; + return String.format(a ? "#%08X" : "#%06X", (a ? 0xFFFFFFFF : 0xFFFFFF) & intColor); } public String getAppVersionName() { @@ -151,6 +173,10 @@ public class ContextUtils { } } + /** + * Send a {@link Intent#ACTION_VIEW} Intent with given paramter + * If the parameter is an string a browser will get triggered + */ public void openWebpageInExternalBrowser(final String url) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); @@ -171,13 +197,8 @@ public class ContextUtils { * Falls back to applicationId of the app which may differ from manifest. */ public Object getBuildConfigValue(String fieldName) { - String pkg; - try { - pkg = rstr("manifest_package_id"); - } catch (Resources.NotFoundException ex) { - pkg = _context.getPackageName(); - } - pkg += ".BuildConfig"; + String pkg = rstr("manifest_package_id"); + pkg = (pkg != null ? pkg : _context.getPackageName()) + ".BuildConfig"; try { Class c = Class.forName(pkg); return c.getField(fieldName).get(null); @@ -187,7 +208,10 @@ public class ContextUtils { } } - public boolean bcbool(String fieldName, boolean defaultValue) { + /** + * Get a BuildConfig bool value + */ + public Boolean bcbool(String fieldName, Boolean defaultValue) { Object field = getBuildConfigValue(fieldName); if (field != null && field instanceof Boolean) { return (Boolean) field; @@ -195,6 +219,9 @@ public class ContextUtils { return defaultValue; } + /** + * Get a BuildConfig string value + */ public String bcstr(String fieldName, String defaultValue) { Object field = getBuildConfigValue(fieldName); if (field != null && field instanceof String) { @@ -203,27 +230,36 @@ public class ContextUtils { return defaultValue; } + /** + * Check if this is a gplay build (requires BuildConfig field) + */ public boolean isGooglePlayBuild() { return bcbool("IS_GPLAY_BUILD", true); } + /** + * Check if this is a foss build (requires BuildConfig field) + */ public boolean isFossBuild() { return bcbool("IS_FOSS_BUILD", false); } - // Requires donate__bitcoin_* resources (see below) to be available as string resource - public void showDonateBitcoinRequest(@StringRes final int strResBitcoinId, @StringRes final int strResBitcoinAmount, @StringRes final int strResBitcoinMessage, @StringRes final int strResAlternativeDonateUrl) { + /** + * Request a bitcoin donation with given details. + * All parameters are awaited as string resource ids + */ + public void showDonateBitcoinRequest(@StringRes final int srBitcoinId, @StringRes final int srBitcoinAmount, @StringRes final int srBitcoinMessage, @StringRes final int srAlternativeDonateUrl) { if (!isGooglePlayBuild()) { String btcUri = String.format("bitcoin:%s?amount=%s&label=%s&message=%s", - rstr(strResBitcoinId), rstr(strResBitcoinAmount), - rstr(strResBitcoinMessage), rstr(strResBitcoinMessage)); + rstr(srBitcoinId), rstr(srBitcoinAmount), + rstr(srBitcoinMessage), rstr(srBitcoinMessage)); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(btcUri)); intent.addFlags(FLAG_ACTIVITY_NEW_TASK); try { _context.startActivity(intent); } catch (ActivityNotFoundException e) { - openWebpageInExternalBrowser(rstr(strResAlternativeDonateUrl)); + openWebpageInExternalBrowser(rstr(srAlternativeDonateUrl)); } } } @@ -272,6 +308,9 @@ public class ContextUtils { } } + /** + * Check if app with given {@code packageName} is installed + */ public boolean isAppInstalled(String packageName) { PackageManager pm = _context.getApplicationContext().getPackageManager(); try { @@ -282,6 +321,9 @@ public class ContextUtils { } } + /** + * Restart the current app. Supply the class to start on startup + */ public void restartApp(Class classToStart) { Intent inte = new Intent(_context, classToStart); PendingIntent inteP = PendingIntent.getActivity(_context, 555, inte, PendingIntent.FLAG_CANCEL_CURRENT); @@ -295,6 +337,10 @@ public class ContextUtils { Runtime.getRuntime().exit(0); } + /** + * Load a markdown file from a {@link RawRes}, prepend each line with {@code prepend} text + * and convert markdown to html using {@link SimpleMarkdownParser} + */ public String loadMarkdownForTextViewFromRaw(@RawRes int rawMdFile, String prepend) { try { return new SimpleMarkdownParser() @@ -308,52 +354,74 @@ public class ContextUtils { } } + /** + * Load html into a {@link Spanned} object and set the + * {@link TextView}'s text using {@link TextView#setText(CharSequence)} + */ public void setHtmlToTextView(TextView textView, String html) { textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setText(new SpannableString(htmlToSpanned(html))); } + /** + * Estimate this device's screen diagonal size in inches + */ public double getEstimatedScreenSizeInches() { DisplayMetrics dm = _context.getResources().getDisplayMetrics(); - double density = dm.density * 160; - double x = Math.pow(dm.widthPixels / density, 2); - double y = Math.pow(dm.heightPixels / density, 2); - double screenInches = Math.sqrt(x + y) * 1.16; // 1.16 = est. Nav/Statusbar - screenInches = screenInches < 4.0 ? 4.0 : screenInches; - screenInches = screenInches > 12.0 ? 12.0 : screenInches; - return screenInches; + double calc = dm.density * 160d; + double x = Math.pow(dm.widthPixels / calc, 2); + double y = Math.pow(dm.heightPixels / calc, 2); + calc = Math.sqrt(x + y) * 1.16; // 1.16 = est. Nav/Statusbar + return Math.min(12, Math.max(4, calc)); } + /** + * Check if the device is currently in portrait orientation + */ public boolean isInPortraitMode() { return _context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; } - public Locale getLocaleByAndroidCode(String code) { - if (!TextUtils.isEmpty(code)) { - return code.contains("-r") - ? new Locale(code.substring(0, 2), code.substring(4, 6)) // de-rAt - : new Locale(code); // de + /** + * Get an {@link Locale} out of a android language code + * The {@code androidLC} may be in any of the forms: de, en, de-rAt + */ + public Locale getLocaleByAndroidCode(String androidLC) { + if (!TextUtils.isEmpty(androidLC)) { + return androidLC.contains("-r") + ? new Locale(androidLC.substring(0, 2), androidLC.substring(4, 6)) // de-rAt + : new Locale(androidLC); // de } return Resources.getSystem().getConfiguration().locale; } - // en/de/de-rAt ; Empty string -> default locale - public void setAppLanguage(String androidLocaleString) { - Locale locale = getLocaleByAndroidCode(androidLocaleString); + /** + * Set the apps language + * {@code androidLC} may be in any of the forms: en, de, de-rAt + * If given an empty string, the default (system) locale gets loaded + */ + public void setAppLanguage(String androidLC) { + Locale locale = getLocaleByAndroidCode(androidLC); Configuration config = _context.getResources().getConfiguration(); - config.locale = (locale != null && !androidLocaleString.isEmpty()) + config.locale = (locale != null && !androidLC.isEmpty()) ? locale : Resources.getSystem().getConfiguration().locale; _context.getResources().updateConfiguration(config, null); } - // Find out if color above the given color should be light or dark. true if light + /** + * Try to guess if the color on top of the given {@code colorOnBottomInt} + * should be light or dark. Returns true if top color should be light + */ public boolean shouldColorOnTopBeLight(@ColorInt int colorOnBottomInt) { return 186 > (((0.299 * Color.red(colorOnBottomInt)) + ((0.587 * Color.green(colorOnBottomInt)) + (0.114 * Color.blue(colorOnBottomInt))))); } + /** + * Convert a html string to an android {@link Spanned} object + */ public Spanned htmlToSpanned(String html) { Spanned result; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { @@ -364,61 +432,34 @@ public class ContextUtils { return result; } - public boolean setClipboard(String text) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - android.text.ClipboardManager cm = ((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); - if (cm != null) { - cm.setText(text); - return true; - } - } else { - android.content.ClipboardManager cm = ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); - if (cm != null) { - ClipData clip = ClipData.newPlainText(_context.getPackageName(), text); - cm.setPrimaryClip(clip); - return true; - } - } - return false; - } - - public List getClipboard() { - List clipper = new ArrayList<>(); - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - android.text.ClipboardManager cm = ((android.text.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); - if (cm != null) { - clipper.add(cm.getText().toString()); - } - - } else { - android.content.ClipboardManager cm = ((android.content.ClipboardManager) _context.getSystemService(Context.CLIPBOARD_SERVICE)); - if (cm != null && cm.hasPrimaryClip()) { - ClipData data = cm.getPrimaryClip(); - for (int i = 0; i < data.getItemCount() && i < data.getItemCount(); i++) { - clipper.add(data.getItemAt(i).getText().toString()); - } - } - - } - return clipper; - } - + /** + * Convert pixel unit do android dp unit + */ public float convertPxToDp(final float px) { return px / _context.getResources().getDisplayMetrics().density; } + /** + * Convert android dp unit to pixel unit + */ public float convertDpToPx(final float dp) { return dp * _context.getResources().getDisplayMetrics().density; } + /** + * Load an image into a {@link ImageView} and apply a color filter + */ public static void setDrawableWithColorToImageView(ImageView imageView, @DrawableRes int drawableResId, @ColorRes int colorResId) { imageView.setImageResource(drawableResId); imageView.setColorFilter(ContextCompat.getColor(imageView.getContext(), colorResId)); } + /** + * Get a {@link Bitmap} out of a {@link Drawable} + */ public Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = null; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && (drawable instanceof VectorDrawable || drawable instanceof VectorDrawableCompat)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && (drawable instanceof VectorDrawable || drawable instanceof VectorDrawableCompat || drawable instanceof AdaptiveIconDrawable)) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { drawable = (DrawableCompat.wrap(drawable)).mutate(); } @@ -434,6 +475,18 @@ public class ContextUtils { return bitmap; } + /** + * Get a {@link Bitmap} out of a {@link DrawableRes} + */ + public Bitmap drawableToBitmap(@DrawableRes int drawableId) { + return drawableToBitmap(ContextCompat.getDrawable(_context, drawableId)); + } + + /** + * Get a {@link Bitmap} from a given {@code imagePath} on the filesystem + * Specifying a {@code maxDimen} is also possible and a value below 2000 + * is recommended, otherwise a {@link OutOfMemoryError} may occur + */ public Bitmap loadImageFromFilesystem(File imagePath, int maxDimen) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; @@ -462,6 +515,10 @@ public class ContextUtils { return inSampleSize; } + /** + * Scale the bitmap so both dimensions are lower or equal to {@code maxDimen} + * This keeps the aspect ratio + */ public Bitmap scaleBitmap(Bitmap bitmap, int maxDimen) { int picSize = Math.min(bitmap.getHeight(), bitmap.getWidth()); float scale = 1.f * maxDimen / picSize; @@ -470,12 +527,15 @@ public class ContextUtils { return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } + /** + * Write the given {@link Bitmap} to {@code imageFile}, in {@link CompressFormat#JPEG} format + */ public boolean writeImageToFileJpeg(File imageFile, Bitmap image) { return writeImageToFile(imageFile, image, Bitmap.CompressFormat.JPEG, 95); } /** - * Write bitmap to the filesystem + * Write the given {@link Bitmap} to filesystem * * @param targetFile The file to be written in * @param image The image as android {@link Bitmap} @@ -517,10 +577,14 @@ public class ContextUtils { return false; } - public Bitmap drawTextOnDrawable(@DrawableRes int resId, String text, int textSize) { + /** + * Draw text in the center of the given {@link DrawableRes} + * This may be useful for e.g. badge counts + */ + public Bitmap drawTextOnDrawable(@DrawableRes int drawableRes, String text, int textSize) { Resources resources = _context.getResources(); float scale = resources.getDisplayMetrics().density; - Bitmap bitmap = bitmapToDrawable(resId); + Bitmap bitmap = drawableToBitmap(drawableRes); bitmap = bitmap.copy(bitmap.getConfig(), true); Canvas canvas = new Canvas(bitmap); @@ -538,24 +602,9 @@ public class ContextUtils { return bitmap; } - public Bitmap bitmapToDrawable(@DrawableRes int drawableId) { - Bitmap bitmap = null; - Drawable drawable = ContextCompat.getDrawable(_context, drawableId); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && (drawable instanceof VectorDrawable || drawable instanceof VectorDrawableCompat)) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - drawable = (DrawableCompat.wrap(drawable)).mutate(); - } - - bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - } else if (drawable instanceof BitmapDrawable) { - bitmap = ((BitmapDrawable) drawable).getBitmap(); - } - return bitmap; - } - + /** + * Try to tint all {@link Menu}s {@link MenuItem}s with given color + */ @SuppressWarnings("ConstantConditions") public void tintMenuItems(Menu menu, boolean recurse, @ColorInt int iconColor) { for (int i = 0; i < menu.size(); i++) { @@ -567,10 +616,16 @@ public class ContextUtils { } } + /** + * Loads {@link Drawable} by given {@link DrawableRes} and applies a color + */ public Drawable tintDrawable(@DrawableRes int drawableRes, @ColorInt int color) { - return tintDrawable(_context.getResources().getDrawable(drawableRes), color); + return tintDrawable(rdrawable(drawableRes), color); } + /** + * Tint a {@link Drawable} with given {@code color} + */ public Drawable tintDrawable(@Nullable Drawable drawable, @ColorInt int color) { if (drawable != null) { drawable = DrawableCompat.wrap(drawable); @@ -579,6 +634,10 @@ public class ContextUtils { return drawable; } + /** + * Try to make icons in Toolbar/ActionBars SubMenus visible + * This may not work on some devices and it maybe won't work on future android updates + */ public void setSubMenuIconsVisiblity(Menu menu, boolean visible) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { From a88dc5d13ca8aa1a6d92b6bd9b26a8350670710a Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 00:24:52 +0200 Subject: [PATCH 08/31] . --- .../activity/MainActivity.java | 24 +++++++++---------- .../ui/theme/ThemedFragment.java | 7 ++++++ .../opoc/activity}/CustomFragment.java | 8 ++----- 3 files changed, 21 insertions(+), 18 deletions(-) rename app/src/main/java/{com/github/dfa/diaspora_android/ui/theme => net/gsantner/opoc/activity}/CustomFragment.java (88%) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 348643db..f0ea1d11 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -71,10 +71,10 @@ import com.github.dfa.diaspora_android.receiver.OpenExternalLinkReceiver; import com.github.dfa.diaspora_android.receiver.UpdateTitleReceiver; import com.github.dfa.diaspora_android.ui.BadgeDrawable; import com.github.dfa.diaspora_android.ui.PodSelectionDialog; -import com.github.dfa.diaspora_android.ui.theme.CustomFragment; import com.github.dfa.diaspora_android.ui.theme.ThemeHelper; import com.github.dfa.diaspora_android.ui.theme.ThemedActivity; import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder; +import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; import com.github.dfa.diaspora_android.util.ActivityUtils; import com.github.dfa.diaspora_android.util.AndroidBug5497Workaround; import com.github.dfa.diaspora_android.util.AppLog; @@ -199,7 +199,7 @@ public class MainActivity extends ThemedActivity brOpenExternalLink = new OpenExternalLinkReceiver(this); brSetTitle = new UpdateTitleReceiver(app, urls, new UpdateTitleReceiver.TitleCallback() { public void setTitle(String url, int resId) { - CustomFragment top = getTopFragment(); + ThemedFragment top = getTopFragment(); if (top != null && top.getFragmentTag().equals(DiasporaStreamFragment.TAG)) { MainActivity.this.setTitle(resId); showLastVisitedTimestampMessageIfNeeded(url); @@ -207,7 +207,7 @@ public class MainActivity extends ThemedActivity } public void setTitle(String url, String title) { - CustomFragment top = getTopFragment(); + ThemedFragment top = getTopFragment(); if (top != null && top.getFragmentTag().equals(DiasporaStreamFragment.TAG)) { MainActivity.this.setTitle(title); } @@ -292,15 +292,15 @@ public class MainActivity extends ThemedActivity } /** - * Get an instance of the CustomFragment with the tag fragmentTag. + * Get an instance of the ThemedFragment with the tag fragmentTag. * If there was no instance so far, create a new one and add it to the FragmentManagers pool. * If there is no Fragment with the corresponding Tag, return the top fragment. * * @param fragmentTag tag * @return corresponding Fragment */ - protected CustomFragment getFragment(String fragmentTag) { - CustomFragment fragment = (CustomFragment) fm.findFragmentByTag(fragmentTag); + protected ThemedFragment getFragment(String fragmentTag) { + ThemedFragment fragment = (ThemedFragment) fm.findFragmentByTag(fragmentTag); if (fragment != null) { return fragment; } else { @@ -358,9 +358,9 @@ public class MainActivity extends ThemedActivity * * @param fragment Fragment to show */ - protected void showFragment(CustomFragment fragment) { + protected void showFragment(ThemedFragment fragment) { AppLog.v(this, "showFragment()"); - CustomFragment currentTop = (CustomFragment) fm.findFragmentById(R.id.fragment_container); + ThemedFragment currentTop = (ThemedFragment) fm.findFragmentById(R.id.fragment_container); if (currentTop == null || !currentTop.getFragmentTag().equals(fragment.getFragmentTag())) { AppLog.v(this, "Fragment was not visible. Replace it."); fm.beginTransaction().addToBackStack(null).replace(R.id.fragment_container, fragment, fragment.getFragmentTag()).commit(); @@ -591,8 +591,8 @@ public class MainActivity extends ThemedActivity * * @return top fragment or null if there is none displayed */ - private CustomFragment getTopFragment() { - return (CustomFragment) fm.findFragmentById(R.id.fragment_container); + private ThemedFragment getTopFragment() { + return (ThemedFragment) fm.findFragmentById(R.id.fragment_container); } /** @@ -605,7 +605,7 @@ public class MainActivity extends ThemedActivity navDrawer.closeDrawer(navView); return; } - CustomFragment top = getTopFragment(); + ThemedFragment top = getTopFragment(); if (top != null) { AppLog.v(this, "Top Fragment is not null"); if (!top.onBackPressed()) { @@ -683,7 +683,7 @@ public class MainActivity extends ThemedActivity //Clear the menus menu.clear(); - CustomFragment top = getTopFragment(); + ThemedFragment top = getTopFragment(); if (top != null) { if (!top.getFragmentTag().equals(PodSelectionFragment.TAG)) { cache = _appSettings.isExtendedNotificationsActivated(); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java index b68da449..6bda3814 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java @@ -21,6 +21,8 @@ package com.github.dfa.diaspora_android.ui.theme; import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.util.AppSettings; +import net.gsantner.opoc.activity.CustomFragment; + /** * Fragment that supports color schemes * Created by vanitas on 06.10.16. @@ -39,4 +41,9 @@ public abstract class ThemedFragment extends CustomFragment { ThemeHelper.getInstance(getAppSettings()); applyColorToViews(); } + + + public boolean isAllowedIntellihide() { + return true; + } } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/CustomFragment.java b/app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java similarity index 88% rename from app/src/main/java/com/github/dfa/diaspora_android/ui/theme/CustomFragment.java rename to app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java index 82dcf93c..e6d50c75 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/CustomFragment.java +++ b/app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java @@ -16,7 +16,7 @@ If not, see . */ -package com.github.dfa.diaspora_android.ui.theme; +package net.gsantner.opoc.activity; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -28,7 +28,7 @@ import android.support.v4.app.Fragment; public abstract class CustomFragment extends Fragment { - public static final String TAG = "com.github.dfa.diaspora_android.ui.theme.CustomFragment"; + public static final String TAG = "net.gsantner.opoc.activity.CustomFragment"; /** * We have an optionsMenu @@ -55,9 +55,5 @@ public abstract class CustomFragment extends Fragment { * @return did we react to the back press? */ public abstract boolean onBackPressed(); - - public boolean isAllowedIntellihide() { - return true; - } } From 08242760bbf95d5f081d9fe238a1327b79fb1c77 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 00:38:31 +0200 Subject: [PATCH 09/31] Migrate to opoc/basefragment; Fix redundant casts --- .../activity/AboutActivity.java | 28 ++-- .../activity/AspectListFragment.java | 8 +- .../activity/MainActivity.java | 2 +- .../activity/PodSelectionFragment.java | 10 +- .../activity/SettingsActivity.java | 8 +- .../activity/TagListFragment.java | 5 +- .../ui/theme/ThemedCheckBoxPreference.java | 2 +- .../ui/theme/ThemedColorPickerPreference.java | 2 +- .../ui/theme/ThemedFragment.java | 4 +- .../ui/theme/ThemedPreferenceCategory.java | 2 +- .../ui/theme/ThemedVisibilityPreference.java | 2 +- .../util/AndroidBug5497Workaround.java | 2 +- .../diaspora_android/web/BrowserFragment.java | 22 +-- .../opoc/activity/CustomFragment.java | 59 -------- .../opoc/activity/GsFragmentBase.java | 129 ++++++++++++++++++ 15 files changed, 176 insertions(+), 109 deletions(-) delete mode 100644 app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java create mode 100644 app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java index 03fb1155..f587f1bd 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java @@ -26,6 +26,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; @@ -157,10 +159,14 @@ public class AboutActivity extends ThemedActivity } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.about__fragment_about, container, false); - ButterKnife.bind(this, rootView); + protected int getLayoutResId() { + return R.layout.about__fragment_about; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ButterKnife.bind(this, view); if (isAdded()) { try { PackageInfo pInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0); @@ -170,7 +176,6 @@ public class AboutActivity extends ThemedActivity e.printStackTrace(); } } - return rootView; } @Override @@ -244,10 +249,14 @@ public class AboutActivity extends ThemedActivity } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.about__fragment_license, container, false); - ButterKnife.bind(this, rootView); - final Context context = rootView.getContext(); + protected int getLayoutResId() { + return R.layout.about__fragment_license; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ButterKnife.bind(this, view); accentColor = ContextUtils.get().colorToHexString(ThemeHelper.getAccentColor()); maintainers.setTextFormatted(getString(R.string.fragment_license__maintainers_text, @@ -256,7 +265,6 @@ public class AboutActivity extends ThemedActivity ContextUtils.get().loadMarkdownForTextViewFromRaw(R.raw.contributors, ""))); thirdPartyLibs.setTextFormatted( ContextUtils.get().loadMarkdownForTextViewFromRaw(R.raw.license_third_party, "")); - return rootView; } @OnClick({R.id.fragment_license__leafpic_button, R.id.fragment_license__license_button}) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java index 9da6a6de..6884974f 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java @@ -22,6 +22,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -68,13 +69,12 @@ public class AspectListFragment extends ThemedFragment implements OnSomethingCli protected DiasporaUrlHelper urls; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - AppLog.d(this, "onCreateView()"); - return inflater.inflate(R.layout.recycler_list__fragment, container, false); + protected int getLayoutResId() { + return R.layout.recycler_list__fragment; } @Override - public void onViewCreated(View view, Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.bind(this, view); app = (App) getActivity().getApplication(); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index f0ea1d11..b15e1dc4 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -835,7 +835,7 @@ public class MainActivity extends ThemedActivity final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @SuppressLint("InflateParams") View layout = getLayoutInflater().inflate(R.layout.ui__dialog_search__people_tags, null, false); - final EditText input = (EditText) layout.findViewById(R.id.dialog_search__input); + final EditText input = layout.findViewById(R.id.dialog_search__input); input.setMaxLines(1); input.setSingleLine(true); ThemeHelper.updateEditTextColor(input); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java index 9207beea..59908a59 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java @@ -92,16 +92,14 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O private String filterString = ""; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - AppLog.d(this, "onCreateView()"); - View view = inflater.inflate(R.layout.podselection__fragment, container, false); - ButterKnife.bind(this, view); - return view; + protected int getLayoutResId() { + return R.layout.podselection__fragment; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + ButterKnife.bind(this, view); app = (App) getActivity().getApplication(); appSettings = app.getSettings(); @@ -204,7 +202,7 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); - TextView textView = (TextView) view.findViewById(android.R.id.text1); + TextView textView = view.findViewById(android.R.id.text1); textView.setTextColor(appSettings.isAmoledColorMode() ? Color.GRAY : Color.BLACK); return view; } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java index de5cae55..943dbfcc 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java @@ -305,10 +305,10 @@ public class SettingsActivity extends ThemedActivity implements SharedPreference final ThemedAlertDialogBuilder builder = new ThemedAlertDialogBuilder(context, appSettings); builder.setView(dialogLayout); - final FrameLayout titleBackground = (FrameLayout) dialogLayout.findViewById(R.id.color_picker_dialog__title_background); - final TextView title = (TextView) dialogLayout.findViewById(R.id.color_picker_dialog__title); - final LineColorPicker base = (LineColorPicker) dialogLayout.findViewById(R.id.color_picker_dialog__base_picker); - final LineColorPicker shade = (LineColorPicker) dialogLayout.findViewById(R.id.color_picker_dialog__shade_picker); + final FrameLayout titleBackground = dialogLayout.findViewById(R.id.color_picker_dialog__title_background); + final TextView title = dialogLayout.findViewById(R.id.color_picker_dialog__title); + final LineColorPicker base = dialogLayout.findViewById(R.id.color_picker_dialog__base_picker); + final LineColorPicker shade = dialogLayout.findViewById(R.id.color_picker_dialog__shade_picker); title.setText(type == 1 ? R.string.pref_title__primary_color : R.string.pref_title__accent_color); title.setTextColor(getResources().getColor(R.color.white)); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java index 7e6cb353..576fb1b1 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java @@ -67,9 +67,8 @@ public class TagListFragment extends ThemedFragment implements OnSomethingClickL protected DiasporaUrlHelper urls; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - AppLog.d(this, "onCreateView()"); - return inflater.inflate(R.layout.recycler_list__fragment, container, false); + protected int getLayoutResId() { + return R.layout.recycler_list__fragment; } @Override diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedCheckBoxPreference.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedCheckBoxPreference.java index ed4f1400..0c829342 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedCheckBoxPreference.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedCheckBoxPreference.java @@ -41,7 +41,7 @@ public class ThemedCheckBoxPreference extends CheckBoxPreference implements Them @Override public void setColors() { - CheckBox checkBox = (CheckBox) rootLayout.findViewById(android.R.id.checkbox); + CheckBox checkBox = rootLayout.findViewById(android.R.id.checkbox); ThemeHelper.getInstance(AppSettings.get()); ThemeHelper.updateCheckBoxColor(checkBox); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java index 524c1b65..c335d929 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedColorPickerPreference.java @@ -38,7 +38,7 @@ public class ThemedColorPickerPreference extends Preference implements Themeable @Override protected void onBindView(View view) { super.onBindView(view); - colorPreview = (ImageView) view.findViewById(android.R.id.icon); + colorPreview = view.findViewById(android.R.id.icon); setColors(); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java index 6bda3814..6158a4a9 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedFragment.java @@ -21,14 +21,14 @@ package com.github.dfa.diaspora_android.ui.theme; import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.util.AppSettings; -import net.gsantner.opoc.activity.CustomFragment; +import net.gsantner.opoc.activity.GsFragmentBase; /** * Fragment that supports color schemes * Created by vanitas on 06.10.16. */ -public abstract class ThemedFragment extends CustomFragment { +public abstract class ThemedFragment extends GsFragmentBase { protected AppSettings getAppSettings() { return ((App) getActivity().getApplication()).getSettings(); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedPreferenceCategory.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedPreferenceCategory.java index 28b97142..5df13fda 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedPreferenceCategory.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedPreferenceCategory.java @@ -36,7 +36,7 @@ public class ThemedPreferenceCategory extends PreferenceCategory implements Them @Override protected View onCreateView(ViewGroup parent) { View rootLayout = super.onCreateView(parent); - this.titleTextView = (TextView) rootLayout.findViewById(android.R.id.title); + this.titleTextView = rootLayout.findViewById(android.R.id.title); setColors(); return rootLayout; } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedVisibilityPreference.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedVisibilityPreference.java index 8e94dac4..6bd8c186 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedVisibilityPreference.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedVisibilityPreference.java @@ -27,7 +27,7 @@ public class ThemedVisibilityPreference extends ThemedCheckBoxPreference { @Override public void setColors() { - CheckBox checkBox = (CheckBox) rootLayout.findViewById(android.R.id.checkbox); + CheckBox checkBox = rootLayout.findViewById(android.R.id.checkbox); checkBox.setButtonDrawable(R.drawable.ic_visibility_selector); ThemeHelper.getInstance(AppSettings.get()); ThemeHelper.updateCheckBoxColor(checkBox); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AndroidBug5497Workaround.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AndroidBug5497Workaround.java index 4a9afbda..98017bde 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AndroidBug5497Workaround.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AndroidBug5497Workaround.java @@ -22,7 +22,7 @@ public class AndroidBug5497Workaround { private FrameLayout.LayoutParams frameLayoutParams; private AndroidBug5497Workaround(Activity activity) { - FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); + FrameLayout content = activity.findViewById(android.R.id.content); mChildOfContent = content.getChildAt(0); mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java index 98b5c186..14478c07 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java @@ -64,7 +64,6 @@ import java.util.Locale; public class BrowserFragment extends ThemedFragment { public static final String TAG = "com.github.dfa.diaspora_android.BrowserFragment"; - protected View rootLayout; protected ContextMenuWebView webView; protected ProgressBar progressBar; protected AppSettings appSettings; @@ -74,18 +73,11 @@ public class BrowserFragment extends ThemedFragment { protected String pendingUrl; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - AppLog.d(this, "onCreateView()"); - if (rootLayout == null) { - LayoutInflater inflater1 = inflater.cloneInContext(new MutableContextWrapper(getContext())); - rootLayout = inflater1.inflate(R.layout.browser__fragment, container, false); - } else { - MutableContextWrapper context = (MutableContextWrapper) rootLayout.getContext(); - context.setBaseContext(getContext()); - } - return rootLayout; + protected int getLayoutResId() { + return R.layout.browser__fragment; } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { AppLog.d(this, "onViewCreated()"); @@ -96,7 +88,7 @@ public class BrowserFragment extends ThemedFragment { } if (this.webView == null) { - this.webView = (ContextMenuWebView) view.findViewById(R.id.webView); + this.webView = view.findViewById(R.id.webView); getActivity().runOnUiThread(new Runnable() { @Override public void run() { @@ -108,7 +100,7 @@ public class BrowserFragment extends ThemedFragment { } if (this.progressBar == null) { - this.progressBar = (ProgressBar) view.findViewById(R.id.progressBar); + this.progressBar = view.findViewById(R.id.progressBar); } if (pendingUrl != null) { @@ -125,8 +117,8 @@ public class BrowserFragment extends ThemedFragment { public void onDestroyView() { super.onDestroyView(); - if (getRetainInstance() && rootLayout.getParent() instanceof ViewGroup) { - ((ViewGroup) rootLayout.getParent()).removeView(rootLayout); + if (getRetainInstance() && getView() != null && getView().getParent() instanceof ViewGroup) { + ((ViewGroup) getView().getParent()).removeView(getView()); } } diff --git a/app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java b/app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java deleted file mode 100644 index e6d50c75..00000000 --- a/app/src/main/java/net/gsantner/opoc/activity/CustomFragment.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - This file is part of the dandelion*. - - dandelion* is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - dandelion* is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the dandelion*. - - If not, see . - */ -package net.gsantner.opoc.activity; - -import android.os.Bundle; -import android.support.v4.app.Fragment; - -/** - * Customized abstract Fragment class with some useful methods - * Created by vanitas on 21.09.16. - */ - -public abstract class CustomFragment extends Fragment { - - public static final String TAG = "net.gsantner.opoc.activity.CustomFragment"; - - /** - * We have an optionsMenu - * - * @param savedInstanceState state - */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - } - - /** - * Return the tag used to identify the Fragment. - * - * @return tag - */ - public abstract String getFragmentTag(); - - /** - * Return true if the fragment reacted to a back button press, false else. - * In case the fragment returned false, the parent activity should handle the backPress. - * - * @return did we react to the back press? - */ - public abstract boolean onBackPressed(); -} - diff --git a/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java b/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java new file mode 100644 index 00000000..93019ce9 --- /dev/null +++ b/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java @@ -0,0 +1,129 @@ +/*####################################################### + * + * Maintained by Gregor Santner, 2017- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ +package net.gsantner.opoc.activity; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.LayoutRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import net.gsantner.opoc.util.ContextUtils; + +import butterknife.ButterKnife; + +/** + * A common base fragment to extend from + */ +public abstract class GsFragmentBase extends Fragment { + private boolean _fragmentFirstTimeVisible = true; + private final Object _fragmentFirstTimeVisibleSync = new Object(); + + protected ContextUtils _cu; + protected Bundle _savedInstanceState = null; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + /** + * Inflate the fragments layout. Don't override this method, just supply the needed + * {@link LayoutRes} via abstract method {@link #getLayoutResId()}, super does the rest + */ + @Deprecated + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + _cu = new ContextUtils(inflater.getContext()); + _cu.setAppLanguage(getAppLanguage()); + _savedInstanceState = savedInstanceState; + View view = inflater.inflate(getLayoutResId(), container, false); + ButterKnife.bind(this, view); + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + view.postDelayed(() -> { + synchronized (_fragmentFirstTimeVisibleSync) { + if (getUserVisibleHint() && isVisible() && _fragmentFirstTimeVisible) { + _fragmentFirstTimeVisible = false; + onFragmentFirstTimeVisible(); + } + } + }, 1); + } + + /** + * Get a tag from the fragment, allows faster distinction + * + * @return This fragments tag + */ + public abstract String getFragmentTag(); + + + /** + * Get the layout to be inflated in the fragment + * + * @return Layout resource id + */ + @LayoutRes + protected abstract int getLayoutResId(); + + /** + * Event to be called when the back button was pressed + * True should be returned when this was handled by the fragment + * and no further handling in the view hierarchy is needed + * + * @return True if back handled by fragment + */ + public boolean onBackPressed() { + return false; + } + + /** + * Set the language to be used in this fragment + * Defaults to resolve the language from sharedpreferences: pref_key__language + * + * @return Empty string for system language, or an android locale code + */ + public String getAppLanguage() { + if (getContext() != null) { + return getContext().getSharedPreferences("app", Context.MODE_PRIVATE) + .getString("pref_key__language", ""); + } + return ""; + } + + /** + * This will be called when this fragment gets the first time visible + */ + public void onFragmentFirstTimeVisible() { + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + synchronized (_fragmentFirstTimeVisibleSync) { + if (isVisibleToUser && _fragmentFirstTimeVisible) { + _fragmentFirstTimeVisible = false; + onFragmentFirstTimeVisible(); + } + } + } +} From 618f3eaaba55ff5e92e17eec900387fde9cd2205 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 01:41:43 +0200 Subject: [PATCH 10/31] Fix webview-js dialog not dismissing correctly --- .../web/ContextMenuWebView.java | 1 + .../web/DiasporaStreamWebChromeClient.java | 22 ++++++------------- build.gradle | 2 -- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java b/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java index caa2f68a..d450a51f 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java @@ -100,6 +100,7 @@ public class ContextMenuWebView extends NestedWebView { MainActivity.REQUEST_CODE__ACCESS_EXTERNAL_STORAGE); } }) + .setCancelable(false) .setNegativeButton(context.getText(android.R.string.no), null) .show(); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/DiasporaStreamWebChromeClient.java b/app/src/main/java/com/github/dfa/diaspora_android/web/DiasporaStreamWebChromeClient.java index 60a8f8cc..1dc21836 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/DiasporaStreamWebChromeClient.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/DiasporaStreamWebChromeClient.java @@ -18,7 +18,6 @@ */ package com.github.dfa.diaspora_android.web; -import android.content.DialogInterface; import android.webkit.JsResult; import android.webkit.WebView; import android.widget.ProgressBar; @@ -65,20 +64,13 @@ public class DiasporaStreamWebChromeClient extends FileUploadWebChromeClient { ThemedAlertDialogBuilder builder = new ThemedAlertDialogBuilder(view.getContext(), AppSettings.get()); builder.setTitle(view.getContext().getString(R.string.confirmation)) .setMessage(message) - .setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - result.confirm(); - } - }) - .setNegativeButton(android.R.string.cancel, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - result.cancel(); - } - }) - .create() - .show(); + .setPositiveButton(android.R.string.ok, (dialog, which) -> result.confirm()) + .setNegativeButton(android.R.string.cancel, (dialog, which) -> result.cancel()) + .setOnCancelListener(dialog -> { + result.cancel(); + dialog.dismiss(); + }) + .create().show(); return true; } diff --git a/build.gradle b/build.gradle index 3f0532f1..b84d2d90 100644 --- a/build.gradle +++ b/build.gradle @@ -12,8 +12,6 @@ buildscript { 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 - ext.version_library_commonmark = "0.10.0" // 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 From b48dc5dcaccdf63f14d3ea42690a0e0873be5ca5 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 02:46:44 +0200 Subject: [PATCH 11/31] Fix loading non-pod links outside customtab/external browser --- .../activity/AboutActivity.java | 1 - .../activity/AspectListFragment.java | 1 - .../activity/DiasporaStreamFragment.java | 37 ++++++++++++------- .../activity/MainActivity.java | 21 ++++++++--- .../activity/PodSelectionFragment.java | 2 - .../activity/TagListFragment.java | 1 - .../ui/theme/ThemedActivity.java | 3 -- .../diaspora_android/util/ActivityUtils.java | 5 ++- .../diaspora_android/util/AppSettings.java | 2 +- .../diaspora_android/web/BrowserFragment.java | 3 +- .../web/custom_tab/CustomTabsHelper.java | 8 +++- 11 files changed, 51 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java index f587f1bd..4ea2d1f5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AboutActivity.java @@ -20,7 +20,6 @@ package com.github.dfa.diaspora_android.activity; import android.content.ClipData; import android.content.ClipboardManager; -import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java index 6884974f..50cf66af 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java @@ -37,7 +37,6 @@ import com.github.dfa.diaspora_android.R; import com.github.dfa.diaspora_android.data.DiasporaAspect; import com.github.dfa.diaspora_android.listener.OnSomethingClickListener; import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; -import com.github.dfa.diaspora_android.util.AppLog; import com.github.dfa.diaspora_android.util.AppSettings; import com.github.dfa.diaspora_android.util.ContextUtils; import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java index 08882d5d..8e21e113 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/DiasporaStreamFragment.java @@ -325,21 +325,30 @@ public class DiasporaStreamFragment extends BrowserFragment { @SuppressWarnings("unused") @JavascriptInterface public void setUserProfile(final String webMessage) throws JSONException { - App app = ((App) getActivity().getApplication()); - final DiasporaUserProfile pup = app.getDiasporaUserProfile(); - if (pup.isRefreshNeeded()) { - try { - // Try to very fail-safe check if user information gets really loaded from correct pod - if (!webView.getUrl().startsWith(app.getSettings().getPod().getPodUrl().getBaseUrl())) { - return; - } - } catch (Exception ignored) { - } - AppLog.v(this, "DiasporaUserProfile needs refresh; Try to parse JSON"); - pup.parseJson(webMessage); - getActivity().runOnUiThread(new Runnable() { + final Activity activity = getActivity(); + if (activity != null) { + activity.runOnUiThread(new Runnable() { + @Override public void run() { - pup.analyzeUrl(webView.getUrl()); + App app = ((App) activity.getApplication()); + final DiasporaUserProfile pup = app.getDiasporaUserProfile(); + if (pup.isRefreshNeeded()) { + try { + // Try to very fail-safe check if user information gets really loaded from correct pod + if (!webView.getUrl().startsWith(app.getSettings().getPod().getPodUrl().getBaseUrl())) { + return; + } + } catch (Exception ignored) { + return; + } + AppLog.v(this, "DiasporaUserProfile needs refresh; Try to parse JSON"); + pup.parseJson(webMessage); + getActivity().runOnUiThread(new Runnable() { + public void run() { + pup.analyzeUrl(webView.getUrl()); + } + }); + } } }); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index b15e1dc4..24369f1d 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -338,12 +338,23 @@ public class MainActivity extends ThemedActivity * * @param url URL to load in the DiasporaStreamFragment */ - public void openDiasporaUrl(String url) { + public void openDiasporaUrl(final String url) { AppLog.v(this, "openDiasporaUrl()"); - DiasporaStreamFragment streamFragment = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); - showFragment(streamFragment); - showLastVisitedTimestampMessageIfNeeded(url); - streamFragment.loadUrl(url); + if (url.startsWith(_appSettings.getPod().getPodUrl().getBaseUrl()) && !url.startsWith("https://dia.so/")) { + DiasporaStreamFragment streamFragment = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); + showFragment(streamFragment); + showLastVisitedTimestampMessageIfNeeded(url); + streamFragment.loadUrl(url); + } else { + toolbarTop.postDelayed(new Runnable() { + @Override + public void run() { + Intent i = new Intent(ACTION_OPEN_EXTERNAL_URL); + i.putExtra(EXTRA_URL, url); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); + } + }, 1000); + } } public void showLastVisitedTimestampMessageIfNeeded(String url) { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java index 59908a59..ab247974 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java @@ -32,7 +32,6 @@ import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.AppCompatButton; import android.support.v7.widget.SearchView; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -53,7 +52,6 @@ import com.github.dfa.diaspora_android.service.FetchPodsService; import com.github.dfa.diaspora_android.ui.PodSelectionDialog; import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; import com.github.dfa.diaspora_android.util.ActivityUtils; -import com.github.dfa.diaspora_android.util.AppLog; import com.github.dfa.diaspora_android.util.AppSettings; import com.github.dfa.diaspora_android.util.ContextUtils; import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java index 576fb1b1..adb832c5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java @@ -35,7 +35,6 @@ import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.R; import com.github.dfa.diaspora_android.listener.OnSomethingClickListener; import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; -import com.github.dfa.diaspora_android.util.AppLog; import com.github.dfa.diaspora_android.util.AppSettings; import com.github.dfa.diaspora_android.util.ContextUtils; import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java index bec88c4e..d8651bb5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/theme/ThemedActivity.java @@ -19,10 +19,7 @@ package com.github.dfa.diaspora_android.ui.theme; import android.annotation.TargetApi; -import android.app.ActivityManager; import android.content.pm.ActivityInfo; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v7.app.AppCompatActivity; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/ActivityUtils.java b/app/src/main/java/com/github/dfa/diaspora_android/util/ActivityUtils.java index e998cd13..f99172f5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/ActivityUtils.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/ActivityUtils.java @@ -77,10 +77,11 @@ public class ActivityUtils extends net.gsantner.opoc.util.ActivityUtils { /** * This method creates file sharing uri by using FileProvider + * * @return */ - public static Uri getFileSharingUri(Context context,File file) { + public static Uri getFileSharingUri(Context context, File file) { - return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID,file); + return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, file); } } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 1b3d2bff..0c8999a0 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -46,7 +46,7 @@ public class AppSettings extends SharedPreferencesPropertyBackend { return new AppSettings(App.get()); } - private AppSettings(Context context) { + public AppSettings(Context context) { super(context); _prefPod = _context.getSharedPreferences("pod0", Context.MODE_PRIVATE); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java index 14478c07..538523ed 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/BrowserFragment.java @@ -30,7 +30,6 @@ import android.os.Bundle; import android.os.Environment; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebSettings; @@ -222,7 +221,7 @@ public class BrowserFragment extends ThemedFragment { // Only show share intent when Action Share Screenshot was selected if (hasToShareScreenshot) { - Uri bmpUri = ActivityUtils.getFileSharingUri(getContext(),new File(fileSaveDirectory, fileSaveName)); + Uri bmpUri = ActivityUtils.getFileSharingUri(getContext(), new File(fileSaveDirectory, fileSaveName)); Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("image/jpeg"); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java index 50481fd3..d42bafaa 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java @@ -41,6 +41,8 @@ public class CustomTabsHelper { static final String BETA_PACKAGE = "com.chrome.beta"; static final String DEV_PACKAGE = "com.chrome.dev"; static final String LOCAL_PACKAGE = "com.google.android.apps.chrome"; + static final String CHROMIUM = "org.chromium.chrome"; + static final String FENNEC = "org.mozilla.fennec_fdroid"; private static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE = "android.support.customtabs.extra.KEEP_ALIVE"; @@ -101,6 +103,10 @@ public class CustomTabsHelper { sPackageNameToUse = DEV_PACKAGE; } else if (packagesSupportingCustomTabs.contains(LOCAL_PACKAGE)) { sPackageNameToUse = LOCAL_PACKAGE; + } else if (packagesSupportingCustomTabs.contains(CHROMIUM)) { + sPackageNameToUse = CHROMIUM; + } else if (packagesSupportingCustomTabs.contains(FENNEC)) { + sPackageNameToUse = FENNEC; } return sPackageNameToUse; } @@ -137,6 +143,6 @@ public class CustomTabsHelper { * @return All possible chrome package names that provide custom tabs feature. */ public static String[] getPackages() { - return new String[]{"", STABLE_PACKAGE, BETA_PACKAGE, DEV_PACKAGE, LOCAL_PACKAGE}; + return new String[]{"", STABLE_PACKAGE, BETA_PACKAGE, DEV_PACKAGE, LOCAL_PACKAGE, CHROMIUM, FENNEC}; } } From dcc87281719bda93b7f5f38c7b56115f2573a015 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 02:52:20 +0200 Subject: [PATCH 12/31] Update changelog * fixes #180 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e49e3c8a..2eed665c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### v1.1.2 +- Fix: loading non-pod links outside customtab/external browser +- Fix: webview-js dialog not dismissing correctly + ### v1.1.0 - Added: App shortcuts (Android 7+) - Updated: podlist From 80f8f10bf90369d2fc7cbba682ffe373bb6a41e4 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Fri, 30 Mar 2018 03:03:19 +0200 Subject: [PATCH 13/31] Release v1.1.2 --- README.md | 5 ++--- app/build.gradle | 4 ++-- app/src/main/res/values/strings-preferences.xml | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8efb06ce..bcdadee7 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,8 @@ [![Build Status](https://travis-ci.org/Diaspora-for-Android/dandelion.svg?branch=master)](https://travis-ci.org/Diaspora-for-Android/dandelion) [![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fdiaspora-for-android%2Fdandelion.git&mail=gro.xobliam@@rentnasg) [![Chat - Matrix](https://img.shields.io/badge/chat-on%20matrix-blue.svg)](https://matrix.to/#/#dandelion:matrix.org) [![Chat - FreeNode IRC](https://img.shields.io/badge/chat-on%20irc-blue.svg)](https://kiwiirc.com/client/irc.freenode.net/?nick=dandelion-anon|?##dandelion) -[![Donate Bitcoin](https://img.shields.io/badge/donate-bitcoin-orange.svg)](http://gsantner.net/#donate) +[![Donate Bitcoin](https://img.shields.io/badge/donate-bitcoin-orange.svg)](https://gsantner.net/supportme/?project=dandelion&source=readme) [![Donate LiberaPay](https://img.shields.io/badge/donate-liberapay-orange.svg)](https://liberapay.com/gsantner/donate) -[![Donate GratiPay](https://img.shields.io/gratipay/team/dandelion.svg)](https://gratipay.com/dandelion/) # dandelion\* @@ -79,7 +78,7 @@ For more licensing informations, see [`3rd party licenses`](/app/src/main/res/ra ### Notice #### Maintainers -- gsantner ([GitHub](https://github.com/gsantner), [Web](http://gsantner.net), [diaspora*](https://pod.geraspora.de/people/d1cbdd70095301341e834860008dbc6c)) +- gsantner ([GitHub](https://github.com/gsantner), [Web](https://gsantner.net), [diaspora*](https://pod.geraspora.de/people/d1cbdd70095301341e834860008dbc6c)) - Bitcoin: [1B9ZyYdQoY9BxMe9dRUEKaZbJWsbQqfXU5](http://gsantner.net/donate/#donate) - vanitasvitae ([GitHub](https://github.com/vanitasvitae), [diaspora*](https://pod.geraspora.de/people/bbd7af90fbec013213e34860008dbc6c)) - Bitcoin: 1Ao3W6NaQv3xKppviB7RSFKjHo6PGd8RTy diff --git a/app/build.gradle b/app/build.gradle index 3838b62b..f11ef202 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { resValue "string", "manifest_package_id", "com.github.dfa.diaspora_android" applicationId "com.github.dfa.diaspora_android" - versionName "1.1.1" - versionCode 30 + versionName "1.1.2" + versionCode 31 vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/res/values/strings-preferences.xml b/app/src/main/res/values/strings-preferences.xml index cf3860c3..4fd9f112 100644 --- a/app/src/main/res/values/strings-preferences.xml +++ b/app/src/main/res/values/strings-preferences.xml @@ -71,7 +71,7 @@ - Open external links with Chrome Custom Tabs. Chromium or Google Chrome needs to be installed in order to use this feature. \nIMPORTANT NOTE: Chrome Custom Tabs do not use configured proxy servers! + Open external links with Chrome Custom Tabs. Chromium, Firefox or Google Chrome needs to be installed in order to use this feature. \nIMPORTANT NOTE: Chrome Custom Tabs do not use configured proxy servers! Personal settings From f6ab146fd75fdab006b0bb561ad10ba02845c198 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Tue, 3 Apr 2018 23:23:16 +0200 Subject: [PATCH 14/31] Update github templates --- .github/ISSUE_TEMPLATE.md | 32 +++++++++++++++++--------------- .github/PULL_REQUEST_TEMPLATE | 8 ++++++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d9892f4a..1cfcaa79 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,25 +1,27 @@ #### General information - - - * **App version:** * **System:** * **Pod:** #### Description -What this is about, what happens and how. What needs to be done for it to happen. #### Log - + + diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index 4028d569..863cd426 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -6,6 +6,14 @@ Del billede Åben i ekstern browser… - Kopier link-adresse til udklipsholder + Kopier link-adresse til udklipsholder diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index bbf94f0a..239ae35f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -57,7 +57,7 @@ Bild speichern Bild teilen In externem Browser öffnen… - Link-Adresse kopieren + Link-Adresse kopieren Bild-Adresse kopieren Konnte Bild nicht laden… diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6969ce9f..2d83a51b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -57,7 +57,7 @@ Guardar imagen Compartir imagen Abrir en navegador externo… - Copiar dirección del enlace al portapapeles + Copiar dirección del enlace al portapapeles Copiar dirección de imagen al portapapeles No se pudo cargar la imagen diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ceba8114..bb0866d0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -57,7 +57,7 @@ Enregistrer l\'image Partager l\'image Ouvrir dans un navigateur externe… - Copier le lien dans le presse-papier + Copier le lien dans le presse-papier Copier le lien de l\'image dans le presse-papiers Impossible de récupérer l\'image diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 50fec360..ed7041cb 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -57,7 +57,7 @@ Gardar imaxe Compartir imaxe Abrir nun navegador externo… - Copiar ligazón ao portapapeis + Copiar ligazón ao portapapeis Copia enderezo da imaxe ao portapapeis Non se cargou a imaxe diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 378ea528..3d04a9c0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Kép mentése Kép megosztása Megnyitás külső böngészőben… - Link címének másolása a vágólapra + Link címének másolása a vágólapra Kép címének másolása a vágólapra Nem lehet betölteni a képet diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 00117c36..d5b5885f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -57,7 +57,7 @@ Salva immagine Condividi immagine Apri nel browser… - Copia link negli appunti + Copia link negli appunti Copia indirizzo dell\'immagine negli appunti Impossibile caricare immagine diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 0ee47968..6b7ace50 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -57,7 +57,7 @@ 画像を保存 画像をシェア 外部ブラウザーで開く… - リンクアドレスをクリップボードへコピー + リンクアドレスをクリップボードへコピー 画像のアドレスをクリップボードへコピー 画像を読み込むことができません diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 92c2885b..4e6fe374 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -57,7 +57,7 @@ Sekles tugna Bḍu tugna Ldi deg iminig azɣaray… - Nɣel aseɣwen ɣef afus + Nɣel aseɣwen ɣef afus Nɣel tugna ɣef afus Ur izmir ara ad d-isali tugna diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 4aebdff8..bb300a60 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -57,7 +57,7 @@ ചിത്രം സംരക്ഷിക്കുക ചിത്രം പങ്കുവയ്ക്കുക പുറമെയുള്ള ബ്രൗസറിൽ തുറക്കുക… - ലിങ്ക് വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക + ലിങ്ക് വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക ചിത്രത്തിന്റെ വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക ചിത്രം ലോഡ് ചെയ്യാൻ സാധിക്കുന്നില്ല diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 22a36fb8..481ce9f1 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -57,7 +57,7 @@ Afbeelding opslaan Deel afbeelding Geopend in externe browser… - Link-adres kopiëren naar Klembord + Link-adres kopiëren naar Klembord Afbeelding kopiëren naar Klembord Niet in staat om afbeelding te laden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7b5cdc34..2c3e8e68 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -57,7 +57,7 @@ Zapisz obraz Udostępnij obraz Otwórz w zewnętrznej przeglądarce… - Skopiuj adres odnośnika do schowka + Skopiuj adres odnośnika do schowka Skopiuj adres obrazu do schowka Nie udało się wczytać obrazu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 6a54eeec..1720bd5f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -59,7 +59,7 @@ Salvar imagem Compartilhar imagem Abrir em navegador externo… - Copiar endereço à área de transferência + Copiar endereço à área de transferência Copiar endereço de imagem à área de transferência Impossível carregar a imagem diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a0271522..0073f07c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -57,7 +57,7 @@ Сохранить изображение Поделиться изображением Открыть во внешнем браузере… - Скопировать адрес ссылки в буфер обмена + Скопировать адрес ссылки в буфер обмена Скопировать адрес изображения в буфер обмена Не удаётся загрузить изображение diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 72b3bbd8..b7ca8fc1 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -71,7 +71,7 @@ Sarva s\'immàgine Cumpartzi s\'immàgine Aberi in un\'esploradore (browser) esternu… - Còpia su ligàmenes in sos apuntos + Còpia su ligàmenes in sos apuntos Còpia s\'indiritzu de s\'immàgine in sos apuntos diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 5664fd09..5eb05d34 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -57,7 +57,7 @@ Spara bild Dela bild Öppna i en extern webbläsare… - Kopiera länkadress + Kopiera länkadress Kopiera bildadressen Kunde inte ladda bilden diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index b7a2d304..25c3ad87 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -57,7 +57,7 @@ Зберегти зображення Поділитися зображенням Відкрити у зовнішньому браузері… - Копіювати адресу посилання у буфер обміну + Копіювати адресу посилання у буфер обміну Копіювати зображення у буфер обміну Не вдалося завантажити зображення diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 79671b48..e5b84697 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -57,7 +57,7 @@ 儲存圖片 分享圖片 用外部瀏覽器開啟… - 將連結網址複製到剪貼簿 + 將連結網址複製到剪貼簿 將圖片網址複製到剪貼簿 無法載入圖片 diff --git a/app/src/main/res/values/strings-not_translatable.xml b/app/src/main/res/values/strings-not_translatable.xml index 4ec47306..4e210a01 100644 --- a/app/src/main/res/values/strings-not_translatable.xml +++ b/app/src/main/res/values/strings-not_translatable.xml @@ -127,4 +127,5 @@ pref_key__is_overview_statusbar_hidden pref_key__recreate_main_activity pref_key__show_title + PDF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index db79e82c..7a40626b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,7 +70,7 @@ Save image Share image Open in external browser… - Copy link address to clipboard + Copy link address to clipboard Copy image address to clipboard @@ -98,4 +98,5 @@ Hide statusbar Show title in the main view Show title + Launcher shortcut diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt index 120c4be9..651f7602 100644 --- a/metadata/en-US/full_description.txt +++ b/metadata/en-US/full_description.txt @@ -3,16 +3,16 @@ It adds useful features to your networking experience: ⚡ Quick access to most diaspora* features 👉 Share content to and from the app -🌎 Proxy support +🌎 Proxy support (Tor/Orbot supported) 📰 In-app-browser to view articles 🎨 Customizeable colors 🌆 Night/AMOLED mode 🈴 Localized in many languages ✔️ Allows system independent language - Support the project:Translate using StringlateJoin discussion on MatrixMore information about contributions + ✋ Android Contribution Guide (gsantner blog)Support main developer From 68be2f3a4a541bf94040c4c73b06ebe0b2144074 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 8 Apr 2018 18:05:56 +0200 Subject: [PATCH 18/31] Load README when ow pod URL gets called and no pod selected , fixes #193 --- .../activity/MainActivity.java | 23 ++++++++++++------- .../web/custom_tab/CustomTabsHelper.java | 2 ++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index d6a35aed..099d505f 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -333,19 +333,26 @@ public class MainActivity extends ThemedActivity */ public void openDiasporaUrl(final String url) { AppLog.v(this, "openDiasporaUrl()"); - if (url.startsWith(_appSettings.getPod().getPodUrl().getBaseUrl()) && !url.startsWith("https://dia.so/")) { + if (url != null && url.startsWith("http://127.0.0.1")) { + // This URL seems to be called somehow, but it doesn't make sense ;) + toolbarTop.postDelayed(() -> { + Intent i = new Intent(ACTION_OPEN_EXTERNAL_URL); + i.putExtra(EXTRA_URL, "https://github.com/Diaspora-for-Android/dandelion/blob/master/README.md"); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); + }, 1000); + return; + } + if (_appSettings.getPod() != null && _appSettings.getPod().getPodUrl() != null && _appSettings.getPod().getPodUrl().getBaseUrl() != null + && url.startsWith(_appSettings.getPod().getPodUrl().getBaseUrl()) && !url.startsWith("https://dia.so/")) { DiasporaStreamFragment streamFragment = (DiasporaStreamFragment) getFragment(DiasporaStreamFragment.TAG); showFragment(streamFragment); showLastVisitedTimestampMessageIfNeeded(url); streamFragment.loadUrl(url); } else { - toolbarTop.postDelayed(new Runnable() { - @Override - public void run() { - Intent i = new Intent(ACTION_OPEN_EXTERNAL_URL); - i.putExtra(EXTRA_URL, url); - LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); - } + toolbarTop.postDelayed(() -> { + Intent i = new Intent(ACTION_OPEN_EXTERNAL_URL); + i.putExtra(EXTRA_URL, url); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); }, 1000); } } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java index c2e66a72..29ea60bb 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java @@ -108,6 +108,8 @@ public class CustomTabsHelper { sPackageNameToUse = CHROMIUM; } else if (packagesSupportingCustomTabs.contains(FENNEC)) { sPackageNameToUse = FENNEC; + }else if (packagesSupportingCustomTabs.contains(KLAR)) { + sPackageNameToUse = KLAR; } return sPackageNameToUse; } From 38cf36b46c3d7b9d29ad1aa319b6b3d46e4cbbde Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 8 Apr 2018 19:11:12 +0200 Subject: [PATCH 19/31] Improve sharing *a lot* +GIF - add support for multiple filetypes * now supporting GIFs too ;) * Create connection over netcipher --- .../service/AvatarImageLoader.java | 6 +- .../service/ImageDownloadTask.java | 98 ------------ .../web/ContextMenuWebView.java | 145 +++++------------- .../web/custom_tab/CustomTabsHelper.java | 2 +- .../format/markdown/SimpleMarkdownParser.java | 2 +- .../nonsupport/LanguagePreference.java | 2 +- .../net/gsantner/opoc/util/DownloadTask.java | 57 +++++++ .../net/gsantner/opoc/util/NetworkUtils.java | 9 +- 8 files changed, 112 insertions(+), 209 deletions(-) delete mode 100644 app/src/main/java/com/github/dfa/diaspora_android/service/ImageDownloadTask.java create mode 100644 app/src/main/java/net/gsantner/opoc/util/DownloadTask.java diff --git a/app/src/main/java/com/github/dfa/diaspora_android/service/AvatarImageLoader.java b/app/src/main/java/com/github/dfa/diaspora_android/service/AvatarImageLoader.java index 20f0a4f9..ab975326 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/service/AvatarImageLoader.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/service/AvatarImageLoader.java @@ -24,6 +24,8 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.widget.ImageView; +import net.gsantner.opoc.util.DownloadTask; + import java.io.File; public class AvatarImageLoader { @@ -52,7 +54,9 @@ public class AvatarImageLoader { public void startImageDownload(ImageView imageView, String avatarUrl) { if (!avatarUrl.equals("")) { - new ImageDownloadTask(imageView, avatarFile.getAbsolutePath()).execute(avatarUrl); + new DownloadTask(new File(avatarFile.getAbsolutePath()), (ok, file) -> { + loadToImageView(imageView); + }).execute(avatarUrl); } } } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/service/ImageDownloadTask.java b/app/src/main/java/com/github/dfa/diaspora_android/service/ImageDownloadTask.java deleted file mode 100644 index 5a3fd465..00000000 --- a/app/src/main/java/com/github/dfa/diaspora_android/service/ImageDownloadTask.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - This file is part of the dandelion*. - - dandelion* is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - dandelion* is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the dandelion*. - - If not, see . - */ -package com.github.dfa.diaspora_android.service; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.AsyncTask; -import android.support.annotation.Nullable; -import android.widget.ImageView; - -import com.github.dfa.diaspora_android.util.AppLog; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import javax.net.ssl.HttpsURLConnection; - -import info.guardianproject.netcipher.NetCipher; - -/** - * Task that can be used to download images from URLs and store them in storage - * Created by gsantner (http://gsantner.net/) on 24.03.16. - */ -public class ImageDownloadTask extends AsyncTask { - private final ImageView imageView; - private String savePath; - - /** - * Download image from URL - * - * @param imageView ImageView to set image to (null = don't set) - * @param savePath Save image to file (null = don't save) - */ - public ImageDownloadTask(@Nullable ImageView imageView, @Nullable String savePath) { - this.imageView = imageView; - this.savePath = savePath; - } - - protected Bitmap doInBackground(String... urls) { - String url = urls[0]; - Bitmap bitmap = null; - FileOutputStream out = null; - InputStream inStream; - HttpsURLConnection connection; - try { - connection = NetCipher.getHttpsURLConnection(url); - inStream = connection.getInputStream(); - bitmap = BitmapFactory.decodeStream(inStream); - - // Save to file if not null - if (savePath != null) { - out = new FileOutputStream(savePath); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); - } - - try { - inStream.close(); - } catch (IOException e) {/*Nothing*/} - - connection.disconnect(); - - } catch (Exception e) { - AppLog.e(this, e.getMessage()); - } finally { - try { - if (out != null) { - out.close(); - } - } catch (IOException ignored) { - } - } - return bitmap; - } - - protected void onPostExecute(Bitmap result) { - // Display on imageview if not null - if (imageView != null) { - imageView.setImageBitmap(result); - } - } -} diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java b/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java index 9e10a218..6cb85c8f 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/ContextMenuWebView.java @@ -18,30 +18,27 @@ */ package com.github.dfa.diaspora_android.web; -import android.Manifest; import android.app.Activity; -import android.app.AlertDialog; -import android.app.DownloadManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.Bitmap; import android.net.Uri; -import android.os.Environment; import android.util.AttributeSet; import android.view.ContextMenu; import android.view.MenuItem; import android.widget.Toast; +import com.github.dfa.diaspora_android.BuildConfig; import com.github.dfa.diaspora_android.R; -import com.github.dfa.diaspora_android.activity.MainActivity; -import com.github.dfa.diaspora_android.service.ImageDownloadTask; -import com.github.dfa.diaspora_android.util.ActivityUtils; +import com.github.dfa.diaspora_android.util.AppSettings; + +import net.gsantner.opoc.util.DownloadTask; +import net.gsantner.opoc.util.PermissionChecker; +import net.gsantner.opoc.util.ShareUtil; import java.io.File; +import java.util.Date; /** * Subclass of WebView which adds a context menu for long clicks on images or links to share, save @@ -81,108 +78,46 @@ public class ContextMenuWebView extends NestedWebView { public boolean onMenuItemClick(MenuItem item) { HitTestResult result = getHitTestResult(); String url = result.getExtra(); + final ShareUtil shu = new ShareUtil(context).setFileProviderAuthority(BuildConfig.APPLICATION_ID); + final PermissionChecker permc = new PermissionChecker(parentActivity); + final AppSettings appSettings = new AppSettings(context); + switch (item.getItemId()) { //Save image to external memory case ID_SAVE_IMAGE: { - boolean writeToStoragePermitted = true; - if (android.os.Build.VERSION.SDK_INT >= 23) { - int hasWRITE_EXTERNAL_STORAGE = parentActivity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) { - writeToStoragePermitted = false; - if (!parentActivity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - new AlertDialog.Builder(parentActivity) - .setMessage(R.string.permissions_image) - .setPositiveButton(context.getText(android.R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (android.os.Build.VERSION.SDK_INT >= 23) - parentActivity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - MainActivity.REQUEST_CODE__ACCESS_EXTERNAL_STORAGE); - } - }) - .setCancelable(false) - .setNegativeButton(context.getText(android.R.string.no), null) - .show(); - } - parentActivity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - MainActivity.REQUEST_CODE__ACCESS_EXTERNAL_STORAGE); - } - } - if (writeToStoragePermitted) { - //Make sure, Diaspora Folder exists - File destinationFolder = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora"); - if (!destinationFolder.exists()) { - destinationFolder.mkdirs(); - } - - if (url != null) { - Uri source = Uri.parse(url); + if (permc.doIfExtStoragePermissionGranted(context.getString(R.string.permissions_image))) { + File fileSaveDirectory = appSettings.getAppSaveDirectory(); + if (permc.mkdirIfStoragePermissionGranted(fileSaveDirectory)) { + String filename = "dandelion-" + ShareUtil.SDF_SHORT.format(new Date()) + url.substring(url.lastIndexOf(".")); + /*Uri source = Uri.parse(url); DownloadManager.Request request = new DownloadManager.Request(source); - File destinationFile = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/" + System.currentTimeMillis() + ".png"); - - request.setDestinationUri(Uri.fromFile(destinationFile)); - ((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request); - - Toast.makeText(context, context.getText(R.string.share__toast_saved_image_to_location) + " " + - destinationFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); + request.setDestinationUri(Uri.fromFile(new File(fileSaveDirectory, filename))); + ((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);*/ + new DownloadTask(new File(fileSaveDirectory, filename), (ok, dlfile) -> { + if (ok) { + Toast.makeText(context, context.getText(R.string.share__toast_saved_image_to_location) + " " + dlfile.getName(), Toast.LENGTH_LONG).show(); + } + }).execute(url); } } - } - break; - - case ID_SHARE_IMAGE: - if (url != null) { - boolean writeToStoragePermitted = true; - if (android.os.Build.VERSION.SDK_INT >= 23) { - int hasWRITE_EXTERNAL_STORAGE = parentActivity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - if (hasWRITE_EXTERNAL_STORAGE != PackageManager.PERMISSION_GRANTED) { - writeToStoragePermitted = false; - if (!parentActivity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - new AlertDialog.Builder(parentActivity) - .setMessage(R.string.permissions_image) - .setPositiveButton(context.getText(android.R.string.yes), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (android.os.Build.VERSION.SDK_INT >= 23) - parentActivity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - MainActivity.REQUEST_CODE__ACCESS_EXTERNAL_STORAGE); - } - }) - .setNegativeButton(context.getText(android.R.string.no), null) - .show(); - } else { - parentActivity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - MainActivity.REQUEST_CODE__ACCESS_EXTERNAL_STORAGE); - } - } - } - if (writeToStoragePermitted) { - //Make sure, Diaspora Folder exists - File destinationFolder = new File(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora"); - if (!destinationFolder.exists()) { - destinationFolder.mkdirs(); - } - - final Uri local = Uri.parse(Environment.getExternalStorageDirectory() + "/Pictures/Diaspora/" + System.currentTimeMillis() + ".png"); - new ImageDownloadTask(null, local.getPath()) { - @Override - protected void onPostExecute(Bitmap result) { - - Uri myUri = ActivityUtils.getFileSharingUri(context, new File(local.getPath())); - Intent sharingIntent = new Intent(); - sharingIntent.setAction(Intent.ACTION_SEND); - sharingIntent.putExtra(Intent.EXTRA_STREAM, myUri); - sharingIntent.setType("image/png"); - sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - context.startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.action_share_dotdotdot))); - } - }.execute(url); - } - } else { - Toast.makeText(context, "Cannot share image: url is null", Toast.LENGTH_SHORT).show(); - } - break; + } + + case ID_SHARE_IMAGE: { + if (permc.doIfExtStoragePermissionGranted(context.getString(R.string.permissions_image))) { + File fileSaveDirectory = appSettings.getAppSaveDirectory(); + if (permc.mkdirIfStoragePermissionGranted(fileSaveDirectory)) { + String filename = ".dandelion-shared" + url.substring(url.lastIndexOf(".")); + new DownloadTask(new File(fileSaveDirectory, filename), (ok, dlfile) -> { + if (ok) { + Toast.makeText(context, context.getText(R.string.share__toast_saved_image_to_location) + " " + dlfile.getName(), Toast.LENGTH_LONG).show(); + shu.shareStream(dlfile, "image/" + dlfile.getAbsolutePath().lastIndexOf(".") + 1); + } + }).execute(url); + } + } + break; + } case ID_IMAGE_EXTERNAL_BROWSER: if (url != null) { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java index 29ea60bb..aaa89f06 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/web/custom_tab/CustomTabsHelper.java @@ -108,7 +108,7 @@ public class CustomTabsHelper { sPackageNameToUse = CHROMIUM; } else if (packagesSupportingCustomTabs.contains(FENNEC)) { sPackageNameToUse = FENNEC; - }else if (packagesSupportingCustomTabs.contains(KLAR)) { + } else if (packagesSupportingCustomTabs.contains(KLAR)) { sPackageNameToUse = KLAR; } return sPackageNameToUse; diff --git a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java index d42c73e5..adaafa3b 100644 --- a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java +++ b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java @@ -9,7 +9,7 @@ * #########################################################*/ - /* +/* * Parses most common markdown tags. Only inline tags are supported, multiline/block syntax * is not supported (citation, multiline code, ..). This is intended to stay as easy as possible. * diff --git a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java index 52dfc3d1..76284a11 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java +++ b/app/src/main/java/net/gsantner/opoc/preference/nonsupport/LanguagePreference.java @@ -48,8 +48,8 @@ package net.gsantner.opoc.preference.nonsupport; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; -import android.support.annotation.Nullable; import android.preference.ListPreference; +import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; diff --git a/app/src/main/java/net/gsantner/opoc/util/DownloadTask.java b/app/src/main/java/net/gsantner/opoc/util/DownloadTask.java new file mode 100644 index 00000000..aec5b868 --- /dev/null +++ b/app/src/main/java/net/gsantner/opoc/util/DownloadTask.java @@ -0,0 +1,57 @@ +/* + This file is part of the dandelion*. + + dandelion* is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + dandelion* is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the dandelion*. + + If not, see . + */ +package net.gsantner.opoc.util; + +import android.os.AsyncTask; +import android.support.annotation.Nullable; + +import java.io.File; +import java.io.IOException; + +import javax.net.ssl.HttpsURLConnection; + +import info.guardianproject.netcipher.NetCipher; + +public class DownloadTask extends AsyncTask { + private File _targetFile; + private Callback.a2 _callback; + + public DownloadTask(File targetFile, @Nullable Callback.a2 callback) { + _targetFile = targetFile; + _callback = callback; + } + + protected Boolean doInBackground(String... urls) { + if (urls != null && urls.length > 0 && urls[0] != null) { + try { + HttpsURLConnection connection = NetCipher.getHttpsURLConnection(urls[0]); + return NetworkUtils.downloadFile(null, _targetFile, connection, null); + } catch (IOException e) { + e.printStackTrace(); + } + } + return false; + } + + protected void onPostExecute(Boolean result) { + if (_callback != null) { + _callback.callback(result, _targetFile); + } + } +} diff --git a/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java b/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java index f4586d7b..ebd7c31d 100644 --- a/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java @@ -53,11 +53,16 @@ public class NetworkUtils { } public static boolean downloadFile(final URL url, final File outFile, final Callback.a1 progressCallback) { + return downloadFile(url, outFile, null, progressCallback); + } + + public static boolean downloadFile(final URL url, final File outFile, HttpURLConnection connection, final Callback.a1 progressCallback) { InputStream input = null; OutputStream output = null; - HttpURLConnection connection = null; try { - connection = (HttpURLConnection) url.openConnection(); + if (connection == null) { + connection = (HttpURLConnection) url.openConnection(); + } connection.connect(); input = connection.getInputStream(); From 9da1a910b32d5f23afe43af694c84446c2f20843 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 8 Apr 2018 20:12:51 +0200 Subject: [PATCH 20/31] Add existingconnection to opoc:networkutils:performCall --- .../net/gsantner/opoc/util/NetworkUtils.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java b/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java index ebd7c31d..5212e5b7 100644 --- a/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/NetworkUtils.java @@ -64,7 +64,9 @@ public class NetworkUtils { connection = (HttpURLConnection) url.openConnection(); } connection.connect(); - input = connection.getInputStream(); + input = connection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST + ? connection.getInputStream() : connection.getErrorStream(); + if (!outFile.getParentFile().isDirectory()) if (!outFile.getParentFile().mkdirs()) @@ -145,20 +147,28 @@ public class NetworkUtils { } private static String performCall(final URL url, final String method, final String data) { + return performCall(url, method, data, null); + } + + private static String performCall(final URL url, final String method, final String data, final HttpURLConnection existingConnection) { try { - final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod(method); - conn.setDoInput(true); + final HttpURLConnection connection = existingConnection != null + ? existingConnection : (HttpURLConnection) url.openConnection(); + connection.setRequestMethod(method); + connection.setDoInput(true); if (data != null && !data.isEmpty()) { - conn.setDoOutput(true); - final OutputStream output = conn.getOutputStream(); + connection.setDoOutput(true); + final OutputStream output = connection.getOutputStream(); output.write(data.getBytes(Charset.forName(UTF8))); output.flush(); output.close(); } - return FileUtils.readCloseTextStream(conn.getInputStream()); + InputStream input = connection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST + ? connection.getInputStream() : connection.getErrorStream(); + + return FileUtils.readCloseTextStream(connection.getInputStream()); } catch (Exception e) { e.printStackTrace(); } From cebf0f473b2422441e68f6300d1108dc4b62c17e Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 8 Apr 2018 22:08:21 +0200 Subject: [PATCH 21/31] Fix podselection custom button color --- .../diaspora_android/activity/PodSelectionFragment.java | 9 ++++----- app/src/main/res/values/strings-not_translatable.xml | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java index ab247974..8f6c5ad5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java @@ -173,11 +173,10 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O rootView.setBackgroundColor(appSettings.isAmoledColorMode() ? Color.BLACK : Color.WHITE); listViewPod.setDivider(new ColorDrawable(Color.GRAY)); listViewPod.setDividerHeight(dividerHeight); - if (appSettings.isAmoledColorMode()) { - buttonUseCustomPod.setTextColor(Color.WHITE); - } else { - buttonUseCustomPod.setTextColor(ContextUtils.get().shouldColorOnTopBeLight(appSettings.getAccentColor()) ? Color.WHITE : Color.BLACK); - } + int bgcolor = appSettings.isAmoledColorMode() ? Color.BLACK : appSettings.getAccentColor(); + buttonUseCustomPod.setBackgroundColor(bgcolor); + buttonUseCustomPod.setTextColor(_cu.shouldColorOnTopBeLight(bgcolor) ? Color.WHITE : Color.BLACK); + } @Override diff --git a/app/src/main/res/values/strings-not_translatable.xml b/app/src/main/res/values/strings-not_translatable.xml index 4e210a01..4dc1878f 100644 --- a/app/src/main/res/values/strings-not_translatable.xml +++ b/app/src/main/res/values/strings-not_translatable.xml @@ -5,7 +5,7 @@ \n\n\n_________________________\n **Tags:** #dandelíon \n\n - *via [dandelion*](/people?q=dandelion00%40diasp.org) client / [GitHub](https://github.com/Diaspora-for-Android/dandelion)* + *via [dandelion*](/people?q=dandelion00%40diasp.org) client [(Source)](https://github.com/Diaspora-for-Android/dandelion)* Tor From 2cc74ea6136ada5e90a6c21e4bbd112d132cf011 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 8 Apr 2018 22:10:53 +0200 Subject: [PATCH 22/31] Release v1.1.3 --- CHANGELOG.md | 6 ++++++ app/build.gradle | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eed665c..5e8072e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +### v1.1.3 +- Improve sharing *a lot*, add support for multiple filetypes +- Support for downloading GIFs ;) +- Rework screenshot saving and sharing; add new share options: +- Merge license and changelog dialog on first start + ### v1.1.2 - Fix: loading non-pod links outside customtab/external browser - Fix: webview-js dialog not dismissing correctly diff --git a/app/build.gradle b/app/build.gradle index f11ef202..a11ef9b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,8 +19,8 @@ android { resValue "string", "manifest_package_id", "com.github.dfa.diaspora_android" applicationId "com.github.dfa.diaspora_android" - versionName "1.1.2" - versionCode 31 + versionName "1.1.3" + versionCode 32 vectorDrawables.useSupportLibrary = true From 9a6798f9f41a4365be99ecb109fcd958b67ef282 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Wed, 9 May 2018 03:00:33 +0200 Subject: [PATCH 23/31] Update french translation, by @arnaud-jacquemin, (closes #196) --- app/src/main/res/values-fr/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bb0866d0..b62b2260 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -76,4 +76,7 @@ Cacher la barre de statut Afficher le titre dans la vue principale Afficher le titre + Ouvrir le tiroir de navigation + Fermer le tiroir de navigation + Raccourci de l\'écran d\'accueil From ad3966dd858140a1df49258bfa484743aba62ede Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Wed, 9 May 2018 03:23:12 +0200 Subject: [PATCH 24/31] Merge string resources to one file, propagte change to all translations --- .../main/res/values-ar-rSA/strings-about.xml | 6 - app/src/main/res/values-ar-rSA/strings.xml | 5 + app/src/main/res/values-da/strings-about.xml | 31 -- .../res/values-da/strings-preferences.xml | 23 -- app/src/main/res/values-da/strings.xml | 113 +++++-- app/src/main/res/values-de/strings-about.xml | 43 --- .../res/values-de/strings-preferences.xml | 85 ----- app/src/main/res/values-de/strings.xml | 270 ++++++++++----- app/src/main/res/values-es/strings-about.xml | 43 --- .../res/values-es/strings-preferences.xml | 85 ----- app/src/main/res/values-es/strings.xml | 273 ++++++++++----- app/src/main/res/values-fr/strings-about.xml | 43 --- .../res/values-fr/strings-preferences.xml | 85 ----- app/src/main/res/values-fr/strings.xml | 279 +++++++++++----- app/src/main/res/values-gl/strings-about.xml | 43 --- .../res/values-gl/strings-preferences.xml | 86 ----- app/src/main/res/values-gl/strings.xml | 275 ++++++++++----- app/src/main/res/values-hu/strings-about.xml | 44 --- .../res/values-hu/strings-preferences.xml | 85 ----- app/src/main/res/values-hu/strings.xml | 266 +++++++++++---- app/src/main/res/values-it/strings-about.xml | 43 --- .../res/values-it/strings-preferences.xml | 85 ----- app/src/main/res/values-it/strings.xml | 273 ++++++++++----- app/src/main/res/values-ja/strings-about.xml | 43 --- .../res/values-ja/strings-preferences.xml | 85 ----- app/src/main/res/values-ja/strings.xml | 273 ++++++++++----- app/src/main/res/values-kab/strings-about.xml | 43 --- .../res/values-kab/strings-preferences.xml | 85 ----- app/src/main/res/values-kab/strings.xml | 269 ++++++++++----- app/src/main/res/values-kn/strings-about.xml | 6 - app/src/main/res/values-ml/strings-about.xml | 20 -- .../res/values-ml/strings-preferences.xml | 75 ----- app/src/main/res/values-ml/strings.xml | 232 +++++++++---- app/src/main/res/values-nl/strings-about.xml | 43 --- .../res/values-nl/strings-preferences.xml | 85 ----- app/src/main/res/values-nl/strings.xml | 265 +++++++++++---- .../res/values-no-rNO/strings-preferences.xml | 36 -- app/src/main/res/values-no-rNO/strings.xml | 35 ++ app/src/main/res/values-pl/strings-about.xml | 43 --- .../res/values-pl/strings-preferences.xml | 85 ----- app/src/main/res/values-pl/strings.xml | 269 ++++++++++----- .../main/res/values-pt-rBR/strings-about.xml | 17 - .../res/values-pt-rBR/strings-preferences.xml | 79 ----- app/src/main/res/values-pt-rBR/strings.xml | 237 ++++++++----- .../main/res/values-ro-rRO/strings-about.xml | 21 -- app/src/main/res/values-ro-rRO/strings.xml | 133 ++++---- app/src/main/res/values-ru/strings-about.xml | 43 --- .../res/values-ru/strings-preferences.xml | 85 ----- app/src/main/res/values-ru/strings.xml | 273 ++++++++++----- app/src/main/res/values-sc/strings-about.xml | 50 --- .../res/values-sc/strings-preferences.xml | 111 ------- app/src/main/res/values-sc/strings.xml | 313 +++++++++++++----- app/src/main/res/values-sv/strings-about.xml | 43 --- .../res/values-sv/strings-preferences.xml | 85 ----- app/src/main/res/values-sv/strings.xml | 265 +++++++++++---- .../main/res/values-tr-rTR/strings-about.xml | 37 --- .../res/values-tr-rTR/strings-preferences.xml | 56 ---- app/src/main/res/values-tr-rTR/strings.xml | 142 ++++++-- .../main/res/values-uk-rUA/strings-about.xml | 43 --- .../res/values-uk-rUA/strings-preferences.xml | 85 ----- app/src/main/res/values-uk-rUA/strings.xml | 265 +++++++++++---- .../main/res/values-zh-rTW/strings-about.xml | 43 --- .../res/values-zh-rTW/strings-preferences.xml | 86 ----- app/src/main/res/values-zh-rTW/strings.xml | 274 ++++++++++----- app/src/main/res/values/strings-about.xml | 65 ---- .../res/values/strings-not_translatable.xml | 18 + .../main/res/values/strings-preferences.xml | 108 ------ app/src/main/res/values/strings.xml | 155 +++++++++ 68 files changed, 3783 insertions(+), 3925 deletions(-) delete mode 100644 app/src/main/res/values-ar-rSA/strings-about.xml create mode 100644 app/src/main/res/values-ar-rSA/strings.xml delete mode 100644 app/src/main/res/values-da/strings-about.xml delete mode 100644 app/src/main/res/values-da/strings-preferences.xml delete mode 100644 app/src/main/res/values-de/strings-about.xml delete mode 100644 app/src/main/res/values-de/strings-preferences.xml delete mode 100644 app/src/main/res/values-es/strings-about.xml delete mode 100644 app/src/main/res/values-es/strings-preferences.xml delete mode 100644 app/src/main/res/values-fr/strings-about.xml delete mode 100644 app/src/main/res/values-fr/strings-preferences.xml delete mode 100644 app/src/main/res/values-gl/strings-about.xml delete mode 100644 app/src/main/res/values-gl/strings-preferences.xml delete mode 100644 app/src/main/res/values-hu/strings-about.xml delete mode 100644 app/src/main/res/values-hu/strings-preferences.xml delete mode 100644 app/src/main/res/values-it/strings-about.xml delete mode 100644 app/src/main/res/values-it/strings-preferences.xml delete mode 100644 app/src/main/res/values-ja/strings-about.xml delete mode 100644 app/src/main/res/values-ja/strings-preferences.xml delete mode 100644 app/src/main/res/values-kab/strings-about.xml delete mode 100644 app/src/main/res/values-kab/strings-preferences.xml delete mode 100644 app/src/main/res/values-kn/strings-about.xml delete mode 100644 app/src/main/res/values-ml/strings-about.xml delete mode 100644 app/src/main/res/values-ml/strings-preferences.xml delete mode 100644 app/src/main/res/values-nl/strings-about.xml delete mode 100644 app/src/main/res/values-nl/strings-preferences.xml delete mode 100644 app/src/main/res/values-no-rNO/strings-preferences.xml create mode 100644 app/src/main/res/values-no-rNO/strings.xml delete mode 100644 app/src/main/res/values-pl/strings-about.xml delete mode 100644 app/src/main/res/values-pl/strings-preferences.xml delete mode 100644 app/src/main/res/values-pt-rBR/strings-about.xml delete mode 100644 app/src/main/res/values-pt-rBR/strings-preferences.xml delete mode 100644 app/src/main/res/values-ro-rRO/strings-about.xml delete mode 100644 app/src/main/res/values-ru/strings-about.xml delete mode 100644 app/src/main/res/values-ru/strings-preferences.xml delete mode 100644 app/src/main/res/values-sc/strings-about.xml delete mode 100644 app/src/main/res/values-sc/strings-preferences.xml delete mode 100644 app/src/main/res/values-sv/strings-about.xml delete mode 100644 app/src/main/res/values-sv/strings-preferences.xml delete mode 100644 app/src/main/res/values-tr-rTR/strings-about.xml delete mode 100644 app/src/main/res/values-tr-rTR/strings-preferences.xml delete mode 100644 app/src/main/res/values-uk-rUA/strings-about.xml delete mode 100644 app/src/main/res/values-uk-rUA/strings-preferences.xml delete mode 100644 app/src/main/res/values-zh-rTW/strings-about.xml delete mode 100644 app/src/main/res/values-zh-rTW/strings-preferences.xml delete mode 100644 app/src/main/res/values/strings-about.xml delete mode 100644 app/src/main/res/values/strings-preferences.xml diff --git a/app/src/main/res/values-ar-rSA/strings-about.xml b/app/src/main/res/values-ar-rSA/strings-about.xml deleted file mode 100644 index 76160d7f..00000000 --- a/app/src/main/res/values-ar-rSA/strings-about.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - حول البرنامجgood app - - diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml new file mode 100644 index 00000000..9c15655d --- /dev/null +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -0,0 +1,5 @@ + + + حول البرنامجgood app + + diff --git a/app/src/main/res/values-da/strings-about.xml b/app/src/main/res/values-da/strings-about.xml deleted file mode 100644 index 218f5aad..00000000 --- a/app/src/main/res/values-da/strings-about.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - Om - Licens - Fejlsøgning - Applikation - Enhed - diaspora* Pod - Fejlsøgningslog - Fejlsøgningslog (udvidet) - App version: %1$s - Android version: %1$s - Enhedsnavn: %1$s - Kodenavn: %1$s - Pod-profilnavn: %1$s - Pod-domæne: %1$s - Fejlsøgningslog kopieret til udklipsbord - dandelion* er dine hjælpe-applikationer til at finde rundt på det sociale netværk diaspora*. Den tilføjer funktionaliteter som værktøjslinker og understøttelse for proxy-servere som Tor til din sociale oplevelse. - Bidrag med kode! - dandelion* udvikles som fri software og følger ideerne bag diaspora*-projektet. Hvis du har lyst til at bidrage, så sæt i gang! For nuværende er vi et meget lille hold der står bag, og vi sætter stor pris på enhver form for hjælp! - Hent kildekoden - Oversæt applikationen! - Findes applikationen ikke på dit sprog? Det kan du ændre! Hvorfor ikke hjælpe os med at oversætte den? Vi burer crowdin-platformen som gør dig i stand til at oversætte. - Lad mig oversætte - Meld tilbage! - dandelion* udvikles stadig, så hvis du har forslag eller anden form for tilbagemelding, så lad os det venligst vide via vores problem-tracker! - Rapporter fejl - Spred ordet! - - diff --git a/app/src/main/res/values-da/strings-preferences.xml b/app/src/main/res/values-da/strings-preferences.xml deleted file mode 100644 index 170f908a..00000000 --- a/app/src/main/res/values-da/strings-preferences.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - Øverste værktøjslinje indlæser strøm - Klik på tom plads i den øverste værktøjslinje for at åbne strømme - - - - - Primær farve - Værktøjslinjers farver - Markeringsfarve - - - - - - - - - diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 80d95656..4c24dc08 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1,36 +1,83 @@ - - - Genindlæs - - Indstillinger - Notifikationer - Samtaler - Strøm - Profil - Aspekter - Aktiviteter - Synes om - Kommenteret - Omtalelser - Offentlig - Søg - Kontakter - Ændringslog - Statistik - - Alle notifikationer - Kommenterede også - Kommenter på opslag - Syntes om - Nævnte - Gendelte - - - Del billede - Åben i ekstern browser… - Kopier link-adresse til udklipsholder - - + + Genindlæs + + Indstillinger + Notifikationer + Samtaler + Strøm + Profil + Aspekter + Aktiviteter + Synes om + Kommenteret + Omtalelser + Offentlig + Søg + Kontakter + Ændringslog + Statistik + + Alle notifikationer + Kommenterede også + Kommenter på opslag + Syntes om + Nævnte + Gendelte + + + Del billede + Åben i ekstern browser… + Kopier link-adresse til udklipsholder + + + + Om + Licens + Fejlsøgning + Applikation + Enhed + diaspora* Pod + Fejlsøgningslog + Fejlsøgningslog (udvidet) + App version: %1$s + Android version: %1$s + Enhedsnavn: %1$s + Kodenavn: %1$s + Pod-profilnavn: %1$s + Pod-domæne: %1$s + Fejlsøgningslog kopieret til udklipsbord + dandelion* er dine hjælpe-applikationer til at finde rundt på det sociale netværk diaspora*. Den tilføjer funktionaliteter som værktøjslinker og understøttelse for proxy-servere som Tor til din sociale oplevelse. + Bidrag med kode! + dandelion* udvikles som fri software og følger ideerne bag diaspora*-projektet. Hvis du har lyst til at bidrage, så sæt i gang! For nuværende er vi et meget lille hold der står bag, og vi sætter stor pris på enhver form for hjælp! + Hent kildekoden + Oversæt applikationen! + Findes applikationen ikke på dit sprog? Det kan du ændre! Hvorfor ikke hjælpe os med at oversætte den? Vi burer crowdin-platformen som gør dig i stand til at oversætte. + Lad mig oversætte + Meld tilbage! + dandelion* udvikles stadig, så hvis du har forslag eller anden form for tilbagemelding, så lad os det venligst vide via vores problem-tracker! + Rapporter fejl + Spred ordet! + + + + + Øverste værktøjslinje indlæser strøm + Klik på tom plads i den øverste værktøjslinje for at åbne strømme + + + + + Primær farve + Værktøjslinjers farver + Markeringsfarve + + + + + + + + diff --git a/app/src/main/res/values-de/strings-about.xml b/app/src/main/res/values-de/strings-about.xml deleted file mode 100644 index e5d724b0..00000000 --- a/app/src/main/res/values-de/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Über - Lizenz - Debugging - Anwendung - Gerät - diaspora* Pod - Debug-Protokoll - Debug-Protokoll (Verbose) - App Version: %1$s - Android Version: %1$s - Gerätename: %1$s - Codename: %1$s - Pod Profil Name: %1$s - Pod Domain: %1$s - Debug-Protokoll in Zwischenablage kopiert - dandelion* ist dein Begleiter auf deinen Streifzügen durch das soziale Netzwerk diaspora*. Es bietet dir zusätzliche Funktionen wie nützliche Werkzeugleisten und Unterstützung für Proxyserver wie das Tor-Netzwerk. - Mach mit! - dandelion* wird frei wie in Freiheit entwickelt und folgt den Ideen des diaspora* Projektes. Wenn du mithelfen willst, nur zu! Wir sind momentan nur ein sehr kleines Team und sind froh über jede Unterstützung! - Zum Quellcode - Übersetze die App! - Die Anwendung ist nicht in deiner Sprache verfügbar? Das kannst du ändern! Warum hilfst du uns nicht, indem du übersetzt? Wir benutzen die Plattform crowdin, um es jedem zu ermöglichen, die App zu übersetzen. - Ich möchte übersetzen - Feedback geben! - dandelion* befindet sich noch in Entwicklung, wenn du also Vorschläge oder etwas anderes auf dem Herzen hast besuche doch unseren Bug Tracker und lass es uns wissen! - Fehler melden - Anderen davon erzählen! - Erzähl deiner Familie und deinen Freunden von diaspora* und #dandelion! Warum bloggst du nicht über deine Erfahrungen mit der App? Wir würden gerne davon erfahren! - Weitersagen - Hallo! Schau dir #dandelion an! %1$s - - Entwickler - Diese Anwendung wird momentan entwickelt und betreut von <br><br>%1$s - Mitwirkende - %1$s<br><br>Vielen Dank! - GNU GPLv3+ Lizenz - Drittanbieter-Bibliotheken - Die folgenden Bibliotheken werden genutzt: - Wir haben ein wenig bei LeafPic gespickt. Schaut euch das mal an, es handelt sich dabei auch um freie Software! - Erzähl mir mehr - diff --git a/app/src/main/res/values-de/strings-preferences.xml b/app/src/main/res/values-de/strings-preferences.xml deleted file mode 100644 index 40f643a5..00000000 --- a/app/src/main/res/values-de/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Obere Werkzeugleiste lädt Stream - Klicks auf leere Flächen der oberen Werkzeugleiste öffnen den Stream - - Erscheinungsbild - Netzwerk - Pod Einstellungen - Bedienbarkeit - - - Navigations Slider - Konfiguration der Sichtbarkeit von Einträgen im Navigation-Slider - Benutzer - Allgemeines - Administrator - - Farbschema - Einstellungen des Farbdesigns - Primärfarbe - Färbung der Werkzeugleisten - Akzentfarbe - Färbung der Details - AMOLED Modus - Farben mit AMOLED-Display freundlichen Farben an vielen Orten der App überschreiben. Ein Neustart ist erforderlich um diese Einstellung zu ändern. Du kannst in deinen persönlichen diaspora* Einstellungen das dunkle Thema aktivieren, damit wird auch der Inhalt dunkler. - - Erweiterte Benachrichtigungen - Erweitere die Benachrichtigungsglocke um ein Ausklappmenü mit verschiedenen Benachrichtigungskategorien - Sprache der App ändern. Ein Neustart der App ist erforderlich um die Einstellung zu übernehmen - Sprache - Systemsprache - - Konfigurieren der Textgröße der Webansicht - Schriftgröße - Normal - Groß - Größer - - Lade Bilder - Deaktiviere das Laden von Bildern, um den Datenverbrauch zu verringern - - Bildschirmrotation - Kontrolliere die automatische Bildschirmrotation - Standard - Sensor\n(System-Einstellungen ignorieren) - Hochformat - Querformat - - Tor Voreinstellungen laden - Proxy Einstellungen für Tor (Orbot) HTTP Proxy laden - Proxy - Aktiviere Netzwerkproxy - Nutze einen Proxyserver, um Firewalls zu umgehen.\nDie App muss neu gestartet werden - Host - Port - App muss neu gestartet werden um den Proxy zu deaktivieren - Orbot Proxy Preset geladen - - Externe Links mit Chrome Custom Tabs öffnen. Chromium oder Google Chrome muss für dieses Feature installiert sein.\nWICHTIGER HINWEIS: Chrome Custom Tabs verwenden die konfigurierten Proxy-Server nicht! - - Persönliche Einstellungen - Öffne die Einstellungen deines diaspora* Accounts - Bearbeite deine Kontaktliste - Tags verwalten - Bereits verfolgte Hashtags nicht mehr verfolgen - Konto wechseln - Lösche lokale Sitzungsdaten und wechsele zu einem anderen diaspora* Pod/Benutzerkonto - Das wird alle Cookies und Sitzungsdaten löschen. Willst du wirklich dein Konto wechseln? - Zwischenspeicher leeren - Leert den Zwischenspeicher des WebViews - Verstecke die obere und untere Werkzeugleiste automatisch, während gescrollt wird - Werkzeugleisten intelligent verstecken - Verweise auf App - Füge eine Referenz zu in diese App geteilte Texte hinzu: [via #dandelion] - - Verschiedenes - Zurücksetzen - Setze alle Einstellungen der Anwendung zurück und melde alle Konten ab - Dies wird alle geänderten Einstellungen der Anwendung auf die Standardwerte zurücksetzen und alle Konten abmelden. Deine heruntergeladenen Medien bleiben unberührt. Bist du sicher, dass du fortfahren willst? - Einfachen Werbeblocker aktivieren. Werbung könnte z.B. in eingebetteten Anzeigen enthalten sein - Werbung blockieren - diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 239ae35f..5288fa23 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,82 +1,204 @@ - + - - Aktualisieren - - Einstellungen - Benachrichtigungen - Unterhaltungen - Stream - Profil - Aspekte - Aktivitäten - Gelikte Beiträge - Kommentiert - Erwähnungen - Öffentliche Aktivitäten - Suchen - Kontakte - Änderungen - Statistik - - Alle Benachrichtigungen - Auch kommentiert - Einen Beitrag kommentiert - Gefällt - Erwähnt - Weitergesagt - Angefangen zu teilen - - Fehler: Konnte die Podliste nicht abfragen! - Entschuldigung, du musst mit dem Internet verbunden sein, um fortzufahren. - Bestätigung - Möchtest du die App verlassen? - - Mehr - Über | Hilfe - Tags - Öffentliche Aktivitäten - Meldungen - Link als Text teilen - Bildschirmfoto teilen - Bildschirmfoto speichern - Speichere Bild als - Bildschirmfoto wird gespeichert unter: - Link-Adresse kopiert … - Neuer Beitrag - Nach oben scrollen - Suche nach Tags oder Personen… - App beenden - Mobil-/Desktopansicht umschalten - Teilen… - nach Tags - nach Personen - Füge einen Namen ein. - Link-Adresse teilen - Bild speichern - Bild teilen - In externem Browser öffnen… - Link-Adresse kopieren - Bild-Adresse kopieren - - Konnte Bild nicht laden… - - Du musst der App Zugriff auf den Gerätespeicher gewähren, damit das Bildschirmfoto + + Aktualisieren + + Einstellungen + Benachrichtigungen + Unterhaltungen + Stream + Profil + Aspekte + Aktivitäten + Gelikte Beiträge + Kommentiert + Erwähnungen + Öffentliche Aktivitäten + Suchen + Kontakte + Änderungen + Statistik + + Alle Benachrichtigungen + Auch kommentiert + Einen Beitrag kommentiert + Gefällt + Erwähnt + Weitergesagt + Angefangen zu teilen + + Fehler: Konnte die Podliste nicht abfragen! + Entschuldigung, du musst mit dem Internet verbunden sein, um fortzufahren. + Bestätigung + Möchtest du die App verlassen? + + Mehr + Über | Hilfe + Tags + Öffentliche Aktivitäten + Meldungen + Link als Text teilen + Bildschirmfoto teilen + Bildschirmfoto speichern + Speichere Bild als + Bildschirmfoto wird gespeichert unter: + Link-Adresse kopiert … + Neuer Beitrag + Nach oben scrollen + Suche nach Tags oder Personen… + App beenden + Mobil-/Desktopansicht umschalten + Teilen… + nach Tags + nach Personen + Füge einen Namen ein. + Link-Adresse teilen + Bild speichern + Bild teilen + In externem Browser öffnen… + Link-Adresse kopieren + Bild-Adresse kopieren + + Konnte Bild nicht laden… + + Du musst der App Zugriff auf den Gerätespeicher gewähren, damit das Bildschirmfoto gespeichert werden kann. Danach solltest du die Anwendung komplett schließen oder das Gerät neu starten. Wenn du den Zugriff verweigerst und die Funktion später doch nutzen willst, kannst du die Berechtigung nachträglich erteilen. Öffne dafür: Systemeinstellungen - Apps - dandelion*. Im Bereich Berechtigungen kannst dann die entsprechende Einstellung vornehmen. - Du musst der App Zugriff auf den Gerätespeicher gewähren, damit Bilder gespeichert oder hochgeladen werden können. Danach solltest du die Anwendung komplett schließen oder das Telefon neu starten. Wenn du den Zugriff verweigerst und die Funktion später doch nutzen willst, kannst du die Berechtigung + Du musst der App Zugriff auf den Gerätespeicher gewähren, damit Bilder gespeichert oder hochgeladen werden können. Danach solltest du die Anwendung komplett schließen oder das Telefon neu starten. Wenn du den Zugriff verweigerst und die Funktion später doch nutzen willst, kannst du die Berechtigung nachträglich erteilen. Öffne dafür: Systemeinstellungen - Apps - dandelion*. Im Bereich Berechtigungen kannst dann die entsprechende Einstellung vornehmen. - Berechtigung verweigert. - Berechtigung erteilt. Bitte versuche es erneut. - Benutzerdefinierter Pod - Pod Name - Protokoll - Pod Adresse - Fehlender Wert - Zuletzt besuchte Seite im Stream aufrufen? - Statusleiste in Hauptansicht verstecken - Statusleiste verstecken + Berechtigung verweigert. + Berechtigung erteilt. Bitte versuche es erneut. + Benutzerdefinierter Pod + Pod Name + Protokoll + Pod Adresse + Fehlender Wert + Zuletzt besuchte Seite im Stream aufrufen? + Statusleiste in Hauptansicht verstecken + Statusleiste verstecken + + Über + Lizenz + Debugging + Anwendung + Gerät + diaspora* Pod + Debug-Protokoll + Debug-Protokoll (Verbose) + App Version: %1$s + Android Version: %1$s + Gerätename: %1$s + Codename: %1$s + Pod Profil Name: %1$s + Pod Domain: %1$s + Debug-Protokoll in Zwischenablage kopiert + dandelion* ist dein Begleiter auf deinen Streifzügen durch das soziale Netzwerk diaspora*. Es bietet dir zusätzliche Funktionen wie nützliche Werkzeugleisten und Unterstützung für Proxyserver wie das Tor-Netzwerk. + Mach mit! + dandelion* wird frei wie in Freiheit entwickelt und folgt den Ideen des diaspora* Projektes. Wenn du mithelfen willst, nur zu! Wir sind momentan nur ein sehr kleines Team und sind froh über jede Unterstützung! + Zum Quellcode + Übersetze die App! + Die Anwendung ist nicht in deiner Sprache verfügbar? Das kannst du ändern! Warum hilfst du uns nicht, indem du übersetzt? Wir benutzen die Plattform crowdin, um es jedem zu ermöglichen, die App zu übersetzen. + Ich möchte übersetzen + Feedback geben! + dandelion* befindet sich noch in Entwicklung, wenn du also Vorschläge oder etwas anderes auf dem Herzen hast besuche doch unseren Bug Tracker und lass es uns wissen! + Fehler melden + Anderen davon erzählen! + Erzähl deiner Familie und deinen Freunden von diaspora* und #dandelion! Warum bloggst du nicht über deine Erfahrungen mit der App? Wir würden gerne davon erfahren! + Weitersagen + Hallo! Schau dir #dandelion an! %1$s + + Entwickler + Diese Anwendung wird momentan entwickelt und betreut von <br><br>%1$s + Mitwirkende + %1$s<br><br>Vielen Dank! + GNU GPLv3+ Lizenz + Drittanbieter-Bibliotheken + Die folgenden Bibliotheken werden genutzt: + Wir haben ein wenig bei LeafPic gespickt. Schaut euch das mal an, es handelt sich dabei auch um freie Software! + Erzähl mir mehr + + + + Obere Werkzeugleiste lädt Stream + Klicks auf leere Flächen der oberen Werkzeugleiste öffnen den Stream + + Erscheinungsbild + Netzwerk + Pod Einstellungen + Bedienbarkeit + + + Navigations Slider + Konfiguration der Sichtbarkeit von Einträgen im Navigation-Slider + Benutzer + Allgemeines + Administrator + + Farbschema + Einstellungen des Farbdesigns + Primärfarbe + Färbung der Werkzeugleisten + Akzentfarbe + Färbung der Details + AMOLED Modus + Farben mit AMOLED-Display freundlichen Farben an vielen Orten der App überschreiben. Ein Neustart ist erforderlich um diese Einstellung zu ändern. Du kannst in deinen persönlichen diaspora* Einstellungen das dunkle Thema aktivieren, damit wird auch der Inhalt dunkler. + + Erweiterte Benachrichtigungen + Erweitere die Benachrichtigungsglocke um ein Ausklappmenü mit verschiedenen Benachrichtigungskategorien + Sprache der App ändern. Ein Neustart der App ist erforderlich um die Einstellung zu übernehmen + Sprache + Systemsprache + + Konfigurieren der Textgröße der Webansicht + Schriftgröße + Normal + Groß + Größer + + Lade Bilder + Deaktiviere das Laden von Bildern, um den Datenverbrauch zu verringern + + Bildschirmrotation + Kontrolliere die automatische Bildschirmrotation + Standard + Sensor\n(System-Einstellungen ignorieren) + Hochformat + Querformat + + Tor Voreinstellungen laden + Proxy Einstellungen für Tor (Orbot) HTTP Proxy laden + Proxy + Aktiviere Netzwerkproxy + Nutze einen Proxyserver, um Firewalls zu umgehen.\nDie App muss neu gestartet werden + Host + Port + App muss neu gestartet werden um den Proxy zu deaktivieren + Orbot Proxy Preset geladen + + Externe Links mit Chrome Custom Tabs öffnen. Chromium oder Google Chrome muss für dieses Feature installiert sein.\nWICHTIGER HINWEIS: Chrome Custom Tabs verwenden die konfigurierten Proxy-Server nicht! + + Persönliche Einstellungen + Öffne die Einstellungen deines diaspora* Accounts + Bearbeite deine Kontaktliste + Tags verwalten + Bereits verfolgte Hashtags nicht mehr verfolgen + Konto wechseln + Lösche lokale Sitzungsdaten und wechsele zu einem anderen diaspora* Pod/Benutzerkonto + Das wird alle Cookies und Sitzungsdaten löschen. Willst du wirklich dein Konto wechseln? + Zwischenspeicher leeren + Leert den Zwischenspeicher des WebViews + Verstecke die obere und untere Werkzeugleiste automatisch, während gescrollt wird + Werkzeugleisten intelligent verstecken + Verweise auf App + Füge eine Referenz zu in diese App geteilte Texte hinzu: [via #dandelion] + + Verschiedenes + Zurücksetzen + Setze alle Einstellungen der Anwendung zurück und melde alle Konten ab + Dies wird alle geänderten Einstellungen der Anwendung auf die Standardwerte zurücksetzen und alle Konten abmelden. Deine heruntergeladenen Medien bleiben unberührt. Bist du sicher, dass du fortfahren willst? + Einfachen Werbeblocker aktivieren. Werbung könnte z.B. in eingebetteten Anzeigen enthalten sein + Werbung blockieren diff --git a/app/src/main/res/values-es/strings-about.xml b/app/src/main/res/values-es/strings-about.xml deleted file mode 100644 index a8255b3e..00000000 --- a/app/src/main/res/values-es/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Acerca de - Licencia - Depurando - Aplicación - Dispositivo - Pod de diaspora* - Depurar registro - Depurar registro (Detallado) - Versión aplicación:%1$s - Versión de Android: %1$s - Nombre del dispositivo: %1$s - Nombre clave: %1$s - Nombre de perfil del pod: %1$s - Dominio del pod:%1$s - Registro de depuración copiado al portapapeles - dandelion* es su complemento para navegar por la red social diapora*. Añade características como útiles barras de herramientas y soporte para servidores proxy como la red Tor a su experiencia social. - ¡Contribuir con código! - dandelion* se desarrolla libre, en el sentido de libertad, y sigue las ideas del proyecto diaspora*. Si usted quiere contribuir, ¡adelante! Actualmente somos un equipo muy pequeño, por lo que ¡agradeceríamos mucho cualquier tipo de ayuda! - Obtener el código fuente - ¡Traducir la aplicación! - ¿La aplicación no está disponible en su idioma? ¡Usted puede cambiar eso! ¿Por qué no nos ayuda traduciéndola? Utilizamos la plataforma crowdin para permitir a cualquiera traducir la aplicación. - Permítanme traducir - Danos tu opinión! - dandelion* todavía está en desarrollo, así que si tiene sugerencias o cualquier tipo de comentarios, ¡utilice nuestro gestor de errores para hacérnoslo saber! - Reporte de errores - ¡Corre la voz! - ¡Hable a sus amigos y familiares acerca de diaspora* y #dandelion! ¿Por qué no difunde sus experiencias? ¡Nos encantaría escucharle! - Compartir la aplicación - ¡Hey! ¡Mira #dandelion! %1$s - - Mantenimiento - Esta aplicación está siendo desarrollada y mantenida por < br >< br >%1$s - Colaboradores - ¡%1$s < br >< br > Gracias! - Licencia GNU GPLv3 + - Bibliotecas de terceros - Se utilizan las siguientes bibliotecas: - Tomamos algo de inspiración y código de LeafPic. ¡Venga, tomad prestado, es software libre también! - Saber más - diff --git a/app/src/main/res/values-es/strings-preferences.xml b/app/src/main/res/values-es/strings-preferences.xml deleted file mode 100644 index 0da7fbd4..00000000 --- a/app/src/main/res/values-es/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Barra de herramientas superior carga la portada - Haga clic en un espacio vacío en la barra de herramientas superior para abrir portada - - Apariencia - Red - Ajustes del Pod - Operatividad - - - Control deslizante de navegación - Control de visibilidad de las entradas en el cajón de navegación - Usuario - General - Administrador - - Tema y Colores - Control de colores que se utilizan en la aplicación - Color primario - Color de las barras de herramientas - Color de Énfasis - Color de la barra de progreso - Modo AMOLED - Substituir el color negro en varias partes de la app con uno compatible con pantallas AMOLED. Necesitarás reiniciar la app para alternar ésta opcion. Para navegar diaspora* con un tema oscuro, lo necesitarás habilitar en tu panel de configuraciones personales de cuenta diaspora*. - - Notificaciones extendidas - Extender la campana de notificaciones con un menú desplegable que muestra categorías de notificación - Cambiar el idioma de esta aplicación. Reinicie la aplicación para que los cambios surtan efecto - Idioma - Idioma del sistema - - Control del tamaño del texto de la vista Web - Tamaño de letra - Tamaño normal - Tamaño grande - Tamaño enorme - - Cargar imágenes - Desactivar la carga de de imágenes a datos móviles seguros - - Rotación de la pantalla - Controlar la rotación automática de la pantalla - Predeterminado - Sensor\n(ignorar la configuración de la sistema) - Vertical - Apaisado - - Cargar Tor predeterminado - Cargar la configuración del proxy de Tor (Orbot) HTTP Proxy - Proxy - Activar proxy - Tráfico del proxy de dandelion* evadiendo el cortafuegos.\nPuede requerir reiniciar. Puede no funcionar en algunos teléfonos. - Host - Puerto - La aplicación necesita reiniciar para deshabilitar el uso de proxy - Cargado proxy Orbot predeterminado - - Abrir vínculos externos con barras personalizadas de Chrome. Chromium o Google Chrome deben estar instalados para utilizar esta característica. \nNOTA IMPORTANTE: ¡ las barras personalizadas de Chrome no usan servidores proxy configurados! - - Configuración personal - Abre la configuración de tu cuenta de diaspora* - Administrar su lista de contactos - Manejar etiquetas - Dejar de seguir las etiquetas seguidas - Cambiar cuenta - Borrar datos de la sesión local y cambiar a otro pod/cuenta de diaspora* - Esto borrará todas las cookies y datos de la sesión. ¿Realmente deseas cambiar tu cuenta? - Limpiar caché - Borrar caché de vista Web - Ocultar barras de herramientas superior e inferior automáticamente mientras se desplaza - Barra de herramientas Intellihide - Añadir compartido por aviso - Agregar una referencia a esta aplicación en los textos compartidos: [vía #dandelion] - - Diverso - Reinicio completo - Borrar localmente toda la configuración relacionada con la aplicación y cerrar sesión en todas las cuentas - Esto restablecerá todas las modificaciones en la configuración a sus valores predeterminados y se desconectará de todos los pods. Las imágenes descargadas permanecerán intactas. ¿Está seguro de que desea continuar? - Habilitar bloqueador de publicidad básico. Publicidad podrá ser incluida p.ej. en vistas incrustadas - Bloquear publicidad - diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2d83a51b..35864c3d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,79 +1,200 @@ - - - Refrescar - - Ajustes - Notificaciones - Conversaciones - Portada - Perfil - Aspectos - Mi actividad - Me gusta - Comentarios - Menciones - Público - Búsqueda - Contactos - Registro de cambios - Estadísticas - - Todas las notificaciones - También Comentado - Comentar en Publicación - Gustado - Mencionado - Recompartido - Empezado Compartir - - Error: No pudimos recuperar la lista de pods! - Debe conectarse a internet para poder continuar - Confirmación - ¿Desea salir? - - Más - Sobre | Ayuda - Etiquetas seguidas - Actividad pública - Informes - Compartir enlace como texto - Compartir captura de pantalla de la página web - Tomar captura de pantalla de la página web - Guardando imagen a - Guardando captura de pantalla como: - Dirección de enlace copiada - Nueva publicación - Ir arriba - Buscar por etiquetas o por personas - Salir de la aplicación - Alternar vista de móvil/escritorio - Compartir… - por etiquetas - por personas - Por favor, añade un nombre - Compartir dirección de enlace - Guardar imagen - Compartir imagen - Abrir en navegador externo… - Copiar dirección del enlace al portapapeles - Copiar dirección de imagen al portapapeles - - No se pudo cargar la imagen - - Debe conceder \"Permiso de Almacenamiento de Información\" para guardar capturas de pantalla. Después debe cerrar completamente la aplicación o reiniciar el teléfono. Si usted no permite el acceso al almacenamiento pero desea utilizar la función de captura de pantalla en un momento posterior, puede conceder el permiso más adelante. Por favor vaya a: ajustes del sistema - aplicaciones - dandelion*. En la sección de permisos puede conceder el \"permiso de almacenamiento de escritura\". - Debe conceder \"Permiso de acceso al almacenamiento\" para guardar imágenes. Después, debe cerrar completamente la aplicación o reiniciar el aparato. Si usted no permite el almacenamiento pero quiere guardar imágenes en otro momento, puede conceder el permiso más tarde. Por favor abra: ajustes del sistema -aplicaciones- dandelion*. En la sección de permisos puede conceder el \"permiso de almacenamiento de escritura\". - Permiso denegado. - Permiso concedido. Por favor, inténtelo de nuevo. - Pod personalizado - Nombre de Pod - Protocolo - Dirección de Pod - Valor ausente - ¿Saltar a la última página visitada? - Ocultar barra de estado en la vista principal - Ocultar barra de estado - Mostrar título en la vista princial - Mostrar título + + Refrescar + + Ajustes + Notificaciones + Conversaciones + Portada + Perfil + Aspectos + Mi actividad + Me gusta + Comentarios + Menciones + Público + Búsqueda + Contactos + Registro de cambios + Estadísticas + + Todas las notificaciones + También Comentado + Comentar en Publicación + Gustado + Mencionado + Recompartido + Empezado Compartir + + Error: No pudimos recuperar la lista de pods! + Debe conectarse a internet para poder continuar + Confirmación + ¿Desea salir? + + Más + Sobre | Ayuda + Etiquetas seguidas + Actividad pública + Informes + Compartir enlace como texto + Compartir captura de pantalla de la página web + Tomar captura de pantalla de la página web + Guardando imagen a + Guardando captura de pantalla como: + Dirección de enlace copiada + Nueva publicación + Ir arriba + Buscar por etiquetas o por personas + Salir de la aplicación + Alternar vista de móvil/escritorio + Compartir… + por etiquetas + por personas + Por favor, añade un nombre + Compartir dirección de enlace + Guardar imagen + Compartir imagen + Abrir en navegador externo… + Copiar dirección del enlace al portapapeles + Copiar dirección de imagen al portapapeles + + No se pudo cargar la imagen + + Debe conceder \"Permiso de Almacenamiento de Información\" para guardar capturas de pantalla. Después debe cerrar completamente la aplicación o reiniciar el teléfono. Si usted no permite el acceso al almacenamiento pero desea utilizar la función de captura de pantalla en un momento posterior, puede conceder el permiso más adelante. Por favor vaya a: ajustes del sistema - aplicaciones - dandelion*. En la sección de permisos puede conceder el \"permiso de almacenamiento de escritura\". + Debe conceder \"Permiso de acceso al almacenamiento\" para guardar imágenes. Después, debe cerrar completamente la aplicación o reiniciar el aparato. Si usted no permite el almacenamiento pero quiere guardar imágenes en otro momento, puede conceder el permiso más tarde. Por favor abra: ajustes del sistema -aplicaciones- dandelion*. En la sección de permisos puede conceder el \"permiso de almacenamiento de escritura\". + Permiso denegado. + Permiso concedido. Por favor, inténtelo de nuevo. + Pod personalizado + Nombre de Pod + Protocolo + Dirección de Pod + Valor ausente + ¿Saltar a la última página visitada? + Ocultar barra de estado en la vista principal + Ocultar barra de estado + Mostrar título en la vista princial + Mostrar título + + Acerca de + Licencia + Depurando + Aplicación + Dispositivo + Pod de diaspora* + Depurar registro + Depurar registro (Detallado) + Versión aplicación:%1$s + Versión de Android: %1$s + Nombre del dispositivo: %1$s + Nombre clave: %1$s + Nombre de perfil del pod: %1$s + Dominio del pod:%1$s + Registro de depuración copiado al portapapeles + dandelion* es su complemento para navegar por la red social diapora*. Añade características como útiles barras de herramientas y soporte para servidores proxy como la red Tor a su experiencia social. + ¡Contribuir con código! + dandelion* se desarrolla libre, en el sentido de libertad, y sigue las ideas del proyecto diaspora*. Si usted quiere contribuir, ¡adelante! Actualmente somos un equipo muy pequeño, por lo que ¡agradeceríamos mucho cualquier tipo de ayuda! + Obtener el código fuente + ¡Traducir la aplicación! + ¿La aplicación no está disponible en su idioma? ¡Usted puede cambiar eso! ¿Por qué no nos ayuda traduciéndola? Utilizamos la plataforma crowdin para permitir a cualquiera traducir la aplicación. + Permítanme traducir + Danos tu opinión! + dandelion* todavía está en desarrollo, así que si tiene sugerencias o cualquier tipo de comentarios, ¡utilice nuestro gestor de errores para hacérnoslo saber! + Reporte de errores + ¡Corre la voz! + ¡Hable a sus amigos y familiares acerca de diaspora* y #dandelion! ¿Por qué no difunde sus experiencias? ¡Nos encantaría escucharle! + Compartir la aplicación + ¡Hey! ¡Mira #dandelion! %1$s + + Mantenimiento + Esta aplicación está siendo desarrollada y mantenida por < br >< br >%1$s + Colaboradores + ¡%1$s < br >< br > Gracias! + Licencia GNU GPLv3 + + Bibliotecas de terceros + Se utilizan las siguientes bibliotecas: + Tomamos algo de inspiración y código de LeafPic. ¡Venga, tomad prestado, es software libre también! + Saber más + + + + Barra de herramientas superior carga la portada + Haga clic en un espacio vacío en la barra de herramientas superior para abrir portada + + Apariencia + Red + Ajustes del Pod + Operatividad + + + Control deslizante de navegación + Control de visibilidad de las entradas en el cajón de navegación + Usuario + General + Administrador + + Tema y Colores + Control de colores que se utilizan en la aplicación + Color primario + Color de las barras de herramientas + Color de Énfasis + Color de la barra de progreso + Modo AMOLED + Substituir el color negro en varias partes de la app con uno compatible con pantallas AMOLED. Necesitarás reiniciar la app para alternar ésta opcion. Para navegar diaspora* con un tema oscuro, lo necesitarás habilitar en tu panel de configuraciones personales de cuenta diaspora*. + + Notificaciones extendidas + Extender la campana de notificaciones con un menú desplegable que muestra categorías de notificación + Cambiar el idioma de esta aplicación. Reinicie la aplicación para que los cambios surtan efecto + Idioma + Idioma del sistema + + Control del tamaño del texto de la vista Web + Tamaño de letra + Tamaño normal + Tamaño grande + Tamaño enorme + + Cargar imágenes + Desactivar la carga de de imágenes a datos móviles seguros + + Rotación de la pantalla + Controlar la rotación automática de la pantalla + Predeterminado + Sensor\n(ignorar la configuración de la sistema) + Vertical + Apaisado + + Cargar Tor predeterminado + Cargar la configuración del proxy de Tor (Orbot) HTTP Proxy + Proxy + Activar proxy + Tráfico del proxy de dandelion* evadiendo el cortafuegos.\nPuede requerir reiniciar. Puede no funcionar en algunos teléfonos. + Host + Puerto + La aplicación necesita reiniciar para deshabilitar el uso de proxy + Cargado proxy Orbot predeterminado + + Abrir vínculos externos con barras personalizadas de Chrome. Chromium o Google Chrome deben estar instalados para utilizar esta característica. \nNOTA IMPORTANTE: ¡ las barras personalizadas de Chrome no usan servidores proxy configurados! + + Configuración personal + Abre la configuración de tu cuenta de diaspora* + Administrar su lista de contactos + Manejar etiquetas + Dejar de seguir las etiquetas seguidas + Cambiar cuenta + Borrar datos de la sesión local y cambiar a otro pod/cuenta de diaspora* + Esto borrará todas las cookies y datos de la sesión. ¿Realmente deseas cambiar tu cuenta? + Limpiar caché + Borrar caché de vista Web + Ocultar barras de herramientas superior e inferior automáticamente mientras se desplaza + Barra de herramientas Intellihide + Añadir compartido por aviso + Agregar una referencia a esta aplicación en los textos compartidos: [vía #dandelion] + + Diverso + Reinicio completo + Borrar localmente toda la configuración relacionada con la aplicación y cerrar sesión en todas las cuentas + Esto restablecerá todas las modificaciones en la configuración a sus valores predeterminados y se desconectará de todos los pods. Las imágenes descargadas permanecerán intactas. ¿Está seguro de que desea continuar? + Habilitar bloqueador de publicidad básico. Publicidad podrá ser incluida p.ej. en vistas incrustadas + Bloquear publicidad diff --git a/app/src/main/res/values-fr/strings-about.xml b/app/src/main/res/values-fr/strings-about.xml deleted file mode 100644 index 219e2bfc..00000000 --- a/app/src/main/res/values-fr/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - À propos - Licence - Déboguer - Application - Appareil - Pod diaspora* - Journal de débogage - Log de débogage (Verbeux) - Version app : %1$s - Version Android : %1$s - Nom de l\'appareil : %1$s - Nom de code : %1$s - Pod alias : %1$s - Adresse du pod : %1$s - Journal de débogage copié dans le presse-papiers - dandelion* est votre application compagnon pour naviguer sur le réseau social diaspora*. Il ajoute des fonctionnalités telles que des barres d’outils utiles et la prise en charge pour les serveurs proxy comme le réseau Tor à votre expérience sociale. - Contribuez au code ! - dandelion* est libre, et suit les idées du projet diaspora*. Si vous voulez contribuer, allez-y ! Actuellement, nous sommes une toute petite équipe, donc nous apprécierions tout type d\'aide ! - Obtenir la source - Traduire l\'application ! - L’application n’est pas disponible dans votre langue ? Vous pouvez changer cela ! Pourquoi ne pas nous aider à la traduire ? Nous utilisons la plate-forme crowdin pour permettre à quiconque de traduire l’application. - Je voudrais traduire - Donnez votre avis ! - dandelion* est encore en développement, donc si vous avez des suggestions ou n’importe quel genre de retour, veuillez utiliser notre traqueur de bogues pour nous le faire savoir ! - Signaler un bug - Faîtes passer le mot ! - Parlez de diaspora* et #dandelion à vos amis et votre famille ! Pourquoi ne pas bloguer à propos de votre expérience ? Nous aimerions la lire ! - Partager cette application - Hé ! Découvrez #dandelion ! %1$s - - Mainteneurs - Cette application est actuellement développée et maintenue par <br><br>%1$s - Contributeurs - %1$s<br><br>Merci ! - Licence GNU GPLv3+ - Bibliothèques tierces - Les bibliothèques suivantes sont utilisées : - Nous avons pris des inspirations et du code de LeafPic. Allez voir, c\'est aussi un logiciel libre ! - En savoir plus - diff --git a/app/src/main/res/values-fr/strings-preferences.xml b/app/src/main/res/values-fr/strings-preferences.xml deleted file mode 100644 index 2d40c920..00000000 --- a/app/src/main/res/values-fr/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - La barre du haut charge le flux - Cliquez sur un espace vide sur la barre du haut pour ouvrir le flux - - Apparence - Paramètres du réseau - Paramètres du pod - Opérabilité - - - Curseur de navigation - Visibilité de contrôle des entrées dans le volet de navigation - Utilisateur - Général - Admin - - Thème et couleurs - Contrôler les couleurs utilisées pour l\'application - Couleur principale - Couleur des barres d\'outils - Couleur secondaire - Couleur de la barre de progression - Mode AMOLED - Remplacez les couleurs avec du noir compatible avec les affichages AMOLED, sur plusieurs parties de l\'application. Pour naviguer dans diaspora* avec un affichage sombre, vous pouvez aussi utiliser le thème Dark, que vous trouverez dans vos paramètres personnels de votre compte diaspora*. - - Notifications étendues - Étendre la cloche de notifications avec un menu déroulant qui affiche les catégories de notification - Change la langue de l\'application. Redémarrez l\'application pour que les changements prennent effet - Langue - Langue du système - - Contrôle de la taille du texte pour l\'affichage web - Taille de la police - Normal - Large - Très grand - - Charger les images - Désactiver le chargements des images pour préserver la data mobile - - Rotation de l\'écran - Rotation automatique de l\'écran - Par défaut - Capteur\n(ignore les paramètres du système) - Portrait - Paysage - - Charger la pré-configuration Tor - Charger les paramètres proxy pour Tor (Orbot) HTTP Proxy - Proxy - Activer Proxy - Proxy pour dandelion* pour contourner les pare-feux.\nPeut nécessiter un redémarrage - Hôte - Port - L\'application a besoin d\'être redémarrée pour désactiver l\'usage du proxy - Préréglages proxy Orbot chargés - - Ouvrez les liens externes avec Chrome Custom Tabs. Chromium ou Google Chrome doit être installé pour cette fonctionnalité. \nNOTE IMPORTANTE : Chrome Custom Tabs n\'utilisent pas les serveurs proxy configurés ! - - Paramètres personnels - Ouvrir vos paramètres de compte diaspora* - Gérez vos contacts - Gérer les Hashtags - Ne plus suivre les tags suivis - Changer de compte - Effacer les données de session locale et passer à un autre pod/compte diaspora* - Cette opération va effacer les cookies et données de session. Voulez-vous vraiment changer de compte/pod? - Vider le cache - Vider le cache - Masquer les barres d’outils en haut et en bas automatiquement lors du défilement - Masquer la barre d\'outils - Ajouter partagé par avis- - Ajouter une référence à cette application aux partages: [via #dandelion] - - Divers - Réinitialisation complète - Effacer localement tous les réglages relatifs à l\'application et déconnexion de tous les comptes - Ceci va réinitialiser tous les changements à leurs valeurs par défaut et vous déconnecter de tous les pods. Vos images téléchargées resteront intactes. Êtes-vous sûr de vouloir continuer ? - Activer un bloqueur de pub. Des pubs peuvent être incluses, dans des vues embarquées par exemple - Bloquer les publicités - diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b62b2260..a1947d5d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,82 +1,203 @@ - - - Rafraîchir - - Paramètres - Notifications - Discussions - Flux - Profil - Aspects - Activités - Aimés - Commentés - Mentionnés - Publique - Recherche - Contacts - Nouveautés - Statistiques - - Toutes les notifications - Aussi commenté - Commentaires sur posts - Aimés - Mentionnés - Repartagés - A commencé à partager - - Erreur : impossible de récupérer la liste des pods ! - Désolé, vous devez être connecté à Internet pour continuer - Vérification - Souhaitez-vous quitter ? - - Plus - A propos | Aide - Hashtags suivis - Activités publiques - Signalements - Partager le lien comme texte - Partager la capture d\'écran d\'un site web - Prendre une capture d\'écran d\'un site web - Enregistrer l\'image sous - Enregistrer la capture d\'écran sous : - Lien copié… - Nouveau message - Retour en haut - Recherche par tags ou par personnes - Quitter l\'application - Activer/désactiver la vue bureau/mobile - Partager… - par tags - par personne - Veuillez ajouter un nom - Partager un lien - Enregistrer l\'image - Partager l\'image - Ouvrir dans un navigateur externe… - Copier le lien dans le presse-papier - Copier le lien de l\'image dans le presse-papiers - - Impossible de récupérer l\'image - - Vous devez autoriser \"Modifier ou supprimer le contenu de la carte Sd \" pour sauvegarder les captures d\'écrans. Ensuite, vous devriez fermer l\'application ou redémarrer votre téléphone. Si vous n\'avez pas autorisé l\'accès à l\'espace de stockage mais que vous souhaitez utiliser la fonctionnalité de prise de capture d\'écran plus tard, vous pouvez donner la permission plus tard. Veuillez ouvrir : Paramètres - applications - dandelion*. Dans la section Autorisations, vous pouvez autoriser \"Modifier ou supprimer le contenu de la carte Sd \". - Vous devez autoriser \"Modifier ou supprimer le contenu de la carte Sd \" pour sauvegarder/téléverser les images. Ensuite, vous devriez fermer l\'application ou redémarrer votre téléphone. Si vous n\'avez pas autorisé l\'accès à l\'espace de stockage mais que vous souhaitez sauvegarder des images ultérieurement, vous pouvez donner la permission plus tard. Veuillez ouvrir : Paramètres - applications - dandelion*. Dans la section Autorisations, vous pouvez autoriser \"Modifier ou supprimer le contenu de la carte Sd \". - Permission refusée. - Permission accordée. Veuillez réessayer. - Pod personnalisé - Nom du Pod - Protocole - Adresse du Pod - Valeur manquante - Sauter à la dernière page visitée dans le flux ? - Cacher la barre de statut sur la vue principale - Cacher la barre de statut - Afficher le titre dans la vue principale - Afficher le titre - Ouvrir le tiroir de navigation - Fermer le tiroir de navigation - Raccourci de l\'écran d\'accueil + + Rafraîchir + + Paramètres + Notifications + Discussions + Flux + Profil + Aspects + Activités + Aimés + Commentés + Mentionnés + Publique + Recherche + Contacts + Nouveautés + Statistiques + + Toutes les notifications + Aussi commenté + Commentaires sur posts + Aimés + Mentionnés + Repartagés + A commencé à partager + + Erreur : impossible de récupérer la liste des pods ! + Désolé, vous devez être connecté à Internet pour continuer + Vérification + Souhaitez-vous quitter ? + + Plus + A propos | Aide + Hashtags suivis + Activités publiques + Signalements + Partager le lien comme texte + Partager la capture d\'écran d\'un site web + Prendre une capture d\'écran d\'un site web + Enregistrer l\'image sous + Enregistrer la capture d\'écran sous : + Lien copié… + Nouveau message + Retour en haut + Recherche par tags ou par personnes + Quitter l\'application + Activer/désactiver la vue bureau/mobile + Partager… + par tags + par personne + Veuillez ajouter un nom + Partager un lien + Enregistrer l\'image + Partager l\'image + Ouvrir dans un navigateur externe… + Copier le lien dans le presse-papier + Copier le lien de l\'image dans le presse-papiers + + Impossible de récupérer l\'image + + Vous devez autoriser \"Modifier ou supprimer le contenu de la carte Sd \" pour sauvegarder les captures d\'écrans. Ensuite, vous devriez fermer l\'application ou redémarrer votre téléphone. Si vous n\'avez pas autorisé l\'accès à l\'espace de stockage mais que vous souhaitez utiliser la fonctionnalité de prise de capture d\'écran plus tard, vous pouvez donner la permission plus tard. Veuillez ouvrir : Paramètres - applications - dandelion*. Dans la section Autorisations, vous pouvez autoriser \"Modifier ou supprimer le contenu de la carte Sd \". + Vous devez autoriser \"Modifier ou supprimer le contenu de la carte Sd \" pour sauvegarder/téléverser les images. Ensuite, vous devriez fermer l\'application ou redémarrer votre téléphone. Si vous n\'avez pas autorisé l\'accès à l\'espace de stockage mais que vous souhaitez sauvegarder des images ultérieurement, vous pouvez donner la permission plus tard. Veuillez ouvrir : Paramètres - applications - dandelion*. Dans la section Autorisations, vous pouvez autoriser \"Modifier ou supprimer le contenu de la carte Sd \". + Permission refusée. + Permission accordée. Veuillez réessayer. + Pod personnalisé + Nom du Pod + Protocole + Adresse du Pod + Valeur manquante + Sauter à la dernière page visitée dans le flux ? + Cacher la barre de statut sur la vue principale + Cacher la barre de statut + Afficher le titre dans la vue principale + Afficher le titre + Ouvrir le tiroir de navigation + Fermer le tiroir de navigation + Raccourci de l\'écran d\'accueil + + À propos + Licence + Déboguer + Application + Appareil + Pod diaspora* + Journal de débogage + Log de débogage (Verbeux) + Version app : %1$s + Version Android : %1$s + Nom de l\'appareil : %1$s + Nom de code : %1$s + Pod alias : %1$s + Adresse du pod : %1$s + Journal de débogage copié dans le presse-papiers + dandelion* est votre application compagnon pour naviguer sur le réseau social diaspora*. Il ajoute des fonctionnalités telles que des barres d’outils utiles et la prise en charge pour les serveurs proxy comme le réseau Tor à votre expérience sociale. + Contribuez au code ! + dandelion* est libre, et suit les idées du projet diaspora*. Si vous voulez contribuer, allez-y ! Actuellement, nous sommes une toute petite équipe, donc nous apprécierions tout type d\'aide ! + Obtenir la source + Traduire l\'application ! + L’application n’est pas disponible dans votre langue ? Vous pouvez changer cela ! Pourquoi ne pas nous aider à la traduire ? Nous utilisons la plate-forme crowdin pour permettre à quiconque de traduire l’application. + Je voudrais traduire + Donnez votre avis ! + dandelion* est encore en développement, donc si vous avez des suggestions ou n’importe quel genre de retour, veuillez utiliser notre traqueur de bogues pour nous le faire savoir ! + Signaler un bug + Faîtes passer le mot ! + Parlez de diaspora* et #dandelion à vos amis et votre famille ! Pourquoi ne pas bloguer à propos de votre expérience ? Nous aimerions la lire ! + Partager cette application + Hé ! Découvrez #dandelion ! %1$s + + Mainteneurs + Cette application est actuellement développée et maintenue par <br><br>%1$s + Contributeurs + %1$s<br><br>Merci ! + Licence GNU GPLv3+ + Bibliothèques tierces + Les bibliothèques suivantes sont utilisées : + Nous avons pris des inspirations et du code de LeafPic. Allez voir, c\'est aussi un logiciel libre ! + En savoir plus + + + + La barre du haut charge le flux + Cliquez sur un espace vide sur la barre du haut pour ouvrir le flux + + Apparence + Paramètres du réseau + Paramètres du pod + Opérabilité + + + Curseur de navigation + Visibilité de contrôle des entrées dans le volet de navigation + Utilisateur + Général + Admin + + Thème et couleurs + Contrôler les couleurs utilisées pour l\'application + Couleur principale + Couleur des barres d\'outils + Couleur secondaire + Couleur de la barre de progression + Mode AMOLED + Remplacez les couleurs avec du noir compatible avec les affichages AMOLED, sur plusieurs parties de l\'application. Pour naviguer dans diaspora* avec un affichage sombre, vous pouvez aussi utiliser le thème Dark, que vous trouverez dans vos paramètres personnels de votre compte diaspora*. + + Notifications étendues + Étendre la cloche de notifications avec un menu déroulant qui affiche les catégories de notification + Change la langue de l\'application. Redémarrez l\'application pour que les changements prennent effet + Langue + Langue du système + + Contrôle de la taille du texte pour l\'affichage web + Taille de la police + Normal + Large + Très grand + + Charger les images + Désactiver le chargements des images pour préserver la data mobile + + Rotation de l\'écran + Rotation automatique de l\'écran + Par défaut + Capteur\n(ignore les paramètres du système) + Portrait + Paysage + + Charger la pré-configuration Tor + Charger les paramètres proxy pour Tor (Orbot) HTTP Proxy + Proxy + Activer Proxy + Proxy pour dandelion* pour contourner les pare-feux.\nPeut nécessiter un redémarrage + Hôte + Port + L\'application a besoin d\'être redémarrée pour désactiver l\'usage du proxy + Préréglages proxy Orbot chargés + + Ouvrez les liens externes avec Chrome Custom Tabs. Chromium ou Google Chrome doit être installé pour cette fonctionnalité. \nNOTE IMPORTANTE : Chrome Custom Tabs n\'utilisent pas les serveurs proxy configurés ! + + Paramètres personnels + Ouvrir vos paramètres de compte diaspora* + Gérez vos contacts + Gérer les Hashtags + Ne plus suivre les tags suivis + Changer de compte + Effacer les données de session locale et passer à un autre pod/compte diaspora* + Cette opération va effacer les cookies et données de session. Voulez-vous vraiment changer de compte/pod? + Vider le cache + Vider le cache + Masquer les barres d’outils en haut et en bas automatiquement lors du défilement + Masquer la barre d\'outils + Ajouter partagé par avis- + Ajouter une référence à cette application aux partages: [via #dandelion] + + Divers + Réinitialisation complète + Effacer localement tous les réglages relatifs à l\'application et déconnexion de tous les comptes + Ceci va réinitialiser tous les changements à leurs valeurs par défaut et vous déconnecter de tous les pods. Vos images téléchargées resteront intactes. Êtes-vous sûr de vouloir continuer ? + Activer un bloqueur de pub. Des pubs peuvent être incluses, dans des vues embarquées par exemple + Bloquer les publicités diff --git a/app/src/main/res/values-gl/strings-about.xml b/app/src/main/res/values-gl/strings-about.xml deleted file mode 100644 index 77429410..00000000 --- a/app/src/main/res/values-gl/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Sobre - Licenza - Depurando - Aplicativo - Dispositivo - Nodo diaspora* - Rexistro de depuración - Rexistro de depuración (polo miúdo) - Versión do App: %1$s - Versión Android: %1$s - Nome do dispositivo: %1$s - Alcume: %1$s - Nome do perfil do nodo: %1$s - Dominio do nodo: %1$s - Ficheiro de depuración copiado ao portapapeis - dandelion* é o seu aplicativo para a rede social diaspora*. Engade características como barras de ferramentas e soporte para servidores proxy como a rede Tor para a súa experiencia social. - Contribúa ao código! - dandelion* é desenvolto libre, libre de Liberdade, e segue o espíritu que marca o proxecto diaspora*. Se quere contribuír, adiante! Por agora somos un equipo pequeno, así que agradecemos calquer tipo de axuda! - Obteña as fontes - Traduza o app! - Non está o aplicativo no seu idioma? Pode cambiar eso! Por qué non nos axuda traducíndoa? Utilizamos a plataforma github para que calquera poida traducir a app. - Deixame traducir - Qué lle parece! - dandelion* aínda está en desenvolvemento, asi que si ten suxerencias de calquer tipo o valoración, por favor utilice o noso xestor de erros para facérnolo saber! - Reporte erros - Difunda! - Dígalle aos seus amigos e familiares que utiliza diaspora* e #dandelion! Por qué no escribir sobre a experiencia? Encantaríanos saber de vostede! - Comparta o aplicativo - Ei!! Olla a #dandelion! %1$s - - Mantedores - Este aplicativo está a ser desenvolto e mantido por <br><br>%1$s - Contribúen - %1$s<br><br>Grazas! - Licenza GNU GPLv3+ - Código de terceiras partes - Utilízase o seguinte código: - Inspirámonos e collemos código de LeafPic. Bótalle un ollo, tamén é software libre! - Cóntame máis - diff --git a/app/src/main/res/values-gl/strings-preferences.xml b/app/src/main/res/values-gl/strings-preferences.xml deleted file mode 100644 index e198fa0e..00000000 --- a/app/src/main/res/values-gl/strings-preferences.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - A barra superior carga a conversa - Pulse nun espazo baldeiro na barra superior para abrir a conversa - - Aparencia - Rede - Axustes do nodo - Operabilidade - - - Cadro de navegación - Controle a visibiidade das entradas no cadro de navegación - Usuaria - Xeral - Admin - - Decorado e cores - Estableza qué cores se utilizan no aplicativo - Cor primaria - Cor das barras de ferramentas - Cor de énfase - Cor da barra de progreso - Modo AMOLED - Sobreescribir as cores co negro dos dispositivos AMOLED en varios lugares do aplicativo. Precisa reiniciar para habilitar esta preferencia. Para navegar diaspora* en modo oscuro tamén precisa activar o Decorado Oscuro, que pode atopar nos axustes personais na súa conta de diaspora*. - - Notificacións extendidas - Extender a icona da campá de notificación con un menú desplegable que mostre a categoría das notificacións - Mudar o idioma de este aplicativo. Reinicie para que se aplique o troco - Idioma - Idioma do sistema - - Estableza o tamaño do texto na Vista Web - Tamaño do texto - Normal - Grande - Enorme - - Cargar imaxes - Xestionar a carga de imaxes por ex. para aforrar datos do móbil - - Rotación da pantalla - Controlar a rotación automática da pantalla - Por omisión - Sensor\n(ignorar axustes do dispositivo) - Retrato - Paisaxe - - Cargar perfil Tor - Cargar axustes proxy para Tor (Orbot) HTTP Proxy - Proxy - Habilitar Proxy - Proxy para o tráfico de dandelion* para saltar cortalumes.\nPodería precisar reinicio. Esto podería non funcionar en algúns móbiles. - Servidor - Porto - Precisa reiniciar o app para deshabilitar o uso do proxy - Cargadas as preferencias do proxy Orbot - - Abrir ligazóns externas con Chrome Custom Tabs. Chromium ou Google Chrome ten que estar instalado para utilizar esta característica.\nIMPORTANTE: Chrome Custom Tabs non utiliza os servidores proxy configurados! - - Axustes personais - Abrir os axustes da conta diaspora* - Xestione a súa lista de contactos - Xestionar etiquetas - Deixar de seguir etiquetas que segue - Mudar de conta - Eliminar os datos locais da sesión e cambiar a outro nodo/conta de diaspora* - Esto eliminará todas as cookies e datos de sesión. Seguro que quere mudar de conta? - Limpar cache - Limpar a cache da VistaWeb - Agochar automáticamente as barras superior e inferior mentras desplaza - Barras de ferramentas intelixentes - Engadir aviso-compartido-por - Engadir unha referencia a que foi compartido desde este aplicativo: [via #dandelion] - - Varios - Restablecer completamente - Eliminar todas os axustes locais do app e desconectar todas as contas - Esto restablecerá todos os axustes do aplicativo ao valor por omisión e desconectarao de todos os nodos. As súas imaxes descargadas permanecerán. Seguro que quere proceder? - Habilitar un AdBlocker básico. Poderían verse anuncios por exemplo en vistas incrustadas - Bloquear publicidade - diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index ed7041cb..403c898c 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -1,83 +1,204 @@ - - + - - Actualizar - - Axustes - Notificacións - Conversa - Fío de comentarios - Perfil - Aspecto - Actividades - Gústame - Comentei - Mencións - Público - Buscar - Contactos - Rexistro de cambios - Estatísticas - - Todas as notificacións - Tamén comentado - Comentario nunha publicación - Gústame - Mencionado - Compartido - Comezou a compartir - - Problema: non se obtivo a lista de nodos! - Desculpe, precisa unha conexión a internet para esa tarefa - Confirmación - Quere saír? - - Máis - Sobre | Axuda - Etiquetas seguidas - Actividade pública - Informes - Compartir ligazón como texto - Compartir captura de páxina - Capturar imaxe de páxina web - Gardar imaxe en - Gardando captura como: - Enderezo da ligazón copiado … - Nova mensaxe - Ir arriba - Buscar persoas ou etiquetas - Saír do app - Vista móbil/escritorio - Compartir… - Etiquetas - Persoas - Por favor, engada un nome - Compartir ligazón - Gardar imaxe - Compartir imaxe - Abrir nun navegador externo… - Copiar ligazón ao portapapeis - Copia enderezo da imaxe ao portapapeis - - Non se cargou a imaxe - - Ten que permitir \"Permiso de acceso a almacenamento\" para gardar capturas. Despois de iso debería + + Actualizar + + Axustes + Notificacións + Conversa + Fío de comentarios + Perfil + Aspecto + Actividades + Gústame + Comentei + Mencións + Público + Buscar + Contactos + Rexistro de cambios + Estatísticas + + Todas as notificacións + Tamén comentado + Comentario nunha publicación + Gústame + Mencionado + Compartido + Comezou a compartir + + Problema: non se obtivo a lista de nodos! + Desculpe, precisa unha conexión a internet para esa tarefa + Confirmación + Quere saír? + + Máis + Sobre | Axuda + Etiquetas seguidas + Actividade pública + Informes + Compartir ligazón como texto + Compartir captura de páxina + Capturar imaxe de páxina web + Gardar imaxe en + Gardando captura como: + Enderezo da ligazón copiado … + Nova mensaxe + Ir arriba + Buscar persoas ou etiquetas + Saír do app + Vista móbil/escritorio + Compartir… + Etiquetas + Persoas + Por favor, engada un nome + Compartir ligazón + Gardar imaxe + Compartir imaxe + Abrir nun navegador externo… + Copiar ligazón ao portapapeis + Copia enderezo da imaxe ao portapapeis + + Non se cargou a imaxe + + Ten que permitir \"Permiso de acceso a almacenamento\" para gardar capturas. Despois de iso debería pechar o aplicativo ou reiniciar o dispositivo. Si non permite acceder ao almacenamento pero que utilizar máis tarde a captura de pantalla, poderá permitir entón o acceso abrindo: preferencias do sistema - apps - dandelion* no dispositivo. Na sección de permisos pode activar o \"permiso de acceso a almacenamento\". - Ten que permitir \"Permiso de acceso a almacenamento\" para gardar/subir imaxes. Despois de iso debería + Ten que permitir \"Permiso de acceso a almacenamento\" para gardar/subir imaxes. Despois de iso debería pechar o aplicativo ou reiniciar o dispositivo. Se non permite acceder ao almacenamento, para poder gardar imaxes posteriormente, deberá abrir: preferencias do sistema - apps - dandelion* no dispositivo. Na sección de permisos pode activar o \"permiso de escritura no almacenamento\". - Permiso denegado. - Permiso concedido. Inténteo de novo. - Nodo personalizado - Nome do nodo - Protocolo - Enderezo do nodo - Faltan datos - Ir a última paxina lida na conversa? - Agochar a barra de estado na vista principal - Agochar barra de estado - Mostrar título na vista principal - Mostrar título + Permiso denegado. + Permiso concedido. Inténteo de novo. + Nodo personalizado + Nome do nodo + Protocolo + Enderezo do nodo + Faltan datos + Ir a última paxina lida na conversa? + Agochar a barra de estado na vista principal + Agochar barra de estado + Mostrar título na vista principal + Mostrar título + + Sobre + Licenza + Depurando + Aplicativo + Dispositivo + Nodo diaspora* + Rexistro de depuración + Rexistro de depuración (polo miúdo) + Versión do App: %1$s + Versión Android: %1$s + Nome do dispositivo: %1$s + Alcume: %1$s + Nome do perfil do nodo: %1$s + Dominio do nodo: %1$s + Ficheiro de depuración copiado ao portapapeis + dandelion* é o seu aplicativo para a rede social diaspora*. Engade características como barras de ferramentas e soporte para servidores proxy como a rede Tor para a súa experiencia social. + Contribúa ao código! + dandelion* é desenvolto libre, libre de Liberdade, e segue o espíritu que marca o proxecto diaspora*. Se quere contribuír, adiante! Por agora somos un equipo pequeno, así que agradecemos calquer tipo de axuda! + Obteña as fontes + Traduza o app! + Non está o aplicativo no seu idioma? Pode cambiar eso! Por qué non nos axuda traducíndoa? Utilizamos a plataforma github para que calquera poida traducir a app. + Deixame traducir + Qué lle parece! + dandelion* aínda está en desenvolvemento, asi que si ten suxerencias de calquer tipo o valoración, por favor utilice o noso xestor de erros para facérnolo saber! + Reporte erros + Difunda! + Dígalle aos seus amigos e familiares que utiliza diaspora* e #dandelion! Por qué no escribir sobre a experiencia? Encantaríanos saber de vostede! + Comparta o aplicativo + Ei!! Olla a #dandelion! %1$s + + Mantedores + Este aplicativo está a ser desenvolto e mantido por <br><br>%1$s + Contribúen + %1$s<br><br>Grazas! + Licenza GNU GPLv3+ + Código de terceiras partes + Utilízase o seguinte código: + Inspirámonos e collemos código de LeafPic. Bótalle un ollo, tamén é software libre! + Cóntame máis + + + + A barra superior carga a conversa + Pulse nun espazo baldeiro na barra superior para abrir a conversa + + Aparencia + Rede + Axustes do nodo + Operabilidade + + + Cadro de navegación + Controle a visibiidade das entradas no cadro de navegación + Usuaria + Xeral + Admin + + Decorado e cores + Estableza qué cores se utilizan no aplicativo + Cor primaria + Cor das barras de ferramentas + Cor de énfase + Cor da barra de progreso + Modo AMOLED + Sobreescribir as cores co negro dos dispositivos AMOLED en varios lugares do aplicativo. Precisa reiniciar para habilitar esta preferencia. Para navegar diaspora* en modo oscuro tamén precisa activar o Decorado Oscuro, que pode atopar nos axustes personais na súa conta de diaspora*. + + Notificacións extendidas + Extender a icona da campá de notificación con un menú desplegable que mostre a categoría das notificacións + Mudar o idioma de este aplicativo. Reinicie para que se aplique o troco + Idioma + Idioma do sistema + + Estableza o tamaño do texto na Vista Web + Tamaño do texto + Normal + Grande + Enorme + + Cargar imaxes + Xestionar a carga de imaxes por ex. para aforrar datos do móbil + + Rotación da pantalla + Controlar a rotación automática da pantalla + Por omisión + Sensor\n(ignorar axustes do dispositivo) + Retrato + Paisaxe + + Cargar perfil Tor + Cargar axustes proxy para Tor (Orbot) HTTP Proxy + Proxy + Habilitar Proxy + Proxy para o tráfico de dandelion* para saltar cortalumes.\nPodería precisar reinicio. Esto podería non funcionar en algúns móbiles. + Servidor + Porto + Precisa reiniciar o app para deshabilitar o uso do proxy + Cargadas as preferencias do proxy Orbot + + Abrir ligazóns externas con Chrome Custom Tabs. Chromium ou Google Chrome ten que estar instalado para utilizar esta característica.\nIMPORTANTE: Chrome Custom Tabs non utiliza os servidores proxy configurados! + + Axustes personais + Abrir os axustes da conta diaspora* + Xestione a súa lista de contactos + Xestionar etiquetas + Deixar de seguir etiquetas que segue + Mudar de conta + Eliminar os datos locais da sesión e cambiar a outro nodo/conta de diaspora* + Esto eliminará todas as cookies e datos de sesión. Seguro que quere mudar de conta? + Limpar cache + Limpar a cache da VistaWeb + Agochar automáticamente as barras superior e inferior mentras desplaza + Barras de ferramentas intelixentes + Engadir aviso-compartido-por + Engadir unha referencia a que foi compartido desde este aplicativo: [via #dandelion] + + Varios + Restablecer completamente + Eliminar todas os axustes locais do app e desconectar todas as contas + Esto restablecerá todos os axustes do aplicativo ao valor por omisión e desconectarao de todos os nodos. As súas imaxes descargadas permanecerán. Seguro que quere proceder? + Habilitar un AdBlocker básico. Poderían verse anuncios por exemplo en vistas incrustadas + Bloquear publicidade diff --git a/app/src/main/res/values-hu/strings-about.xml b/app/src/main/res/values-hu/strings-about.xml deleted file mode 100644 index 83a190e3..00000000 --- a/app/src/main/res/values-hu/strings-about.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - Névjegy - Licensz - Hibakeresés - Alkalmazás - Eszköz - diaspora*-pod - Hibakeresési napló - Hibakeresési napló (részletes) - Alkalmazásverzió: %1$s - Android verzió: %1$s - Eszköznév: %1$s - Kódnév: %1$s - Podprofilnév: %1$s - Pod domain: %1$s - Hibakeresési napló átmásolva a vágólapra - A dandelion* a te segédalkalmazásod a diaspora* közösségi hálózat böngészésére. Olyan funkciókat ad hozzá a közösségi élményedhez, mint hasznos eszköztárak és proxyszerver-támogatás (pl. Tor). - Járulj hozzá a fejlesztéshez! - A dandelion* szabad szoftver és a diaspora* projekt elképzeléseit követi. Ha hozzá akarsz járulni, csak rajta! Jelenleg egy nagyon kis csapat vagyunk, így nagyra értékelünk bármilyen segítséget! - - A program forrása - Fordítsd le az alkalmazást! - Nem érhető el az alkalmazás a nyelveden? Ezen változtathatsz! Mit szólnál ahhoz, ha segítenél nekünk a lefordításában? A crowdin platformot használjuk, hogy bárki le tudja fordítani az alkalmazást. - Hadd fordítsak - Adj visszajelzést! - A dandelion* még mindig fejlesztés alatt áll, szóval ha vannak javaslataid vagy bármilyen visszajelzésed, kérlek, használd a hibanyomkövetőt! - Hibajelentés - Ajánld másoknak! - Beszélj a barátaiddal és családtagjaiddal a diaspora*-ról és a #dandelionról! Mi lenne, ha blogolnál a tapasztalataidról? Szeretnénk hallani tőled valamit! - Az alkalmazás megosztása - Szia! Próbáld ki a #dandeliont! %1$s - - Karbantartók - Ezt az alkalmazást jelenleg <br><br>%1$s fejleszti és tartja karban. - Hozzájárulók - %1$s<br><br>Köszönjük! - GNU GPLv3+ Licenc - 3. személytől származó könyvtárak - A következő könyvtárak vannak használatban: - A LeafPicből merítettünk némi inspirációt és programkódot. Próbáld ki, ez is szabad szoftver! - Tudj meg többet - diff --git a/app/src/main/res/values-hu/strings-preferences.xml b/app/src/main/res/values-hu/strings-preferences.xml deleted file mode 100644 index fd6e4842..00000000 --- a/app/src/main/res/values-hu/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - A fenti eszköztár betölti a hírfolyamot - Kattints egy üres helyre a fenti eszköztáron a hírfolyam megnyitásához - - Megjelenés - Hálózat - Podbeállítások - Működés - - - Navigációs csúszka - Az oldalsó navigációs menü elemei láthatóságának megadása - Felhasználó - Általános - Adminisztrátor - - Témák és színek - Az alkalmazás által használt színek megadása - Elsődleges szín - Az eszköztárak színe - Másodlagos szín - A folyamatsáv színe - AMOLED mód - A színek felülbírálása feketével az alkalmazás sok részén, mely hasznos lehet AMOLED kijelzők esetében. Újra kell indítanod az alkalmazást ehhez a változtatáshoz. Hogy sötétben böngészd a diaspora*-ot, engedélyezned kell a Sötét téma beállítást, amely megtalálható a személyes diaspora* fiókbeállításaidnál. - - Kiterjesztett értesítések - Az értesítések gombra kattintva megjelenik egy gyorsmenü, amely értesítéskategóriákat mutat - Az alkalmazás nyelvének megváltoztatása. Indítsd újra az alkalmazást, hogy a módosítások érvénybe lépjenek! - Nyelv - Rendszernyelv - - A webnézet szövegméretének módosítása - Betűméret - Normál - Nagy - Óriási - - Képek betöltése - Képek betöltésének be-/kikapcsolása pl. a kevesebb adatfelhasználás céljából - - Kijelzőforgatás - Kijelzőforgatás automatikus irányítása - Alapértelmezett - Szenzor\n(rendszerbeállítások figyelmen kívül hagyása) - Álló - Fekvő - - Tor profil betöltése - Proxybeállítások betöltése a Tor (Orbot) HTTP Proxynak - Proxy - Proxy engedélyezése - Proxy használata a dandelion* adatforgalmának a tűzfalak kikerüléséért.\nÚjraindítás szükséges lehet. Nem biztos, hogy minden telefonon működik. - Host - Port - Az alkalmazást újra kell indítani a proxyhasználat kikapcsolásához - Orbot proxyprofil betöltve - - Külső linkek megnyitása a Chrome egyéni lapjaival. Ennek a funkciónak a használatához telepítve kell lennie a Chromiumnak vagy a Google Chrome-nak.\nFONTOS MEGJEGYZÉS: Chrome egyéni lapjai nem használják a beállított proxyszervereket! - - Személyes beállítások - A diaspora*-fiókod beállításainak megnyitása - A partnereid listájának kezelése - Címkék kezelése - Címkék követésének megszüntetése - Fiókváltás - Helyi munkamenet adatának törlése és váltás másik diaspora*-podra vagy -fiókra - Ez törölni fogja az összes sütit és a munkamenet adatait. Tényleg fiókot akarsz váltani? - Gyorsítótár kiürítése - Beépített böngésző gyorsítótárjának kiürítése - A felső és alsó eszköztárak automatikus elrejtése görgetés közben - Intelligensen eltűnő eszköztárak - Használt program megemlítése megosztáskor - Hivatkozás erre az alkalmazásra a megosztásokban: [megosztva ezzel: #dandelion] - - Egyéb - Teljes visszaállítás eredeti értékekre - Az alkalmazás összes helyi beállításának törlése és kijelentkezés az összes fiókból - Ez az összes módosított beállítás értékét visszaállítja alapra és kijelentkeztet téged az összes podról. A letöltött képeid érintetlenül maradnak. Biztos, hogy folytatod? - Alap hirdetésblokkoló (AdBlocker) engedélyezése. Reklámok jelenhetnek meg pl. a beépített megjelenítéseknél - Hirdetések blokkolása - diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 3d04a9c0..44562aef 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,75 +1,197 @@ - - - Újratölt - - Beállítások - Értesítések - Beszélgetések - Hírfolyam - Profil - Csoportjaim - Tevékenységeim - Kedvelések - Hozzászólások - Megemlítések - Nyilvános - Keresés - Partnerek - Újdonságok - Statisztika - - Összes értesítés - Más hozzászólások - Közvetlen hozzászólások - Kedvelések - Megemlítések - Megosztások - Új kapcsolatok - - Hiba: Nem lehetett lekérni a podok listáját! - Bocsánat, csatlakoznod kell az internethez a folytatáshoz - Jóváhagyás - Ki akarsz lépni? - - Egyebek - Névjegy | Segítség - Követett címkék - Nyilvános tevékenységek - Jelentések - Link megosztása szövegként - Weboldal képernyőképének megosztása - Képernyőkép készítése weboldalról - Kép mentése a következő helyre - Képernyőkép mentése mint: - Másolt link címe… - Új bejegyzés - Ugrás az oldal tetejére - Címkék vagy emberek keresése - Kilépés az alkalmazásból - Mobil-/asztali mód - Megosztás… - címkékre - emberekre - Kérlek, adj meg egy nevet - Link címének megosztása - Kép mentése - Kép megosztása - Megnyitás külső böngészőben… - Link címének másolása a vágólapra - Kép címének másolása a vágólapra - - Nem lehet betölteni a képet - - Engedélyezned kell a tárhely elérését a képernyőképek mentéséhez. Aztán teljesen be kell zárnod az alkalmazást vagy újra kell indítanod az eszközt. Ha most nem akarod engedélyezni a tárhely elérését, de később szeretnéd használni a képernyőkép-funkciót, kérlek, tedd meg az alábbi helyen: Rendszerbeállítások - Alkalmazások - dandelion*. Itt az engedélyeknél hozzáadhatod az a tárhelyre való írást. - Engedélyezned kell a tárhely elérését a képek mentéséhez/feltöltéséhez. Aztán teljesen be kell zárnod az alkalmazást vagy újra kell indítanod az eszközt. Ha most nem akarod engedélyezni a tárhely elérését, de később szeretnéd használni a képernyőkép-funkciót, kérlek, tedd meg az alábbi helyen: Rendszerbeállítások - Alkalmazások - dandelion*. Itt az engedélyeknél hozzáadhatod az a tárhelyre való írást. - Hozzáférés megtagadva. - Hozzáférés megtagadva. Kérlek, próbáld újra! - Egyéni pod - Pod neve - Protokoll - Pod címe - Hiányzó érték - Ugorjunk a legutóbb meglátogatott oldalra a hírfolyamon belül? + + Újratölt + + Beállítások + Értesítések + Beszélgetések + Hírfolyam + Profil + Csoportjaim + Tevékenységeim + Kedvelések + Hozzászólások + Megemlítések + Nyilvános + Keresés + Partnerek + Újdonságok + Statisztika + + Összes értesítés + Más hozzászólások + Közvetlen hozzászólások + Kedvelések + Megemlítések + Megosztások + Új kapcsolatok + + Hiba: Nem lehetett lekérni a podok listáját! + Bocsánat, csatlakoznod kell az internethez a folytatáshoz + Jóváhagyás + Ki akarsz lépni? + + Egyebek + Névjegy | Segítség + Követett címkék + Nyilvános tevékenységek + Jelentések + Link megosztása szövegként + Weboldal képernyőképének megosztása + Képernyőkép készítése weboldalról + Kép mentése a következő helyre + Képernyőkép mentése mint: + Másolt link címe… + Új bejegyzés + Ugrás az oldal tetejére + Címkék vagy emberek keresése + Kilépés az alkalmazásból + Mobil-/asztali mód + Megosztás… + címkékre + emberekre + Kérlek, adj meg egy nevet + Link címének megosztása + Kép mentése + Kép megosztása + Megnyitás külső böngészőben… + Link címének másolása a vágólapra + Kép címének másolása a vágólapra + + Nem lehet betölteni a képet + + Engedélyezned kell a tárhely elérését a képernyőképek mentéséhez. Aztán teljesen be kell zárnod az alkalmazást vagy újra kell indítanod az eszközt. Ha most nem akarod engedélyezni a tárhely elérését, de később szeretnéd használni a képernyőkép-funkciót, kérlek, tedd meg az alábbi helyen: Rendszerbeállítások - Alkalmazások - dandelion*. Itt az engedélyeknél hozzáadhatod az a tárhelyre való írást. + Engedélyezned kell a tárhely elérését a képek mentéséhez/feltöltéséhez. Aztán teljesen be kell zárnod az alkalmazást vagy újra kell indítanod az eszközt. Ha most nem akarod engedélyezni a tárhely elérését, de később szeretnéd használni a képernyőkép-funkciót, kérlek, tedd meg az alábbi helyen: Rendszerbeállítások - Alkalmazások - dandelion*. Itt az engedélyeknél hozzáadhatod az a tárhelyre való írást. + Hozzáférés megtagadva. + Hozzáférés megtagadva. Kérlek, próbáld újra! + Egyéni pod + Pod neve + Protokoll + Pod címe + Hiányzó érték + Ugorjunk a legutóbb meglátogatott oldalra a hírfolyamon belül? + + Névjegy + Licensz + Hibakeresés + Alkalmazás + Eszköz + diaspora*-pod + Hibakeresési napló + Hibakeresési napló (részletes) + Alkalmazásverzió: %1$s + Android verzió: %1$s + Eszköznév: %1$s + Kódnév: %1$s + Podprofilnév: %1$s + Pod domain: %1$s + Hibakeresési napló átmásolva a vágólapra + A dandelion* a te segédalkalmazásod a diaspora* közösségi hálózat böngészésére. Olyan funkciókat ad hozzá a közösségi élményedhez, mint hasznos eszköztárak és proxyszerver-támogatás (pl. Tor). + Járulj hozzá a fejlesztéshez! + A dandelion* szabad szoftver és a diaspora* projekt elképzeléseit követi. Ha hozzá akarsz járulni, csak rajta! Jelenleg egy nagyon kis csapat vagyunk, így nagyra értékelünk bármilyen segítséget! + + A program forrása + Fordítsd le az alkalmazást! + Nem érhető el az alkalmazás a nyelveden? Ezen változtathatsz! Mit szólnál ahhoz, ha segítenél nekünk a lefordításában? A crowdin platformot használjuk, hogy bárki le tudja fordítani az alkalmazást. + Hadd fordítsak + Adj visszajelzést! + A dandelion* még mindig fejlesztés alatt áll, szóval ha vannak javaslataid vagy bármilyen visszajelzésed, kérlek, használd a hibanyomkövetőt! + Hibajelentés + Ajánld másoknak! + Beszélj a barátaiddal és családtagjaiddal a diaspora*-ról és a #dandelionról! Mi lenne, ha blogolnál a tapasztalataidról? Szeretnénk hallani tőled valamit! + Az alkalmazás megosztása + Szia! Próbáld ki a #dandeliont! %1$s + + Karbantartók + Ezt az alkalmazást jelenleg <br><br>%1$s fejleszti és tartja karban. + Hozzájárulók + %1$s<br><br>Köszönjük! + GNU GPLv3+ Licenc + 3. személytől származó könyvtárak + A következő könyvtárak vannak használatban: + A LeafPicből merítettünk némi inspirációt és programkódot. Próbáld ki, ez is szabad szoftver! + Tudj meg többet + + + + A fenti eszköztár betölti a hírfolyamot + Kattints egy üres helyre a fenti eszköztáron a hírfolyam megnyitásához + + Megjelenés + Hálózat + Podbeállítások + Működés + + + Navigációs csúszka + Az oldalsó navigációs menü elemei láthatóságának megadása + Felhasználó + Általános + Adminisztrátor + + Témák és színek + Az alkalmazás által használt színek megadása + Elsődleges szín + Az eszköztárak színe + Másodlagos szín + A folyamatsáv színe + AMOLED mód + A színek felülbírálása feketével az alkalmazás sok részén, mely hasznos lehet AMOLED kijelzők esetében. Újra kell indítanod az alkalmazást ehhez a változtatáshoz. Hogy sötétben böngészd a diaspora*-ot, engedélyezned kell a Sötét téma beállítást, amely megtalálható a személyes diaspora* fiókbeállításaidnál. + + Kiterjesztett értesítések + Az értesítések gombra kattintva megjelenik egy gyorsmenü, amely értesítéskategóriákat mutat + Az alkalmazás nyelvének megváltoztatása. Indítsd újra az alkalmazást, hogy a módosítások érvénybe lépjenek! + Nyelv + Rendszernyelv + + A webnézet szövegméretének módosítása + Betűméret + Normál + Nagy + Óriási + + Képek betöltése + Képek betöltésének be-/kikapcsolása pl. a kevesebb adatfelhasználás céljából + + Kijelzőforgatás + Kijelzőforgatás automatikus irányítása + Alapértelmezett + Szenzor\n(rendszerbeállítások figyelmen kívül hagyása) + Álló + Fekvő + + Tor profil betöltése + Proxybeállítások betöltése a Tor (Orbot) HTTP Proxynak + Proxy + Proxy engedélyezése + Proxy használata a dandelion* adatforgalmának a tűzfalak kikerüléséért.\nÚjraindítás szükséges lehet. Nem biztos, hogy minden telefonon működik. + Host + Port + Az alkalmazást újra kell indítani a proxyhasználat kikapcsolásához + Orbot proxyprofil betöltve + + Külső linkek megnyitása a Chrome egyéni lapjaival. Ennek a funkciónak a használatához telepítve kell lennie a Chromiumnak vagy a Google Chrome-nak.\nFONTOS MEGJEGYZÉS: Chrome egyéni lapjai nem használják a beállított proxyszervereket! + + Személyes beállítások + A diaspora*-fiókod beállításainak megnyitása + A partnereid listájának kezelése + Címkék kezelése + Címkék követésének megszüntetése + Fiókváltás + Helyi munkamenet adatának törlése és váltás másik diaspora*-podra vagy -fiókra + Ez törölni fogja az összes sütit és a munkamenet adatait. Tényleg fiókot akarsz váltani? + Gyorsítótár kiürítése + Beépített böngésző gyorsítótárjának kiürítése + A felső és alsó eszköztárak automatikus elrejtése görgetés közben + Intelligensen eltűnő eszköztárak + Használt program megemlítése megosztáskor + Hivatkozás erre az alkalmazásra a megosztásokban: [megosztva ezzel: #dandelion] + + Egyéb + Teljes visszaállítás eredeti értékekre + Az alkalmazás összes helyi beállításának törlése és kijelentkezés az összes fiókból + Ez az összes módosított beállítás értékét visszaállítja alapra és kijelentkeztet téged az összes podról. A letöltött képeid érintetlenül maradnak. Biztos, hogy folytatod? + Alap hirdetésblokkoló (AdBlocker) engedélyezése. Reklámok jelenhetnek meg pl. a beépített megjelenítéseknél + Hirdetések blokkolása diff --git a/app/src/main/res/values-it/strings-about.xml b/app/src/main/res/values-it/strings-about.xml deleted file mode 100644 index b4a5eeaf..00000000 --- a/app/src/main/res/values-it/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Informazioni - Licenza - Debug - Applicazione - Dispositivo - Pod diaspora* - Log di debug - Log di debug (dettagliato) - Versione app: %1$s - Versione Android: %1$s - Nome dispositivo: %1$s - Codename: %1$s - Pod alias: %1$s - Dominio pod: %1$s - Log di debug copiato negli appunti - dandelion* è la tua app per l\'esplorazione del social network diaspora*. Aggiunge funzionalità, quali un\'utile barra degli strumenti e il supporto per i server proxy come la rete Tor, alla vostra esperienza social. - Contribuisci al codice! - dandelion* è sviluppato liberamente e segue le idee del progetto diaspora*. Se vuoi contribuire sei il benvenuto! Attualmente siamo un team molto piccolo, quindi apprezziamo qualsiasi tipo di aiuto! - Ottieni il codice sorgente - Traduci l\'app! - L\'app non è disponibile nella tua lingua? Si può cambiare! Perché non ci aiuti a tradurlo? Utilizziamo la piattaforma Crowdin per permettere a chiunque di tradurre l\'app. - Fammi tradurre - Lascia un feedback! - dandelion* è ancora in sviluppo, quindi se avete suggerimenti o qualsiasi tipo di feedback, utilizza lo strumento di segnalazione dei bug per dirci la tua! - Segnala un bug - Passaparola! - Dì ai tuoi amici e familiari di diaspora* e di #dandelion! Perché non scrivi un post sulla tua esperienza? Ci piacerebbe sentire cosa ne pensate! - Condividi l\'app - Ehi! Scopri #dandelion! %1$s - - Manutentori - Quest\'app è attualmente sviluppata e mantenuta da <br><br>%1$s - Contributori - %1$s<br><br>Grazie! - Licenza GNU GPL versione 3 o superiore - Librerie di terze parti - Sono utilizzate le seguenti librerie: - Abbiamo preso ispirazione e parte del codice da LeafPic. Dagli un\'occhiata, anch\'esso è software libero! - Dimmi di più - diff --git a/app/src/main/res/values-it/strings-preferences.xml b/app/src/main/res/values-it/strings-preferences.xml deleted file mode 100644 index 0e6df45b..00000000 --- a/app/src/main/res/values-it/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - La barra superiore apre lo stream - Premi su uno spazio vuoto nella barra degli strumenti superiore per aprire lo stream - - Aspetto - Rete - Impostazioni pod - Operabilità - - - Menù di navigazione - Controlla la visibilità degli elementi nel menù di navigazione - Utente - Generali - Amministrazione - - Tema e colori - Scegli quali colori usare nell\'app - Colore primario - Colore della barra - Colore secondario - Colore della barra dei progressi - Modalità AMOLED - Sostituzione dei colori con display AMOLED scuro in molte parti dell\'app. È necessario riavviare per attivare o disattivare questa impostazione. Per utilizzare diaspora* in scuro è inoltre necessario attivare il tema scuro, che può essere trovato nelle impostazioni dell\'account personale di diaspora*. - - Notifiche estese - Estendi il bottone delle notifiche con un menù che mostra le categorie di notifiche - Cambia la lingua di questa app. Riavvia l\'app per rendere effettive le modifiche - Lingua - Lingua di sistema - - Controllo dimensione testo del WebView - Dimensione font - Normale - Grande - Molto grande - - Carica immagini - Disabilita il caricamento delle immagini per risparmiare la rete dati - - Rotazione dello schermo - Controlla la rotazione automatica dello schermo - Predefinito - Sensore\n(ignora le impostazioni di sistema) - Verticale - Orizzontale - - Carica i valori predefiniti di Tor - Carica le impostazioni del proxy per il proxy HTTP di Tor (Orbot) - Proxy - Attiva proxy - Usa il proxy con i dati di dandelion* per eludere i firewall.\nPotrebbe essere necessario il riavvio - Host - Porta - E\' necessario riavviare l\'app per disattivare l\'utilizzo del proxy - Orbot proxy preset caricato - - Apri collegamenti esterni con le schede personalizzate di Chrome. Chromium o Google Chrome devono essere installati per questa funzione. \nNOTA IMPORTANTE: le schede personalizzate di Chrome non usano i server proxy configurabili! - - Impostazioni personali - Apri le impostazioni del tuo account diaspora* - Gestisci il tuo elenco di contatti - Gestisci hashtag - Non seguire più gli hashtag seguiti - Cambia account - Elimina dati della sessione locale e passa ad un altro pod/account diaspora* - Questo eliminerà tutti i cookie e i dati della sessione. Vuoi veramente cambiare il tuo account? - Pulisci cache - Pulisci cache di WebView - Nascondi barre superiori e inferiori automaticamente quando scrolli - Barre che si nascondono intelligentemente - Aggiungi avviso dell\'app - Aggiungere un riferimento a questa applicazione ai testi condivisi: [via #dandelion] - - Vario - Reset completo - Elimina localmente tutte le impostazioni relative all\'app e disconnette da tutti gli account - Questo cancellerà tutte le impostazioni dell\'app che sono state cambiate ai loro valori predefiniti e ti disconnetterà da tutti i pod. Le immagini scaricate non verranno toccate. Sei sicuro di voler procedere? - Abilitare AdBlocker base. Gli annunci possono essere inclusi ad es. nelle visualizzazioni incorporate - Blocca le pubblicità - diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d5b5885f..8078589f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,85 +1,206 @@ - - - Ricarica - - Impostazioni - Notifiche - Conversazioni - Stream - Profilo - Aspetti - Attività - Piaciuti - Commentati - Menzioni - Pubblico - Cerca - Contatti - Log delle modifiche - Statistiche - - Tutte le notifiche - Inoltre ha commentato - Commento sul post - Ha messo Mi piace - Ha menzionato - Ha ricondiviso - Ha iniziato a condividere con te - - Errore: impossibile ottenere la lista dei pod! - Devi essere connesso ad internet per proseguire - Conferma - Vuoi veramente uscire? - - Altro - Informazioni | Aiuto - Tag seguiti - Attività pubbliche - Segnalazioni - Condividi link come testo - Condividi screenshot della pagina Web - Fai uno screenshot della pagina web - Salvataggio dell\'immagine in - Salvataggio dello screenshot come: - Indirizzo copiato… - Nuovo post - Vai in cima - Cerca tag o persone - Esci dall\'app - Attiva visualizzazione mobile/desktop - Condividi… - per tag - per persona - Inserisci un nome - Condividi link - Salva immagine - Condividi immagine - Apri nel browser… - Copia link negli appunti - Copia indirizzo dell\'immagine negli appunti - - Impossibile caricare immagine - - Devi garantire il permesso di accesso alla memoria per poter salvare gli screenshot. Dopodiché devi + + Ricarica + + Impostazioni + Notifiche + Conversazioni + Stream + Profilo + Aspetti + Attività + Piaciuti + Commentati + Menzioni + Pubblico + Cerca + Contatti + Log delle modifiche + Statistiche + + Tutte le notifiche + Inoltre ha commentato + Commento sul post + Ha messo Mi piace + Ha menzionato + Ha ricondiviso + Ha iniziato a condividere con te + + Errore: impossibile ottenere la lista dei pod! + Devi essere connesso ad internet per proseguire + Conferma + Vuoi veramente uscire? + + Altro + Informazioni | Aiuto + Tag seguiti + Attività pubbliche + Segnalazioni + Condividi link come testo + Condividi screenshot della pagina Web + Fai uno screenshot della pagina web + Salvataggio dell\'immagine in + Salvataggio dello screenshot come: + Indirizzo copiato… + Nuovo post + Vai in cima + Cerca tag o persone + Esci dall\'app + Attiva visualizzazione mobile/desktop + Condividi… + per tag + per persona + Inserisci un nome + Condividi link + Salva immagine + Condividi immagine + Apri nel browser… + Copia link negli appunti + Copia indirizzo dell\'immagine negli appunti + + Impossibile caricare immagine + + Devi garantire il permesso di accesso alla memoria per poter salvare gli screenshot. Dopodiché devi chiudere completamente l\'app o riavviare il dispositivo. Se non permetti l\'accesso alla memoria ma vuoi usare la funzione degli screenshot più avanti, puoi garantire il permesso successivamente. Vai su: Impostazioni - App - dandelion*. Nella sezione dei permessi puoi garantire il permesso per la scrittura sul dispositivo. - Devi concedere il permesso di accesso alla memoria per poter salvare e caricare le immagini. Dopodiché devi + Devi concedere il permesso di accesso alla memoria per poter salvare e caricare le immagini. Dopodiché devi chiudere completamente l\'app o riavviare il dispositivo. Se non permetti l\'accesso alla memoria ma vuoi salvare le immagini più avanti, puoi concedere il permesso successivamente. Vai su: Impostazioni - App - dandelion*. Nella sezione dei permessi puoi concedere il permesso per la scrittura sul dispositivo. - Permesso negato. - Permesso concesso. Si prega di riprovare. - Pod personalizzato - Nome del pod - Protocollo - Indirizzo del pod - Valore mancante - Salta all\'ultima pagina visitata nello stream? - Nascondi barra di stato nella schermata principale - Nascondi barra di stato - Mostra titolo nella schermata principale - Mostra titolo + Permesso negato. + Permesso concesso. Si prega di riprovare. + Pod personalizzato + Nome del pod + Protocollo + Indirizzo del pod + Valore mancante + Salta all\'ultima pagina visitata nello stream? + Nascondi barra di stato nella schermata principale + Nascondi barra di stato + Mostra titolo nella schermata principale + Mostra titolo + + Informazioni + Licenza + Debug + Applicazione + Dispositivo + Pod diaspora* + Log di debug + Log di debug (dettagliato) + Versione app: %1$s + Versione Android: %1$s + Nome dispositivo: %1$s + Codename: %1$s + Pod alias: %1$s + Dominio pod: %1$s + Log di debug copiato negli appunti + dandelion* è la tua app per l\'esplorazione del social network diaspora*. Aggiunge funzionalità, quali un\'utile barra degli strumenti e il supporto per i server proxy come la rete Tor, alla vostra esperienza social. + Contribuisci al codice! + dandelion* è sviluppato liberamente e segue le idee del progetto diaspora*. Se vuoi contribuire sei il benvenuto! Attualmente siamo un team molto piccolo, quindi apprezziamo qualsiasi tipo di aiuto! + Ottieni il codice sorgente + Traduci l\'app! + L\'app non è disponibile nella tua lingua? Si può cambiare! Perché non ci aiuti a tradurlo? Utilizziamo la piattaforma Crowdin per permettere a chiunque di tradurre l\'app. + Fammi tradurre + Lascia un feedback! + dandelion* è ancora in sviluppo, quindi se avete suggerimenti o qualsiasi tipo di feedback, utilizza lo strumento di segnalazione dei bug per dirci la tua! + Segnala un bug + Passaparola! + Dì ai tuoi amici e familiari di diaspora* e di #dandelion! Perché non scrivi un post sulla tua esperienza? Ci piacerebbe sentire cosa ne pensate! + Condividi l\'app + Ehi! Scopri #dandelion! %1$s + + Manutentori + Quest\'app è attualmente sviluppata e mantenuta da <br><br>%1$s + Contributori + %1$s<br><br>Grazie! + Licenza GNU GPL versione 3 o superiore + Librerie di terze parti + Sono utilizzate le seguenti librerie: + Abbiamo preso ispirazione e parte del codice da LeafPic. Dagli un\'occhiata, anch\'esso è software libero! + Dimmi di più + + + + La barra superiore apre lo stream + Premi su uno spazio vuoto nella barra degli strumenti superiore per aprire lo stream + + Aspetto + Rete + Impostazioni pod + Operabilità + + + Menù di navigazione + Controlla la visibilità degli elementi nel menù di navigazione + Utente + Generali + Amministrazione + + Tema e colori + Scegli quali colori usare nell\'app + Colore primario + Colore della barra + Colore secondario + Colore della barra dei progressi + Modalità AMOLED + Sostituzione dei colori con display AMOLED scuro in molte parti dell\'app. È necessario riavviare per attivare o disattivare questa impostazione. Per utilizzare diaspora* in scuro è inoltre necessario attivare il tema scuro, che può essere trovato nelle impostazioni dell\'account personale di diaspora*. + + Notifiche estese + Estendi il bottone delle notifiche con un menù che mostra le categorie di notifiche + Cambia la lingua di questa app. Riavvia l\'app per rendere effettive le modifiche + Lingua + Lingua di sistema + + Controllo dimensione testo del WebView + Dimensione font + Normale + Grande + Molto grande + + Carica immagini + Disabilita il caricamento delle immagini per risparmiare la rete dati + + Rotazione dello schermo + Controlla la rotazione automatica dello schermo + Predefinito + Sensore\n(ignora le impostazioni di sistema) + Verticale + Orizzontale + + Carica i valori predefiniti di Tor + Carica le impostazioni del proxy per il proxy HTTP di Tor (Orbot) + Proxy + Attiva proxy + Usa il proxy con i dati di dandelion* per eludere i firewall.\nPotrebbe essere necessario il riavvio + Host + Porta + E\' necessario riavviare l\'app per disattivare l\'utilizzo del proxy + Orbot proxy preset caricato + + Apri collegamenti esterni con le schede personalizzate di Chrome. Chromium o Google Chrome devono essere installati per questa funzione. \nNOTA IMPORTANTE: le schede personalizzate di Chrome non usano i server proxy configurabili! + + Impostazioni personali + Apri le impostazioni del tuo account diaspora* + Gestisci il tuo elenco di contatti + Gestisci hashtag + Non seguire più gli hashtag seguiti + Cambia account + Elimina dati della sessione locale e passa ad un altro pod/account diaspora* + Questo eliminerà tutti i cookie e i dati della sessione. Vuoi veramente cambiare il tuo account? + Pulisci cache + Pulisci cache di WebView + Nascondi barre superiori e inferiori automaticamente quando scrolli + Barre che si nascondono intelligentemente + Aggiungi avviso dell\'app + Aggiungere un riferimento a questa applicazione ai testi condivisi: [via #dandelion] + + Vario + Reset completo + Elimina localmente tutte le impostazioni relative all\'app e disconnette da tutti gli account + Questo cancellerà tutte le impostazioni dell\'app che sono state cambiate ai loro valori predefiniti e ti disconnetterà da tutti i pod. Le immagini scaricate non verranno toccate. Sei sicuro di voler procedere? + Abilitare AdBlocker base. Gli annunci possono essere inclusi ad es. nelle visualizzazioni incorporate + Blocca le pubblicità diff --git a/app/src/main/res/values-ja/strings-about.xml b/app/src/main/res/values-ja/strings-about.xml deleted file mode 100644 index 770950f3..00000000 --- a/app/src/main/res/values-ja/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - アプリについて - ライセンス - デバッグ - アプリケーション - デバイス - ダイアスポラ* ポッド - デバッグログ - デバッグ ログ (詳細) - アプリバージョン: %1$s - Android バージョン: %1$s - デバイス名: %1$s - コード名: %1$s - ポッドプロファイル名: %1$s - ポッドドメイン: %1$s - デバッグログをクリップボードにコピーしました - dandelion* は、ソーシャル ネットワーク diaspora* をブラウジングするためのコンパニオン アプリです。便利なツールバーや Tor のようなプロキシ サーバーのサポートなどの機能を追加して、ソーシャル体験することができます。 - コードを貢献! - dandelion* は自由にフリーで開発され、diaspora* プロジェクトのアイデアをフォローしています。貢献したい場合は、どうぞ! 現在私たちは、非常に小規模なチームなので、あらゆる種類の支援に感謝申し上げます! - ソースを取得 - アプリを翻訳! - アプリがお使いの言語で利用できませんか? それを変更することができます! 翻訳して私たちを支援しませんか? Crowdin プラットフォームを使用して、誰でもアプリケーションを翻訳できるようにしています。 - 翻訳させてください - フィードバックする! - dandelion* はまだ開発中なので、提案や何かフィードバックがあれば、私たちのバグ追跡システムにご連絡ください! - バグを報告 - みんなに広めよう! - diaspora* と #dandelion について家族や友人に広めてください! あなたの体験についてブログしませんか? 私たちにあなたからの話を聞かせてください! - アプリを共有 - やあ! #dandelion をチェックしてください! %1$s - - メンテナンススタッフ - 現在、このアプリは以下の人によって開発およびメンテナンスされています <br><br>%1$s - 貢献者 - %1$s<br><br>ありがとうございます! - GNU GPLv3+ ライセンス - サードパーティ ライブラリー - 以下のライブラリーが使用されます: - LeafPic からいくつかのインスピレーションとコードを得ました。チェックしてみてください。同様のフリーソフトウェアです! - さらに詳しく - diff --git a/app/src/main/res/values-ja/strings-preferences.xml b/app/src/main/res/values-ja/strings-preferences.xml deleted file mode 100644 index d4a5ca6d..00000000 --- a/app/src/main/res/values-ja/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - 上部ツールバーでストリームを読み込み - 上部ツールバーの空白部分をクリックして、ストリームを開きます。 - - 外観 - ネットワーク - ポッドの設定 - 操作性 - - - ナビゲーション スライダー - ナビゲーションドロワー内のエントリーの表示を制御します - ユーザー - 一般 - 管理 - - テーマと色 - アプリ全体で使用される色を制御します - プライマリ色 - ツールバーの色 - アクセント色 - プログレスバーの色 - AMOLED モード - アプリの多くの部分を AMOLED フレンドリーな黒色の表示で上書きします。この設定を切り替えるには再起動する必要があります。ダイアスポラ* を暗く参照するには、ダイアスポラ* の個人アカウント設定にある、ダークテーマをアクティブにする必要があります。 - - 拡張通知 - 通知のカテゴリーを示すドロップダウン・メニューで通知ベルを拡張します - このアプリの言語を変更します。アプリを再起動すると変更を反映します - 言語 - システム言語 - - WebView のテキストサイズを調整 - フォントサイズ - 標準 - - 巨大 - - 画像の読み込み - 安全なモバイルデータのため、画像の読み込みを無効にします - - 画面の回転 - 画面の自動回転をコントロール - デフォルト - センサー\n(システムの設定を無視) - ポートレート (縦向き) - ランドスケープ (横向き) - - Tor プリセットを読み込む - Tor (Orbot) HTTP プロキシのプロキシ設定を読み込みます - プロキシ - プロキシを有効にする - dandelion* の通信をプロキシして、ファイアウォールに回避します。\n再起動が必要になることがあります - ホスト - ポート - プロキシの使用を無効にするには、アプリを再起動する必要があります - Orbot プロキシのプリセットを読み込みました - - Chrome のカスタム タブで外部リンクを開きます。この機能は Chromium または Google Chrome をインストールする必要があります。\n重要な注意: Chrome のカスタム タブは構成されているプロキシ サーバーを使用しません! - - 個人用設定 - diaspora* アカウント設定を開きます - 連絡先リストを管理します - ハッシュタグを管理 - すでにフォローしているハッシュタグのフォローをやめます - アカウントを変更 - ローカルのセッション データを消去し、別の diaspora* ポッド/アカウントに切り替えます - すべてのクッキーとセッション データが消去されます。アカウントを変更してもよろしいですか? - キャッシュをクリア - WebView のキャッシュをクリアします - スクロールの間、自動的に上部と下部のツールバーを非表示にします - Intellihide ツールバー - シェア方法の通知を追加 - 共有テキストにこのアプリへの参照を追加します: [via #dandelion] - - その他 - 完全なリセット - すべてのアカウントから、アプリとログアウトに関連するすべての設定をローカルで消去します - これはアプリの変更された設定をすべてデフォルトにリセットして、すべてのポッドからログアウトします。ダウンロードした画像はそのまま残ります。続行してもよろしいですか? - 基本 AdBlocker を有効にします。広告は、埋め込みビューなどに含まれることがあります - 広告をブロック - diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6b7ace50..7d9719a9 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,79 +1,200 @@ - - - 再読み込み - - 設定 - 通知 - トーク - ストリーム - プロフィール - アスペクト - アクティビティ - いいね! - コメント - メンション - 公開 - 検索 - 連絡先 - 変更履歴 - 統計情報 - - すべての通知 - コメントもしました - 投稿にコメント - いいね!しました - メンションしました - リシェアしました - シェアを始めました - - エラー: ポッドのリストを取得できませんでした! - 申し訳ありません。続行するにはインターネットに接続する必要があります - 確認 - 終了しますか? - - さらに - 概要 |ヘルプ - フォロー済タグ - 公開アクティビティ - 報告 - テキストとしてリンクをシェア - Web ページのスクリーン ショットをシェア - Web ページのスクリーン ショットを撮る - 画像を保存中 - スクリーンショットを保存中: - リンク アドレスをコピーしました … - 新しい投稿 - 先頭に移動 - タグまたは人で検索 - アプリを終了 - モバイル/デスクトップ表示の切り替え - シェア… - タグ別 - 人別 - 名前を追加してください - リンク アドレスをシェア - 画像を保存 - 画像をシェア - 外部ブラウザーで開く… - リンクアドレスをクリップボードへコピー - 画像のアドレスをクリップボードへコピー - - 画像を読み込むことができません - - スクリーン ショットを保存するために、\"ストレージのアクセス許可\" を付与する必要があります。その後、完全にアプリを閉じるか、携帯電話を再起動する必要があります。ストレージへのアクセスを許可しないで、後でスクリーン ショット機能を使用する場合は、後でアクセス許可を付与することができます。その場合: システム設定 - アプリ - dandelion* を開いて、アクセス許可のセクションで、\"ストレージの書き込みアクセス許可\" を付与することができます。 - 画像を保存/アップロードするために、\"ストレージのアクセス許可\" を付与する必要があります。その後、完全にアプリを閉じるか、携帯電話を再起動する必要があります。ストレージへのアクセスを許可しないで、後で画像を保存したい場合は、後でアクセス許可を付与することができます。その場合: システム設定 - アプリ - dandelion* を開いて、アクセス許可のセクションで、\"ストレージの書き込みアクセス許可\" を付与することができます。 - アクセスが拒否されました。 - アクセスを許可しました。もう一度やり直してください。 - カスタム ポッド - ポッド名 - プロトコル - ポッドのアドレス - 値がありません - ストリームの最後に訪れたページに移動しますか? - メイン画面のステータスバーを非表示にします - ステータスバーを非表示 - メインビューにタイトルを表示します - タイトルを表示 + + 再読み込み + + 設定 + 通知 + トーク + ストリーム + プロフィール + アスペクト + アクティビティ + いいね! + コメント + メンション + 公開 + 検索 + 連絡先 + 変更履歴 + 統計情報 + + すべての通知 + コメントもしました + 投稿にコメント + いいね!しました + メンションしました + リシェアしました + シェアを始めました + + エラー: ポッドのリストを取得できませんでした! + 申し訳ありません。続行するにはインターネットに接続する必要があります + 確認 + 終了しますか? + + さらに + 概要 |ヘルプ + フォロー済タグ + 公開アクティビティ + 報告 + テキストとしてリンクをシェア + Web ページのスクリーン ショットをシェア + Web ページのスクリーン ショットを撮る + 画像を保存中 + スクリーンショットを保存中: + リンク アドレスをコピーしました … + 新しい投稿 + 先頭に移動 + タグまたは人で検索 + アプリを終了 + モバイル/デスクトップ表示の切り替え + シェア… + タグ別 + 人別 + 名前を追加してください + リンク アドレスをシェア + 画像を保存 + 画像をシェア + 外部ブラウザーで開く… + リンクアドレスをクリップボードへコピー + 画像のアドレスをクリップボードへコピー + + 画像を読み込むことができません + + スクリーン ショットを保存するために、\"ストレージのアクセス許可\" を付与する必要があります。その後、完全にアプリを閉じるか、携帯電話を再起動する必要があります。ストレージへのアクセスを許可しないで、後でスクリーン ショット機能を使用する場合は、後でアクセス許可を付与することができます。その場合: システム設定 - アプリ - dandelion* を開いて、アクセス許可のセクションで、\"ストレージの書き込みアクセス許可\" を付与することができます。 + 画像を保存/アップロードするために、\"ストレージのアクセス許可\" を付与する必要があります。その後、完全にアプリを閉じるか、携帯電話を再起動する必要があります。ストレージへのアクセスを許可しないで、後で画像を保存したい場合は、後でアクセス許可を付与することができます。その場合: システム設定 - アプリ - dandelion* を開いて、アクセス許可のセクションで、\"ストレージの書き込みアクセス許可\" を付与することができます。 + アクセスが拒否されました。 + アクセスを許可しました。もう一度やり直してください。 + カスタム ポッド + ポッド名 + プロトコル + ポッドのアドレス + 値がありません + ストリームの最後に訪れたページに移動しますか? + メイン画面のステータスバーを非表示にします + ステータスバーを非表示 + メインビューにタイトルを表示します + タイトルを表示 + + アプリについて + ライセンス + デバッグ + アプリケーション + デバイス + ダイアスポラ* ポッド + デバッグログ + デバッグ ログ (詳細) + アプリバージョン: %1$s + Android バージョン: %1$s + デバイス名: %1$s + コード名: %1$s + ポッドプロファイル名: %1$s + ポッドドメイン: %1$s + デバッグログをクリップボードにコピーしました + dandelion* は、ソーシャル ネットワーク diaspora* をブラウジングするためのコンパニオン アプリです。便利なツールバーや Tor のようなプロキシ サーバーのサポートなどの機能を追加して、ソーシャル体験することができます。 + コードを貢献! + dandelion* は自由にフリーで開発され、diaspora* プロジェクトのアイデアをフォローしています。貢献したい場合は、どうぞ! 現在私たちは、非常に小規模なチームなので、あらゆる種類の支援に感謝申し上げます! + ソースを取得 + アプリを翻訳! + アプリがお使いの言語で利用できませんか? それを変更することができます! 翻訳して私たちを支援しませんか? Crowdin プラットフォームを使用して、誰でもアプリケーションを翻訳できるようにしています。 + 翻訳させてください + フィードバックする! + dandelion* はまだ開発中なので、提案や何かフィードバックがあれば、私たちのバグ追跡システムにご連絡ください! + バグを報告 + みんなに広めよう! + diaspora* と #dandelion について家族や友人に広めてください! あなたの体験についてブログしませんか? 私たちにあなたからの話を聞かせてください! + アプリを共有 + やあ! #dandelion をチェックしてください! %1$s + + メンテナンススタッフ + 現在、このアプリは以下の人によって開発およびメンテナンスされています <br><br>%1$s + 貢献者 + %1$s<br><br>ありがとうございます! + GNU GPLv3+ ライセンス + サードパーティ ライブラリー + 以下のライブラリーが使用されます: + LeafPic からいくつかのインスピレーションとコードを得ました。チェックしてみてください。同様のフリーソフトウェアです! + さらに詳しく + + + + 上部ツールバーでストリームを読み込み + 上部ツールバーの空白部分をクリックして、ストリームを開きます。 + + 外観 + ネットワーク + ポッドの設定 + 操作性 + + + ナビゲーション スライダー + ナビゲーションドロワー内のエントリーの表示を制御します + ユーザー + 一般 + 管理 + + テーマと色 + アプリ全体で使用される色を制御します + プライマリ色 + ツールバーの色 + アクセント色 + プログレスバーの色 + AMOLED モード + アプリの多くの部分を AMOLED フレンドリーな黒色の表示で上書きします。この設定を切り替えるには再起動する必要があります。ダイアスポラ* を暗く参照するには、ダイアスポラ* の個人アカウント設定にある、ダークテーマをアクティブにする必要があります。 + + 拡張通知 + 通知のカテゴリーを示すドロップダウン・メニューで通知ベルを拡張します + このアプリの言語を変更します。アプリを再起動すると変更を反映します + 言語 + システム言語 + + WebView のテキストサイズを調整 + フォントサイズ + 標準 + + 巨大 + + 画像の読み込み + 安全なモバイルデータのため、画像の読み込みを無効にします + + 画面の回転 + 画面の自動回転をコントロール + デフォルト + センサー\n(システムの設定を無視) + ポートレート (縦向き) + ランドスケープ (横向き) + + Tor プリセットを読み込む + Tor (Orbot) HTTP プロキシのプロキシ設定を読み込みます + プロキシ + プロキシを有効にする + dandelion* の通信をプロキシして、ファイアウォールに回避します。\n再起動が必要になることがあります + ホスト + ポート + プロキシの使用を無効にするには、アプリを再起動する必要があります + Orbot プロキシのプリセットを読み込みました + + Chrome のカスタム タブで外部リンクを開きます。この機能は Chromium または Google Chrome をインストールする必要があります。\n重要な注意: Chrome のカスタム タブは構成されているプロキシ サーバーを使用しません! + + 個人用設定 + diaspora* アカウント設定を開きます + 連絡先リストを管理します + ハッシュタグを管理 + すでにフォローしているハッシュタグのフォローをやめます + アカウントを変更 + ローカルのセッション データを消去し、別の diaspora* ポッド/アカウントに切り替えます + すべてのクッキーとセッション データが消去されます。アカウントを変更してもよろしいですか? + キャッシュをクリア + WebView のキャッシュをクリアします + スクロールの間、自動的に上部と下部のツールバーを非表示にします + Intellihide ツールバー + シェア方法の通知を追加 + 共有テキストにこのアプリへの参照を追加します: [via #dandelion] + + その他 + 完全なリセット + すべてのアカウントから、アプリとログアウトに関連するすべての設定をローカルで消去します + これはアプリの変更された設定をすべてデフォルトにリセットして、すべてのポッドからログアウトします。ダウンロードした画像はそのまま残ります。続行してもよろしいですか? + 基本 AdBlocker を有効にします。広告は、埋め込みビューなどに含まれることがあります + 広告をブロック diff --git a/app/src/main/res/values-kab/strings-about.xml b/app/src/main/res/values-kab/strings-about.xml deleted file mode 100644 index 0bd06713..00000000 --- a/app/src/main/res/values-kab/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Γef - Turagt - Tamseɣtayt - Asnas - Ibenk - diaspora* Pod - Aɣmis n temseɣtayt - Aɣmis n temseɣtayt (Verbose) - Lqem n usnas: %1$s - Lqem Android: %1$s - Isem n yibenk: %1$s - Isem n tengalt: %1$s - Isem n umaɣnu n upud: %1$s - Tansa n upud: %1$s - Aɣmis n temseqtayt yettwaneɣlen ɣef afus - dandelion* d asnas-ik amdakel i tunigin deg uẓeṭṭa n tmetti diaspora*. Ad yernu timahilin am ifecka iwulmen akked usefrek n iqeddacen ipṛuksiyen am uẓeṭṭa Tor ar tarimit-ik n tmetti. - Ttekki di tengalt! - dandelion* d ilelli, udiɣ yeṭṭafaṛ tiktiwin n useɣzan diaspora*. Ma tebɣiḍ ad tettekkiḍ, Iya-d! Akka tura, nekni d tarbaɛt meẓẓiyen, ihi ad nebɣu yal anaw n tallelt! - Awi aɣbalu - Suqel asnas! - Asnas ulac-it s tutlayt-ik? Tzemreḍ ad tbeddleḍ ayagi! Acuɣer ur tettmudduḍ ara afus di tsuqilt-is? nseqdac asmel Crowdin akken ad nermed i yal yiwen ad isuqel asnas. - Eǧǧ-iyi ad suqleɣ - Mudd-d tikti! - dandelion* yezga di tneflit, ihi ma ɣur-k isumar neɣ yal tikti, seqdec aneḍfaṛ nneɣ n ibugen akken ad tazneḍ! - Azen ibugen - Siqeḍ awal! - Meslay i yimdukal-ik akked twacult-ik ɣef diaspora* d #dandelion! Acuɣer ur tettmaeslayeḍ ara deg iblugen ɣef aya? Nebɣa ad nsel kra sɣur-k! - Bḍu asnas - Hey! Senqed #dandelion! %1$s - - Wid yettseggimen - Asnas-agi yezga di tneflit akked useggem sɣru <br><br>%1$s - Iwiziwen - %1$s<br><br>Tanemmirt! - Turagt GNU GPLv3+ - Tinedlisin tis kraḍ - Tinedlisin-agi ttwaseqdacent: - Newwi kra n tiktiwin akked tengat si LeafPic. Duu ad ten-twaliḍ. D aseɣẓan ilellil! - Ini-yid ugar - diff --git a/app/src/main/res/values-kab/strings-preferences.xml b/app/src/main/res/values-kab/strings-preferences.xml deleted file mode 100644 index 6ffe1dce..00000000 --- a/app/src/main/res/values-kab/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Afeggag n ufella yessalay-d asuddem - Sit ɣef tallunt tilemt n ufella akken ad d-ldiḍ asuddem - - Udem - Aẓeṭṭa - Iɣewwaṛen Pod - Tasnemhelt - - - Taḥnaccaḍt n iminig - Ad iqareɛ askan n inekcam deg ugalis n tunigin - Aseqdac - Amatu - Anedbal - - Isental d yiniten - Ad iqareɛ initen yettwasqedcen i usnas - Ini amezwaru - Ini n ufeggag n ifecka - Ini asnawan - Ini n ufeggag n usfari - Askar AMOLED - Semselsi initen s uberkan yemṣadan d uskan AMOLED, ɣef ddeqs n yiḥricen n usnas. Akken ad tinigeḍ di diaspora* s sukan ubrik, tzemreḍ daɣen ad tesqedceḍ asentel Aberkan, win ara tafeḍ deg iɣewwaṛen-ik udmawanen n umiḍan-ik diaspora*. - - Ilɣa n usiɣzef - Siɣzef nnaqus n ilɣa s umuɣ n udrurem ara d-iseknen taggayin n ulɣu - Snifel tutlayt n usnas-agi. Ales tanekra n usnas akken ad tbeddel tutlayt - Tutlayt - Tutlayt n unagraw - - Ad iqareɛ teɣzi n uḍris i uskan Web - Teɣzi n tsefsit - Amagnu - Hraw - Meqqer - - Sali-d tugniwin - Sens abeddel n tugniwin akken ad tḥerzeḍ isefka n uziraz - - Tuzya n ugdil - Tuzya tawurmant n ugdil - Amezwer - Amaṭṭaf\n(ad yezgel iɣewwaṛen n unagraw) - S teɣzi - S tehri - - Sali-d tawila tuzwirt Tor - Sali-d iɣewwaṛen n upṛuksi i upṛuksi HTTP Tor (Orbot) - Apṛuksu - Rmed apṛuksi - Apṛuksi i dandelion* akken ur tseqdaceḍ ara aɣrab n tmes.\nIzmer ilaq-ak tulsa n tnekra. - Asenneftaɣ - Tawwurt - Asnas yesra ad yales tanekra akken ad isens aseqdec n upṛuksi - Aseggem uzwir n upṛuksi Orbot i d-yulin - - Ldi iseɣwan izɣrayen s Chrome Custom Tabs. Chromium neɣ Google Chrome yessefk ad yebded i useqdec n tmahilt-agi. \nTAMAWT TAXATERT: Chrome Custom Tabs ur iseqdac ara iqeddacen ipṛuksiyen ibedden! - - Iɣewwaṛen udmawanen - Ldi iɣewwaṛen-ik n umiḍan diaspora* - Sefrek tabdart-ik n unermes - Sefrek Hashtag - Ur ṭṭafaṛ ara hashtag-agi - Beddel amiḍan - Sfeḍ isefka n tɣimit idiganen sakin ddu ar upud/amiḍan nniḍen diaspora* - Tamhelt-agi ad tsewḥel inagan n tuqqna akked isefka n tɣimit. Tebɣiḍ ad tbeddleḍ amiḍan? - Sfeḍ tuffirt - Sfeḍ tuffirt n WebView - Ad yeffer ifeggagen n ifecka n ufella d wadda s wudem awurman deg udrurem - Ffer afeggag n ifecka - Rnu yebḍa s tikti - Rnu tamsisɣelt ar usnas-agi i beṭṭu: [s #dandelion] - - Ayen nniḍen - Tulsa n uwennez ummid - Ad yesfeḍ s wudem adigan akk iɣewwaṛen icudden ar usnas sakin ad yekkes si tuqqna akk imiḍanen - Ayagi ad yales awennez n ibeddilen meṛṛa ar wazalen-nsen n tazwara sakin ad isuffeɣ si tuqqna akk ipuden. Tugniwin-ik yudren ad qqiment akken llant. Tebɣiḍ ad tkemmleḍ? - Rmd amsewḥal n udellel. Adelle yezmer ad ddunt, m.d. deg tmeẓriyin tusliɣin - Sewḥel adellel - diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 4e6fe374..4cfd6acb 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -1,80 +1,201 @@ - - - Smiren - - Iɣewwaṛen - Ilɣa - Idiwenniyen - Agdil - Amaɣnu - Udmawen - Irmuden - Aḥemmel - Yettuwennet - Tummliwin - Azayez - Nadi - Inermisen - Amaynut - Tidaddanin - - Meṛṛa ilɣa - Iwennet daɣen - Iwenniten ɣef yizen - Aḥemmel - Tummliwin - Yules beṭṭu - Yebda beṭṭu - - Tuccḍa: Ur iemir ara ad d-yawi tabdart n ipoden! - Suref-aɣ, yessefk ad teqqneḍ ar Internet akken ad tkemmleḍ - Asentem - Tebɣiḍ ad teffɣeḍ? - - Ugar - Ɣef | Tallelt - Tibzimin yettwaḍefren - Irmuden izuyaz - Ineqqisen - Bḍu aseɣwen am uḍris - Bḍu tuṭṭfa n ugdil n usmel web - Ṭṭef agdil n usmel web - Asekles n tugna ar - Asekles n tuṭṭfa s yisem: - Aseɣwen yettwanɣel… - Izen n uɣrab amaynut - Ddu ar usnas - Anadi s tebqzimin neɣ s imdanen - Ffeɣ seg usnas - Rmed/Sens timeẓri aselkim/aziraz - Bḍu… - s tebzimin - s imdanen - Rnu isem - Bḍu tansa n useɣwen - Sekles tugna - Bḍu tugna - Ldi deg iminig azɣaray… - Nɣel aseɣwen ɣef afus - Nɣel tugna ɣef afus - - Ur izmir ara ad d-isali tugna - - Yessefk ad tmuddeḍ tasiregt \"Snifel neɣ kkes agbur di tkarḍa Sd \" akken ad teskelseḍ tuṭṭfiwin n ugdil. Sakin, yessefk ad tmedleḍ asnas neɣ ad talseḍ tanekra n tiliɣri-ik. Ma yella ur tmuddeḍ ara tasiregt n unelcum ar umḍiq n usekles acu kan tebɣiḍ ad tesqedceḍ tamahilt n tuṭṭfa n ugdil ar zdat, yessefk ad tmuddeḍ tasiregt ticki. Ma ulac aṣili ldi: Iɣewwaren - isnasen - dandelion*. Di tgezmi Tisirag, yessefk ad tmuddeḍ tasiregt \"Snifel neɣ kkes agbur n tkarḍa Sd\". - Yessefk ad tmuddeḍ tasiregt \"Mudd tisirag n usekles \" akken ad teskelseḍ/ad tessaliḍ + + Smiren + + Iɣewwaṛen + Ilɣa + Idiwenniyen + Agdil + Amaɣnu + Udmawen + Irmuden + Aḥemmel + Yettuwennet + Tummliwin + Azayez + Nadi + Inermisen + Amaynut + Tidaddanin + + Meṛṛa ilɣa + Iwennet daɣen + Iwenniten ɣef yizen + Aḥemmel + Tummliwin + Yules beṭṭu + Yebda beṭṭu + + Tuccḍa: Ur iemir ara ad d-yawi tabdart n ipoden! + Suref-aɣ, yessefk ad teqqneḍ ar Internet akken ad tkemmleḍ + Asentem + Tebɣiḍ ad teffɣeḍ? + + Ugar + Ɣef | Tallelt + Tibzimin yettwaḍefren + Irmuden izuyaz + Ineqqisen + Bḍu aseɣwen am uḍris + Bḍu tuṭṭfa n ugdil n usmel web + Ṭṭef agdil n usmel web + Asekles n tugna ar + Asekles n tuṭṭfa s yisem: + Aseɣwen yettwanɣel… + Izen n uɣrab amaynut + Ddu ar usnas + Anadi s tebqzimin neɣ s imdanen + Ffeɣ seg usnas + Rmed/Sens timeẓri aselkim/aziraz + Bḍu… + s tebzimin + s imdanen + Rnu isem + Bḍu tansa n useɣwen + Sekles tugna + Bḍu tugna + Ldi deg iminig azɣaray… + Nɣel aseɣwen ɣef afus + Nɣel tugna ɣef afus + + Ur izmir ara ad d-isali tugna + + Yessefk ad tmuddeḍ tasiregt \"Snifel neɣ kkes agbur di tkarḍa Sd \" akken ad teskelseḍ tuṭṭfiwin n ugdil. Sakin, yessefk ad tmedleḍ asnas neɣ ad talseḍ tanekra n tiliɣri-ik. Ma yella ur tmuddeḍ ara tasiregt n unelcum ar umḍiq n usekles acu kan tebɣiḍ ad tesqedceḍ tamahilt n tuṭṭfa n ugdil ar zdat, yessefk ad tmuddeḍ tasiregt ticki. Ma ulac aṣili ldi: Iɣewwaren - isnasen - dandelion*. Di tgezmi Tisirag, yessefk ad tmuddeḍ tasiregt \"Snifel neɣ kkes agbur n tkarḍa Sd\". + Yessefk ad tmuddeḍ tasiregt \"Mudd tisirag n usekles \" akken ad teskelseḍ/ad tessaliḍ tiwlafin. Sakin, yessefk ad tmedleḍ asnas neɣ ad talseḍ tanekra n tiliɣri-ik. Ma yella ur tmuddeḍ ara tasiregt n unekcum ar umḍiq n usekles acu kan tebɣiḍ ad tesqedceḍ tamahilt n tuṭṭfa n ugdil ar zdat, yessefk ad tmuddeḍ tasiregt ticki. Ma ulac aṣili ldi: Iɣewwaren - isnasen - dandelion*. Di tgezmi Tisirag, yessefk ad tmuddeḍ tasiregt \"Tisiragt n usekles n tira\". - Tasiregt tettwagi. - Tasiregt tettunefk. Ɛreḍ tikelt nniḍen. - Apod udmawan - Isem n upod - Aneggaf - Tansa n upod - Azal yettwazgel - Ddu ar usebter aneggaru yettwarzan deg usuddem? - Ffer afeggag n waddad di tmeẓri tagejdant - Ffer afeggag n waddad + Tasiregt tettwagi. + Tasiregt tettunefk. Ɛreḍ tikelt nniḍen. + Apod udmawan + Isem n upod + Aneggaf + Tansa n upod + Azal yettwazgel + Ddu ar usebter aneggaru yettwarzan deg usuddem? + Ffer afeggag n waddad di tmeẓri tagejdant + Ffer afeggag n waddad + + Γef + Turagt + Tamseɣtayt + Asnas + Ibenk + diaspora* Pod + Aɣmis n temseɣtayt + Aɣmis n temseɣtayt (Verbose) + Lqem n usnas: %1$s + Lqem Android: %1$s + Isem n yibenk: %1$s + Isem n tengalt: %1$s + Isem n umaɣnu n upud: %1$s + Tansa n upud: %1$s + Aɣmis n temseqtayt yettwaneɣlen ɣef afus + dandelion* d asnas-ik amdakel i tunigin deg uẓeṭṭa n tmetti diaspora*. Ad yernu timahilin am ifecka iwulmen akked usefrek n iqeddacen ipṛuksiyen am uẓeṭṭa Tor ar tarimit-ik n tmetti. + Ttekki di tengalt! + dandelion* d ilelli, udiɣ yeṭṭafaṛ tiktiwin n useɣzan diaspora*. Ma tebɣiḍ ad tettekkiḍ, Iya-d! Akka tura, nekni d tarbaɛt meẓẓiyen, ihi ad nebɣu yal anaw n tallelt! + Awi aɣbalu + Suqel asnas! + Asnas ulac-it s tutlayt-ik? Tzemreḍ ad tbeddleḍ ayagi! Acuɣer ur tettmudduḍ ara afus di tsuqilt-is? nseqdac asmel Crowdin akken ad nermed i yal yiwen ad isuqel asnas. + Eǧǧ-iyi ad suqleɣ + Mudd-d tikti! + dandelion* yezga di tneflit, ihi ma ɣur-k isumar neɣ yal tikti, seqdec aneḍfaṛ nneɣ n ibugen akken ad tazneḍ! + Azen ibugen + Siqeḍ awal! + Meslay i yimdukal-ik akked twacult-ik ɣef diaspora* d #dandelion! Acuɣer ur tettmaeslayeḍ ara deg iblugen ɣef aya? Nebɣa ad nsel kra sɣur-k! + Bḍu asnas + Hey! Senqed #dandelion! %1$s + + Wid yettseggimen + Asnas-agi yezga di tneflit akked useggem sɣru <br><br>%1$s + Iwiziwen + %1$s<br><br>Tanemmirt! + Turagt GNU GPLv3+ + Tinedlisin tis kraḍ + Tinedlisin-agi ttwaseqdacent: + Newwi kra n tiktiwin akked tengat si LeafPic. Duu ad ten-twaliḍ. D aseɣẓan ilellil! + Ini-yid ugar + + + + Afeggag n ufella yessalay-d asuddem + Sit ɣef tallunt tilemt n ufella akken ad d-ldiḍ asuddem + + Udem + Aẓeṭṭa + Iɣewwaṛen Pod + Tasnemhelt + + + Taḥnaccaḍt n iminig + Ad iqareɛ askan n inekcam deg ugalis n tunigin + Aseqdac + Amatu + Anedbal + + Isental d yiniten + Ad iqareɛ initen yettwasqedcen i usnas + Ini amezwaru + Ini n ufeggag n ifecka + Ini asnawan + Ini n ufeggag n usfari + Askar AMOLED + Semselsi initen s uberkan yemṣadan d uskan AMOLED, ɣef ddeqs n yiḥricen n usnas. Akken ad tinigeḍ di diaspora* s sukan ubrik, tzemreḍ daɣen ad tesqedceḍ asentel Aberkan, win ara tafeḍ deg iɣewwaṛen-ik udmawanen n umiḍan-ik diaspora*. + + Ilɣa n usiɣzef + Siɣzef nnaqus n ilɣa s umuɣ n udrurem ara d-iseknen taggayin n ulɣu + Snifel tutlayt n usnas-agi. Ales tanekra n usnas akken ad tbeddel tutlayt + Tutlayt + Tutlayt n unagraw + + Ad iqareɛ teɣzi n uḍris i uskan Web + Teɣzi n tsefsit + Amagnu + Hraw + Meqqer + + Sali-d tugniwin + Sens abeddel n tugniwin akken ad tḥerzeḍ isefka n uziraz + + Tuzya n ugdil + Tuzya tawurmant n ugdil + Amezwer + Amaṭṭaf\n(ad yezgel iɣewwaṛen n unagraw) + S teɣzi + S tehri + + Sali-d tawila tuzwirt Tor + Sali-d iɣewwaṛen n upṛuksi i upṛuksi HTTP Tor (Orbot) + Apṛuksu + Rmed apṛuksi + Apṛuksi i dandelion* akken ur tseqdaceḍ ara aɣrab n tmes.\nIzmer ilaq-ak tulsa n tnekra. + Asenneftaɣ + Tawwurt + Asnas yesra ad yales tanekra akken ad isens aseqdec n upṛuksi + Aseggem uzwir n upṛuksi Orbot i d-yulin + + Ldi iseɣwan izɣrayen s Chrome Custom Tabs. Chromium neɣ Google Chrome yessefk ad yebded i useqdec n tmahilt-agi. \nTAMAWT TAXATERT: Chrome Custom Tabs ur iseqdac ara iqeddacen ipṛuksiyen ibedden! + + Iɣewwaṛen udmawanen + Ldi iɣewwaṛen-ik n umiḍan diaspora* + Sefrek tabdart-ik n unermes + Sefrek Hashtag + Ur ṭṭafaṛ ara hashtag-agi + Beddel amiḍan + Sfeḍ isefka n tɣimit idiganen sakin ddu ar upud/amiḍan nniḍen diaspora* + Tamhelt-agi ad tsewḥel inagan n tuqqna akked isefka n tɣimit. Tebɣiḍ ad tbeddleḍ amiḍan? + Sfeḍ tuffirt + Sfeḍ tuffirt n WebView + Ad yeffer ifeggagen n ifecka n ufella d wadda s wudem awurman deg udrurem + Ffer afeggag n ifecka + Rnu yebḍa s tikti + Rnu tamsisɣelt ar usnas-agi i beṭṭu: [s #dandelion] + + Ayen nniḍen + Tulsa n uwennez ummid + Ad yesfeḍ s wudem adigan akk iɣewwaṛen icudden ar usnas sakin ad yekkes si tuqqna akk imiḍanen + Ayagi ad yales awennez n ibeddilen meṛṛa ar wazalen-nsen n tazwara sakin ad isuffeɣ si tuqqna akk ipuden. Tugniwin-ik yudren ad qqiment akken llant. Tebɣiḍ ad tkemmleḍ? + Rmd amsewḥal n udellel. Adelle yezmer ad ddunt, m.d. deg tmeẓriyin tusliɣin + Sewḥel adellel diff --git a/app/src/main/res/values-kn/strings-about.xml b/app/src/main/res/values-kn/strings-about.xml deleted file mode 100644 index fbfaeba0..00000000 --- a/app/src/main/res/values-kn/strings-about.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - Debug Log (Verbose) - - diff --git a/app/src/main/res/values-ml/strings-about.xml b/app/src/main/res/values-ml/strings-about.xml deleted file mode 100644 index ef8e4258..00000000 --- a/app/src/main/res/values-ml/strings-about.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - കുറിച്ച് - ലൈസൻസ് - തെറ്റു കണ്ടുപിടിക്കുക - ആപ്പ്ളിക്കേഷൻ - ഉപകരണം - diaspora* പോഡ് - തിരുത്തിയ തെറ്റുകളുടെ പട്ടിക - തിരുത്തിയ തെറ്റുകൾ (വേർബോസ്) - ആപ്പ് വേർഷൻ: %1$s - ആൻഡ്രോയ്ഡ് വേർഷൻ: %1$s - ഉപകരണത്തിന്റെ പേര്:%1$s - കോഡ്നെയിം: %1$s - - താഴെ പറഞ്ഞിരിക്കുന്ന ലൈബ്രറികൾ ഉപയോഗിച്ചിരിക്കുന്നു: - ഞങ്ങൾ ചില കോഡുകൾ കടമെടുത്തതും പ്രചോദനമായതും ലീഫ്പിക് ഇൽ നിന്നാണ്. ഒന്നു പരിശോധിക്കൂ.. അതും സ്വതന്ത്ര സോഫ്റ്റ്‌വേർ ആണ്! - വിശദീകരിക്കുക - diff --git a/app/src/main/res/values-ml/strings-preferences.xml b/app/src/main/res/values-ml/strings-preferences.xml deleted file mode 100644 index 2c2b83c3..00000000 --- a/app/src/main/res/values-ml/strings-preferences.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - മുകളിലെ ടൂൾബാർ സ്‌ട്രീം ലോഡ് ചെയ്യുന്നു - ടൂൾബാറിലെ ഒഴിഞ്ഞ സ്ഥലത്തു ക്ലിക്ക് ചെയ്തു സ്‌ട്രീം തുറക്കുക - - രൂപം - ശൃംഖല - പോഡ് ക്രമീകരണങ്ങൾ - പ്രവർത്തിക്കുവാൻ കഴിയുന്നത് - - - നാവിഗേഷൻ സ്ലൈഡർ - നാവിഗേഷൻ വലിപ്പിലെ രേഖപ്പെടുത്തലുകളുടെ കാഴ്ച്ച നിയന്ത്രിക്കുക - ഉപയോക്താവ് - പൊതു - അഡ്മിൻ - - തീമും നിറവും - ആപ്പിൽ മൊത്തമായി ഉപയോഗിക്കുന്ന നിറങ്ങൾ ക്രമീകരിക്കുക - പ്രധാന നിറം - ടൂൾബാറുകളുടെ നിറം - എടുത്തുകാണിക്കുന്ന നിറം - പ്രോഗ്രസ് ബാറിന്റെ നിറം - അമോൾഡ് മോഡ് - അമോലെഡ് ഡിസ്പ്ലേ സൗഹൃദമായ കറുപ്പ് നിറം ആപ്പിന്റെ പല ഭാഗങ്ങളിലും മറ്റു നിറങ്ങളെ മറികടക്കും. ഈ ക്രമീകരണം മാറ്റുവാൻ ആപ്പ് വീണ്ടും തുറക്കേണ്ടി വരും. നിങ്ങളുടെ സ്വകാര്യ ഡയസ്പോറ* അകൗണ്ട് ക്രമീകരണങ്ങളിലെ ഇരുണ്ട തീം പ്രയോഗിച്ചാൽ ഡയസ്പോറ* നിങ്ങൾക്ക് ഇരുണ്ട പശ്ചാത്തലത്തിൽ ഉപയോഗിക്കാം. - - വ്യാപിപ്പിച്ച വിജ്ഞാപനങ്ങൾ - വിജ്ഞാപന വിഭാഗങ്ങൾ കാണിക്കുന്ന താഴേക്ക് വലിക്കാവുന്ന മെനുവിൽ വിജ്ഞാപന മണി വലുതാക്കുക - ആപ്പിന്റെ ഭാഷ മാറ്റുക. മാറ്റം ഫലപ്രദമാകുവാൻ ആപ്പ് വീണ്ടും തുറക്കുക - ഭാഷ - സിസ്റ്റത്തിലെ ഭാഷ - - വെബ്‌വ്യൂ അക്ഷരങ്ങളുടെ വലിപ്പം നിയന്ത്രിക്കുക - അക്ഷരങ്ങളുടെ വലിപ്പം - സാധാരണ - വലിയ - ഭീമാകാരമായ - - ചിത്രങ്ങൾ ലോഡ് ചെയ്യുക - ചിത്രം ലോഡ് ചെയ്യുന്നത് മാറ്റുക. ഉദാ:- മൊബൈൽ ഡാറ്റാ ലഭിക്കുന്നതിനായി - - സ്‌ക്രീൻ കറക്കുക - തനിയെ സ്‌ക്രീൻ ചുറ്റുന്നത് നിയന്ത്രിക്കുക - സ്വതേ ഉള്ള മൂല്യം - സെൻസർ\n (സിസ്റ്റം ക്രമീകരണങ്ങളെ അവഗണിക്കുക) - പോർട്രൈറ്റ് - ലാൻസ്‌കേപ് - - ടോറിൽ മുൻകൂറായി രേഖപ്പെടുത്തിയ മൂല്യങ്ങൾ ലോഡ് ചെയ്യുക - ടോർ (ഓർബോട്ട്) HTTP പ്രോക്സി ക്രമീകരണങ്ങൾ ലോഡ് ചെയ്യുക - പ്രോക്സി - പ്രോക്സി പ്രയോഗിക്കുക - ഹോസ്റ്റ് - പോർട്ട് - പ്രോക്സി ഉപയോഗം പ്രവർത്തനരഹിതമാക്കുവാൻ ആപ്പ് വീണ്ടും തുറക്കുക - മുൻകൂറായി ഉണ്ടായിരുന്ന ഓർബോട്ട് പ്രോക്സി ലോഡ് ചെയ്തു - - പുറമെയുള്ള ലിങ്കുകൾ ക്രോം കസ്റ്റം ടാബിൽ തുറക്കുക. ക്രോമിയം അല്ലെങ്കിൽ ഗൂഗിൾ ക്രോം ഈ സൗകര്യം ലഭിക്കുന്നതിനായി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കണം. -\n പ്രധാന അറിയിപ്പ്: ക്രമീകരിച്ച പ്രോക്സി സെർവറുകൾ ക്രോം കസ്റ്റം ടാബുകൾ ഉപയോഗിക്കാറില്ല! - - സ്വകാര്യ ക്രമീകരണങ്ങൾ - നിങ്ങളുടെ ഡയസ്പോറ* അക്കൗണ്ട് ക്രമീകരണങ്ങൾ തുറക്കുക - നിങ്ങളുടെ സമ്പർക്കങ്ങളുടെ പട്ടിക കൈകാര്യം ചെയ്യുക - ഹാഷ്ടാഗുകൾ കൈകാര്യം ചെയ്യുക - പിന്തുടർന്ന് വന്ന ഹാഷ്ടാഗുകൾ പിന്തുടരാതിരിക്കുക - അക്കൗണ്ട് മാറ്റുക - പ്രാദേശികമായ സെഷൻ ഡാറ്റ മായ്ച്ച ശേഷം മറ്റൊരു ഡയസ്പോറ* പോഡ്/അക്കൗണ്ട് ലേക്ക് മാറുക - മുകളിലെയും ചുവട്ടിലെയും ടൂൾബാറുകൾ സ്ക്രോൾ ചെയ്യുമ്പോൾ താനേ അപ്രത്യക്ഷമാക്കുക - - ലളിതമായ ആഡ്ബ്ലോക്കർ സജ്ജമാക്കുക. പരസ്യങ്ങൾ ചിലപ്പോൾ ഉൾപ്പെടാം. ഉദാ: എംബെഡ്ഡ് ചെയ്‌ത കാഴ്ചയിൽ - പരസ്യങ്ങൾ തടയുക - diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index bb300a60..706bf460 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,75 +1,163 @@ - - - വീണ്ടും ലോഡ് ചെയ്യുക - - ക്രമീകരണങ്ങൾ - അറിയിപ്പുകൾ - സംഭാഷണങ്ങൾ - സ്‌ട്രീം - പ്രൊഫൈൽ - ഭാവങ്ങൾ - പ്രവർത്തനങ്ങൾ - ലൈക്ക് ചെയ്തു - അഭിപ്രായം പ്രകടിപ്പിച്ചു - പ്രസ്താവനകൾ - പൊതു - തിരയുക - സമ്പർക്കങ്ങൾ - അടയാളപ്പെടുത്തിയ മാറ്റങ്ങൾ - സ്ഥിതിവിവരക്കണക്ക് - - എല്ലാ അറിയിപ്പുകളും - അഭിപ്രായപ്പെട്ടു - പോസ്റ്റിൽ അഭിപ്രായപ്പെടുക - ലൈക്ക് ചെയ്തു - പ്രസ്താവിച്ചു - വീണ്ടും ഷെയർ ചെയ്തു - ഷെയർ ചെയ്യാൻ തുടങ്ങി - - പിഴവ്: പോഡുകളുടെ പട്ടിക പുതുക്കുവാൻ കഴിയുന്നില്ല! - ക്ഷമിക്കുക, നിങ്ങൾക്ക് മുന്നോട്ട് പോകുവാൻ ഇന്റർനെറ്റ് ബന്ധം ആവശ്യമാണ് - ഉറപ്പാക്കൽ - നിങ്ങൾക്ക് പുറത്തുകടക്കണോ? - - കൂടുതൽ - അതേക്കുറിച്ചു | സഹായം - പിന്തുടർന്ന ടാഗുകൾ - പൊതു പ്രവർത്തനങ്ങൾ - റിപ്പോർട്ടുകൾ - ലിങ്ക് ടെക്സ്റ്റായി പങ്കുവയ്ക്കുക - വെബ്‌പേജിന്റെ സ്ക്രീൻഷോട്ട് പങ്കുവയ്ക്കുക - വെബ്‌പേജിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കുക - ചിത്രം സംരക്ഷിക്കേണ്ട സ്ഥലം - സ്ക്രീൻഷോട്ട് സംരക്ഷിക്കേണ്ട ഫോർമാറ്റ്: - ലിങ്കിന്റെ വിലാസം പകർത്തി… - പുതിയ പോസ്റ്റ് - മുകളിലേക്ക് പോകുക - ടാഗുകളെയോ വ്യക്തികളെയോ തിരയുക - ആപ്പിന് പുറത്തുകടക്കുക - മൊബൈൽ/ഡെസ്ക്ടോപ്പ് വ്യൂവിലേക്ക് മാറുക - പങ്കുവയ്ക്കുക… - ടാഗുകളെ - ആളുകളെ - പേര് ചേർക്കുക - ലിങ്ക് വിലാസം പങ്കുവയ്ക്കുക - ചിത്രം സംരക്ഷിക്കുക - ചിത്രം പങ്കുവയ്ക്കുക - പുറമെയുള്ള ബ്രൗസറിൽ തുറക്കുക… - ലിങ്ക് വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക - ചിത്രത്തിന്റെ വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക - - ചിത്രം ലോഡ് ചെയ്യാൻ സാധിക്കുന്നില്ല - - സ്ക്രീന്ഷോട്ടുകൾ സംരക്ഷിക്കാൻ \"സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുമതി\" നിങ്ങൾ നൽകണം. അതിനു ശേഷം ഈ ആപ്പ് പൂർണമായും അടയ്ക്കുകയോ ഉപകരണം വീണ്ടും തുടങ്ങുകയോ ചെയ്യുക. ഇനി നിങ്ങൾക്ക് സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുവാദം തരാൻ പറ്റാതിരിക്കുകയും പക്ഷെ പിന്നീട് സ്ക്രീൻഷോട്ട് ഉപയോഗിക്കുകയും ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് അനുവാദം പിന്നീട് നല്കാനാവും. അതിനായി സിസ്റ്റം ക്രമീകരണങ്ങൾ- ആപ്പുകൾ- ഡാൻഡേലിയൻ* തുറക്കുക. അതിൽ പെർമിഷൻ വിഭാഗത്തിൽ \"സ്റ്റോറേജിൽ എഴുതുവാനുള്ള അനുമതി\" നൽകുക. - ചിത്രങ്ങൾ സംരക്ഷിക്കാൻ/അപ്ലോഡ് ചെയ്യാൻ \"സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുമതി\" നിങ്ങൾ നൽകണം. അതിനു ശേഷം ഈ ആപ്പ് പൂർണമായും അടയ്ക്കുകയോ ഉപകരണം വീണ്ടും തുടങ്ങുകയോ ചെയ്യുക. ഇനി നിങ്ങൾക്ക് സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുവാദം തരാൻ പറ്റാതിരിക്കുകയും പക്ഷെ പിന്നീട് ചിത്രങ്ങൾ സംരക്ഷിക്കുകയും ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് അനുവാദം പിന്നീട് നല്കാനാവും. അതിനായി സിസ്റ്റം ക്രമീകരണങ്ങൾ- ആപ്പുകൾ- ഡാൻഡേലിയൻ* തുറക്കുക. അതിൽ പെർമിഷൻ വിഭാഗത്തിൽ \"സ്റ്റോറേജിൽ എഴുതുവാനുള്ള അനുമതി\" നൽകുക. - അനുമതി നിരസിച്ചിരിക്കുന്നു. - അനുമതി നൽകിയിരിക്കുന്നു. വീണ്ടും ശ്രമിക്കുക. - കസ്റ്റം പോഡ് - പോഡിന്റെ പേര് - പ്രോട്ടോകോൾ - പോഡ് വിലാസം - കാണാതായ മൂല്യം - സ്ട്രീമിലെ അവസാനമായി സന്ദർശിച്ച പേജിലേക്ക് പോകുക? + + വീണ്ടും ലോഡ് ചെയ്യുക + + ക്രമീകരണങ്ങൾ + അറിയിപ്പുകൾ + സംഭാഷണങ്ങൾ + സ്‌ട്രീം + പ്രൊഫൈൽ + ഭാവങ്ങൾ + പ്രവർത്തനങ്ങൾ + ലൈക്ക് ചെയ്തു + അഭിപ്രായം പ്രകടിപ്പിച്ചു + പ്രസ്താവനകൾ + പൊതു + തിരയുക + സമ്പർക്കങ്ങൾ + അടയാളപ്പെടുത്തിയ മാറ്റങ്ങൾ + സ്ഥിതിവിവരക്കണക്ക് + + എല്ലാ അറിയിപ്പുകളും + അഭിപ്രായപ്പെട്ടു + പോസ്റ്റിൽ അഭിപ്രായപ്പെടുക + ലൈക്ക് ചെയ്തു + പ്രസ്താവിച്ചു + വീണ്ടും ഷെയർ ചെയ്തു + ഷെയർ ചെയ്യാൻ തുടങ്ങി + + പിഴവ്: പോഡുകളുടെ പട്ടിക പുതുക്കുവാൻ കഴിയുന്നില്ല! + ക്ഷമിക്കുക, നിങ്ങൾക്ക് മുന്നോട്ട് പോകുവാൻ ഇന്റർനെറ്റ് ബന്ധം ആവശ്യമാണ് + ഉറപ്പാക്കൽ + നിങ്ങൾക്ക് പുറത്തുകടക്കണോ? + + കൂടുതൽ + അതേക്കുറിച്ചു | സഹായം + പിന്തുടർന്ന ടാഗുകൾ + പൊതു പ്രവർത്തനങ്ങൾ + റിപ്പോർട്ടുകൾ + ലിങ്ക് ടെക്സ്റ്റായി പങ്കുവയ്ക്കുക + വെബ്‌പേജിന്റെ സ്ക്രീൻഷോട്ട് പങ്കുവയ്ക്കുക + വെബ്‌പേജിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കുക + ചിത്രം സംരക്ഷിക്കേണ്ട സ്ഥലം + സ്ക്രീൻഷോട്ട് സംരക്ഷിക്കേണ്ട ഫോർമാറ്റ്: + ലിങ്കിന്റെ വിലാസം പകർത്തി… + പുതിയ പോസ്റ്റ് + മുകളിലേക്ക് പോകുക + ടാഗുകളെയോ വ്യക്തികളെയോ തിരയുക + ആപ്പിന് പുറത്തുകടക്കുക + മൊബൈൽ/ഡെസ്ക്ടോപ്പ് വ്യൂവിലേക്ക് മാറുക + പങ്കുവയ്ക്കുക… + ടാഗുകളെ + ആളുകളെ + പേര് ചേർക്കുക + ലിങ്ക് വിലാസം പങ്കുവയ്ക്കുക + ചിത്രം സംരക്ഷിക്കുക + ചിത്രം പങ്കുവയ്ക്കുക + പുറമെയുള്ള ബ്രൗസറിൽ തുറക്കുക… + ലിങ്ക് വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക + ചിത്രത്തിന്റെ വിലാസം ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുക + + ചിത്രം ലോഡ് ചെയ്യാൻ സാധിക്കുന്നില്ല + + സ്ക്രീന്ഷോട്ടുകൾ സംരക്ഷിക്കാൻ \"സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുമതി\" നിങ്ങൾ നൽകണം. അതിനു ശേഷം ഈ ആപ്പ് പൂർണമായും അടയ്ക്കുകയോ ഉപകരണം വീണ്ടും തുടങ്ങുകയോ ചെയ്യുക. ഇനി നിങ്ങൾക്ക് സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുവാദം തരാൻ പറ്റാതിരിക്കുകയും പക്ഷെ പിന്നീട് സ്ക്രീൻഷോട്ട് ഉപയോഗിക്കുകയും ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് അനുവാദം പിന്നീട് നല്കാനാവും. അതിനായി സിസ്റ്റം ക്രമീകരണങ്ങൾ- ആപ്പുകൾ- ഡാൻഡേലിയൻ* തുറക്കുക. അതിൽ പെർമിഷൻ വിഭാഗത്തിൽ \"സ്റ്റോറേജിൽ എഴുതുവാനുള്ള അനുമതി\" നൽകുക. + ചിത്രങ്ങൾ സംരക്ഷിക്കാൻ/അപ്ലോഡ് ചെയ്യാൻ \"സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുമതി\" നിങ്ങൾ നൽകണം. അതിനു ശേഷം ഈ ആപ്പ് പൂർണമായും അടയ്ക്കുകയോ ഉപകരണം വീണ്ടും തുടങ്ങുകയോ ചെയ്യുക. ഇനി നിങ്ങൾക്ക് സ്റ്റോറേജ് ഉപയോഗിക്കാനുള്ള അനുവാദം തരാൻ പറ്റാതിരിക്കുകയും പക്ഷെ പിന്നീട് ചിത്രങ്ങൾ സംരക്ഷിക്കുകയും ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് അനുവാദം പിന്നീട് നല്കാനാവും. അതിനായി സിസ്റ്റം ക്രമീകരണങ്ങൾ- ആപ്പുകൾ- ഡാൻഡേലിയൻ* തുറക്കുക. അതിൽ പെർമിഷൻ വിഭാഗത്തിൽ \"സ്റ്റോറേജിൽ എഴുതുവാനുള്ള അനുമതി\" നൽകുക. + അനുമതി നിരസിച്ചിരിക്കുന്നു. + അനുമതി നൽകിയിരിക്കുന്നു. വീണ്ടും ശ്രമിക്കുക. + കസ്റ്റം പോഡ് + പോഡിന്റെ പേര് + പ്രോട്ടോകോൾ + പോഡ് വിലാസം + കാണാതായ മൂല്യം + സ്ട്രീമിലെ അവസാനമായി സന്ദർശിച്ച പേജിലേക്ക് പോകുക? + + കുറിച്ച് + ലൈസൻസ് + തെറ്റു കണ്ടുപിടിക്കുക + ആപ്പ്ളിക്കേഷൻ + ഉപകരണം + diaspora* പോഡ് + തിരുത്തിയ തെറ്റുകളുടെ പട്ടിക + തിരുത്തിയ തെറ്റുകൾ (വേർബോസ്) + ആപ്പ് വേർഷൻ: %1$s + ആൻഡ്രോയ്ഡ് വേർഷൻ: %1$s + ഉപകരണത്തിന്റെ പേര്:%1$s + കോഡ്നെയിം: %1$s + + താഴെ പറഞ്ഞിരിക്കുന്ന ലൈബ്രറികൾ ഉപയോഗിച്ചിരിക്കുന്നു: + ഞങ്ങൾ ചില കോഡുകൾ കടമെടുത്തതും പ്രചോദനമായതും ലീഫ്പിക് ഇൽ നിന്നാണ്. ഒന്നു പരിശോധിക്കൂ.. അതും സ്വതന്ത്ര സോഫ്റ്റ്‌വേർ ആണ്! + വിശദീകരിക്കുക + + + + മുകളിലെ ടൂൾബാർ സ്‌ട്രീം ലോഡ് ചെയ്യുന്നു + ടൂൾബാറിലെ ഒഴിഞ്ഞ സ്ഥലത്തു ക്ലിക്ക് ചെയ്തു സ്‌ട്രീം തുറക്കുക + + രൂപം + ശൃംഖല + പോഡ് ക്രമീകരണങ്ങൾ + പ്രവർത്തിക്കുവാൻ കഴിയുന്നത് + + + നാവിഗേഷൻ സ്ലൈഡർ + നാവിഗേഷൻ വലിപ്പിലെ രേഖപ്പെടുത്തലുകളുടെ കാഴ്ച്ച നിയന്ത്രിക്കുക + ഉപയോക്താവ് + പൊതു + അഡ്മിൻ + + തീമും നിറവും + ആപ്പിൽ മൊത്തമായി ഉപയോഗിക്കുന്ന നിറങ്ങൾ ക്രമീകരിക്കുക + പ്രധാന നിറം + ടൂൾബാറുകളുടെ നിറം + എടുത്തുകാണിക്കുന്ന നിറം + പ്രോഗ്രസ് ബാറിന്റെ നിറം + അമോൾഡ് മോഡ് + അമോലെഡ് ഡിസ്പ്ലേ സൗഹൃദമായ കറുപ്പ് നിറം ആപ്പിന്റെ പല ഭാഗങ്ങളിലും മറ്റു നിറങ്ങളെ മറികടക്കും. ഈ ക്രമീകരണം മാറ്റുവാൻ ആപ്പ് വീണ്ടും തുറക്കേണ്ടി വരും. നിങ്ങളുടെ സ്വകാര്യ ഡയസ്പോറ* അകൗണ്ട് ക്രമീകരണങ്ങളിലെ ഇരുണ്ട തീം പ്രയോഗിച്ചാൽ ഡയസ്പോറ* നിങ്ങൾക്ക് ഇരുണ്ട പശ്ചാത്തലത്തിൽ ഉപയോഗിക്കാം. + + വ്യാപിപ്പിച്ച വിജ്ഞാപനങ്ങൾ + വിജ്ഞാപന വിഭാഗങ്ങൾ കാണിക്കുന്ന താഴേക്ക് വലിക്കാവുന്ന മെനുവിൽ വിജ്ഞാപന മണി വലുതാക്കുക + ആപ്പിന്റെ ഭാഷ മാറ്റുക. മാറ്റം ഫലപ്രദമാകുവാൻ ആപ്പ് വീണ്ടും തുറക്കുക + ഭാഷ + സിസ്റ്റത്തിലെ ഭാഷ + + വെബ്‌വ്യൂ അക്ഷരങ്ങളുടെ വലിപ്പം നിയന്ത്രിക്കുക + അക്ഷരങ്ങളുടെ വലിപ്പം + സാധാരണ + വലിയ + ഭീമാകാരമായ + + ചിത്രങ്ങൾ ലോഡ് ചെയ്യുക + ചിത്രം ലോഡ് ചെയ്യുന്നത് മാറ്റുക. ഉദാ:- മൊബൈൽ ഡാറ്റാ ലഭിക്കുന്നതിനായി + + സ്‌ക്രീൻ കറക്കുക + തനിയെ സ്‌ക്രീൻ ചുറ്റുന്നത് നിയന്ത്രിക്കുക + സ്വതേ ഉള്ള മൂല്യം + സെൻസർ\n (സിസ്റ്റം ക്രമീകരണങ്ങളെ അവഗണിക്കുക) + പോർട്രൈറ്റ് + ലാൻസ്‌കേപ് + + ടോറിൽ മുൻകൂറായി രേഖപ്പെടുത്തിയ മൂല്യങ്ങൾ ലോഡ് ചെയ്യുക + ടോർ (ഓർബോട്ട്) HTTP പ്രോക്സി ക്രമീകരണങ്ങൾ ലോഡ് ചെയ്യുക + പ്രോക്സി + പ്രോക്സി പ്രയോഗിക്കുക + ഹോസ്റ്റ് + പോർട്ട് + പ്രോക്സി ഉപയോഗം പ്രവർത്തനരഹിതമാക്കുവാൻ ആപ്പ് വീണ്ടും തുറക്കുക + മുൻകൂറായി ഉണ്ടായിരുന്ന ഓർബോട്ട് പ്രോക്സി ലോഡ് ചെയ്തു + + പുറമെയുള്ള ലിങ്കുകൾ ക്രോം കസ്റ്റം ടാബിൽ തുറക്കുക. ക്രോമിയം അല്ലെങ്കിൽ ഗൂഗിൾ ക്രോം ഈ സൗകര്യം ലഭിക്കുന്നതിനായി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കണം. +\n പ്രധാന അറിയിപ്പ്: ക്രമീകരിച്ച പ്രോക്സി സെർവറുകൾ ക്രോം കസ്റ്റം ടാബുകൾ ഉപയോഗിക്കാറില്ല! + + സ്വകാര്യ ക്രമീകരണങ്ങൾ + നിങ്ങളുടെ ഡയസ്പോറ* അക്കൗണ്ട് ക്രമീകരണങ്ങൾ തുറക്കുക + നിങ്ങളുടെ സമ്പർക്കങ്ങളുടെ പട്ടിക കൈകാര്യം ചെയ്യുക + ഹാഷ്ടാഗുകൾ കൈകാര്യം ചെയ്യുക + പിന്തുടർന്ന് വന്ന ഹാഷ്ടാഗുകൾ പിന്തുടരാതിരിക്കുക + അക്കൗണ്ട് മാറ്റുക + പ്രാദേശികമായ സെഷൻ ഡാറ്റ മായ്ച്ച ശേഷം മറ്റൊരു ഡയസ്പോറ* പോഡ്/അക്കൗണ്ട് ലേക്ക് മാറുക + മുകളിലെയും ചുവട്ടിലെയും ടൂൾബാറുകൾ സ്ക്രോൾ ചെയ്യുമ്പോൾ താനേ അപ്രത്യക്ഷമാക്കുക + + ലളിതമായ ആഡ്ബ്ലോക്കർ സജ്ജമാക്കുക. പരസ്യങ്ങൾ ചിലപ്പോൾ ഉൾപ്പെടാം. ഉദാ: എംബെഡ്ഡ് ചെയ്‌ത കാഴ്ചയിൽ + പരസ്യങ്ങൾ തടയുക diff --git a/app/src/main/res/values-nl/strings-about.xml b/app/src/main/res/values-nl/strings-about.xml deleted file mode 100644 index e2411632..00000000 --- a/app/src/main/res/values-nl/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Over - Licentie - Foutopsporing - Applicatie - Apparaat - diaspora* Pod - Foutoplossing - Foutoplossing (Verbose) - App Versie: %1$s - Android Versie: %1$s - Apparaatnaam: %1$s - Codenaam: %1$s - Pod Profielnaam: %1$s - Pod Domein: %1$s - Debuglog gekopieerd naar klembord - dandelion* is jouw bedrijfsapp om te surfen op het sociale netwerk diaspora*. Het voegt functies toe zoals nuttige werkbalken en ondersteuning voor proxyservers zoals het Tor Netwerk aan uw sociale ervaringen. - Code bijdragen! - dandelion* is vrij zoals in vrijheid ontwikkeld en volgt de ideeën van het diaspora* project. Als u iets wilt bijdragen, gaat uw gang! Op dit moment zijn we een erg klein team, dus we waarderen elke vorm van hulp! - Krijg de bron - Vertaal deze App! - De app niet beschikbaar in jouw taal? Jij kan dat veranderen! Waarom zou u niet helpen met vertalen? We gebruiken het crowdin platform zodat iedereen kan helpen met vertalen. - Laat me vertalen - Geef Feedback! - dandelion* is nog in ontwikkeling, dus heeft u suggesties of enige vorm van feedback, gebruik dan onze bug tracker om ons te laten weten! - Bugs melden - Vertel het verder! - Vertel uw vrienden en familie over diaspora* en #dandelion! Waarom blogt u niet over uw ervaringen? We willen graag uw ervaringen horen! - Deel deze app - Hey! Bekijk #dandelion! %1$s - - Onderhouders - Deze app wordt momenteel ontwikkeld en onderhouden door < br >< br >%1$s - Bijdragers - %1$s < br >< br > dank u! - GNU GPLv3 + licentie - 3rd Party Bibliotheken - De volgende bibliotheken worden gebruikt: - We zijn geïnspireerd door LeafPic en lenen er code van. Ga kijken, deze vrije software is het proberen waard! - Vertel me meer - diff --git a/app/src/main/res/values-nl/strings-preferences.xml b/app/src/main/res/values-nl/strings-preferences.xml deleted file mode 100644 index 60bacd9f..00000000 --- a/app/src/main/res/values-nl/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Bovenste werkbalk laadt stream - Klik op een lege ruimte in de bovenste werkbalk om de stream te openen - - Vormgeving - Netwerk - Pod-instellingen - Bruikbaarheid - - - Navigatie Slider - Configureer zichtbaarheid van vermeldingen in navigatie slider - Gebruiker - Algemeen - Administrator - - Themakleuren - Bepalen welke kleuren worden gebruikt in de app - Hoofdkleur - Kleur van de werkbalken - Accentkleur - Kleur van de progresbalk - AMOLED modus - Overschrijd kleuren met AMOLED display vriendelijk zwart op veel plekken in de app. Je moet de app restarten om deze verandering te zien. Om diaspora* in het donker te zien moet je de Dark thema activeren, dat gevonden kan worden in je eigen diaspora* account instellingen. - - Uitgebreide meldingen - Breidt de notificatie bel uit met een dropdown menu dat de notificatie categorieën laat zien - Taal wijzigen van deze app. Opnieuw opstarten om wijzigingen te activeren - Taal - Systeemtaal - - Configureer tekstgrootte van de webview - Lettergrootte - Normaal - Groot - Enorm - - Afbeeldingen laden - Afbeeldingen uitschakelen om mobiele data te besparen - - Schermrotatie - Configureer automatische schermrotatie - Standaard - Sensor\n(negeer systeem instellingen) - Portret - Landschap - - Tor Voorinstelling laden - Laden van de proxy-instellingen voor HTTP-Proxy Tor (Orbot) - Proxy - Proxy inschakelen - Proxy dandelion*-verkeer om firewalls te omzeilen. \nVereist mogelijk app herstart. Dit kan op sommige telefoons niet werken. - Host - Poort - App moet opnieuw opstarten om het gebruik van de proxy uit te schakelen - Orbot proxy voorinstelling geladen - - Open externe links met Chrome aangepaste tabbladen. Chromium of Google Chrome moet worden geïnstalleerd om deze functie te gebruiken. \nBELANGRIJK Opmerking: Chrome aangepaste tabbladen gebruiken niet geconfigureerde proxyservers! - - Persoonlijke instellingen - Open uw accountinstellingen van diaspora* - Uw lijst met contactpersonen beheren - Beheren van Hashtags - Ontvolg al gevolgde hashtags - Account wijzigen - Lokale sessiegegevens wissen en schakel over naar een andere diaspora* pod/account - Dit zal alle cookies en sessiegegevens wissen. Wilt u echt uw account wijzigen? - Cache wissen - WebView-cache leegmaken - Boven- en onderkant werkbalken automatisch verbergen tijdens het scrollen - Werkbalken slim wegwerken - Gedeeld-via-aankondiging toevoegen - Een verwijzing naar deze app toevoegen aan gedeelde teksten: [via #dandelion] - - Overige - Volledige Reset - Veeg alle lokale instellingen uit gerelateerd aan deze app en log op alle accounts uit - Dit zal alle instellingen terugzetten en je uitloggen bij elke pod. Je gedownloade afbeeldingen blijven onaangeraakt. Weet je zeker dat je door wilt gaan? - Simpele AdBlocker inschakelen. Advertenties kunnen bijvoorbeeld bij ingesloten weergaven erbij zitten - Blokkeer advertenties - diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 481ce9f1..dabb1c6e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,75 +1,196 @@ - - - Herladen - - Instellingen - Meldingen - Gesprekken - Stream - Profiel - Aspecten - Activiteiten - Leuk gevonden - Gereageerd - Vermeldingen - Openbaar - Zoeken - Contacten - Logboekwijzigingen - Statistieken - - Alle meldingen - Heeft ook gereageerd - Reageer op het bericht - Leuk gevonden - Genoemd - Opnieuw gedeeld - Begonnen met delen - - Fout: Kan niet de podlijst ophalen! - Sorry, u moet verbinding met internet hebben om verder te gaan - Bevestiging - Wilt u afsluiten? - - Meer - Over | Help - Gevolgde Tags - Publieke activiteiten - Rapporten - Link delen als tekst - Screenshot van de webpagina delen - Neem screenshot van de webpagina - Afbeelding opslaan - Screenshot oplaan als: - Link adres gekopieerd… - Nieuw Bericht - Terug naar boven - Zoeken op tags of personen - App afsluiten - Desktop weergave in-/uitschakelen - Delen… - viaTags - via mensen - Voeg een naam toe - Deel adreslink - Afbeelding opslaan - Deel afbeelding - Geopend in externe browser… - Link-adres kopiëren naar Klembord - Afbeelding kopiëren naar Klembord - - Niet in staat om afbeelding te laden - - U moet machtegingen aan \"Access Storage Permission\" geven om screenshots op te slaan. Daarna moet u de app volledig afsluiten of de telefoon opnieuw opstarten. Als u geen toestemming aan opslag wil geven maar screenshot functie later wil gebruiken, kunt u de toestemming later geven. Open dan: systemsettings - apps - dandelion*. In de machtegings sectie kunt u machtegingen geven aan \"write storage permission\". - U moet machtigingen aan \"Access Storage Permission\" geven om screenshots op te slaan. Daarna moet u de app volledig afsluiten of de telefoon opnieuw opstarten. Als u geen toestemming aan opslag wilt geven maar screenshot functie later wilt gebruiken, kunt u de toestemming later geven. Open dan: system settings - apps - dandelion*. In de machtigingssectie kunt u machtigingen geven aan \"write storage permission\". - Toestemming geweigerd. - Toestemming verleend. Probeer het opnieuw. - Aangepaste Pod - Pod naam - Protocol - Pod adres - Ontbrekende waarde - Ga naar laatste bezochte pagina in de stream? + + Herladen + + Instellingen + Meldingen + Gesprekken + Stream + Profiel + Aspecten + Activiteiten + Leuk gevonden + Gereageerd + Vermeldingen + Openbaar + Zoeken + Contacten + Logboekwijzigingen + Statistieken + + Alle meldingen + Heeft ook gereageerd + Reageer op het bericht + Leuk gevonden + Genoemd + Opnieuw gedeeld + Begonnen met delen + + Fout: Kan niet de podlijst ophalen! + Sorry, u moet verbinding met internet hebben om verder te gaan + Bevestiging + Wilt u afsluiten? + + Meer + Over | Help + Gevolgde Tags + Publieke activiteiten + Rapporten + Link delen als tekst + Screenshot van de webpagina delen + Neem screenshot van de webpagina + Afbeelding opslaan + Screenshot oplaan als: + Link adres gekopieerd… + Nieuw Bericht + Terug naar boven + Zoeken op tags of personen + App afsluiten + Desktop weergave in-/uitschakelen + Delen… + viaTags + via mensen + Voeg een naam toe + Deel adreslink + Afbeelding opslaan + Deel afbeelding + Geopend in externe browser… + Link-adres kopiëren naar Klembord + Afbeelding kopiëren naar Klembord + + Niet in staat om afbeelding te laden + + U moet machtegingen aan \"Access Storage Permission\" geven om screenshots op te slaan. Daarna moet u de app volledig afsluiten of de telefoon opnieuw opstarten. Als u geen toestemming aan opslag wil geven maar screenshot functie later wil gebruiken, kunt u de toestemming later geven. Open dan: systemsettings - apps - dandelion*. In de machtegings sectie kunt u machtegingen geven aan \"write storage permission\". + U moet machtigingen aan \"Access Storage Permission\" geven om screenshots op te slaan. Daarna moet u de app volledig afsluiten of de telefoon opnieuw opstarten. Als u geen toestemming aan opslag wilt geven maar screenshot functie later wilt gebruiken, kunt u de toestemming later geven. Open dan: system settings - apps - dandelion*. In de machtigingssectie kunt u machtigingen geven aan \"write storage permission\". + Toestemming geweigerd. + Toestemming verleend. Probeer het opnieuw. + Aangepaste Pod + Pod naam + Protocol + Pod adres + Ontbrekende waarde + Ga naar laatste bezochte pagina in de stream? + + Over + Licentie + Foutopsporing + Applicatie + Apparaat + diaspora* Pod + Foutoplossing + Foutoplossing (Verbose) + App Versie: %1$s + Android Versie: %1$s + Apparaatnaam: %1$s + Codenaam: %1$s + Pod Profielnaam: %1$s + Pod Domein: %1$s + Debuglog gekopieerd naar klembord + dandelion* is jouw bedrijfsapp om te surfen op het sociale netwerk diaspora*. Het voegt functies toe zoals nuttige werkbalken en ondersteuning voor proxyservers zoals het Tor Netwerk aan uw sociale ervaringen. + Code bijdragen! + dandelion* is vrij zoals in vrijheid ontwikkeld en volgt de ideeën van het diaspora* project. Als u iets wilt bijdragen, gaat uw gang! Op dit moment zijn we een erg klein team, dus we waarderen elke vorm van hulp! + Krijg de bron + Vertaal deze App! + De app niet beschikbaar in jouw taal? Jij kan dat veranderen! Waarom zou u niet helpen met vertalen? We gebruiken het crowdin platform zodat iedereen kan helpen met vertalen. + Laat me vertalen + Geef Feedback! + dandelion* is nog in ontwikkeling, dus heeft u suggesties of enige vorm van feedback, gebruik dan onze bug tracker om ons te laten weten! + Bugs melden + Vertel het verder! + Vertel uw vrienden en familie over diaspora* en #dandelion! Waarom blogt u niet over uw ervaringen? We willen graag uw ervaringen horen! + Deel deze app + Hey! Bekijk #dandelion! %1$s + + Onderhouders + Deze app wordt momenteel ontwikkeld en onderhouden door < br >< br >%1$s + Bijdragers + %1$s < br >< br > dank u! + GNU GPLv3 + licentie + 3rd Party Bibliotheken + De volgende bibliotheken worden gebruikt: + We zijn geïnspireerd door LeafPic en lenen er code van. Ga kijken, deze vrije software is het proberen waard! + Vertel me meer + + + + Bovenste werkbalk laadt stream + Klik op een lege ruimte in de bovenste werkbalk om de stream te openen + + Vormgeving + Netwerk + Pod-instellingen + Bruikbaarheid + + + Navigatie Slider + Configureer zichtbaarheid van vermeldingen in navigatie slider + Gebruiker + Algemeen + Administrator + + Themakleuren + Bepalen welke kleuren worden gebruikt in de app + Hoofdkleur + Kleur van de werkbalken + Accentkleur + Kleur van de progresbalk + AMOLED modus + Overschrijd kleuren met AMOLED display vriendelijk zwart op veel plekken in de app. Je moet de app restarten om deze verandering te zien. Om diaspora* in het donker te zien moet je de Dark thema activeren, dat gevonden kan worden in je eigen diaspora* account instellingen. + + Uitgebreide meldingen + Breidt de notificatie bel uit met een dropdown menu dat de notificatie categorieën laat zien + Taal wijzigen van deze app. Opnieuw opstarten om wijzigingen te activeren + Taal + Systeemtaal + + Configureer tekstgrootte van de webview + Lettergrootte + Normaal + Groot + Enorm + + Afbeeldingen laden + Afbeeldingen uitschakelen om mobiele data te besparen + + Schermrotatie + Configureer automatische schermrotatie + Standaard + Sensor\n(negeer systeem instellingen) + Portret + Landschap + + Tor Voorinstelling laden + Laden van de proxy-instellingen voor HTTP-Proxy Tor (Orbot) + Proxy + Proxy inschakelen + Proxy dandelion*-verkeer om firewalls te omzeilen. \nVereist mogelijk app herstart. Dit kan op sommige telefoons niet werken. + Host + Poort + App moet opnieuw opstarten om het gebruik van de proxy uit te schakelen + Orbot proxy voorinstelling geladen + + Open externe links met Chrome aangepaste tabbladen. Chromium of Google Chrome moet worden geïnstalleerd om deze functie te gebruiken. \nBELANGRIJK Opmerking: Chrome aangepaste tabbladen gebruiken niet geconfigureerde proxyservers! + + Persoonlijke instellingen + Open uw accountinstellingen van diaspora* + Uw lijst met contactpersonen beheren + Beheren van Hashtags + Ontvolg al gevolgde hashtags + Account wijzigen + Lokale sessiegegevens wissen en schakel over naar een andere diaspora* pod/account + Dit zal alle cookies en sessiegegevens wissen. Wilt u echt uw account wijzigen? + Cache wissen + WebView-cache leegmaken + Boven- en onderkant werkbalken automatisch verbergen tijdens het scrollen + Werkbalken slim wegwerken + Gedeeld-via-aankondiging toevoegen + Een verwijzing naar deze app toevoegen aan gedeelde teksten: [via #dandelion] + + Overige + Volledige Reset + Veeg alle lokale instellingen uit gerelateerd aan deze app en log op alle accounts uit + Dit zal alle instellingen terugzetten en je uitloggen bij elke pod. Je gedownloade afbeeldingen blijven onaangeraakt. Weet je zeker dat je door wilt gaan? + Simpele AdBlocker inschakelen. Advertenties kunnen bijvoorbeeld bij ingesloten weergaven erbij zitten + Blokkeer advertenties diff --git a/app/src/main/res/values-no-rNO/strings-preferences.xml b/app/src/main/res/values-no-rNO/strings-preferences.xml deleted file mode 100644 index cb58b642..00000000 --- a/app/src/main/res/values-no-rNO/strings-preferences.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Den øvre verktøylinjen laster inn strømmen - Klikk på en tom plass i den øvre verktøylinjen for å åpne strømmen - - Utseende - Nettverk - Pod-innstillinger - Brukbarhet - - - Navigasjonsbryter - Kontrollér synligheten for innlegg i navigasjonsskuffen - Bruker - Generelt - Administrator - - Tema og farger - Kontrollér hvilke farger som brukes i appen - Primærfarge - Verktøylinjefarge - Aksentfarge - Fremgangslinjefarge - AMOLED-modus - - - - - - - - - diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml new file mode 100644 index 00000000..4899fc2a --- /dev/null +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -0,0 +1,35 @@ + + + + + Den øvre verktøylinjen laster inn strømmen + Klikk på en tom plass i den øvre verktøylinjen for å åpne strømmen + + Utseende + Nettverk + Pod-innstillinger + Brukbarhet + + + Navigasjonsbryter + Kontrollér synligheten for innlegg i navigasjonsskuffen + Bruker + Generelt + Administrator + + Tema og farger + Kontrollér hvilke farger som brukes i appen + Primærfarge + Verktøylinjefarge + Aksentfarge + Fremgangslinjefarge + AMOLED-modus + + + + + + + + + diff --git a/app/src/main/res/values-pl/strings-about.xml b/app/src/main/res/values-pl/strings-about.xml deleted file mode 100644 index 5099b02e..00000000 --- a/app/src/main/res/values-pl/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - O aplikacji - Licencja - Debugowanie - Aplikacja - Urządzenie - Pod diaspora* - Log debugowania - Log debugowania (rozszerzony) - Wersja aplikacji: %1$s - Wersja systemu Android: %1$s - Nazwa urządzenia: %1$s - Nazwa kodowa: %1$s - Alias Poda: %1$s - Domena Poda: %1$s - Log debugowania został skopiowany do schowka - dandelion* to Twój cyfrowy towarzysz umożliwiający korzystanie z sieci społecznościowej diaspora*. Aplikacja posiada użyteczne paski narzędzi oraz obsługę serwerów proxy takich jak Tor, aby korzystanie z diaspory* było jeszcze przyjemniejsze. - Wesprzyj nas kodem! - dandelion* to wolne, w sensie wolności, oprogramowanie, zgodne z ideami projektu diaspora*. Jeśli chcesz nam pomóc w rozwoju, zapraszamy! Jesteśmy bardzo małym zespołem i ogromnie doceniamy każdą formę pomocy! - Pobierz kod źródłowy - Przetłumacz aplikację! - Aplikacja nie jest dostępna w Twoim języku? Możesz to zmienić, pomagając nam w tłumaczeniu! Dzięki platformie crowdin każdy może pomóc w tłumaczeniu aplikacji. - Chcę pomóc w tłumaczeniu - Wyślij feedback! - dandelion* jest ciągle w fazie rozwoju, więc jeśli masz jakiekolwiek sugestie lub chciałbyś podzielić się swoją opinią zrób to za pomocą naszego systemu zgłaszania błędów! - Zgłoś błąd - Powiedz innym o aplikacji! - Powiedz swoim znajomym i rodzinie o diaspora* oraz #dandelion! Dlaczego miałbyś nie opisać swoich doświadczeń na blogu? Byłoby nam miło usłyszeć, co masz do powiedzenia! - Udostępnij aplikację - Cześć! Wypróbuj #dandelion! %1$s - - Twórcy aplikacji - Rozwojem i utrzymaniem aplikacji aktualnie zajmują się <br><br>%1$s - Wnieśli wkład - %1$s<br><br>Wielkie dzięki! - Licencja GNU GPLv3+ - Biblioteki zewnętrzne - Zostały użyte następujące biblioteki zewnętrzne: - Zaczerpnęliśmy kilka pomysłów oraz trochę kodu z aplikacji LeafPic. Wypróbuj ją, to także wolne oprogramowanie! - Chcę wiedzieć więcej - diff --git a/app/src/main/res/values-pl/strings-preferences.xml b/app/src/main/res/values-pl/strings-preferences.xml deleted file mode 100644 index ddaa16ba..00000000 --- a/app/src/main/res/values-pl/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Górny pasek narzędzi wczytuje strumień - Aby otworzyć strumień, kliknij na pustą przestrzeń w górnym pasku narzędziowym - - Wygląd - Sieć - Ustawienia poda - Obsługa - - - Pasek nawigacji - Wybierz elementy widoczne w panelu nawigacyjnym - Użytkownik - Ogólne - Administracja - - Motywy i kolory - Ustaw, jakich kolorów ma używać aplikacja - Kolor podstawowy - Kolor pasków narzędzi - Kolor dodatkowy - Kolor paska postępu - Tryb AMOLED - Nadpisz kolory w wielu częściach aplikacji, używając czarnego przyjaznego dla ekranów AMOLED. Aby zobaczyć zmiany, musisz zrestartować aplikację. Żeby przeglądać diasporę* w ciemności, musisz także aktywować Ciemny (Dark) motyw. Opcję tę znajdziesz w ustawieniach Twojego konta diaspory*. - - Rozszerzone powiadomienia - Dodaj do ikony powiadomień menu wyboru kategorii powiadomień - Zmień język aplikacji. Uruchom ponownie aplikację, aby zobaczyć zmiany - Język - Język systemowy - - Wybierz rozmiar tekstu WebView - Rozmiar czcionki - Normalny - Duży - Bardzo duży - - Wczytuj obrazy - Odznacz, aby wyłączyć wczytywanie obrazów, np. w celu oszczędzania transferu - - Orientacja ekranu - Wybierz pożądaną orientację ekranu - Domyślna - Czujnik\n(ignoruj ustawienia systemowe) - Pionowa - Pozioma - - Wczytaj domyślną konfigurację Tora - Wczytaj ustawienia proxy HTTP Tora (Orbot) - Serwer proxy - Używaj proxy - Przesyłaj ruch dandelion* przez proxy, aby ominąć zapory sieciowe.\nMoże wymagać restartu. Może nie działać na niektórych urządzeniach. - Host - Port - Aplikacja musi zostać zrestartowana, aby wyłączyć proxy - Domyślna konfiguracja Orbota została wczytana - - Otwieraj odnośniki zewnętrzne za pomocą Chrome Custom Tabs. Musisz posiadać zainstalowane Chrome lub Chromium. \nWAŻNA UWAGA: Chrome Custom Tabs nie używa serwerów proxy ustawionych w tej aplikacji! - - Ustawienia osobiste - Otwórz ustawienia konta diaspora* - Zarządzaj swoją listą kontaktów - Zarządzanie tagami - Przestań śledzić wybrane tagi - Zmień konto - Skasuj dane lokalnej sesji i przełącz się na inne konto diaspory* - Operacja spowoduje usunięcie wszystkich ciasteczek i danych sesji. Jesteś pewny, że chcesz przełączyć na inne konto? - Wyczyść pamięć podręczną - Wyczyść pamięć podręczną WebView - Automatycznie ukryj paski narzędzi na górze i na dole podczas przewijania - Autoukrywanie pasków narzędzi - Informacja o użytej aplikacji - Umieszczaj odnośnik do tej aplikacji na dole udostępnianych wiadomości: [via #dandelion] - - Różne - Całkowity restart - Wyczyść wszystkie lokalne ustawienia aplikacji i wyloguj ze wszystkich kont - Ta operacja przywróci wszystkie zmodyfikowane przez Ciebie ustawienia aplikacji do ich domyślnych wartości i wyloguje Cię ze wszystkich Podów. Na pewno chcesz to zrobić? - Włącz prosty AdBlocker. Reklamy mogą znajdować się m.in. w osadzonych widokach - Blokuj reklamy - diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2c3e8e68..540e67f9 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,77 +1,198 @@ - - - Przeładuj - - Ustawienia - Powiadomienia - Rozmowy - Strumień - Profil - Aspekty - Aktywność - Polubione - Skomentowane - Wzmianki - Publiczne - Szukaj - Kontakty - Lista zmian - Statystyki - - Wszystkie powiadomienia - Także skomentował/a - Skomentował/a Twój wpis - Polubienia - Wzmianki - Powtórzenia - Zaczęli się z Tobą dzielić - - Błąd: Nie udało się pobrać listy podów! - Przykro mi, lecz aby kontynuować, musisz mieć połączenie z Internetem - Potwierdzenie - Czy chcesz wyjść? - - Więcej - Informacje | Pomoc - Obserwowane tagi - Aktywność publiczna - Zgłoszenia - Udostępnij link jako tekst - Udostępnij zrzut ekranu strony internetowej - Wykonaj zrzut ekranu strony internetowej - Zapisywanie obrazu do - Zapisywanie zrzutu ekranu jako: - Skopiowano adres linku… - Nowy wpis - Przejdź do góry - Szukaj tagów lub osób - Zamknij aplikację - Przełącz na widok mobilny/standardowy - Udostępnij… - w tagach - w osobach - Podaj nazwę użytkownika lub tagu - Udostępnij adres odnośnika - Zapisz obraz - Udostępnij obraz - Otwórz w zewnętrznej przeglądarce… - Skopiuj adres odnośnika do schowka - Skopiuj adres obrazu do schowka - - Nie udało się wczytać obrazu - - Aby móc zapisywać zrzuty ekranu, musisz nadać aplikacji uprawnienia do \"modyfikowania i usuwania zawartości karty SD\". Gdy to zrobisz, powinieneś całkowicie zamknąć aplikację lub zrestartować urządzenie. Jeśli nie nadasz teraz tego uprawnienia, ale będziesz chciał zrobić to w przyszłości, otwórz Ustawienia - Aplikacje - dandelion*. W sekcji uprawnień zaznacz \"Pamięć\". - Aby móc zapisywać/wysyłać obrazy, musisz nadać aplikacji uprawnienia do \"modyfikowania i usuwania zawartości karty SD\". Gdy to zrobisz, powinieneś całkowicie zamknąć aplikację lub zrestartować urządzenie. Jeśli nie nadasz teraz tego uprawnienia, ale będziesz chciał zrobić to w przyszłości, otwórz Ustawienia - Aplikacje - dandelion*. W sekcji uprawnień zaznacz \"Pamięć\". - Odmowa dostępu. - Dostęp przyznany. Spróbuj ponownie. - Pod spoza listy - Nazwa Poda - Protokół - Adres Poda - Nie podano danych - Przejść do ostatnio odwiedzonej strony w strumieniu? - Ukryj pasek stanu w głównym widoku - Ukryj pasek stanu + + Przeładuj + + Ustawienia + Powiadomienia + Rozmowy + Strumień + Profil + Aspekty + Aktywność + Polubione + Skomentowane + Wzmianki + Publiczne + Szukaj + Kontakty + Lista zmian + Statystyki + + Wszystkie powiadomienia + Także skomentował/a + Skomentował/a Twój wpis + Polubienia + Wzmianki + Powtórzenia + Zaczęli się z Tobą dzielić + + Błąd: Nie udało się pobrać listy podów! + Przykro mi, lecz aby kontynuować, musisz mieć połączenie z Internetem + Potwierdzenie + Czy chcesz wyjść? + + Więcej + Informacje | Pomoc + Obserwowane tagi + Aktywność publiczna + Zgłoszenia + Udostępnij link jako tekst + Udostępnij zrzut ekranu strony internetowej + Wykonaj zrzut ekranu strony internetowej + Zapisywanie obrazu do + Zapisywanie zrzutu ekranu jako: + Skopiowano adres linku… + Nowy wpis + Przejdź do góry + Szukaj tagów lub osób + Zamknij aplikację + Przełącz na widok mobilny/standardowy + Udostępnij… + w tagach + w osobach + Podaj nazwę użytkownika lub tagu + Udostępnij adres odnośnika + Zapisz obraz + Udostępnij obraz + Otwórz w zewnętrznej przeglądarce… + Skopiuj adres odnośnika do schowka + Skopiuj adres obrazu do schowka + + Nie udało się wczytać obrazu + + Aby móc zapisywać zrzuty ekranu, musisz nadać aplikacji uprawnienia do \"modyfikowania i usuwania zawartości karty SD\". Gdy to zrobisz, powinieneś całkowicie zamknąć aplikację lub zrestartować urządzenie. Jeśli nie nadasz teraz tego uprawnienia, ale będziesz chciał zrobić to w przyszłości, otwórz Ustawienia - Aplikacje - dandelion*. W sekcji uprawnień zaznacz \"Pamięć\". + Aby móc zapisywać/wysyłać obrazy, musisz nadać aplikacji uprawnienia do \"modyfikowania i usuwania zawartości karty SD\". Gdy to zrobisz, powinieneś całkowicie zamknąć aplikację lub zrestartować urządzenie. Jeśli nie nadasz teraz tego uprawnienia, ale będziesz chciał zrobić to w przyszłości, otwórz Ustawienia - Aplikacje - dandelion*. W sekcji uprawnień zaznacz \"Pamięć\". + Odmowa dostępu. + Dostęp przyznany. Spróbuj ponownie. + Pod spoza listy + Nazwa Poda + Protokół + Adres Poda + Nie podano danych + Przejść do ostatnio odwiedzonej strony w strumieniu? + Ukryj pasek stanu w głównym widoku + Ukryj pasek stanu + + O aplikacji + Licencja + Debugowanie + Aplikacja + Urządzenie + Pod diaspora* + Log debugowania + Log debugowania (rozszerzony) + Wersja aplikacji: %1$s + Wersja systemu Android: %1$s + Nazwa urządzenia: %1$s + Nazwa kodowa: %1$s + Alias Poda: %1$s + Domena Poda: %1$s + Log debugowania został skopiowany do schowka + dandelion* to Twój cyfrowy towarzysz umożliwiający korzystanie z sieci społecznościowej diaspora*. Aplikacja posiada użyteczne paski narzędzi oraz obsługę serwerów proxy takich jak Tor, aby korzystanie z diaspory* było jeszcze przyjemniejsze. + Wesprzyj nas kodem! + dandelion* to wolne, w sensie wolności, oprogramowanie, zgodne z ideami projektu diaspora*. Jeśli chcesz nam pomóc w rozwoju, zapraszamy! Jesteśmy bardzo małym zespołem i ogromnie doceniamy każdą formę pomocy! + Pobierz kod źródłowy + Przetłumacz aplikację! + Aplikacja nie jest dostępna w Twoim języku? Możesz to zmienić, pomagając nam w tłumaczeniu! Dzięki platformie crowdin każdy może pomóc w tłumaczeniu aplikacji. + Chcę pomóc w tłumaczeniu + Wyślij feedback! + dandelion* jest ciągle w fazie rozwoju, więc jeśli masz jakiekolwiek sugestie lub chciałbyś podzielić się swoją opinią zrób to za pomocą naszego systemu zgłaszania błędów! + Zgłoś błąd + Powiedz innym o aplikacji! + Powiedz swoim znajomym i rodzinie o diaspora* oraz #dandelion! Dlaczego miałbyś nie opisać swoich doświadczeń na blogu? Byłoby nam miło usłyszeć, co masz do powiedzenia! + Udostępnij aplikację + Cześć! Wypróbuj #dandelion! %1$s + + Twórcy aplikacji + Rozwojem i utrzymaniem aplikacji aktualnie zajmują się <br><br>%1$s + Wnieśli wkład + %1$s<br><br>Wielkie dzięki! + Licencja GNU GPLv3+ + Biblioteki zewnętrzne + Zostały użyte następujące biblioteki zewnętrzne: + Zaczerpnęliśmy kilka pomysłów oraz trochę kodu z aplikacji LeafPic. Wypróbuj ją, to także wolne oprogramowanie! + Chcę wiedzieć więcej + + + + Górny pasek narzędzi wczytuje strumień + Aby otworzyć strumień, kliknij na pustą przestrzeń w górnym pasku narzędziowym + + Wygląd + Sieć + Ustawienia poda + Obsługa + + + Pasek nawigacji + Wybierz elementy widoczne w panelu nawigacyjnym + Użytkownik + Ogólne + Administracja + + Motywy i kolory + Ustaw, jakich kolorów ma używać aplikacja + Kolor podstawowy + Kolor pasków narzędzi + Kolor dodatkowy + Kolor paska postępu + Tryb AMOLED + Nadpisz kolory w wielu częściach aplikacji, używając czarnego przyjaznego dla ekranów AMOLED. Aby zobaczyć zmiany, musisz zrestartować aplikację. Żeby przeglądać diasporę* w ciemności, musisz także aktywować Ciemny (Dark) motyw. Opcję tę znajdziesz w ustawieniach Twojego konta diaspory*. + + Rozszerzone powiadomienia + Dodaj do ikony powiadomień menu wyboru kategorii powiadomień + Zmień język aplikacji. Uruchom ponownie aplikację, aby zobaczyć zmiany + Język + Język systemowy + + Wybierz rozmiar tekstu WebView + Rozmiar czcionki + Normalny + Duży + Bardzo duży + + Wczytuj obrazy + Odznacz, aby wyłączyć wczytywanie obrazów, np. w celu oszczędzania transferu + + Orientacja ekranu + Wybierz pożądaną orientację ekranu + Domyślna + Czujnik\n(ignoruj ustawienia systemowe) + Pionowa + Pozioma + + Wczytaj domyślną konfigurację Tora + Wczytaj ustawienia proxy HTTP Tora (Orbot) + Serwer proxy + Używaj proxy + Przesyłaj ruch dandelion* przez proxy, aby ominąć zapory sieciowe.\nMoże wymagać restartu. Może nie działać na niektórych urządzeniach. + Host + Port + Aplikacja musi zostać zrestartowana, aby wyłączyć proxy + Domyślna konfiguracja Orbota została wczytana + + Otwieraj odnośniki zewnętrzne za pomocą Chrome Custom Tabs. Musisz posiadać zainstalowane Chrome lub Chromium. \nWAŻNA UWAGA: Chrome Custom Tabs nie używa serwerów proxy ustawionych w tej aplikacji! + + Ustawienia osobiste + Otwórz ustawienia konta diaspora* + Zarządzaj swoją listą kontaktów + Zarządzanie tagami + Przestań śledzić wybrane tagi + Zmień konto + Skasuj dane lokalnej sesji i przełącz się na inne konto diaspory* + Operacja spowoduje usunięcie wszystkich ciasteczek i danych sesji. Jesteś pewny, że chcesz przełączyć na inne konto? + Wyczyść pamięć podręczną + Wyczyść pamięć podręczną WebView + Automatycznie ukryj paski narzędzi na górze i na dole podczas przewijania + Autoukrywanie pasków narzędzi + Informacja o użytej aplikacji + Umieszczaj odnośnik do tej aplikacji na dole udostępnianych wiadomości: [via #dandelion] + + Różne + Całkowity restart + Wyczyść wszystkie lokalne ustawienia aplikacji i wyloguj ze wszystkich kont + Ta operacja przywróci wszystkie zmodyfikowane przez Ciebie ustawienia aplikacji do ich domyślnych wartości i wyloguje Cię ze wszystkich Podów. Na pewno chcesz to zrobić? + Włącz prosty AdBlocker. Reklamy mogą znajdować się m.in. w osadzonych widokach + Blokuj reklamy diff --git a/app/src/main/res/values-pt-rBR/strings-about.xml b/app/src/main/res/values-pt-rBR/strings-about.xml deleted file mode 100644 index 306e9e77..00000000 --- a/app/src/main/res/values-pt-rBR/strings-about.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Sobre - Licença - Depurando - Aplicação - Dispositivo - diaspora* Pod - Histórico de Depuração - Histórico de depuração (detalhado) - Versão do App: %1$s - Versão do Android: %1$s - Nome do dispositivo: %1$s - Domínio do Pod: %1$s - - diff --git a/app/src/main/res/values-pt-rBR/strings-preferences.xml b/app/src/main/res/values-pt-rBR/strings-preferences.xml deleted file mode 100644 index 89ccea6f..00000000 --- a/app/src/main/res/values-pt-rBR/strings-preferences.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - Barra de ferramentas superior abre o fluxo - Clique em um espaço vazio na barra de ferramentas superior para abrir o fluxo - - Aparência - Rede - Configurações do pod - Operabilidade - - - Controle deslizante de navegação - Visibilidade do controle de entradas na gaveta de navegação - Usuário - Geral - Admin - - Tema e cores - Controlar quais cores são usadas em todo o aplicativo - Cor principal - Cor das barras de ferramentas - Cor de destaque - Cor da barra de progresso - Modo AMOLED - - Notificações estendidas - Alterar o idioma deste aplicativo. Reinicie o aplicativo para as mudanças terem efeito - Idioma - Idioma do sistema - - Tamanho da fonte - Normal - Grande - Enorme - - Carregar imagens - Desabilitar o carregamento de imagens para economizar seus créditos - - Rotação de tela - Controle da rotação automática de tela - Padrão - Sensor\n(ignorar configurações de sistema) - Retrato - Paisagem - - Carregar configuração do Tor - Carregar configurações de proxy HTTP do Tor (Orbot) - Proxy - Habilitar Proxy - Usar proxy no dandelion* para contornar firewalls. \nRequer reinicialização. Pode não funcionar em alguns telefones. - Servidor - Porta - É necessário reiniciar para desabilitar o proxy - Predefinição de proxy orbot carregado - - Abrir links externos com guias de predefinidas do Chrome. O Chromium ou o Google Chrome precisa ser instalado para utilizar esse recurso. \nNOTA IMPORTANTE: Guias Chrome predefinidas não usam servidores proxy! - - Configurações pessoais - Abra suas configurações de usuário diaspora* - Gerenciar seus contatos - Gerenciar Hashtags - Parar de seguir hashtags - Alterar conta - Apagar dados de sessão local e mudar para outro usuário de outro Pod diaspora* - Isto apagará todos os dados de sessão e cookies. Você quer realmente mudar sua conta? - Limpar cache - Ocultar as barras de ferramentas superior e inferior automaticamente durante a rolagem - Acrescentar referência a este aplicativo aos textos compartilhados: [via #dandelion] - - Diversos - Zerar tudo - Limpar localmente todas as configurações relacionadas ao aplicativo e sair de todas as contas - Isto irá retornar todas as configurações alteradas do aplicativo para seus valores padrão e encerrar as sessões de todos os pods. Suas imagens baixadas permanecerão intactas. Tem certeza que deseja prosseguir? - Habilite AdBlocker básico. Anúncios incorporados, p.ex., podem ser vistos - Bloquear anúncios - diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1720bd5f..9269851b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,77 +1,166 @@ - - - Abra o painel de navegação - Fechar painel de navegação - Atualizar - - Configurações - Notificações - Conversas - Stream - Perfil - Aspectos - Atividades - Curtidas - Comentários - Referências - Público - Pesquisar - Contatos - Histórico de mudanças - Estatísticas - - Todas as notificações - Também comentado - Comentar no post - Curtidas - Mencionado - Recompartilhado - Começou a compartilhar - - Erro: Impossível recuperar as informações dos pods! - Você precisa conectar à Internet para prosseguir - Confirmação - Deseja sair? - - Mais - Sobre | Ajuda - Tags seguidas - Atividades públicas - Relatórios - Compartilhar link como texto - Compartilhar uma captura de tela da página - Tirar uma captura de tela da página - Salvar imagem para - Salvar captura de tela como: - Link copiado… - Nova postagem - Ir para o topo - Procurar por tags ou pessoas - Sair do aplicativo - Alternar a exibição telefone/área de trabalho - Compartilhar… - por tags - por pessoas - Por favor, adicione um nome - Compartilhar endereço - Salvar imagem - Compartilhar imagem - Abrir em navegador externo… - Copiar endereço à área de transferência - Copiar endereço de imagem à área de transferência - - Impossível carregar a imagem - - Permissão negada. - Permissão concedida. Por favor, tente novamente. - Pod personalizado - Nome do pod - Protocolo - Endereço do pod - Sem dado - Voltar para a última página visitada no fluxo? - Ocultar a barra de estado na janela principal - Ocultar barra de status + + Abra o painel de navegação + Fechar painel de navegação + Atualizar + + Configurações + Notificações + Conversas + Stream + Perfil + Aspectos + Atividades + Curtidas + Comentários + Referências + Público + Pesquisar + Contatos + Histórico de mudanças + Estatísticas + + Todas as notificações + Também comentado + Comentar no post + Curtidas + Mencionado + Recompartilhado + Começou a compartilhar + + Erro: Impossível recuperar as informações dos pods! + Você precisa conectar à Internet para prosseguir + Confirmação + Deseja sair? + + Mais + Sobre | Ajuda + Tags seguidas + Atividades públicas + Relatórios + Compartilhar link como texto + Compartilhar uma captura de tela da página + Tirar uma captura de tela da página + Salvar imagem para + Salvar captura de tela como: + Link copiado… + Nova postagem + Ir para o topo + Procurar por tags ou pessoas + Sair do aplicativo + Alternar a exibição telefone/área de trabalho + Compartilhar… + por tags + por pessoas + Por favor, adicione um nome + Compartilhar endereço + Salvar imagem + Compartilhar imagem + Abrir em navegador externo… + Copiar endereço à área de transferência + Copiar endereço de imagem à área de transferência + + Impossível carregar a imagem + + Permissão negada. + Permissão concedida. Por favor, tente novamente. + Pod personalizado + Nome do pod + Protocolo + Endereço do pod + Sem dado + Voltar para a última página visitada no fluxo? + Ocultar a barra de estado na janela principal + Ocultar barra de status + + Sobre + Licença + Depurando + Aplicação + Dispositivo + diaspora* Pod + Histórico de Depuração + Histórico de depuração (detalhado) + Versão do App: %1$s + Versão do Android: %1$s + Nome do dispositivo: %1$s + Domínio do Pod: %1$s + + + + + Barra de ferramentas superior abre o fluxo + Clique em um espaço vazio na barra de ferramentas superior para abrir o fluxo + + Aparência + Rede + Configurações do pod + Operabilidade + + + Controle deslizante de navegação + Visibilidade do controle de entradas na gaveta de navegação + Usuário + Geral + Admin + + Tema e cores + Controlar quais cores são usadas em todo o aplicativo + Cor principal + Cor das barras de ferramentas + Cor de destaque + Cor da barra de progresso + Modo AMOLED + + Notificações estendidas + Alterar o idioma deste aplicativo. Reinicie o aplicativo para as mudanças terem efeito + Idioma + Idioma do sistema + + Tamanho da fonte + Normal + Grande + Enorme + + Carregar imagens + Desabilitar o carregamento de imagens para economizar seus créditos + + Rotação de tela + Controle da rotação automática de tela + Padrão + Sensor\n(ignorar configurações de sistema) + Retrato + Paisagem + + Carregar configuração do Tor + Carregar configurações de proxy HTTP do Tor (Orbot) + Proxy + Habilitar Proxy + Usar proxy no dandelion* para contornar firewalls. \nRequer reinicialização. Pode não funcionar em alguns telefones. + Servidor + Porta + É necessário reiniciar para desabilitar o proxy + Predefinição de proxy orbot carregado + + Abrir links externos com guias de predefinidas do Chrome. O Chromium ou o Google Chrome precisa ser instalado para utilizar esse recurso. \nNOTA IMPORTANTE: Guias Chrome predefinidas não usam servidores proxy! + + Configurações pessoais + Abra suas configurações de usuário diaspora* + Gerenciar seus contatos + Gerenciar Hashtags + Parar de seguir hashtags + Alterar conta + Apagar dados de sessão local e mudar para outro usuário de outro Pod diaspora* + Isto apagará todos os dados de sessão e cookies. Você quer realmente mudar sua conta? + Limpar cache + Ocultar as barras de ferramentas superior e inferior automaticamente durante a rolagem + Acrescentar referência a este aplicativo aos textos compartilhados: [via #dandelion] + + Diversos + Zerar tudo + Limpar localmente todas as configurações relacionadas ao aplicativo e sair de todas as contas + Isto irá retornar todas as configurações alteradas do aplicativo para seus valores padrão e encerrar as sessões de todos os pods. Suas imagens baixadas permanecerão intactas. Tem certeza que deseja prosseguir? + Habilite AdBlocker básico. Anúncios incorporados, p.ex., podem ser vistos + Bloquear anúncios diff --git a/app/src/main/res/values-ro-rRO/strings-about.xml b/app/src/main/res/values-ro-rRO/strings-about.xml deleted file mode 100644 index ed13cc84..00000000 --- a/app/src/main/res/values-ro-rRO/strings-about.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Despre - Licenţă - Depanare - Aplicaţie - Dispozitiv - Pod diaspora* - Jurnal Depanare - Jurnal Depanare (Detaliat) - Versiune aplicație: %1$s - Versiune Android: %1$s - Nume Dispozitiv: %1$s - Nume de cod: %1$s - Nume Profil Pod: %1$s - Domeniu Pod: %1$s - Jurnal Depanare copiat în clipboard - dandelion* este companionul tau pentru navigarea reţelei sociale diaspora *. Adaugă caracteristici cum ar fi utilele bare de instrumente şi suport pentru proxy servere ca Tor Network pentru experienţa ta socială. - - diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index c151b7cb..68452e78 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -1,61 +1,78 @@ - - - Reîncarcă - - Setări - Notificări - Conversații - Stream - Profil - Aspecte - Activități - Apreciate - Comentate - Mențiuni - Public - Căutare - Contacte - Jurnalul modificărilor - Statistici - - Toate notificările - Si comentate - Comentariu pe Post - Apreciate - Menţionate - Repartajate - Început Partajare - - Eroare: Lista de Pod-uri nu poate fi preluată! - Ne pare rău, trebuie să fi conectat la Internet pentru a continua - Confirmare - Doriţi să ieşiţi? - - Extra - Despre | Ajutor - Tag-uri urmarite - Activităţi publice - Rapoarte - Partajează adresa ca text - Share screenshot a paginii web - Ia screenshot a paginii web - Imagine salvată în - Screenshot salvat ca: - Adresa copiată … - Postare nouă - Du-te la partea de sus - Căutare după Tag-uri sau persoane - Ieșire din Aplicatie - Comuta Vezi mobil/desktop - Distribuire… - după etichete - dupa persoane - Adauga nume - Partajează adresa - Salvează imaginea - Partajează imaginea - - + + Reîncarcă + + Setări + Notificări + Conversații + Stream + Profil + Aspecte + Activități + Apreciate + Comentate + Mențiuni + Public + Căutare + Contacte + Jurnalul modificărilor + Statistici + + Toate notificările + Si comentate + Comentariu pe Post + Apreciate + Menţionate + Repartajate + Început Partajare + + Eroare: Lista de Pod-uri nu poate fi preluată! + Ne pare rău, trebuie să fi conectat la Internet pentru a continua + Confirmare + Doriţi să ieşiţi? + + Extra + Despre | Ajutor + Tag-uri urmarite + Activităţi publice + Rapoarte + Partajează adresa ca text + Share screenshot a paginii web + Ia screenshot a paginii web + Imagine salvată în + Screenshot salvat ca: + Adresa copiată … + Postare nouă + Du-te la partea de sus + Căutare după Tag-uri sau persoane + Ieșire din Aplicatie + Comuta Vezi mobil/desktop + Distribuire… + după etichete + dupa persoane + Adauga nume + Partajează adresa + Salvează imaginea + Partajează imaginea + + + + Despre + Licenţă + Depanare + Aplicaţie + Dispozitiv + Pod diaspora* + Jurnal Depanare + Jurnal Depanare (Detaliat) + Versiune aplicație: %1$s + Versiune Android: %1$s + Nume Dispozitiv: %1$s + Nume de cod: %1$s + Nume Profil Pod: %1$s + Domeniu Pod: %1$s + Jurnal Depanare copiat în clipboard + dandelion* este companionul tau pentru navigarea reţelei sociale diaspora *. Adaugă caracteristici cum ar fi utilele bare de instrumente şi suport pentru proxy servere ca Tor Network pentru experienţa ta socială. + diff --git a/app/src/main/res/values-ru/strings-about.xml b/app/src/main/res/values-ru/strings-about.xml deleted file mode 100644 index 99b46688..00000000 --- a/app/src/main/res/values-ru/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - О приложении - Лицензия - Отладка - Приложение - Устройство - Под diaspora* - Журнал отладки - Журнал отладки (подробный) - Версия приложения: %1$s - Версия Android: %1$s - Имя устройства: %1$s - Кодовое имя: %1$s - Имя профиля пода: %1$s - Домен пода: %1$s - Журнал отладки скопирован в буфер обмена - dandelion* - это приложение-компаньон для социальной сети Диаспора*. Приложение добавляет такие функции как полезные панели инструментов и поддержку прокси-серверов (таких как Tor). - Сделайте свой вклад! - dandelion* разрабатывается как свободное ПО и следует идеям проекта Диаспора*. Если вы хотите помочь - вперёд! В настоящее время мы является очень небольшой командой, поэтому мы высоко ценим любые виды помощи! - Получить исходный код - Переведите приложение! - Приложение недоступно на вашем языке? Вы можете это изменить! Почему бы вам не помочь нам перевести его? Мы используем платформу crowdin, чтобы позволить любому сделать это. - Перейти к переводу - Оставьте отзыв! - dandelion* всё ещё находится в разработке, так что, если у вас есть предложения или пожелания, пожалуйста, воспользуйтесь нашим трекером ошибок, чтобы сообщить нам об этом! - Сообщить об ошибках - Расскажите друзьям! - Расскажите вашим друзьям и семье о Диаспоре* и #dandelion! Почему бы вам не разместить запись о вашем опыте в блоге? Мы будем рады услышать об этом! - Рассказать о приложении - Эй! Зацените #dandelion! %1$s - - Мейнтейнеры - Это приложение в настоящее время разрабатывается и поддерживается следующими людьми: <br><br>%1$s - Участники - %1$s<br><br>Спасибо вам! - Лицензия GNU GPLv3+ - Сторонние библиотеки - Используются следующие библиотеки: - Мы вдохновлялись и взяли немного кода из LeafPic. Попробуйте это приложение, оно тоже является свободным ПО! - Расскажите мне больше - diff --git a/app/src/main/res/values-ru/strings-preferences.xml b/app/src/main/res/values-ru/strings-preferences.xml deleted file mode 100644 index 69407781..00000000 --- a/app/src/main/res/values-ru/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Верхняя панель инструментов загружает Поток - Нажмите на пустое пространство на верхней панели инструментов, чтобы открыть Поток - - Внешний вид - Сеть - Настройки пода - Работоспособность - - - Слайдер навигации - Управление видимостью записей в ящике навигации - Пользовательские - Общие - Для администраторов - - Тема и цвета - Выбор цветов используемых в приложении - Основной цвет - Цвет панелей инструментов - Акцентирующий цвет - Цвет индикатора загрузки - Режим AMOLED - Переопределить цвета на благоприятный для AMOLED чёрный во многих частях приложения. Вам нужно перезапустить приложение, чтобы включить эту опцию. Для просмотра диаспоры* в тёмных тонах, вам также необходимо активировать тёмную тему в настройках аккаунта. - - Расширенные уведомления - Показывать выпадающее меню с категориями уведомлений при нажатии на иконку уведомлений - Изменить язык этого приложения. Перезапустите приложение, чтобы изменения вступили в силу - Язык - Язык системы - - Управление размером текста WebView - Размер шрифта - Нормальный - Крупный - Огромный - - Загружать изображения - Отключить загрузку изображений для экономии трафика - - Поворот экрана - Контролировать автоматический поворот экрана - По умолчанию - Сенсор\n(игнорировать системные настройки) - Вертикальная ориентация - Горизонтальная ориентация - - Загрузить шаблон конфигурации Tor - Загрузить настройки прокси для Tor (Orbot) - Прокси - Включить прокси - Проксировать трафик dandelion* для обхода брандмауэров.\nМожет потребоваться перезапуск - Хост - Порт - Приложению необходимо перезапуститься, чтобы отключить использование прокси - Шаблон конфигурации прокси Orbot загружен - - Открывать внешние ссылки с помощью Chrome Custom Tabs. Для этого должен быть установлен Chromium или Google Chrome. \nВАЖНОЕ ЗАМЕЧАНИЕ: Chrome Custom Tabs не использует настройки прокси-серверов! - - Личные настройки - Открыть настройки аккаунта diaspora* - Управление списком контактов - Управление тегами - Отписаться от тегов - Сменить учётную запись - Стереть данные локального сеанса и переключиться на другой под/аккаунт diaspora* - Это сотрёт все куки и данные сеанса. Вы действительно хотите сменить учётную запись? - Очистить кэш - Очистить кэш WebView - Скрывать верхнюю и нижнюю панели инструментов автоматически во время прокрутки - Интеллектуальное скрытие панелей инструментов - Добавлять \"Опубликовано из\" к сообщению - Добавлять к сообщениям ссылку на это приложение: [via #dandelion] - - Прочее - Полный сброс - Локально стереть все параметры, относящиеся к приложению и выйти из всех учётных записей - Это сбросит все изменённые параметры приложения на значения по умолчанию и выйдет из аккаунтов на всех подах. Ваши загруженные изображения останутся нетронутыми. Вы уверены, что хотите продолжить? - Включить простой блокировщик рекламы. Реклама может быть во встроенных элементах страницы - Блокировать рекламу - diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0073f07c..df1c0f51 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,79 +1,200 @@ - - - Обновить - - Настройки - Уведомления - Разговоры - Поток - Профиль - Аспекты - Активность - Понравившееся - Прокомментированное - Упоминания - Публичное - Поиск - Контакты - История изменений - Статистика - - Все уведомления - Также прокомментировали - Комментарий к записи - Понравилось - Упомянули - Поделились - Добавили вас - - Ошибка: Не удалось получить список подов! - Извините, вы должны быть подключены к Интернету, чтобы продолжить - Подтверждение - Вы хотите выйти? - - Дополнительно - Информация | Помощь - Теги - Публичное - Отчёты - Поделиться ссылкой как текстом - Поделиться скриншотом страницы - Сделать скриншот страницы - Сохранение изображения в - Сохранение скриншота как: - Адрес ссылки скопирован… - Новый пост - В начало - Искать по тегам и людям - Выйти из приложения - Переключить мобильный вид - Поделиться… - по тегам - по людям - Пожалуйста, добавьте имя - Поделиться адресом ссылки - Сохранить изображение - Поделиться изображением - Открыть во внешнем браузере… - Скопировать адрес ссылки в буфер обмена - Скопировать адрес изображения в буфер обмена - - Не удаётся загрузить изображение - - Необходимо предоставить «Разрешение на доступ к хранилищу» для сохранения скриншотов. После этого вы должны полностью закрыть приложение или перезагрузите телефон. Если вы не разрешаете доступ к хранилищу, но хотите использовать функцию скриншотов позже, можно предоставить разрешение позднее. Затем откройте: Системные настройки - приложения - dandelion*. В разделе разрешения можно предоставить «разрешение на запись в хранилище». - Необходимо предоставить «Разрешение на доступ к хранилищу» для сохранения/выгрузки изображений. После этого вам необходимо полностью закрыть приложение или перезагрузить телефон. Если вы не разрешаете доступ к хранилищу, но хотите сохранять изображения позже, можно предоставить разрешение позднее. В таком случае откройте: Системные настройки - приложения - dandelion*. В разделе разрешений можно будет предоставить «разрешение на запись в хранилище». - В разрешении отказано. - Разрешение получено. Пожалуйста, попытайтесь снова. - Произвольный под - Название пода - Протокол - Адрес пода - Значение отсутствует - Перейти к последней просмотренной странице в Потоке? - Скрыть строку состояния в главном окне - Скрыть строку состояния - Показывать заголовок на главном экране - Показывать заголовок + + Обновить + + Настройки + Уведомления + Разговоры + Поток + Профиль + Аспекты + Активность + Понравившееся + Прокомментированное + Упоминания + Публичное + Поиск + Контакты + История изменений + Статистика + + Все уведомления + Также прокомментировали + Комментарий к записи + Понравилось + Упомянули + Поделились + Добавили вас + + Ошибка: Не удалось получить список подов! + Извините, вы должны быть подключены к Интернету, чтобы продолжить + Подтверждение + Вы хотите выйти? + + Дополнительно + Информация | Помощь + Теги + Публичное + Отчёты + Поделиться ссылкой как текстом + Поделиться скриншотом страницы + Сделать скриншот страницы + Сохранение изображения в + Сохранение скриншота как: + Адрес ссылки скопирован… + Новый пост + В начало + Искать по тегам и людям + Выйти из приложения + Переключить мобильный вид + Поделиться… + по тегам + по людям + Пожалуйста, добавьте имя + Поделиться адресом ссылки + Сохранить изображение + Поделиться изображением + Открыть во внешнем браузере… + Скопировать адрес ссылки в буфер обмена + Скопировать адрес изображения в буфер обмена + + Не удаётся загрузить изображение + + Необходимо предоставить «Разрешение на доступ к хранилищу» для сохранения скриншотов. После этого вы должны полностью закрыть приложение или перезагрузите телефон. Если вы не разрешаете доступ к хранилищу, но хотите использовать функцию скриншотов позже, можно предоставить разрешение позднее. Затем откройте: Системные настройки - приложения - dandelion*. В разделе разрешения можно предоставить «разрешение на запись в хранилище». + Необходимо предоставить «Разрешение на доступ к хранилищу» для сохранения/выгрузки изображений. После этого вам необходимо полностью закрыть приложение или перезагрузить телефон. Если вы не разрешаете доступ к хранилищу, но хотите сохранять изображения позже, можно предоставить разрешение позднее. В таком случае откройте: Системные настройки - приложения - dandelion*. В разделе разрешений можно будет предоставить «разрешение на запись в хранилище». + В разрешении отказано. + Разрешение получено. Пожалуйста, попытайтесь снова. + Произвольный под + Название пода + Протокол + Адрес пода + Значение отсутствует + Перейти к последней просмотренной странице в Потоке? + Скрыть строку состояния в главном окне + Скрыть строку состояния + Показывать заголовок на главном экране + Показывать заголовок + + О приложении + Лицензия + Отладка + Приложение + Устройство + Под diaspora* + Журнал отладки + Журнал отладки (подробный) + Версия приложения: %1$s + Версия Android: %1$s + Имя устройства: %1$s + Кодовое имя: %1$s + Имя профиля пода: %1$s + Домен пода: %1$s + Журнал отладки скопирован в буфер обмена + dandelion* - это приложение-компаньон для социальной сети Диаспора*. Приложение добавляет такие функции как полезные панели инструментов и поддержку прокси-серверов (таких как Tor). + Сделайте свой вклад! + dandelion* разрабатывается как свободное ПО и следует идеям проекта Диаспора*. Если вы хотите помочь - вперёд! В настоящее время мы является очень небольшой командой, поэтому мы высоко ценим любые виды помощи! + Получить исходный код + Переведите приложение! + Приложение недоступно на вашем языке? Вы можете это изменить! Почему бы вам не помочь нам перевести его? Мы используем платформу crowdin, чтобы позволить любому сделать это. + Перейти к переводу + Оставьте отзыв! + dandelion* всё ещё находится в разработке, так что, если у вас есть предложения или пожелания, пожалуйста, воспользуйтесь нашим трекером ошибок, чтобы сообщить нам об этом! + Сообщить об ошибках + Расскажите друзьям! + Расскажите вашим друзьям и семье о Диаспоре* и #dandelion! Почему бы вам не разместить запись о вашем опыте в блоге? Мы будем рады услышать об этом! + Рассказать о приложении + Эй! Зацените #dandelion! %1$s + + Мейнтейнеры + Это приложение в настоящее время разрабатывается и поддерживается следующими людьми: <br><br>%1$s + Участники + %1$s<br><br>Спасибо вам! + Лицензия GNU GPLv3+ + Сторонние библиотеки + Используются следующие библиотеки: + Мы вдохновлялись и взяли немного кода из LeafPic. Попробуйте это приложение, оно тоже является свободным ПО! + Расскажите мне больше + + + + Верхняя панель инструментов загружает Поток + Нажмите на пустое пространство на верхней панели инструментов, чтобы открыть Поток + + Внешний вид + Сеть + Настройки пода + Работоспособность + + + Слайдер навигации + Управление видимостью записей в ящике навигации + Пользовательские + Общие + Для администраторов + + Тема и цвета + Выбор цветов используемых в приложении + Основной цвет + Цвет панелей инструментов + Акцентирующий цвет + Цвет индикатора загрузки + Режим AMOLED + Переопределить цвета на благоприятный для AMOLED чёрный во многих частях приложения. Вам нужно перезапустить приложение, чтобы включить эту опцию. Для просмотра диаспоры* в тёмных тонах, вам также необходимо активировать тёмную тему в настройках аккаунта. + + Расширенные уведомления + Показывать выпадающее меню с категориями уведомлений при нажатии на иконку уведомлений + Изменить язык этого приложения. Перезапустите приложение, чтобы изменения вступили в силу + Язык + Язык системы + + Управление размером текста WebView + Размер шрифта + Нормальный + Крупный + Огромный + + Загружать изображения + Отключить загрузку изображений для экономии трафика + + Поворот экрана + Контролировать автоматический поворот экрана + По умолчанию + Сенсор\n(игнорировать системные настройки) + Вертикальная ориентация + Горизонтальная ориентация + + Загрузить шаблон конфигурации Tor + Загрузить настройки прокси для Tor (Orbot) + Прокси + Включить прокси + Проксировать трафик dandelion* для обхода брандмауэров.\nМожет потребоваться перезапуск + Хост + Порт + Приложению необходимо перезапуститься, чтобы отключить использование прокси + Шаблон конфигурации прокси Orbot загружен + + Открывать внешние ссылки с помощью Chrome Custom Tabs. Для этого должен быть установлен Chromium или Google Chrome. \nВАЖНОЕ ЗАМЕЧАНИЕ: Chrome Custom Tabs не использует настройки прокси-серверов! + + Личные настройки + Открыть настройки аккаунта diaspora* + Управление списком контактов + Управление тегами + Отписаться от тегов + Сменить учётную запись + Стереть данные локального сеанса и переключиться на другой под/аккаунт diaspora* + Это сотрёт все куки и данные сеанса. Вы действительно хотите сменить учётную запись? + Очистить кэш + Очистить кэш WebView + Скрывать верхнюю и нижнюю панели инструментов автоматически во время прокрутки + Интеллектуальное скрытие панелей инструментов + Добавлять \"Опубликовано из\" к сообщению + Добавлять к сообщениям ссылку на это приложение: [via #dandelion] + + Прочее + Полный сброс + Локально стереть все параметры, относящиеся к приложению и выйти из всех учётных записей + Это сбросит все изменённые параметры приложения на значения по умолчанию и выйдет из аккаунтов на всех подах. Ваши загруженные изображения останутся нетронутыми. Вы уверены, что хотите продолжить? + Включить простой блокировщик рекламы. Реклама может быть во встроенных элементах страницы + Блокировать рекламу diff --git a/app/src/main/res/values-sc/strings-about.xml b/app/src/main/res/values-sc/strings-about.xml deleted file mode 100644 index 13cff062..00000000 --- a/app/src/main/res/values-sc/strings-about.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - Informatziones - Litzèntzia - Depuratzione dae sos errores - Aplicatzione - Dispositivu - Pod de diaspora* - Registru de depuratzione - Registru de depuratzione (a sa minuda) - Versione aplicatzione: %1$s - Versione Android: %1$s - Nùmene dispositivu: %1$s - Nùmene còdighe: %1$s - Nùmene de profilu de su pod: %1$s - Domìniu de su pod: %1$s - Registru de depuratzione copiadu in sos apuntos - - dandelion* est s\'aplicatzione tua pro s\'esploratzione de sa retza sotziale diaspora*. Annanghet funtzionalidades comente a barras de ainas utilosas e a su suportu pro server intermediàrios (proxies) comente a sa retza Tor pro s\'esperièntzia sotziale tua. - - Contribui a su còdighe! - dandelion* est iscvilupada liberamente e sighit sas idea de su progetu diaspora*. Si cheres contribuire, faghe·lu! In custu momentu semus unu grupu minore meda, nos diat agradare a tènnere cale si siat casta de agiudu! - Otenne su còdighe mitza - - Tradui s\'aplicatzione! - S\'aplicatzione no est disponìbile in sa limba tua? Lu podes cambiare! Proite non nos agiudas traduinde·la? Nois impreamus sa prataforma crowdin pro permìtere a totus de traduire s\'aplicatzione. - Faghe·mi traduire - - Lassa·nos s\'opinione tua! - dandelion* est galu in isvilupu. Si tenes impòsitos o cale si siat casta de cosa da sinnalare, pro praghere, faghe·la·nos ischire impreende s\'aina de sinnalatziones de errores nostra! - Sinnala errores - - Cumpartzi sa paràula! - Faghe connòschere diaspora* e #dandelion a sos amigos e a sa familia tua! Proite no iscries carchi cosa a pitzu de sas esperièntzias tuas? Noas diat agradare meda a ischire ite nde pensas! - Cumpartzi s\'aplicatzione - Ei! Dae un\'ograda a #dandelion! %1$s - - - - Manutentores - Custa aplicatzione est beninde isvilupada e manutentada dae <br><br>%1$s - Contribuidores - %1$s<br><br>Gràtzias! - Litzèntzia GNU GPLv3+ - Librerias de terzas partes - Sunt impreadas custas librerias: - Amus pigadu ispiratzione e parte de su còdighe dae LeafPic. Abbistade·bos·lu, est fintzas cussu unu programma lìberu! - Àteras informatziones - - \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings-preferences.xml b/app/src/main/res/values-sc/strings-preferences.xml deleted file mode 100644 index 858a6283..00000000 --- a/app/src/main/res/values-sc/strings-preferences.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - Sa barra superiore aberit su flussu - Incarca in unu tretu bòidu in sa barra superiore de sas ainas pro abèrrere su flussu - - - - Aparèntzia - Retza - Impostatziones de su pod - Operabilidade - - - - Menù de nàvigu - Controlla sa visibilidade de sos elementos in su menù de nàvigu - Impreadore - Generales - Amministratzione - - - Temas e colores - Controlla cales colores sunt impreados in s\'aplicatzione - Colore primàriu - Colore de sas barras de sas ainas - Colore secondàriu - Colore de sa barra de progressu - Modalidade AMOLED - Remplasa sos colores cun su nigheddu pro ischermos AMOLED in medas tretos de s\'aplicatzione. As a dèpere torrare a allùghere s\'aplicatzione pro ativare custa impostatzione. Pro navigare in diaspora* cun su tema iscuru lu depes fintzas allùghere dae sas optziones personales de su contu de diaspora* tuo. - - - Notìficas ismanniadas - Ismànnia su butone de sas notìficas cun unu menù chi ammustrat sas categorias de sas notìficas - - Càmbia sa limba de custa aplicatzione. Torra·la a allùghere pro fàghere tènnere efetu a su cambiamentu - Limba - Limba de sistema - - - Controlla sa mannària de su testu de sa vista web - Mannària de su testu - Normale - Mannu - Mannu meda - - - Iscàrriga sas immàgines - Allughe/istuda su carrigamentu de sas immàgines pro risparmiare sos datos mòbiles - - - Rotatzione de s\'ischermu - Controlla sa rotatzione automàtica de s\'ischermu - Predefinidu - Sensore\n - (ignora sas impostatziones de sistema) - Verticale - Orizontale - - - Càrriga sos valores predefinidos de Tor - Càrriga sas impostatziones pro su sèrver intermèdiu HTTP de Tor (Orbot) - Server intermèdiu (Proxy) - Abìlita unu server intermèdiu - Faghe colare su tràficu de dandelion* in unu server intermèdiu pro isfrancare sos firewalls.\n - Diat pòdere èssere netzessàriu a torrare a allùghere s\'aplicatzione. Diat pòdere non funtzionare pro carchi telèfono. - Host - Ghenna - Depes torrare a allùghere s\'aplicatzione pro istudare s\'impreu de su server intermediàriu - Impostatziones de su server de Orbot carrigadas - - - - Aberi sos ligàmenes esternos cun sas ischedas personalizadas de Chrome. Chromium o Google Chrome depent èssere installados pro lu pòdere fàghere. \n - NOTA DE IMPORTU: sas ischedas personalizadas de Chrome no impreant sos servers intermediàrios configurados! - - - Impostatziones personales - Aberi sas impostatziones de su contu de diaspora* tuo - Amministra sa lista de sos contatos tuos - - Amministra sas etichetas - Acaba·la de sighire sas etichetas sighidas - - Càmbia contu - Iscantzella sos datos de sa sessione locale e cola a un\'àteru contu o pod de diaspora* - Custu at a iscantzellare totu sos cookies e sos datos de sa sessione. Seguru ses de chèrrere cambiare su contu tuo? - - Iscantzella sa cache - Iscantzella sa cache de sa vista web - - - Istichi automaticamente sas barras superiores e inferiores cando ses iscurrende sa pàgina - Barras chi s\'istichint intelligentemente - - Annanghe un\'avisu de s\'aplicatzione - Annanghe unu riferimentu a custa aplicatzione a sos testos cumpartzidos: [via #dandelion] - - - Vàriu - - Reimpostatzione intrea - Iscantzella localmente totu sos datos relativos a s\'aplicatzione e essi dae totu sos contos - - Custu at a fàghere torrare totu sas impostatziones de s\'aplicatzione a sos valores predefinidos e t\'at a fàghere essire dae totu sos pods. Sas immàgines iscarrigadas dae tie no ant a èssere tocadas. Seguru ses de chèrrere sighire? - - Abìlita su blocadore de publitzidade de base. Sa publitzidade diat pòdere èssere incluida, pro esèmpiu, in sas visualizatziones incorporadas - Bloca sa publitzidade - \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index b7ca8fc1..6eddd9f7 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -1,96 +1,253 @@ - - Aberi su pannellu de nàvigu - Serra su pannellu de nàvigu - Torra a carrigare + + Aberi su pannellu de nàvigu + Serra su pannellu de nàvigu + Torra a carrigare - - Impostatziones - Notìficas - Arresonos - Flussu - Profilu - Caras - Atividades - Agradèssidas - Cummentadas - Numenadas - Pùblicu - Chirca - Cuntatos - Registru de sas modìficas - Istatìsticas + + Impostatziones + Notìficas + Arresonos + Flussu + Profilu + Caras + Atividades + Agradèssidas + Cummentadas + Numenadas + Pùblicu + Chirca + Cuntatos + Registru de sas modìficas + Istatìsticas - - Totu sas notìficas - Àteros cummentos - Cummentu in una publicatzione - Agradèssidas - Numenada - Torrada a cumparzire - At incumintzadu a cumpartzire + + Totu sas notìficas + Àteros cummentos + Cummentu in una publicatzione + Agradèssidas + Numenada + Torrada a cumparzire + At incumintzadu a cumpartzire - - Errore: Impossìbile recuperare sa lista de sos pods! + + Errore: Impossìbile recuperare sa lista de sos pods! - Depes èssere connessu a ìnternet pro sighire - Cunfirma - Cheres essire? + Depes èssere connessu a ìnternet pro sighire + Cunfirma + Cheres essire? - - Àteru - Informatziones |Agiudu - Etichetas sighidas - Atividades pùblicas - Sinnalatziones + + Àteru + Informatziones |Agiudu + Etichetas sighidas + Atividades pùblicas + Sinnalatziones - Cumpartzi unu ligàmene comente testu - Cumpartzi s\'ischermada de sa pàgina web - Faghe un\'ischermada de sa pàgina web - Sarbende s\'immàgine in - Sarbende s\'ischermada in: - Ligàmene copiadu… + Cumpartzi unu ligàmene comente testu + Cumpartzi s\'ischermada de sa pàgina web + Faghe un\'ischermada de sa pàgina web + Sarbende s\'immàgine in + Sarbende s\'ischermada in: + Ligàmene copiadu… - Publicatzione noa - Torra a s\'incumintzu - Chirca etichetas o persones - Essi dae s\'aplicatzione - Allughe/istuda sa versione mòbile - Cumpartzi… + Publicatzione noa + Torra a s\'incumintzu + Chirca etichetas o persones + Essi dae s\'aplicatzione + Allughe/istuda sa versione mòbile + Cumpartzi… - pro eticheta - pro persone - Pro praghere annanghe unu nùmene + pro eticheta + pro persone + Pro praghere annanghe unu nùmene - Cumpartzi ligàmene - Sarva s\'immàgine - Cumpartzi s\'immàgine - Aberi in un\'esploradore (browser) esternu… - Còpia su ligàmenes in sos apuntos - Còpia s\'indiritzu de s\'immàgine in sos apuntos + Cumpartzi ligàmene + Sarva s\'immàgine + Cumpartzi s\'immàgine + Aberi in un\'esploradore (browser) esternu… + Còpia su ligàmenes in sos apuntos + Còpia s\'indiritzu de s\'immàgine in sos apuntos - - Impossìbile carrigare s\'immàgine + + Impossìbile carrigare s\'immàgine - - Depes frunire \"Permissu de atzessu a sa memòria\" pro sarvare sas ischermadas. A pustis dias dèpere serrare de su totu s\'aplicatzione o torrare a allùghere su dispositivu. Si no as a frunire su permissu a sa memòria ma cheres impreare sa funtzionalidade de ischermada, prus a tardu, l\'as a pòdere fàghere tando. Pro praghere aberi: systemsettings - apps - dandelion*. In sa setzione pro sos permissosas a pòdere frunire su \"permissu de atzessu a sa memòria\". - Depes frunire \"Permissu de atzessu a sa memòria\" pro sarvare e carrigare sas immàgines. A pustis dias dèpere serrare de su totu s\'aplicatzione o torrare a allùghere su dispositivu. Si no as a frunire su permissu a sa memòria ma cheres impreare sa funtzionalidade de ischermada, prus a tardu, l\'as a pòdere fàghere tando. Pro praghere aberi: systemsettings - apps - dandelion*. In sa setzione pro sos permissosas a pòdere frunire su \"permissu de atzessu a sa memòria\". - Permissu dennegadu. - Permissu cuntzessu. Pro praghere torra a proare. - Pod personalizadu - Nùmene de su pod - Protocollu - Indiritzu de su pod - Valore fartante - Brincare a s\'ùrtima pàgina visitada in su flussu? - Istichi sa barra de s\'istadu in sa vista printzipale - Istichi sa barra de s\'istadu - Ammustra su tìtulu in sa vista printzipale - Ammustra tìtulu - + + Depes frunire \"Permissu de atzessu a sa memòria\" pro sarvare sas ischermadas. A pustis dias dèpere serrare de su totu s\'aplicatzione o torrare a allùghere su dispositivu. Si no as a frunire su permissu a sa memòria ma cheres impreare sa funtzionalidade de ischermada, prus a tardu, l\'as a pòdere fàghere tando. Pro praghere aberi: systemsettings - apps - dandelion*. In sa setzione pro sos permissosas a pòdere frunire su \"permissu de atzessu a sa memòria\". + Depes frunire \"Permissu de atzessu a sa memòria\" pro sarvare e carrigare sas immàgines. A pustis dias dèpere serrare de su totu s\'aplicatzione o torrare a allùghere su dispositivu. Si no as a frunire su permissu a sa memòria ma cheres impreare sa funtzionalidade de ischermada, prus a tardu, l\'as a pòdere fàghere tando. Pro praghere aberi: systemsettings - apps - dandelion*. In sa setzione pro sos permissosas a pòdere frunire su \"permissu de atzessu a sa memòria\". + Permissu dennegadu. + Permissu cuntzessu. Pro praghere torra a proare. + Pod personalizadu + Nùmene de su pod + Protocollu + Indiritzu de su pod + Valore fartante + Brincare a s\'ùrtima pàgina visitada in su flussu? + Istichi sa barra de s\'istadu in sa vista printzipale + Istichi sa barra de s\'istadu + Ammustra su tìtulu in sa vista printzipale + Ammustra tìtulu + + + Informatziones + Litzèntzia + Depuratzione dae sos errores + Aplicatzione + Dispositivu + Pod de diaspora* + Registru de depuratzione + Registru de depuratzione (a sa minuda) + Versione aplicatzione: %1$s + Versione Android: %1$s + Nùmene dispositivu: %1$s + Nùmene còdighe: %1$s + Nùmene de profilu de su pod: %1$s + Domìniu de su pod: %1$s + Registru de depuratzione copiadu in sos apuntos + + dandelion* est s\'aplicatzione tua pro s\'esploratzione de sa retza sotziale diaspora*. Annanghet funtzionalidades comente a barras de ainas utilosas e a su suportu pro server intermediàrios (proxies) comente a sa retza Tor pro s\'esperièntzia sotziale tua. + + Contribui a su còdighe! + dandelion* est iscvilupada liberamente e sighit sas idea de su progetu diaspora*. Si cheres contribuire, faghe·lu! In custu momentu semus unu grupu minore meda, nos diat agradare a tènnere cale si siat casta de agiudu! + Otenne su còdighe mitza + + Tradui s\'aplicatzione! + S\'aplicatzione no est disponìbile in sa limba tua? Lu podes cambiare! Proite non nos agiudas traduinde·la? Nois impreamus sa prataforma crowdin pro permìtere a totus de traduire s\'aplicatzione. + Faghe·mi traduire + + Lassa·nos s\'opinione tua! + dandelion* est galu in isvilupu. Si tenes impòsitos o cale si siat casta de cosa da sinnalare, pro praghere, faghe·la·nos ischire impreende s\'aina de sinnalatziones de errores nostra! + Sinnala errores + + Cumpartzi sa paràula! + Faghe connòschere diaspora* e #dandelion a sos amigos e a sa familia tua! Proite no iscries carchi cosa a pitzu de sas esperièntzias tuas? Noas diat agradare meda a ischire ite nde pensas! + Cumpartzi s\'aplicatzione + Ei! Dae un\'ograda a #dandelion! %1$s + + + + Manutentores + Custa aplicatzione est beninde isvilupada e manutentada dae <br><br>%1$s + Contribuidores + %1$s<br><br>Gràtzias! + Litzèntzia GNU GPLv3+ + Librerias de terzas partes + Sunt impreadas custas librerias: + Amus pigadu ispiratzione e parte de su còdighe dae LeafPic. Abbistade·bos·lu, est fintzas cussu unu programma lìberu! + Àteras informatziones + + + + + Sa barra superiore aberit su flussu + Incarca in unu tretu bòidu in sa barra superiore de sas ainas pro abèrrere su flussu + + + + Aparèntzia + Retza + Impostatziones de su pod + Operabilidade + + + + Menù de nàvigu + Controlla sa visibilidade de sos elementos in su menù de nàvigu + Impreadore + Generales + Amministratzione + + + Temas e colores + Controlla cales colores sunt impreados in s\'aplicatzione + Colore primàriu + Colore de sas barras de sas ainas + Colore secondàriu + Colore de sa barra de progressu + Modalidade AMOLED + Remplasa sos colores cun su nigheddu pro ischermos AMOLED in medas tretos de s\'aplicatzione. As a dèpere torrare a allùghere s\'aplicatzione pro ativare custa impostatzione. Pro navigare in diaspora* cun su tema iscuru lu depes fintzas allùghere dae sas optziones personales de su contu de diaspora* tuo. + + + Notìficas ismanniadas + Ismànnia su butone de sas notìficas cun unu menù chi ammustrat sas categorias de sas notìficas + + Càmbia sa limba de custa aplicatzione. Torra·la a allùghere pro fàghere tènnere efetu a su cambiamentu + Limba + Limba de sistema + + + Controlla sa mannària de su testu de sa vista web + Mannària de su testu + Normale + Mannu + Mannu meda + + + Iscàrriga sas immàgines + Allughe/istuda su carrigamentu de sas immàgines pro risparmiare sos datos mòbiles + + + Rotatzione de s\'ischermu + Controlla sa rotatzione automàtica de s\'ischermu + Predefinidu + Sensore\n + (ignora sas impostatziones de sistema) + Verticale + Orizontale + + + Càrriga sos valores predefinidos de Tor + Càrriga sas impostatziones pro su sèrver intermèdiu HTTP de Tor (Orbot) + Server intermèdiu (Proxy) + Abìlita unu server intermèdiu + Faghe colare su tràficu de dandelion* in unu server intermèdiu pro isfrancare sos firewalls.\n + Diat pòdere èssere netzessàriu a torrare a allùghere s\'aplicatzione. Diat pòdere non funtzionare pro carchi telèfono. + Host + Ghenna + Depes torrare a allùghere s\'aplicatzione pro istudare s\'impreu de su server intermediàriu + Impostatziones de su server de Orbot carrigadas + + + + Aberi sos ligàmenes esternos cun sas ischedas personalizadas de Chrome. Chromium o Google Chrome depent èssere installados pro lu pòdere fàghere. \n + NOTA DE IMPORTU: sas ischedas personalizadas de Chrome no impreant sos servers intermediàrios configurados! + + + Impostatziones personales + Aberi sas impostatziones de su contu de diaspora* tuo + Amministra sa lista de sos contatos tuos + + Amministra sas etichetas + Acaba·la de sighire sas etichetas sighidas + + Càmbia contu + Iscantzella sos datos de sa sessione locale e cola a un\'àteru contu o pod de diaspora* + Custu at a iscantzellare totu sos cookies e sos datos de sa sessione. Seguru ses de chèrrere cambiare su contu tuo? + + Iscantzella sa cache + Iscantzella sa cache de sa vista web + + + Istichi automaticamente sas barras superiores e inferiores cando ses iscurrende sa pàgina + Barras chi s\'istichint intelligentemente + + Annanghe un\'avisu de s\'aplicatzione + Annanghe unu riferimentu a custa aplicatzione a sos testos cumpartzidos: [via #dandelion] + + + Vàriu + + Reimpostatzione intrea + Iscantzella localmente totu sos datos relativos a s\'aplicatzione e essi dae totu sos contos + + Custu at a fàghere torrare totu sas impostatziones de s\'aplicatzione a sos valores predefinidos e t\'at a fàghere essire dae totu sos pods. Sas immàgines iscarrigadas dae tie no ant a èssere tocadas. Seguru ses de chèrrere sighire? + + Abìlita su blocadore de publitzidade de base. Sa publitzidade diat pòdere èssere incluida, pro esèmpiu, in sas visualizatziones incorporadas + Bloca sa publitzidade + \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings-about.xml b/app/src/main/res/values-sv/strings-about.xml deleted file mode 100644 index 3f8addad..00000000 --- a/app/src/main/res/values-sv/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Om - Licens - Avlusning - Program - Enhet - diaspora*-pod - Avlusningslogg - Avlusningslogg (detaljerad) - Programversion: %1$s - Androidversion: %1$s - Enhetens namn: %1$s - Kodnamn: %1$s - Podprofilens namn: %1$s - Poddomän: %1$s - Texten kopierad till urklippen - dandelion* är en kompletterande app till att använda det sociala nätverket diaspora*. Den lägger till funktioner såsom användbara verktyg and stöd för proxyservrar såsom Tor. - Bidrag med kod! - dandelion* är utvecklat för att vara fritt som i frihet och lyder under samma filosofi som diaspora*-projektet. Om du vill bidra, är det fritt fram! I dagsläget är vi få, så uppskattar öppenhjärtigt all hjälp! - Hämta källkoden - Översätt appen! - Är appen inte tillgänglig på ditt mål? Det kan du ändra på! Hjälp oss översätta! Vi använder oss av plattformen Crowdin så att alla kan hjälpa till att översätta appen. - Jag vill översätta - Lämna respons! - dandelion* utvecklas fortfarande, så har du några förslag eller annan återkoppling, använd vårt buggrapporteringssystem! - Rapportera buggar - Berätta om oss! - Berätta för dina närmaste om diaspora* och #dandelion! Blogga om dina erfarenheter! Vi vill gärna veta vad du tycker! - Dela appen - Hallå! Kolla in #dandelion! %1$s - - Utvecklare - Denna app utvecklas för närvarande och underhålls av < br >< br >%1$s - Bidragsgivare - %1$s < br >< br > Tack så hjärtligt! - GNU GPLv3+ - Tredjepartsbibliotek - Följande bibliotek används: - Vi hämtade inspiration och kod från LeafPic. Kika på det, det är också fri programvara! - Berätta mer - diff --git a/app/src/main/res/values-sv/strings-preferences.xml b/app/src/main/res/values-sv/strings-preferences.xml deleted file mode 100644 index 1d1a878e..00000000 --- a/app/src/main/res/values-sv/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Den övre verktygspanelen laddar stöm - Tryck på en tom yta i övre verktygsfältet för att öppna strömmen - - Utseende - Nätverk - Pod-inställningar - Funktionsdugligheten - - - Navigeringsreglage - Kontrollera synligheten för inlägg i den utdragbara panelen - Användare - Generella - Administratör - - Tema och färger - Styr vilka färger som ska används i programmet - Primär färg - Färgen på verktygspanelerna - Accentfärg - Färg på förloppsindikatorn - AMOLED-läge - Överskrid färger med svart i flera delar av appen, anpassad AMOLED-skärmar. Du behöver starta om för att verkställa. För att använda Diaspora* i mörkt läge behöver du också aktivera Dark theme, som du hittar bland dina personliga Diaspora*-kontoinställningar. - - Utökade notifikationer - Utöka notifikationsklockan med en rullgardinsmeny som visar kategorier för notifieringar - Byt språk för appen. Starta om för att fastställa ändringar - Språk - Systemspråk - - Justera textstorleken för WebView - Teckenstorlek - Normal - Stor - Enorm - - Läs in bilder - Växla bildinläsning för t.ex. låg mobildata - - Skärmrotation - Styr automatisk skärmrotering - Förvald - Sensor\n(överskrid systeminställningar) - Porträtt - Landskap - - Ladda Tor-nställningar - Ladda proxyinställningar för Tor (Orbot) HTTP Proxy - Proxy - Aktivera proxy - Använd proxy med dandelion* för att kringgå brandväggar.\nKan kräva omstart. Detta fungerar inte på vissa telefoner. - Värd - Port - Appen måste startas om för att inaktivera proxyanvändning - Orbot-proxyinställningar laddade - - Öppna externa länkar med Chrome Custom Tabs. Chromium eller Google Chrome måste installeras för att använda den här funktionen. \nOBSERVERA: Chrome Custom Tabs använder inte den konfigurerade proxyservern! - - Personliga inställningar - Öppna dina kontoinställningar i diaspora* - Hantera din kontaktlista - Hantera fyrkantstaggar - Sluta följa taggar du redan följer - Ändra Konto - Radera lokal sessionsdata och växla till en annan diaspora*-pod eller -konto - Detta kommer att radera alla kakor och all sessionsdata. Vill du verkligen byta konto? - Rensa cache - Rensa WebView-cache - Dölj automatiskt de övre och undre verktygsfälten när du skrollar - Intellihide-verktygsfält - Lägg till delade-av-meddelande - Lägg till en hänvisning till denna app när du skriver: [via #dandelion] - - Diverse - Total återställning - Rensa alla lokala inställningar som har med appen att göra och logga ut alla konton - Detta kommer att återställa alla ändrade inställningarna på appen till deras standardvärden och loggar ut dig från alla poddar. Dina nedladdade bilder förblir orörda. Är du säker på att du vill fortsätta? - Använd lätt reklamblockering. Reklam finns bland annat i inbyggda vyer - Blockera reklam - diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 5eb05d34..171d9c05 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,81 +1,202 @@ - - - Ladda om - - Inställningar - Notiser - Konversationer - Ström - Profil - Aspekter - Aktiviteter - Gillade - Kommenterade - Omnämnanden - Offentlig - Söc - Kontakter - Ändringar - Statistik - - Alla Notiser - Kommenterade Även - Kommentar till tillägg - Gillade - Omnämnd - Vidaredelad - Började Dela - - Fel: Kunde inte hämta podlista! - Ursäkta, du måste ansluta till Internet för att fortsätta - Bekräftelse - Vill du avsluta? - - Mer - Om | Hjälp - Följda Taggar - Offentliga aktiviteter - Rapporter - Dela länk som text - Dela skämdump av en webbsida - Ta skärmdump av en webbsida - Sparar bild som - Sparar skärmdump som: - Länkadress kopierad… - Nytt inlägg - Till toppen - Sök på taggar eller personer - Avsluta appen - Växla mellan telefon- och skrivbordsvy - Dela… - efter taggar - efter människor - Var god ange namn - Dela länkadress - Spara bild - Dela bild - Öppna i en extern webbläsare… - Kopiera länkadress - Kopiera bildadressen - - Kunde inte ladda bilden - - Du måste bevilja lagringsbehörighet för att spara skärmdumpar. När du gjort det, bör du + + Ladda om + + Inställningar + Notiser + Konversationer + Ström + Profil + Aspekter + Aktiviteter + Gillade + Kommenterade + Omnämnanden + Offentlig + Söc + Kontakter + Ändringar + Statistik + + Alla Notiser + Kommenterade Även + Kommentar till tillägg + Gillade + Omnämnd + Vidaredelad + Började Dela + + Fel: Kunde inte hämta podlista! + Ursäkta, du måste ansluta till Internet för att fortsätta + Bekräftelse + Vill du avsluta? + + Mer + Om | Hjälp + Följda Taggar + Offentliga aktiviteter + Rapporter + Dela länk som text + Dela skämdump av en webbsida + Ta skärmdump av en webbsida + Sparar bild som + Sparar skärmdump som: + Länkadress kopierad… + Nytt inlägg + Till toppen + Sök på taggar eller personer + Avsluta appen + Växla mellan telefon- och skrivbordsvy + Dela… + efter taggar + efter människor + Var god ange namn + Dela länkadress + Spara bild + Dela bild + Öppna i en extern webbläsare… + Kopiera länkadress + Kopiera bildadressen + + Kunde inte ladda bilden + + Du måste bevilja lagringsbehörighet för att spara skärmdumpar. När du gjort det, bör du stänga ned appen eller starta om din enhet. Om du inte vill bevilja lagringsbehörighet men ändå vill använda skärmdumpsfunktionen senare, kan du bevilja behörighet senare. Öppna då systeminställningarna, appar, dandelion*. Bland behörigheterna väljer du att bevilja den att skriva data. - Du måste bevilja lagringsbehörighet för att spara och ladda upp bilder. När du gjort det, bör du + Du måste bevilja lagringsbehörighet för att spara och ladda upp bilder. När du gjort det, bör du stänga ned appen eller starta om din enhet. Om du inte vill bevilja lagringsbehörighet men ändå vill spara bilder senare, kan du bevilja behörighet senare. Öppna då systeminställningarna, appar, dandelion*. Bland behörigheterna väljer du att bevilja den att skriva data. - Åtkomst nekad. - Åtkomst beviljad. Var god försök igen. - Anpassad pod - Podnamn - Protokoll - Podadress - Värde saknas - Vill du hoppa senast besökta sida i strömmen? + Åtkomst nekad. + Åtkomst beviljad. Var god försök igen. + Anpassad pod + Podnamn + Protokoll + Podadress + Värde saknas + Vill du hoppa senast besökta sida i strömmen? + + Om + Licens + Avlusning + Program + Enhet + diaspora*-pod + Avlusningslogg + Avlusningslogg (detaljerad) + Programversion: %1$s + Androidversion: %1$s + Enhetens namn: %1$s + Kodnamn: %1$s + Podprofilens namn: %1$s + Poddomän: %1$s + Texten kopierad till urklippen + dandelion* är en kompletterande app till att använda det sociala nätverket diaspora*. Den lägger till funktioner såsom användbara verktyg and stöd för proxyservrar såsom Tor. + Bidrag med kod! + dandelion* är utvecklat för att vara fritt som i frihet och lyder under samma filosofi som diaspora*-projektet. Om du vill bidra, är det fritt fram! I dagsläget är vi få, så uppskattar öppenhjärtigt all hjälp! + Hämta källkoden + Översätt appen! + Är appen inte tillgänglig på ditt mål? Det kan du ändra på! Hjälp oss översätta! Vi använder oss av plattformen Crowdin så att alla kan hjälpa till att översätta appen. + Jag vill översätta + Lämna respons! + dandelion* utvecklas fortfarande, så har du några förslag eller annan återkoppling, använd vårt buggrapporteringssystem! + Rapportera buggar + Berätta om oss! + Berätta för dina närmaste om diaspora* och #dandelion! Blogga om dina erfarenheter! Vi vill gärna veta vad du tycker! + Dela appen + Hallå! Kolla in #dandelion! %1$s + + Utvecklare + Denna app utvecklas för närvarande och underhålls av < br >< br >%1$s + Bidragsgivare + %1$s < br >< br > Tack så hjärtligt! + GNU GPLv3+ + Tredjepartsbibliotek + Följande bibliotek används: + Vi hämtade inspiration och kod från LeafPic. Kika på det, det är också fri programvara! + Berätta mer + + + + Den övre verktygspanelen laddar stöm + Tryck på en tom yta i övre verktygsfältet för att öppna strömmen + + Utseende + Nätverk + Pod-inställningar + Funktionsdugligheten + + + Navigeringsreglage + Kontrollera synligheten för inlägg i den utdragbara panelen + Användare + Generella + Administratör + + Tema och färger + Styr vilka färger som ska används i programmet + Primär färg + Färgen på verktygspanelerna + Accentfärg + Färg på förloppsindikatorn + AMOLED-läge + Överskrid färger med svart i flera delar av appen, anpassad AMOLED-skärmar. Du behöver starta om för att verkställa. För att använda Diaspora* i mörkt läge behöver du också aktivera Dark theme, som du hittar bland dina personliga Diaspora*-kontoinställningar. + + Utökade notifikationer + Utöka notifikationsklockan med en rullgardinsmeny som visar kategorier för notifieringar + Byt språk för appen. Starta om för att fastställa ändringar + Språk + Systemspråk + + Justera textstorleken för WebView + Teckenstorlek + Normal + Stor + Enorm + + Läs in bilder + Växla bildinläsning för t.ex. låg mobildata + + Skärmrotation + Styr automatisk skärmrotering + Förvald + Sensor\n(överskrid systeminställningar) + Porträtt + Landskap + + Ladda Tor-nställningar + Ladda proxyinställningar för Tor (Orbot) HTTP Proxy + Proxy + Aktivera proxy + Använd proxy med dandelion* för att kringgå brandväggar.\nKan kräva omstart. Detta fungerar inte på vissa telefoner. + Värd + Port + Appen måste startas om för att inaktivera proxyanvändning + Orbot-proxyinställningar laddade + + Öppna externa länkar med Chrome Custom Tabs. Chromium eller Google Chrome måste installeras för att använda den här funktionen. \nOBSERVERA: Chrome Custom Tabs använder inte den konfigurerade proxyservern! + + Personliga inställningar + Öppna dina kontoinställningar i diaspora* + Hantera din kontaktlista + Hantera fyrkantstaggar + Sluta följa taggar du redan följer + Ändra Konto + Radera lokal sessionsdata och växla till en annan diaspora*-pod eller -konto + Detta kommer att radera alla kakor och all sessionsdata. Vill du verkligen byta konto? + Rensa cache + Rensa WebView-cache + Dölj automatiskt de övre och undre verktygsfälten när du skrollar + Intellihide-verktygsfält + Lägg till delade-av-meddelande + Lägg till en hänvisning till denna app när du skriver: [via #dandelion] + + Diverse + Total återställning + Rensa alla lokala inställningar som har med appen att göra och logga ut alla konton + Detta kommer att återställa alla ändrade inställningarna på appen till deras standardvärden och loggar ut dig från alla poddar. Dina nedladdade bilder förblir orörda. Är du säker på att du vill fortsätta? + Använd lätt reklamblockering. Reklam finns bland annat i inbyggda vyer + Blockera reklam diff --git a/app/src/main/res/values-tr-rTR/strings-about.xml b/app/src/main/res/values-tr-rTR/strings-about.xml deleted file mode 100644 index 775bb644..00000000 --- a/app/src/main/res/values-tr-rTR/strings-about.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - Hakkında - Lisans - Hata Ayıklama - Uygulama - Cihaz - diaspora* Pod - Hata Ayıklama Günlükleri - Hata Ayıklama Günlüğü (Detaylı) - Uygulama Sürümü: %1$s - Android Sürümü: %1$s - Cihaz Adı: %1$s - Kod adı: %1$s - Pod Profil Adı: %1$s - Pod Adresi: %1$s - Hata ayıklama günlüğü panoya kopyalandı - Koda katkıda bulun! - Kaynağı al - Uygulamayı tercüme et! - Uygulamayı kendi dilinde kullanamıyor musun? Bunu değiştirebilirsin. Neden çeviride bize yardımcı olmuyorsun? Herkesin çeviriye katkıda bulunabilmesi için Crowdin platformunu kullanıyoruz. - Hadi çevirelim - Geri bildirimde bulun! - Hataları Bildir - Herkese duyur! - Uygulamayı paylaş - Hey %1$s ! #dandelion’a bir göz at! - - Yardımcılar - Katkıda Bulunanlar - %1$s<br><br>Teşekkürler! - GNU GPLv3+ License - Üçüncü Parti Kütüphaneler - Şu kütüphaneler kullanıldı: - Daha fazla göster - diff --git a/app/src/main/res/values-tr-rTR/strings-preferences.xml b/app/src/main/res/values-tr-rTR/strings-preferences.xml deleted file mode 100644 index c3c496eb..00000000 --- a/app/src/main/res/values-tr-rTR/strings-preferences.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Üst araç çubuğu akışı yükler - Üst araç çubuğunda boş bir yere tıklayarak akışı başlatabilirsiniz - - Görünüş - - Pod Ayarları - Çalışabilirlik - - - Menü Kaydırıcı - Kullanıcı - Genel - Yönetici - - Tema ve Renkler - Uygulamada hangi renklerin kullanılacağını kontrol edin - Birincil Renk - Araç çubuğu rengi - Vurgu rengi - İlerleme çubuğunun rengi - AMOLED Modu - - Genişletilmiş Bildirimler - Dil - Sistem dili - - Web Görünümünün yazı boyutunu ayarların - Yazı Boyutu - Normal - Büyük - Çok Büyük - - Resimleri yükle - Örneğin veri tasarrufu için resimlerin yüklenmesini ayarlayın - - Ekran döndürme - Otomatik ekran döndürmeyi ayarlayın - Varsayılan - Dikey - Yatay - - Tor hazır ayarını yükle - Tor (Orbot) HTTP Proxy için proxy ayarlarını yükle - Proxy - Proxy etkinleştir - Sunucu - Port - - - - diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 3d4d8733..afcb63ee 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -1,31 +1,117 @@ - - - Yeniden Yükle - - Ayarlar - Bildirimler - Konuşmalar - Yayın - Profil - Görünüm - Aktiviteler - Beğeniler - Yorumlananlar - Bahsetmeler - Herkes - Arama - Kişiler - Değişme Günlüğü - İstatistikler - - Tüm Bildimler - Ayrıca Yorumlar - Gönderine Yorumlar - Beğeniler - - - - + + Yeniden Yükle + + Ayarlar + Bildirimler + Konuşmalar + Yayın + Profil + Görünüm + Aktiviteler + Beğeniler + Yorumlananlar + Bahsetmeler + Herkes + Arama + Kişiler + Değişme Günlüğü + İstatistikler + + Tüm Bildimler + Ayrıca Yorumlar + Gönderine Yorumlar + Beğeniler + + + + + + Hakkında + Lisans + Hata Ayıklama + Uygulama + Cihaz + diaspora* Pod + Hata Ayıklama Günlükleri + Hata Ayıklama Günlüğü (Detaylı) + Uygulama Sürümü: %1$s + Android Sürümü: %1$s + Cihaz Adı: %1$s + Kod adı: %1$s + Pod Profil Adı: %1$s + Pod Adresi: %1$s + Hata ayıklama günlüğü panoya kopyalandı + Koda katkıda bulun! + Kaynağı al + Uygulamayı tercüme et! + Uygulamayı kendi dilinde kullanamıyor musun? Bunu değiştirebilirsin. Neden çeviride bize yardımcı olmuyorsun? Herkesin çeviriye katkıda bulunabilmesi için Crowdin platformunu kullanıyoruz. + Hadi çevirelim + Geri bildirimde bulun! + Hataları Bildir + Herkese duyur! + Uygulamayı paylaş + Hey %1$s ! #dandelion’a bir göz at! + + Yardımcılar + Katkıda Bulunanlar + %1$s<br><br>Teşekkürler! + GNU GPLv3+ License + Üçüncü Parti Kütüphaneler + Şu kütüphaneler kullanıldı: + Daha fazla göster + + + + Üst araç çubuğu akışı yükler + Üst araç çubuğunda boş bir yere tıklayarak akışı başlatabilirsiniz + + Görünüş + + Pod Ayarları + Çalışabilirlik + + + Menü Kaydırıcı + Kullanıcı + Genel + Yönetici + + Tema ve Renkler + Uygulamada hangi renklerin kullanılacağını kontrol edin + Birincil Renk + Araç çubuğu rengi + Vurgu rengi + İlerleme çubuğunun rengi + AMOLED Modu + + Genişletilmiş Bildirimler + Dil + Sistem dili + + Web Görünümünün yazı boyutunu ayarların + Yazı Boyutu + Normal + Büyük + Çok Büyük + + Resimleri yükle + Örneğin veri tasarrufu için resimlerin yüklenmesini ayarlayın + + Ekran döndürme + Otomatik ekran döndürmeyi ayarlayın + Varsayılan + Dikey + Yatay + + Tor hazır ayarını yükle + Tor (Orbot) HTTP Proxy için proxy ayarlarını yükle + Proxy + Proxy etkinleştir + Sunucu + Port + + + diff --git a/app/src/main/res/values-uk-rUA/strings-about.xml b/app/src/main/res/values-uk-rUA/strings-about.xml deleted file mode 100644 index c49f6e3c..00000000 --- a/app/src/main/res/values-uk-rUA/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - Про нас - Ліцензія - Налагодження - Програма - Пристрій - Под Діаспора* - Журнал налагодження - Журнал налагодження (детальний) - Версія програми: %1$s - Версія Android: %1$s - Назва пристрою: %1$s - Кодова назва: %1$s - Назва профілю поду: %1$s - Домен поду: %1$s - Журнал налагодження скопійовано в буфер обміну - dandelion* — це ваша програмка для перегляду соціальної мережі Діаспора*. Для зручності, застосунок додає такі функції, як використання панелей інструментів і підримку проксі-серверів на зразок мережі Tor. - Зробіть внесок у код! - dandelion* розробляється як вільне програмне забезпечення і слідує ідеям проекту Діаспора*. Якщо ви хочете зробити внесок, приєднуйтеся! Зараз ми дуже маленька команда, тож будемо раді будь-якій допомозі! - Отримати вихідний код - Перекласти цю програмку - Цей застосунок недоступний вашою мовою? Ви можете це змінити! Чому б не допомогти нам, переклавши його? Ми використовуємо платформу crowdin, де будь-хто може перекласти програмку. - Хочу перекладати - Залишіть відгук! - dandelion* все ще перебуває у розробці, тому якщо у вас є побажання або відгуки, будь ласка, скористайтеся нашим баг-трекером, щоб ми знали! - Повідомити про помилку - Поділіться з друзями! - Розкажіть про Діаспору і #dandelion друзям і родині! Чому б не написати у блог про свій досвід? Будемо раді почути вашу думку! - Поділитися застосунком - Привіт! Спробуй #dandelion! %1$s - - Розробники - Зараз цю програмку розробляють і підтримують <br><br>%1$s - Учасники - %1$s<br><br>Дякуємо! - Ліцензія GNU GPLv3+ - Сторонні бібліотеки - Використовуються такі бібліотеки: - Ми взяли трохи натхнення і коду з LeafPic. Це також вільне програмне забезпечення, тож користуйтеся! - Хочу знати більше - diff --git a/app/src/main/res/values-uk-rUA/strings-preferences.xml b/app/src/main/res/values-uk-rUA/strings-preferences.xml deleted file mode 100644 index 819e1753..00000000 --- a/app/src/main/res/values-uk-rUA/strings-preferences.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Верхня панель завантажує потік - Натисніть на вільному місці верхньої панелі, щоб відкрити потік - - Вигляд - Мережа - Налаштування поду - Працездатність - - - Повзунок навігації - Налаштування видимості дописів у меню навігації - Користувач - Загальне - Адмін - - Теми і кольори - Налаштування кольорів, які використовуються у програмці - Основний колір - Колір панелей - Контрастний колір - Колір панелі прогресу - Режим AMOLED - Замінити кольори у багатьох частинах програмки на чорний, сприядливий для AMOLED-дисплеїв. Вам треба здійснити перезавантаження, щоб це налаштування запрацювало. Щоб перекладати Діаспору* в темних тонах, Вам також треба активувати темну тему у своїх налаштуваннях обліковки Діаспори*. - - Розширені сповіщення - Додати до дзвоника сповіщень випадне меню з категоріями сповіщень - Змінити мову цієї програмки. Перезавантажте застосунок, щоб зміни запрацювали - Мова - Мова системи - - Налаштування розміру тексту WebView - Розмір шрифту - Звичайний - Великий - Величезний - - Завантаження зображень - Вимкнути завантаження зображень, напр. для зменшення трафіку - - Поворот екрану - Налаштування автоматичного повертання екрану - За замовчуванням - Сенсор\n(ігнорувати системні налаштування) - Портрет - Пейзаж - - Завантажити шаблон налаштувань Tor - Завантажити налаштування проксі для Tor (Orbot) - Проксі - Увімкнути проксі - Пускати трафік dandelion* через проксі для обходу фаєрволів.\nМоже потребувати перезапуску. На деяких телефонах може не працювати. - Хост - Порт - Потрібен перезапуск програмки, щоб вимкнути використання проксі - Завантажено шаблон налаштувань Orbot - - Відкривати зовнішні посилання у Chrome Custom Tabs. Для використання цієї функції має бути встановлений Chromium або Google Chrome.\nВАЖЛИВО: Chrome Custom Tabs не використовують налаштовані проксі-сервери! - - Персональні налаштування - Відкрити налаштування обліковки Діаспори* - Налаштувати список контактів - Керувати мітками - Відписатися від поточних міток - Змінити обліковий запис - Стерти локальні дані сесії і перемкнутися на інший под/обліковий запис Діаспори* - Це видалить усі куки та дані сесії. Ви справді хочете змінити обліковку? - Очистити кеш - Очистити кеш WebView - Автоматично приховувати верхню і нижню панелі при прокручуванні - Інтелектуальне приховування панелей - Додати примітку via - Додати до поширюваних текстів примітку: [via #dandelion] - - Різне - Повне скидання - Стерти усі локальні налаштування програмки і вийти з усіх обліковок - Це зітре усі змінені налаштування застосунку до їхніх значень за замовчуванням і вилогінить вас з усіх подів. Ваші завантажені зображення залишаться на міці. Бажаєте продовжити? - Увімкнути базовий AdBlocker. Реклама може зберегтися, напр., у вбудованих переглядах - Блокувати рекламу - diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 25c3ad87..0994db0f 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -1,81 +1,202 @@ - - - Перезавантажити - - Налаштування - Сповіщення - Розмови - Потік - Профіль - Аспекти - Діяльність - Вподобане - Коментоване - Згадки - Публічне - Пошук - Контакти - Журнал змін - Статистика - - Усі сповіщення - Також прокоментували - Коментар до допису - Вподобано - Згадано - Поширено - Додано - - Помилка: Не вдалося отримати список подів - На жаль, для продовження потрібне з\'єднання з інтернетом - Підтвердження - Ви дійсно бажаєте вийти? - - Ще - Про | Допомога - Відстежувані мітки - Публічна діяльність - Звіти - Поширити посилання як текст - Поширити знімок екрану веб-сторінки - Зробити знімок екрану веб-сторінки - Збереження зображення в - Збереження знімка екрану як: - Адресу посилання скопійовано… - Новий допис - Перейти нагору - Шукати мітки чи людей - Вийти - Перемкнути мобільний/стаціонарний вигляд - Поширити… - за мітками - за людьми - Будь ласка, додайте ім\'я - Поширити посилання - Зберегти зображення - Поділитися зображенням - Відкрити у зовнішньому браузері… - Копіювати адресу посилання у буфер обміну - Копіювати зображення у буфер обміну - - Не вдалося завантажити зображення - - Ви маєте надати право доступу до внутрішньої пам\'яті, щоб зберігати знімки екрану. Після цього треба + + Перезавантажити + + Налаштування + Сповіщення + Розмови + Потік + Профіль + Аспекти + Діяльність + Вподобане + Коментоване + Згадки + Публічне + Пошук + Контакти + Журнал змін + Статистика + + Усі сповіщення + Також прокоментували + Коментар до допису + Вподобано + Згадано + Поширено + Додано + + Помилка: Не вдалося отримати список подів + На жаль, для продовження потрібне з\'єднання з інтернетом + Підтвердження + Ви дійсно бажаєте вийти? + + Ще + Про | Допомога + Відстежувані мітки + Публічна діяльність + Звіти + Поширити посилання як текст + Поширити знімок екрану веб-сторінки + Зробити знімок екрану веб-сторінки + Збереження зображення в + Збереження знімка екрану як: + Адресу посилання скопійовано… + Новий допис + Перейти нагору + Шукати мітки чи людей + Вийти + Перемкнути мобільний/стаціонарний вигляд + Поширити… + за мітками + за людьми + Будь ласка, додайте ім\'я + Поширити посилання + Зберегти зображення + Поділитися зображенням + Відкрити у зовнішньому браузері… + Копіювати адресу посилання у буфер обміну + Копіювати зображення у буфер обміну + + Не вдалося завантажити зображення + + Ви маєте надати право доступу до внутрішньої пам\'яті, щоб зберігати знімки екрану. Після цього треба повністю закрити застосунок або перезапустити пристрій. Якщо ви не дозволяєте доступ до пам\'яті, але хочете використовувати функцію знімків екрана пізніше, ви можете надати доступ пізніше. Будь ласка, відкрийте тоді Налаштування — Програми — dandelion*. У розділі дозволів ви можете надати право «доступу до запису у пам\'ять». - Ви маєте надати право доступу до внутрішньої пам\'яті, щоб зберігати/вивантажувати зображення. Після цього треба + Ви маєте надати право доступу до внутрішньої пам\'яті, щоб зберігати/вивантажувати зображення. Після цього треба повністю закрити застосунок або перезапустити пристрій. Якщо ви не дозволяєте доступ до пам\'яті, але хочете зберігати зображення пізніше, ви можете надати доступ пізніше. Будь ласка, відкрийте тоді Налаштування — Програми — dandelion*. У розділі дозволів ви можете надати право «доступу до запису у пам\'ять». - Доступ заборонено. - Доступ надано. Будь ласка, спробуйте ще раз. - Власний под - Назва поду - Протокол - Адреса поду - Відсутнє значення - Перейти на останню відвідану сторінку в потоці? + Доступ заборонено. + Доступ надано. Будь ласка, спробуйте ще раз. + Власний под + Назва поду + Протокол + Адреса поду + Відсутнє значення + Перейти на останню відвідану сторінку в потоці? + + Про нас + Ліцензія + Налагодження + Програма + Пристрій + Под Діаспора* + Журнал налагодження + Журнал налагодження (детальний) + Версія програми: %1$s + Версія Android: %1$s + Назва пристрою: %1$s + Кодова назва: %1$s + Назва профілю поду: %1$s + Домен поду: %1$s + Журнал налагодження скопійовано в буфер обміну + dandelion* — це ваша програмка для перегляду соціальної мережі Діаспора*. Для зручності, застосунок додає такі функції, як використання панелей інструментів і підримку проксі-серверів на зразок мережі Tor. + Зробіть внесок у код! + dandelion* розробляється як вільне програмне забезпечення і слідує ідеям проекту Діаспора*. Якщо ви хочете зробити внесок, приєднуйтеся! Зараз ми дуже маленька команда, тож будемо раді будь-якій допомозі! + Отримати вихідний код + Перекласти цю програмку + Цей застосунок недоступний вашою мовою? Ви можете це змінити! Чому б не допомогти нам, переклавши його? Ми використовуємо платформу crowdin, де будь-хто може перекласти програмку. + Хочу перекладати + Залишіть відгук! + dandelion* все ще перебуває у розробці, тому якщо у вас є побажання або відгуки, будь ласка, скористайтеся нашим баг-трекером, щоб ми знали! + Повідомити про помилку + Поділіться з друзями! + Розкажіть про Діаспору і #dandelion друзям і родині! Чому б не написати у блог про свій досвід? Будемо раді почути вашу думку! + Поділитися застосунком + Привіт! Спробуй #dandelion! %1$s + + Розробники + Зараз цю програмку розробляють і підтримують <br><br>%1$s + Учасники + %1$s<br><br>Дякуємо! + Ліцензія GNU GPLv3+ + Сторонні бібліотеки + Використовуються такі бібліотеки: + Ми взяли трохи натхнення і коду з LeafPic. Це також вільне програмне забезпечення, тож користуйтеся! + Хочу знати більше + + + + Верхня панель завантажує потік + Натисніть на вільному місці верхньої панелі, щоб відкрити потік + + Вигляд + Мережа + Налаштування поду + Працездатність + + + Повзунок навігації + Налаштування видимості дописів у меню навігації + Користувач + Загальне + Адмін + + Теми і кольори + Налаштування кольорів, які використовуються у програмці + Основний колір + Колір панелей + Контрастний колір + Колір панелі прогресу + Режим AMOLED + Замінити кольори у багатьох частинах програмки на чорний, сприядливий для AMOLED-дисплеїв. Вам треба здійснити перезавантаження, щоб це налаштування запрацювало. Щоб перекладати Діаспору* в темних тонах, Вам також треба активувати темну тему у своїх налаштуваннях обліковки Діаспори*. + + Розширені сповіщення + Додати до дзвоника сповіщень випадне меню з категоріями сповіщень + Змінити мову цієї програмки. Перезавантажте застосунок, щоб зміни запрацювали + Мова + Мова системи + + Налаштування розміру тексту WebView + Розмір шрифту + Звичайний + Великий + Величезний + + Завантаження зображень + Вимкнути завантаження зображень, напр. для зменшення трафіку + + Поворот екрану + Налаштування автоматичного повертання екрану + За замовчуванням + Сенсор\n(ігнорувати системні налаштування) + Портрет + Пейзаж + + Завантажити шаблон налаштувань Tor + Завантажити налаштування проксі для Tor (Orbot) + Проксі + Увімкнути проксі + Пускати трафік dandelion* через проксі для обходу фаєрволів.\nМоже потребувати перезапуску. На деяких телефонах може не працювати. + Хост + Порт + Потрібен перезапуск програмки, щоб вимкнути використання проксі + Завантажено шаблон налаштувань Orbot + + Відкривати зовнішні посилання у Chrome Custom Tabs. Для використання цієї функції має бути встановлений Chromium або Google Chrome.\nВАЖЛИВО: Chrome Custom Tabs не використовують налаштовані проксі-сервери! + + Персональні налаштування + Відкрити налаштування обліковки Діаспори* + Налаштувати список контактів + Керувати мітками + Відписатися від поточних міток + Змінити обліковий запис + Стерти локальні дані сесії і перемкнутися на інший под/обліковий запис Діаспори* + Це видалить усі куки та дані сесії. Ви справді хочете змінити обліковку? + Очистити кеш + Очистити кеш WebView + Автоматично приховувати верхню і нижню панелі при прокручуванні + Інтелектуальне приховування панелей + Додати примітку via + Додати до поширюваних текстів примітку: [via #dandelion] + + Різне + Повне скидання + Стерти усі локальні налаштування програмки і вийти з усіх обліковок + Це зітре усі змінені налаштування застосунку до їхніх значень за замовчуванням і вилогінить вас з усіх подів. Ваші завантажені зображення залишаться на міці. Бажаєте продовжити? + Увімкнути базовий AdBlocker. Реклама може зберегтися, напр., у вбудованих переглядах + Блокувати рекламу diff --git a/app/src/main/res/values-zh-rTW/strings-about.xml b/app/src/main/res/values-zh-rTW/strings-about.xml deleted file mode 100644 index 3edfd0cf..00000000 --- a/app/src/main/res/values-zh-rTW/strings-about.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - 說明 - 授權條款 - 除錯 - 應用程式 - 裝置 - diaspora* 豆莢 - 除錯紀錄 - 除錯紀錄(詳細版) - 應用程式版本: %1$s - Android 版本: %1$s - 裝置名稱: %1$s - 代號: %1$s - 豆莢設定名稱: %1$s - 豆莢網址: %1$s - 已經複製除錯紀錄到剪貼簿了 - dandelion* (蒲公英*) 是你瀏覽 diaspora* 社交網站的好朋友。它讓你的體驗增加了好用的工具列,並且支援像是 Tor 之類的代理伺服器服務。 - 貢獻程式碼! - dandelion* 是自由軟體開發專案,並且追隨 diaspora* 專案的信念。想要貢獻你的心力嗎?那就來吧!目前我們還只是個很小的團隊,任何形式的幫忙都會讓我們足感心! - 取得源碼 - 翻譯應用程式! - 應用程式沒有你使用語言的版本嗎?你可以改變現狀!何不來幫忙我們翻譯呢?我們使用 crowdin 平台,好讓每個人都能夠參與應用程式的翻譯工作。 - 我來翻譯 - 意見回饋! - dandelion* 還在開發階段,所以如果你有任何建議,或是有其他的意見要回饋,請使用我們的臭蟲追蹤網站來讓我們知道! - 回報臭蟲 - 報給人知! - 告訴你的朋友和家人有 #dandelion 這個好東西!何不部落格一下你的使用經驗呢?我們期待聽聽你的故事! - 分享應用程式 - 哇!看看 #dandelion 這套應用程式! %1$s - - 維護人員 - 目前這套應用程式是由以下人員開發與維護: <br><br>%1$s - 貢獻人 - %1$s<br><br>感謝你們! - GNU GPLv3+ 授權條款 - 第三方程式庫 - 我們使用了下列程式庫: - 我們從 LeafPic 應用程式得到一些啟發以及程式碼。去看看吧,它也是自由軟體喔! - 再多說一些 - diff --git a/app/src/main/res/values-zh-rTW/strings-preferences.xml b/app/src/main/res/values-zh-rTW/strings-preferences.xml deleted file mode 100644 index 9defa63f..00000000 --- a/app/src/main/res/values-zh-rTW/strings-preferences.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - 上方工具列可載入流水帳 - 可以點上方工具列的空白區域來進入流水帳 - - 外觀 - 網路 - 豆莢設定 - 操作 - - - 側邊導覽選單 - 控制側邊導覽選單中顯示的項目 - 使用者 - 平常 - 管理員 - - 佈景主題和色彩 - 控制應用程式使用的顏色 - 主要顏色 - 工具列使用的顏色 - 強調顏色 - 進度條使用的顏色 - AMOLED 顯示模式 - 在應用程式中使用適合 AMOLED 螢幕的黑色來顯示。改變這項設定後需要重開應用程式。另外你還需要使用色彩主題 Dark 才會有深色的版面,請到你的 diaspora* 帳號設定頁面修改。 - - 延伸型通知 - 將通知鈴伸展成為顯示通知類別的下拉式選單 - 更改應用程式使用的語言。要重新開啟應用程式才會生效 - 語言 - 系統設定語言 - - 控制網頁視圖中的文字大小 - 字型大小 - 一般 - 較大 - 超大 - - 載入圖片 - 切換是否要載入圖片,以節省行動資料流量等等 - - 畫面旋轉 - 控制畫面自動旋轉功能 - 系統預設 - 感應\n(忽略系統設定) - 直向 - 横向 - - 載入 Tor 的預設值 - 載入使用 Tor (Orbot) HTTP 代理伺服器的設定 - 代理伺服器 - 啓用代理伺服器 - 讓 dandelion* 透用代理伺服器連網來避開防火牆。\n設定後可能需要重新啟動。某些手機上可能會沒有作用。 - 主機 - 通訊埠 - 應用程式要重新啟動以停止使用代理伺服器 - 已經載入 Orbot 的代理伺服器設定了 - - 使用 Chrome Custom Tabs 開啟外部連結。必須要安裝 Chromium 或是 Google Chrome 才能使用這個功能。 -\n請留意:Chrome Custom Tabs 不會使用應用程式設定的代理伺服器! - - 個人設定 - 打開你的 diaspora* 帳號設定頁面 - 管理聯絡人清單 - 管理雜湊標籤 - 停止追蹤目前正在追蹤中的雜湊標籤 - 更換帳號 - 刪除本機連線 session 資料,並改用另外一個 diaspora* 豆莢或帳號 - 將要清除所有的 cookie 和 session 資料。確定真的要切換帳號嗎? - 清除快取資料 - 清除網頁視圖的快取資料 - 當捲動畫面時,自動隱藏上下兩邊的工具列 - 自動隱藏工具列 - 分享時附加應用程式標記 - 在分享的文字之後附加以下應用程式標記: [via #dandelion] - - 其他 - 完全重置 - 將本機上此應用程式的設定全部刪掉,並將所有帳號都登出 - 將要重設此應用程式的所有設定為預設值,並登出你在所有豆莢的帳號。不過不會變動已經下載了的圖片。確定要繼續嗎? - 開啟基本的廣告封鎖器。廣告可能會出現在嵌入式視圖之類的地方。 - 廣告封鎖 - diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e5b84697..50bffbc7 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,79 +1,201 @@ - - - 重新下載 - - 設定 - 通知 - 對話 - 流水帳 - 個人檔案 - 社交面 - 活動 - 按過讚 - 留言 - 指指點點 - 公開 - 搜尋 - 聯絡人 - 更新紀錄 - 統計資料 - - 全部的通知 - 其他留言 - 貼文被留言 - 被按讚 - 被指指點點 - 被分享 - 開始分享 - - 錯誤: 無法取得豆莢列表! - 抱歉,要有網路連線才能繼續 - 確認 - 確定要退出嗎? - - 再來 - 說明 | 幫助 - 追蹤中的標籤 - 公開活動 - 回報 - 分享連結文字 - 分享網頁截圖 - 產生網路截圖 - 圖片儲存為 - 截圖儲存為: - 已經複製了連結網址… - 新增貼文 - 回到最上面 - 找人或標籤 - 退出應用程式 - 切換行動/桌上型版面 - 分享… - 找標籤 - 找人 - 請輸入名稱 - 分享連結網址 - 儲存圖片 - 分享圖片 - 用外部瀏覽器開啟… - 將連結網址複製到剪貼簿 - 將圖片網址複製到剪貼簿 - - 無法載入圖片 - - 必須要給予應用程式「儲存空間」的權限,才能儲存畫面截圖。給予後應該要將應用程式完全結束,或是將裝置重新啟動。如果你現在沒給權限,之後才想要使用截圖功能,還是可以重給權限。作法是:先打開「設定」—應用程式—dandelion*,在「權限」的地方切換是否給予「儲存空間」權限。 - 必須要給予應用程式「儲存空間」的權限,才能儲存或上傳圖片。給予後應該要將應用程式完全結束,或是將裝置重新啟動。如果你現在沒給權限,之後才想要儲存圖片,還是可以重給權限。作法是:先打開「設定」—應用程式—dandelion*,在「權限」的地方切換是否給予「儲存空間」權限。 - 權限被拒絕了。 - 取得權限了。請再重試一次。 - 自選豆莢 - 豆莢名稱 - 網路協定 - 豆莢網址 - 沒有填值 - 回到最近瀏覽的流水帳頁面嗎? - 隱藏主畫面中的狀態列 - 隱藏狀態列 - 在主畫面中顯示標題列 - 顯示標題列 + + 重新下載 + + 設定 + 通知 + 對話 + 流水帳 + 個人檔案 + 社交面 + 活動 + 按過讚 + 留言 + 指指點點 + 公開 + 搜尋 + 聯絡人 + 更新紀錄 + 統計資料 + + 全部的通知 + 其他留言 + 貼文被留言 + 被按讚 + 被指指點點 + 被分享 + 開始分享 + + 錯誤: 無法取得豆莢列表! + 抱歉,要有網路連線才能繼續 + 確認 + 確定要退出嗎? + + 再來 + 說明 | 幫助 + 追蹤中的標籤 + 公開活動 + 回報 + 分享連結文字 + 分享網頁截圖 + 產生網路截圖 + 圖片儲存為 + 截圖儲存為: + 已經複製了連結網址… + 新增貼文 + 回到最上面 + 找人或標籤 + 退出應用程式 + 切換行動/桌上型版面 + 分享… + 找標籤 + 找人 + 請輸入名稱 + 分享連結網址 + 儲存圖片 + 分享圖片 + 用外部瀏覽器開啟… + 將連結網址複製到剪貼簿 + 將圖片網址複製到剪貼簿 + + 無法載入圖片 + + 必須要給予應用程式「儲存空間」的權限,才能儲存畫面截圖。給予後應該要將應用程式完全結束,或是將裝置重新啟動。如果你現在沒給權限,之後才想要使用截圖功能,還是可以重給權限。作法是:先打開「設定」—應用程式—dandelion*,在「權限」的地方切換是否給予「儲存空間」權限。 + 必須要給予應用程式「儲存空間」的權限,才能儲存或上傳圖片。給予後應該要將應用程式完全結束,或是將裝置重新啟動。如果你現在沒給權限,之後才想要儲存圖片,還是可以重給權限。作法是:先打開「設定」—應用程式—dandelion*,在「權限」的地方切換是否給予「儲存空間」權限。 + 權限被拒絕了。 + 取得權限了。請再重試一次。 + 自選豆莢 + 豆莢名稱 + 網路協定 + 豆莢網址 + 沒有填值 + 回到最近瀏覽的流水帳頁面嗎? + 隱藏主畫面中的狀態列 + 隱藏狀態列 + 在主畫面中顯示標題列 + 顯示標題列 + + 說明 + 授權條款 + 除錯 + 應用程式 + 裝置 + diaspora* 豆莢 + 除錯紀錄 + 除錯紀錄(詳細版) + 應用程式版本: %1$s + Android 版本: %1$s + 裝置名稱: %1$s + 代號: %1$s + 豆莢設定名稱: %1$s + 豆莢網址: %1$s + 已經複製除錯紀錄到剪貼簿了 + dandelion* (蒲公英*) 是你瀏覽 diaspora* 社交網站的好朋友。它讓你的體驗增加了好用的工具列,並且支援像是 Tor 之類的代理伺服器服務。 + 貢獻程式碼! + dandelion* 是自由軟體開發專案,並且追隨 diaspora* 專案的信念。想要貢獻你的心力嗎?那就來吧!目前我們還只是個很小的團隊,任何形式的幫忙都會讓我們足感心! + 取得源碼 + 翻譯應用程式! + 應用程式沒有你使用語言的版本嗎?你可以改變現狀!何不來幫忙我們翻譯呢?我們使用 crowdin 平台,好讓每個人都能夠參與應用程式的翻譯工作。 + 我來翻譯 + 意見回饋! + dandelion* 還在開發階段,所以如果你有任何建議,或是有其他的意見要回饋,請使用我們的臭蟲追蹤網站來讓我們知道! + 回報臭蟲 + 報給人知! + 告訴你的朋友和家人有 #dandelion 這個好東西!何不部落格一下你的使用經驗呢?我們期待聽聽你的故事! + 分享應用程式 + 哇!看看 #dandelion 這套應用程式! %1$s + + 維護人員 + 目前這套應用程式是由以下人員開發與維護: <br><br>%1$s + 貢獻人 + %1$s<br><br>感謝你們! + GNU GPLv3+ 授權條款 + 第三方程式庫 + 我們使用了下列程式庫: + 我們從 LeafPic 應用程式得到一些啟發以及程式碼。去看看吧,它也是自由軟體喔! + 再多說一些 + + + + 上方工具列可載入流水帳 + 可以點上方工具列的空白區域來進入流水帳 + + 外觀 + 網路 + 豆莢設定 + 操作 + + + 側邊導覽選單 + 控制側邊導覽選單中顯示的項目 + 使用者 + 平常 + 管理員 + + 佈景主題和色彩 + 控制應用程式使用的顏色 + 主要顏色 + 工具列使用的顏色 + 強調顏色 + 進度條使用的顏色 + AMOLED 顯示模式 + 在應用程式中使用適合 AMOLED 螢幕的黑色來顯示。改變這項設定後需要重開應用程式。另外你還需要使用色彩主題 Dark 才會有深色的版面,請到你的 diaspora* 帳號設定頁面修改。 + + 延伸型通知 + 將通知鈴伸展成為顯示通知類別的下拉式選單 + 更改應用程式使用的語言。要重新開啟應用程式才會生效 + 語言 + 系統設定語言 + + 控制網頁視圖中的文字大小 + 字型大小 + 一般 + 較大 + 超大 + + 載入圖片 + 切換是否要載入圖片,以節省行動資料流量等等 + + 畫面旋轉 + 控制畫面自動旋轉功能 + 系統預設 + 感應\n(忽略系統設定) + 直向 + 横向 + + 載入 Tor 的預設值 + 載入使用 Tor (Orbot) HTTP 代理伺服器的設定 + 代理伺服器 + 啓用代理伺服器 + 讓 dandelion* 透用代理伺服器連網來避開防火牆。\n設定後可能需要重新啟動。某些手機上可能會沒有作用。 + 主機 + 通訊埠 + 應用程式要重新啟動以停止使用代理伺服器 + 已經載入 Orbot 的代理伺服器設定了 + + 使用 Chrome Custom Tabs 開啟外部連結。必須要安裝 Chromium 或是 Google Chrome 才能使用這個功能。 +\n請留意:Chrome Custom Tabs 不會使用應用程式設定的代理伺服器! + + 個人設定 + 打開你的 diaspora* 帳號設定頁面 + 管理聯絡人清單 + 管理雜湊標籤 + 停止追蹤目前正在追蹤中的雜湊標籤 + 更換帳號 + 刪除本機連線 session 資料,並改用另外一個 diaspora* 豆莢或帳號 + 將要清除所有的 cookie 和 session 資料。確定真的要切換帳號嗎? + 清除快取資料 + 清除網頁視圖的快取資料 + 當捲動畫面時,自動隱藏上下兩邊的工具列 + 自動隱藏工具列 + 分享時附加應用程式標記 + 在分享的文字之後附加以下應用程式標記: [via #dandelion] + + 其他 + 完全重置 + 將本機上此應用程式的設定全部刪掉,並將所有帳號都登出 + 將要重設此應用程式的所有設定為預設值,並登出你在所有豆莢的帳號。不過不會變動已經下載了的圖片。確定要繼續嗎? + 開啟基本的廣告封鎖器。廣告可能會出現在嵌入式視圖之類的地方。 + 廣告封鎖 diff --git a/app/src/main/res/values/strings-about.xml b/app/src/main/res/values/strings-about.xml deleted file mode 100644 index a877f6cb..00000000 --- a/app/src/main/res/values/strings-about.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - About - License - Debugging - Application - Device - diaspora* Pod - Debug Log - Debug Log (Verbose) - App Version: %1$s - Android Version: %1$s - Device Name: %1$s - Codename: %1$s - Pod Profile Name: %1$s - Pod Domain: %1$s - Debug log copied to clipboard - - @string/app_name - dandelion* is your companion app for browsing the social network diaspora*. It adds features like useful toolbars and support for proxy servers like the Tor Network to your social experience. - - Contribute Code! - dandelion* is developed free as in Freedom and follows the ideas of the diaspora* project. If you want to contribute, go ahead! Currently we are a very small team, so we greatly appreciate any kind of help! - Get the source - https://github.com/Diaspora-for-Android/dandelion - - Translate the App! - The app is not available in your language? You can change that! Why don\'t you help us by translating it? We use the crowdin platform to enable anyone to translate the app. - Let me translate - https://crowdin.com/project/diaspora-for-android/invite - - Give Feedback! - dandelion* is still in development, so if you have suggestions or any kind of feedback, please use our bug tracker to let us know! - Report Bugs - https://github.com/Diaspora-for-Android/dandelion/issues - - Spread the word! - Tell your friends and family about diaspora* and #dandelion! Why don\'t you blog about your experiences? We\'d love to hear from you! - Share the app - Hey! Check out #dandelion! %1$s - https://f-droid.org/repository/browse/?fdid=com.github.dfa.diaspora_android - - - - Maintainers - This app is currently being developed and maintained by <br><br>%1$s - Contributors - %1$s<br><br>Thank you! - @string/about_activity__title_about_license - - Copyright © 2015-2018 - \nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - \n - \nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - GNU GPLv3+ License - https://www.gnu.org/licenses/gpl-3.0.html - Third-Party Libraries - The following libraries are used: - @string/pref_title__sub_miscelaneous - We took some inspiration and code from LeafPic. Go check it out, it\'s free software as well! - Tell me more - https://github.com/HoraApps/LeafPic - - diff --git a/app/src/main/res/values/strings-not_translatable.xml b/app/src/main/res/values/strings-not_translatable.xml index 4dc1878f..3f399d32 100644 --- a/app/src/main/res/values/strings-not_translatable.xml +++ b/app/src/main/res/values/strings-not_translatable.xml @@ -1,3 +1,4 @@ + dandelion* @@ -16,6 +17,23 @@ http https + @string/about_activity__title_about_license + + Copyright © 2015-2018 + \nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + \n + \nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + https://www.gnu.org/licenses/gpl-3.0.html + @string/pref_title__sub_miscelaneous + https://github.com/HoraApps/LeafPic + https://f-droid.org/repository/browse/?fdid=com.github.dfa.diaspora_android + @string/app_name + https://github.com/Diaspora-for-Android/dandelion + https://crowdin.com/project/diaspora-for-android/invite + https://github.com/Diaspora-for-Android/dandelion/issues + + not_implemented @string/not_implemented diff --git a/app/src/main/res/values/strings-preferences.xml b/app/src/main/res/values/strings-preferences.xml deleted file mode 100644 index 4fd9f112..00000000 --- a/app/src/main/res/values/strings-preferences.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - Top toolbar loads stream - Click an empty space in the top toolbar to open the stream - - - - Appearance - Network - Pod settings - Operability - - - - Navigation Slider - Control visibility of entries in the navigation drawer - User - General - Admin - - - Theme and Colors - Control which colors are used throughout the app - Primary Color - Color of the toolbars - Accent Color - Color of the progressbar - AMOLED Mode - Override colors with AMOLED display friendly black at many parts of the app. You need to restart to toggle this setting. To browse diaspora* in dark you also need to activate the Dark theme, which can be found in your personal diaspora* account settings. - - - Extended Notifications - Extend the notifications bell with a dropdown menu that shows notification categories - - Change language of this app. Restart app for changes to take effect - Language - System language - - - Control text size of the WebView - Font size - Normal - Large - Huge - - - Load images - Toggle image loading to eg. save mobile data - - - Screen rotation - Control automatic screen rotation - Default - Sensor\n(ignore system settings) - Portrait - Landscape - - - Load Tor Preset - Load proxy settings for Tor (Orbot) HTTP Proxy - Proxy - Enable Proxy - Proxy dandelion*\'s traffic to circumvent firewalls.\nMay require restart. This might not work on some phones. - Host - Port - App needs to restart to disable proxy usage - Orbot proxy preset loaded - - - - Open external links with Chrome Custom Tabs. Chromium, Firefox or Google Chrome needs to be installed in order to use this feature. \nIMPORTANT NOTE: Chrome Custom Tabs do not use configured proxy servers! - - - Personal settings - Open your diaspora* account settings - Manage your contact list - - Manage Hashtags - Unfollow already followed hashtags - - Change Account - Erase local session data and switch to another diaspora* pod/account - This will erase all cookies and session data. Do you really want to change your account? - - Clear cache - Clear WebView cache - - - Automatically hide top and bottom toolbars while scrolling - Intellihide Toolbars - - Append shared-by-notice - Append a reference to this app to shared texts: [via #dandelion] - - - Miscellaneous - - Full Reset - Locally wipe all settings related to the app and log out from all accounts - - This will reset all changed settings of the app to their default values and log you out from all pods. Your downloaded images will stay untouched. Are you sure you want to proceed? - - Enable basic AdBlocker. Ads may be included e.g. in embedded views - Block advertisements - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7a40626b..f85f2d9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ + Open navigation drawer @@ -99,4 +100,158 @@ Show title in the main view Show title Launcher shortcut + + + + Top toolbar loads stream + Click an empty space in the top toolbar to open the stream + + + Appearance + Network + Pod settings + Operability + + + + Navigation Slider + Control visibility of entries in the navigation drawer + User + General + Admin + + + Theme and Colors + Control which colors are used throughout the app + Primary Color + Color of the toolbars + Accent Color + Color of the progressbar + AMOLED Mode + Override colors with AMOLED display friendly black at many parts of the app. You need to restart to toggle this setting. To browse diaspora* in dark you also need to activate the Dark theme, which can be found in your personal diaspora* account settings. + + + Extended Notifications + Extend the notifications bell with a dropdown menu that shows notification categories + + Change language of this app. Restart app for changes to take effect + Language + System language + + + Control text size of the WebView + Font size + Normal + Large + Huge + + + Load images + Toggle image loading to eg. save mobile data + + + Screen rotation + Control automatic screen rotation + Default + Sensor\n(ignore system settings) + Portrait + Landscape + + + Load Tor Preset + Load proxy settings for Tor (Orbot) HTTP Proxy + Proxy + Enable Proxy + Proxy dandelion*\'s traffic to circumvent firewalls.\nMay require restart. This might not work on some phones. + Host + Port + App needs to restart to disable proxy usage + Orbot proxy preset loaded + + + + Open external links with Chrome Custom Tabs. Chromium, Firefox or Google Chrome needs to be installed in order to use this feature. \nIMPORTANT NOTE: Chrome Custom Tabs do not use configured proxy servers! + + + Personal settings + Open your diaspora* account settings + Manage your contact list + + Manage Hashtags + Unfollow already followed hashtags + + Change Account + Erase local session data and switch to another diaspora* pod/account + This will erase all cookies and session data. Do you really want to change your account? + + Clear cache + Clear WebView cache + + + Automatically hide top and bottom toolbars while scrolling + Intellihide Toolbars + + Append shared-by-notice + Append a reference to this app to shared texts: [via #dandelion] + + + Miscellaneous + + Full Reset + Locally wipe all settings related to the app and log out from all accounts + + This will reset all changed settings of the app to their default values and log you out from all pods. Your downloaded images will stay untouched. Are you sure you want to proceed? + + Enable basic AdBlocker. Ads may be included e.g. in embedded views + Block advertisements + + + About + License + Debugging + Application + Device + diaspora* Pod + Debug Log + Debug Log (Verbose) + App Version: %1$s + Android Version: %1$s + Device Name: %1$s + Codename: %1$s + Pod Profile Name: %1$s + Pod Domain: %1$s + Debug log copied to clipboard + + dandelion* is your companion app for browsing the social network diaspora*. It adds features like useful toolbars and support for proxy servers like the Tor Network to your social experience. + + Contribute Code! + dandelion* is developed free as in Freedom and follows the ideas of the diaspora* project. If you want to contribute, go ahead! Currently we are a very small team, so we greatly appreciate any kind of help! + Get the source + + Translate the App! + The app is not available in your language? You can change that! Why don\'t you help us by translating it? We use the crowdin platform to enable anyone to translate the app. + Let me translate + + Give Feedback! + dandelion* is still in development, so if you have suggestions or any kind of feedback, please use our bug tracker to let us know! + Report Bugs + + Spread the word! + Tell your friends and family about diaspora* and #dandelion! Why don\'t you blog about your experiences? We\'d love to hear from you! + Share the app + Hey! Check out #dandelion! %1$s + + + + Maintainers + This app is currently being developed and maintained by <br><br>%1$s + Contributors + %1$s<br><br>Thank you! + + GNU GPLv3+ License + Third-Party Libraries + The following libraries are used: + We took some inspiration and code from LeafPic. Go check it out, it\'s free software as well! + Tell me more + From 099eb9ca78f08f62311dcdc7f7a06259bc858125 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Wed, 9 May 2018 03:25:23 +0200 Subject: [PATCH 25/31] Update supportlib --- build.gradle | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 85e39a33..5c5bfd78 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,5 @@ +import java.text.SimpleDateFormat + // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -9,7 +11,7 @@ buildscript { // https://developer.android.com/studio/releases/gradle-plugin.html ext.version_gradle_tools = "3.1.0" // https://developer.android.com/topic/libraries/support-library/revisions.html - ext.version_library_appcompat = "27.1.0" + ext.version_library_appcompat = "27.1.1" // https://github.com/JakeWharton/butterknife/releases ext.version_library_butterknife = "8.8.1" // https://github.com/guardianproject/NetCipher/releases @@ -88,3 +90,10 @@ ext.getGitHash = { -> return 'unknown' } } +@SuppressWarnings(["UnnecessaryQualifiedReference", "SpellCheckingInspection", "GroovyUnusedDeclaration"]) +// Returns the build date in a RFC3339 compatible format. TZ is always converted to UTC +static String getBuildDate() { + final SimpleDateFormat RFC3339_LIKE = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'") + RFC3339_LIKE.setTimeZone(TimeZone.getTimeZone("UTC")) + return RFC3339_LIKE.format(new Date()) +} From 65ba10712f498d95911f198597e91de9f9529fdb Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 13 May 2018 12:08:27 +0200 Subject: [PATCH 26/31] Update paths --- .github/ISSUE_TEMPLATE.md | 2 +- README.md | 20 +++---- .../activity/MainActivity.java | 2 +- .../service/FetchPodsService.java | 2 +- .../net/gsantner/opoc/util/ContextUtils.java | 57 ++++++++++++++++++- .../gsantner/opoc/util/PermissionChecker.java | 4 +- .../net/gsantner/opoc/util/ShareUtil.java | 7 ++- .../res/values/strings-not_translatable.xml | 8 +-- build.gradle | 2 +- metadata/en-US/full_description.txt | 6 +- 10 files changed, 82 insertions(+), 28 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 1cfcaa79..afecfe1a 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -23,5 +23,5 @@ If a crash is happening a log is needed. Screenshots or demonstration videos are always helpful too. About logging: - https://gsantner.net/android-contribution-guide/?packageid=com.github.dfa.diaspora_android&name=dandelion&web=https://github.com/diaspora-for-android/dandelion#logcat + https://gsantner.net/android-contribution-guide/?packageid=com.github.dfa.diaspora_android&name=dandelion&web=https://github.com/gsantner/dandelion#logcat --> diff --git a/README.md b/README.md index bcdadee7..15296ffe 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -[![GitHub release](https://img.shields.io/github/tag/diaspora-for-android/dandelion.svg)](https://github.com/diaspora-for-android/dandelion/releases) -[![Build Status](https://travis-ci.org/Diaspora-for-Android/dandelion.svg?branch=master)](https://travis-ci.org/Diaspora-for-Android/dandelion) -[![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fdiaspora-for-android%2Fdandelion.git&mail=gro.xobliam@@rentnasg) +[![GitHub release](https://img.shields.io/github/tag/gsantner/dandelion.svg)](https://github.com/gsantner/dandelion/releases) +[![Build Status](https://travis-ci.org/gsantner/dandelion.svg?branch=master)](https://travis-ci.org/gsantner/dandelion) +[![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fgsantner%2Fdandelion.git&mail=gro.xobliam@@rentnasg) [![Chat - Matrix](https://img.shields.io/badge/chat-on%20matrix-blue.svg)](https://matrix.to/#/#dandelion:matrix.org) [![Chat - FreeNode IRC](https://img.shields.io/badge/chat-on%20irc-blue.svg)](https://kiwiirc.com/client/irc.freenode.net/?nick=dandelion-anon|?##dandelion) -[![Donate Bitcoin](https://img.shields.io/badge/donate-bitcoin-orange.svg)](https://gsantner.net/supportme/?project=dandelion&source=readme) +[![Donate Bitcoin](https://img.shields.io/badge/support-project-orange.svg)](https://gsantner.net/supportme/?project=dandelion&source=readme) [![Donate LiberaPay](https://img.shields.io/badge/donate-liberapay-orange.svg)](https://liberapay.com/gsantner/donate) # dandelion\* @@ -39,9 +39,9 @@ dandelion\* requires access to the Internet and to external storage to be able t ## Contributions The project is always open for contributions and accepts pull requests. -The project uses [AOSP Java Code Style](https://source.android.com/source/code-style#follow-field-naming-conventions), with one exception: private members are `_camelCase` instead of `mBigCamel`. You may use Android Studios _auto reformat feature_ before sending a PR. +The project uses [AOSP Java Code Style](https://source.android.com/source/code-style#follow-field-naming-conventions), with one exception: private members are `_camelCase` instead of `mBigCamel`. You may use Android Studios _auto reformat feature_ before sending a PR. See [gsantner's android contribution guide](https://gsantner.net/android-contribution-guide/?packageid=com.github.dfa.diaspora_android&name=dandelion&web=https://github.com/gsantner/dandelion#logcat) for more information. -Translations can be contributed on GitHub or via [E-Mail](http://gsantner.net/#contact). You can use Stringlate ([![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fdiaspora-for-android%2Fdandelion.git)) to translate the project directly on your Android phone. It allows you to export as E-Mail attachement and to post on GitHub. +Translations can be contributed on GitHub or via [E-Mail](https://gsantner.net/#contact). You can use Stringlate ([![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fgsantner%2Fdandelion.git)) to translate the project directly on your Android phone. It allows you to export as E-Mail attachement and to post on GitHub. Join our IRC or Matrix channel (bridged) and say hello! Don't be afraid to start talking. [![Chat - Matrix](https://img.shields.io/badge/chat-on%20matrix-blue.svg)](https://matrix.to/#/#dandelion:matrix.org) [![Chat - FreeNode IRC](https://img.shields.io/badge/chat-on%20irc-blue.svg)](https://kiwiirc.com/client/irc.freenode.net/?nick=dandelion-anon|?##dandelion) @@ -49,14 +49,14 @@ Note that the main project members are working on this project for free during l #### Resources -* Project: [Changelog](/CHANGELOG.md) | [Issues level/beginner](https://github.com/diaspora-for-android/dandelion/issues?q=is%3Aissue+is%3Aopen+label%3Alevel%2Fbeginner) | [License](/LICENSE.txt) | [CoC](/CODE_OF_CONDUCT.md) +* Project: [Changelog](/CHANGELOG.md) | [Issues level/beginner](https://github.com/gsantner/dandelion/issues?q=is%3Aissue+is%3Aopen+label%3Alevel%2Fbeginner) | [License](/LICENSE.txt) | [CoC](/CODE_OF_CONDUCT.md) * Project diaspora\* account: [dandelion00@diasp.org](https://diasp.org/people/48b78420923501341ef3782bcb452bd5) * diaspora\*: [GitHub](https://github.com/diaspora/diaspora) | [Web](https://diasporafoundation.org) | [d\* HQ account](https://pod.diaspora.software/people/7bca7c80311b01332d046c626dd55703) * App on F-Droid: [Metadata](https://gitlab.com/fdroid/fdroiddata/blob/master/metadata/com.github.dfa.diaspora_android.txt) | [Page](https://f-droid.org/packages/com.github.dfa.diaspora_android/) | [Wiki](https://f-droid.org/wiki/page/com.github.dfa.diaspora_android) | [Build log](https://f-droid.org/wiki/page/com.github.dfa.diaspora_android/lastbuild) ## Licensing -dandelion\* is released under GNU GENERAL PUBLIC LICENSE (see [LICENCE](https://github.com/Diaspora-for-Android/dandelion/blob/master/LICENSE.md)). +dandelion\* is released under GNU GENERAL PUBLIC LICENSE (see [LICENCE](https://github.com/gsantner/dandelion/blob/master/LICENSE.md)). The app is licensed GPL v3. Localization files and resources (strings\*.xml) are licensed CC0 1.0. For more licensing informations, see [`3rd party licenses`](/app/src/main/res/raw/licenses_3rd_party.md). @@ -78,7 +78,7 @@ For more licensing informations, see [`3rd party licenses`](/app/src/main/res/ra ### Notice #### Maintainers -- gsantner ([GitHub](https://github.com/gsantner), [Web](https://gsantner.net), [diaspora*](https://pod.geraspora.de/people/d1cbdd70095301341e834860008dbc6c)) - - Bitcoin: [1B9ZyYdQoY9BxMe9dRUEKaZbJWsbQqfXU5](http://gsantner.net/donate/#donate) +- gsantner ([GitHub](https://github.com/gsantner), [Web](https://gsantner.net/supportme/?project=dandelion&source=readme), [diaspora*](https://pod.geraspora.de/people/d1cbdd70095301341e834860008dbc6c)) + - Bitcoin: [1B9ZyYdQoY9BxMe9dRUEKaZbJWsbQqfXU5](https://gsantner.net/donate/#donate) - vanitasvitae ([GitHub](https://github.com/vanitasvitae), [diaspora*](https://pod.geraspora.de/people/bbd7af90fbec013213e34860008dbc6c)) - Bitcoin: 1Ao3W6NaQv3xKppviB7RSFKjHo6PGd8RTy diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 099d505f..1488e6de 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -337,7 +337,7 @@ public class MainActivity extends ThemedActivity // This URL seems to be called somehow, but it doesn't make sense ;) toolbarTop.postDelayed(() -> { Intent i = new Intent(ACTION_OPEN_EXTERNAL_URL); - i.putExtra(EXTRA_URL, "https://github.com/Diaspora-for-Android/dandelion/blob/master/README.md"); + i.putExtra(EXTRA_URL, "https://github.com/gsantner/dandelion/blob/master/README.md"); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); }, 1000); return; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/service/FetchPodsService.java b/app/src/main/java/com/github/dfa/diaspora_android/service/FetchPodsService.java index 3e594308..d9a24ecd 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/service/FetchPodsService.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/service/FetchPodsService.java @@ -59,7 +59,7 @@ public class FetchPodsService extends Service { } class GetPodsTask extends AsyncTask { - private static final String PODDY_PODLIST_URL = "https://raw.githubusercontent.com/Diaspora-for-Android/dandelion/master/app/src/main/res/raw/podlist.json"; + private static final String PODDY_PODLIST_URL = "https://raw.githubusercontent.com/gsantner/dandelion/master/app/src/main/res/raw/podlist.json"; private final Service service; diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index 17d64424..ba96c11b 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -166,7 +166,7 @@ public class ContextUtils { public String getAppVersionName() { try { PackageManager manager = _context.getPackageManager(); - PackageInfo info = manager.getPackageInfo(_context.getPackageName(), 0); + PackageInfo info = manager.getPackageInfo(getPackageName(), 0); return info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); @@ -174,6 +174,39 @@ public class ContextUtils { } } + public String getAppInstallationSource() { + String src = null; + try { + src = _context.getPackageManager().getInstallerPackageName(getPackageName()); + } catch (Exception ignored) { + } + if (TextUtils.isEmpty(src)) { + return "Sideloaded"; + } else if (src.toLowerCase().contains(".amazon.")) { + return "Amazon Appstore"; + } + switch (src) { + case "com.android.vending": + case "com.google.android.feedback": { + return "Google Play Store"; + } + case "org.fdroid.fdroid.privileged": + case "org.fdroid.fdroid": { + return "F-Droid"; + } + case "com.github.yeriomin.yalpstore": { + return "Yalp Store"; + } + case "cm.aptoide.pt": { + return "Aptoide"; + } + case "com.android.packageinstaller": { + return "Package Installer"; + } + } + return src; + } + /** * Send a {@link Intent#ACTION_VIEW} Intent with given paramter * If the parameter is an string a browser will get triggered @@ -189,6 +222,14 @@ public class ContextUtils { } } + /** + * Get this apps package name. The builtin method may fail when used with flavors + */ + public String getPackageName() { + String pkg = rstr("manifest_package_id"); + return pkg != null ? pkg : _context.getPackageName(); + } + /** * Get field from ${applicationId}.BuildConfig * May be helpful in libraries, where a access to @@ -198,8 +239,7 @@ public class ContextUtils { * Falls back to applicationId of the app which may differ from manifest. */ public Object getBuildConfigValue(String fieldName) { - String pkg = rstr("manifest_package_id"); - pkg = (pkg != null ? pkg : _context.getPackageName()) + ".BuildConfig"; + String pkg = getPackageName() + ".BuildConfig"; try { Class c = Class.forName(pkg); return c.getField(fieldName).get(null); @@ -231,6 +271,17 @@ public class ContextUtils { return defaultValue; } + /** + * Get a BuildConfig string value + */ + public Integer bcint(String fieldName, int defaultValue) { + Object field = getBuildConfigValue(fieldName); + if (field != null && field instanceof Integer) { + return (Integer) field; + } + return defaultValue; + } + /** * Check if this is a gplay build (requires BuildConfig field) */ diff --git a/app/src/main/java/net/gsantner/opoc/util/PermissionChecker.java b/app/src/main/java/net/gsantner/opoc/util/PermissionChecker.java index 524c3065..2f0bbc68 100644 --- a/app/src/main/java/net/gsantner/opoc/util/PermissionChecker.java +++ b/app/src/main/java/net/gsantner/opoc/util/PermissionChecker.java @@ -21,9 +21,9 @@ import java.io.File; @SuppressWarnings({"unused", "WeakerAccess"}) public class PermissionChecker { - private static final int CODE_PERMISSION_EXTERNAL_STORAGE = 4000; + protected static final int CODE_PERMISSION_EXTERNAL_STORAGE = 4000; - private Activity _activity; + protected Activity _activity; public PermissionChecker(Activity activity) { _activity = activity; diff --git a/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java b/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java index 21932cd6..46ae484d 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java +++ b/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java @@ -54,6 +54,7 @@ public class ShareUtil { public final static String EXTRA_FILEPATH = "real_file_path_2"; public final static SimpleDateFormat SDF_RFC3339_ISH = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm", Locale.getDefault()); public final static SimpleDateFormat SDF_SHORT = new SimpleDateFormat("yyMMdd-HHmm", Locale.getDefault()); + public final static String MIME_TEXT_PLAIN = "text/plain"; protected Context _context; @@ -162,7 +163,7 @@ public class ShareUtil { public void shareText(String text, @Nullable String mimeType) { Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, text); - intent.setType(mimeType != null ? mimeType : "text/plain"); + intent.setType(mimeType != null ? mimeType : MIME_TEXT_PLAIN); showChooser(intent, null); } @@ -419,7 +420,7 @@ public class ShareUtil { fileStr = "/" + fileStr; } // Some do add some custom prefix - for (String prefix : new String[]{"file", "document", "root_files"}) { + for (String prefix : new String[]{"file", "document", "root_files", "name"}) { if (fileStr.startsWith(prefix)) { fileStr = fileStr.substring(prefix.length()); } @@ -443,6 +444,8 @@ public class ShareUtil { tmpf = new File(Uri.decode(fileStr)); if (tmpf.exists()) { return tmpf; + } else if ((tmpf = new File(fileStr)).exists()) { + return tmpf; } } } diff --git a/app/src/main/res/values/strings-not_translatable.xml b/app/src/main/res/values/strings-not_translatable.xml index 3f399d32..260b48b7 100644 --- a/app/src/main/res/values/strings-not_translatable.xml +++ b/app/src/main/res/values/strings-not_translatable.xml @@ -6,7 +6,7 @@ \n\n\n_________________________\n **Tags:** #dandelíon \n\n - *via [dandelion*](/people?q=dandelion00%40diasp.org) client [(Source)](https://github.com/Diaspora-for-Android/dandelion)* + *via [dandelion*](/people?q=dandelion00%40diasp.org) client [(Source)](https://github.com/gsantner/dandelion)* Tor @@ -29,9 +29,9 @@ https://github.com/HoraApps/LeafPic https://f-droid.org/repository/browse/?fdid=com.github.dfa.diaspora_android @string/app_name - https://github.com/Diaspora-for-Android/dandelion - https://crowdin.com/project/diaspora-for-android/invite - https://github.com/Diaspora-for-Android/dandelion/issues + https://github.com/gsantner/dandelion + https://crowdin.com/project/gsantner/invite + https://github.com/gsantner/dandelion/issues diff --git a/build.gradle b/build.gradle index 5c5bfd78..399c39ba 100644 --- a/build.gradle +++ b/build.gradle @@ -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.21" + ext.version_plugin_kotlin = "1.2.41" ext.enable_plugin_kotlin = false repositories { diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt index 651f7602..e1c1f084 100644 --- a/metadata/en-US/full_description.txt +++ b/metadata/en-US/full_description.txt @@ -11,8 +11,8 @@ It adds useful features to your networking experience: ✔️ Allows system independent language Support the project: - ✋ Translate using Stringlate + ✋ Translate using StringlateJoin discussion on Matrix - ✋ More information about contributions - ✋ Android Contribution Guide (gsantner blog) + ✋ More information about contributions + ✋ Android Contribution Guide (gsantner blog)Support main developer From 957573ea836b7668024276f9636109b7b3b6c3cb Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Mon, 21 May 2018 14:57:41 +0200 Subject: [PATCH 27/31] Update opoc --- README.md | 6 +- .../data/DiasporaPodList.java | 2 +- .../data/DiasporaUserProfile.java | 2 +- .../DiasporaUserProfileChangedListener.java | 2 +- .../diaspora_android/util/AppSettings.java | 2 +- .../opoc/preference/PropertyBackend.java | 1 - .../SharedPreferencesPropertyBackend.java | 16 +++ .../net/gsantner/opoc/util/ActivityUtils.java | 11 ++ .../net/gsantner/opoc/util/FileUtils.java | 103 ++++++++++++++++++ .../net/gsantner/opoc/util/ShareUtil.java | 22 +++- build.gradle | 2 +- metadata/en-US/full_description.txt | 4 +- 12 files changed, 161 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 15296ffe..57ba4cc3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/gsantner/dandelion.svg?branch=master)](https://travis-ci.org/gsantner/dandelion) [![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fgsantner%2Fdandelion.git&mail=gro.xobliam@@rentnasg) [![Chat - Matrix](https://img.shields.io/badge/chat-on%20matrix-blue.svg)](https://matrix.to/#/#dandelion:matrix.org) [![Chat - FreeNode IRC](https://img.shields.io/badge/chat-on%20irc-blue.svg)](https://kiwiirc.com/client/irc.freenode.net/?nick=dandelion-anon|?##dandelion) -[![Donate Bitcoin](https://img.shields.io/badge/support-project-orange.svg)](https://gsantner.net/supportme/?project=dandelion&source=readme) +[![Donate](https://img.shields.io/badge/donate-appreciation-orange.svg)](https://gsantner.net/supportme/?project=dandelion&source=readme) [![Donate LiberaPay](https://img.shields.io/badge/donate-liberapay-orange.svg)](https://liberapay.com/gsantner/donate) # dandelion\* @@ -39,7 +39,7 @@ dandelion\* requires access to the Internet and to external storage to be able t ## Contributions The project is always open for contributions and accepts pull requests. -The project uses [AOSP Java Code Style](https://source.android.com/source/code-style#follow-field-naming-conventions), with one exception: private members are `_camelCase` instead of `mBigCamel`. You may use Android Studios _auto reformat feature_ before sending a PR. See [gsantner's android contribution guide](https://gsantner.net/android-contribution-guide/?packageid=com.github.dfa.diaspora_android&name=dandelion&web=https://github.com/gsantner/dandelion#logcat) for more information. +The project uses [AOSP Java Code Style](https://source.android.com/source/code-style#follow-field-naming-conventions), with one exception: private members are `_camelCase` instead of `mBigCamel`. You may use Android Studios _auto reformat feature_ before sending a PR. See [gsantner's android contribution guide](https://gsantner.net/android-contribution-guide/?packageid=com.github.dfa.diaspora_android&name=dandelion&web=https://github.com/gsantner/dandelion&source=readme#logcat) for more information. Translations can be contributed on GitHub or via [E-Mail](https://gsantner.net/#contact). You can use Stringlate ([![Translate - with Stringlate](https://img.shields.io/badge/stringlate-translate-green.svg)](https://lonamiwebs.github.io/stringlate/translate?git=https%3A%2F%2Fgithub.com%2Fgsantner%2Fdandelion.git)) to translate the project directly on your Android phone. It allows you to export as E-Mail attachement and to post on GitHub. @@ -79,6 +79,6 @@ For more licensing informations, see [`3rd party licenses`](/app/src/main/res/ra ### Notice #### Maintainers - gsantner ([GitHub](https://github.com/gsantner), [Web](https://gsantner.net/supportme/?project=dandelion&source=readme), [diaspora*](https://pod.geraspora.de/people/d1cbdd70095301341e834860008dbc6c)) - - Bitcoin: [1B9ZyYdQoY9BxMe9dRUEKaZbJWsbQqfXU5](https://gsantner.net/donate/#donate) + - Bitcoin: [1B9ZyYdQoY9BxMe9dRUEKaZbJWsbQqfXU5](https://gsantner.net/supportme/?project=dandelion&source=readme) - vanitasvitae ([GitHub](https://github.com/vanitasvitae), [diaspora*](https://pod.geraspora.de/people/bbd7af90fbec013213e34860008dbc6c)) - Bitcoin: 1Ao3W6NaQv3xKppviB7RSFKjHo6PGd8RTy diff --git a/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaPodList.java b/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaPodList.java index 3c56cef3..e0fa9955 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaPodList.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaPodList.java @@ -13,7 +13,7 @@ import java.util.List; /** - * Created by gsantner (http://gsantner.net/ on 30.09.16. + * Created by gsantner (https://gsantner.net/ on 30.09.16. * DiasporaPodList - List container for DiasporaPod's, with methods to merge with other DiasporaPodLists * DiasporaPod - Data container for a Pod, can include N DiasporaPodUrl's * DiasporaPodUrl - A Url of an DiasporaPod diff --git a/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaUserProfile.java b/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaUserProfile.java index 863b7c6f..e54b351a 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaUserProfile.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/DiasporaUserProfile.java @@ -32,7 +32,7 @@ import org.json.JSONObject; /** * User profile - * Created by gsantner (http://gsantner.net/) on 24.03.16. Part of dandelion*. + * Created by gsantner (https://gsantner.net/) on 24.03.16. Part of dandelion*. */ public class DiasporaUserProfile { private static final int MINIMUM_USERPROFILE_LOAD_TIMEDIFF = 5000; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/listener/DiasporaUserProfileChangedListener.java b/app/src/main/java/com/github/dfa/diaspora_android/listener/DiasporaUserProfileChangedListener.java index aff25a2a..644612c4 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/listener/DiasporaUserProfileChangedListener.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/listener/DiasporaUserProfileChangedListener.java @@ -21,7 +21,7 @@ package com.github.dfa.diaspora_android.listener; import com.github.dfa.diaspora_android.data.DiasporaUserProfile; /** - * Created by gsantner (http://gsantner.net/) on 26.03.16. + * Created by gsantner (https://gsantner.net/) on 26.03.16. * Interface that needs to be implemented by classes that listen for Profile related changes */ public interface DiasporaUserProfileChangedListener { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 79953d7a..9cbf7049 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -37,7 +37,7 @@ import java.util.List; /** * Settings - * Created by gsantner (http://gsantner.net/) on 20.03.16. Part of dandelion*. + * Created by gsantner (https://gsantner.net/) on 20.03.16. Part of dandelion*. */ @SuppressWarnings("ConstantConditions") public class AppSettings extends SharedPreferencesPropertyBackend { diff --git a/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java index c27d9bce..f134122b 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java @@ -45,5 +45,4 @@ public interface PropertyBackend { TTHIS setIntList(TKEY key, List value); TTHIS setStringList(TKEY key, List value); - } diff --git a/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java index 275d88a5..bfcce37b 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java @@ -136,6 +136,22 @@ public class SharedPreferencesPropertyBackend implements PropertyBackend 0 ? pref[0] : _prefApp); } + + public static void limitListTo(final List list, int maxSize, boolean removeDuplicates) { + Object o; + int pos; + + for (int i = 0; removeDuplicates && i < list.size(); i++) { + o = list.get(i); + while ((pos = list.lastIndexOf(o)) != i && pos >= 0) { + list.remove(pos); + } + } + while ((pos = list.size()) > maxSize && pos > 0) { + list.remove(list.size() - 1); + } + } + // // Getter for resources // diff --git a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java index 53a86cc1..7c72b724 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ActivityUtils.java @@ -18,6 +18,7 @@ import android.net.Uri; import android.os.Build; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.widget.AppCompatTextView; import android.text.Html; @@ -163,4 +164,14 @@ public class ActivityUtils extends net.gsantner.opoc.util.ContextUtils { Uri.parse("http://play.google.com/store/apps/" + pkgId))); } } + + public void setStatusbarColor(int color, boolean... fromRes) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (fromRes != null && fromRes.length > 0 && fromRes[0]) { + color = ContextCompat.getColor(_context, color); + } + + _activity.getWindow().setStatusBarColor(color); + } + } } diff --git a/app/src/main/java/net/gsantner/opoc/util/FileUtils.java b/app/src/main/java/net/gsantner/opoc/util/FileUtils.java index 13cb66d5..15a417a1 100644 --- a/app/src/main/java/net/gsantner/opoc/util/FileUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/FileUtils.java @@ -20,15 +20,19 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.net.URLConnection; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; @SuppressWarnings({"WeakerAccess", "unused", "SameParameterValue", "SpellCheckingInspection", "deprecation"}) @@ -36,6 +40,15 @@ public class FileUtils { // Used on methods like copyFile(src, dst) private static final int BUFFER_SIZE = 4096; + public static String readTextFileFast(final File file) { + try { + return new String(readCloseBinaryStream(new FileInputStream(file))); + } catch (FileNotFoundException e) { + System.err.println("readTextFileFast: File " + file + " not found."); + } + return ""; + } + public static String readTextFile(final File file) { try { return readCloseTextStream(new FileInputStream(file)); @@ -337,4 +350,94 @@ public class FileUtils { return null; } } + + /** + * Try to detect MimeType by backwards compatible methods + */ + public static String getMimeType(File file) { + String guess = null; + if (file != null && file.exists() && file.isFile()) { + InputStream is = null; + try { + is = new BufferedInputStream(new FileInputStream(file)); + guess = URLConnection.guessContentTypeFromStream(is); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException ignored) { + } + } + } + + if (guess == null || guess.isEmpty()) { + guess = "*/*"; + int dot = file.getName().lastIndexOf(".") + 1; + if (dot > 0 && dot < file.getName().length()) { + switch (file.getName().substring(dot)) { + case "md": + case "markdown": + case "mkd": + case "mdown": + case "mkdn": + case "mdwn": + case "rmd": + guess = "text/markdown"; + break; + case "txt": + guess = "text/plain"; + break; + } + } + } + } + return guess; + } + + public static boolean isTextFile(File file) { + return getMimeType(file).startsWith("text/"); + } + + /** + * Analyze given textfile and retrieve multiple information from it + * Information is written back to the {@link AtomicInteger} parameters + */ + public static void retrieveTextFileSummary(File file, AtomicInteger numCharacters, AtomicInteger numLines) { + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(file)); + String line; + while ((line = br.readLine()) != null) { + numLines.getAndIncrement(); + numCharacters.getAndSet(numCharacters.get() + line.length()); + } + } catch (Exception e) { + e.printStackTrace(); + numCharacters.set(-1); + numLines.set(-1); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException ignored) { + } + } + } + } + + /** + * Format filesize to human readable format + * Get size in bytes e.g. from {@link File} using {@code File#length()} + */ + public static String getReadableFileSize(long size, boolean abbreviation) { + if (size <= 0) { + return "0B"; + } + String[] units = abbreviation ? new String[]{"B", "kB", "MB", "GB", "TB"} : new String[]{"Bytes", "Kilobytes", "Megabytes", "Gigabytes", "Terabytes"}; + int unit = (int) (Math.log10(size) / Math.log10(1024)); + return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, unit)) + + " " + units[unit]; + } } diff --git a/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java b/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java index 46ae484d..d85abc6c 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java +++ b/app/src/main/java/net/gsantner/opoc/util/ShareUtil.java @@ -182,6 +182,22 @@ public class ShareUtil { showChooser(intent, null); } + /** + * Open a View intent for given file + * + * @param file The file to share + */ + public void viewFileInOtherApp(File file, @Nullable String type) { + Uri fileUri = FileProvider.getUriForFile(_context, getFileProviderAuthority(), file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_STREAM, fileUri); + intent.setData(fileUri); + intent.putExtra(EXTRA_FILEPATH, file.getAbsolutePath()); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(fileUri, type); + showChooser(intent, null); + } + /** * Share the given bitmap with given format * @@ -397,7 +413,7 @@ public class ShareUtil { String tmps; String fileStr; - if ((Intent.ACTION_VIEW.equals(action) || Intent.ACTION_EDIT.equals(action))) { + if ((Intent.ACTION_VIEW.equals(action) || Intent.ACTION_EDIT.equals(action)) || Intent.ACTION_SEND.equals(action)) { // Markor, S.M.T FileManager if (receivingIntent.hasExtra((tmps = EXTRA_FILEPATH))) { return new File(receivingIntent.getStringExtra(tmps)); @@ -450,6 +466,10 @@ public class ShareUtil { } } } + fileUri = receivingIntent.getParcelableExtra(Intent.EXTRA_STREAM); + if (fileUri != null && !TextUtils.isEmpty(tmps = fileUri.getPath()) && tmps.startsWith("/") && (tmpf = new File(tmps)).exists()) { + return tmpf; + } } return null; } diff --git a/build.gradle b/build.gradle index 399c39ba..5c5bfd78 100644 --- a/build.gradle +++ b/build.gradle @@ -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.41" + ext.version_plugin_kotlin = "1.2.21" ext.enable_plugin_kotlin = false repositories { diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt index e1c1f084..0486a692 100644 --- a/metadata/en-US/full_description.txt +++ b/metadata/en-US/full_description.txt @@ -14,5 +14,5 @@ It adds useful features to your networking experience: ✋ Translate using StringlateJoin discussion on MatrixMore information about contributions - ✋ Android Contribution Guide (gsantner blog) - ✋ Support main developer + ✋ Android Contribution Guide (gsantner blog) + ✋ Support main developer From 918adcf358d10dc2d9a3cc67e036d9f288a1cbf3 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Sun, 22 Jul 2018 14:03:29 +0200 Subject: [PATCH 28/31] Add flavor dandelior*, move flavor specific to folder instead gradle generated --- app/build.gradle | 10 +++++----- app/src/flavorDandelior/ic_launcher-web.png | Bin 0 -> 30659 bytes .../res/drawable-anydpi-v26/ic_launcher.xml | 5 +++++ .../drawable-anydpi-v26/ic_launcher_round.xml | 5 +++++ .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 8205 bytes .../res/drawable-hdpi/ic_launcher_round.png | Bin 0 -> 8205 bytes .../res/drawable-ldpi/ic_launcher.png | Bin 0 -> 6321 bytes .../res/drawable-ldpi/ic_launcher_round.png | Bin 0 -> 6321 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 6965 bytes .../res/drawable-mdpi/ic_launcher_round.png | Bin 0 -> 6965 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 9506 bytes .../res/drawable-xhdpi/ic_launcher_round.png | Bin 0 -> 9506 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 12181 bytes .../res/drawable-xxhdpi/ic_launcher_round.png | Bin 0 -> 12181 bytes .../res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 15071 bytes .../res/drawable-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15071 bytes .../res/drawable/ic_launcher_background.xml | 9 +++++++++ .../res/drawable/ic_launcher_foreground.xml} | 0 .../res/values/strings-flavor.xml | 4 ++++ .../res/drawable-anydpi-v26/ic_launcher.xml | 5 +++++ .../drawable-anydpi-v26/ic_launcher_round.xml | 5 +++++ .../res/drawable-hdpi/ic_launcher.png} | Bin .../res/drawable-hdpi/ic_launcher_round.png} | Bin .../res/drawable-ldpi/ic_launcher.png} | Bin .../res/drawable-mdpi/ic_launcher.png} | Bin .../res/drawable-mdpi/ic_launcher_round.png} | Bin .../res/drawable-xhdpi/ic_launcher.png} | Bin .../res/drawable-xhdpi/ic_launcher_round.png} | Bin .../res/drawable-xxhdpi/ic_launcher.png} | Bin .../res/drawable-xxhdpi/ic_launcher_round.png} | Bin .../res/drawable-xxxhdpi/ic_launcher.png} | Bin .../res/drawable-xxxhdpi/ic_launcher_round.png} | Bin .../res/drawable/ic_launcher_background.xml} | 0 .../res/drawable/ic_launcher_foreground.xml | 12 ++++++++++++ .../res/ic_launcher-web.png} | Bin .../flavorTest/res/values/strings-flavor.xml | 4 ++++ app/src/main/AndroidManifest.xml | 4 ++-- app/src/main/ic_launcher_test.png | Bin 17574 -> 0 bytes .../com/github/dfa/diaspora_android/App.java | 8 ++++++++ .../diaspora_android/activity/MainActivity.java | 2 -- .../activity/PodSelectionFragment.java | 2 +- .../dfa/diaspora_android/util/AppSettings.java | 3 +++ .../gsantner/opoc/activity/GsFragmentBase.java | 2 +- .../format/markdown/SimpleMarkdownParser.java | 10 ++++++++-- .../opoc/preference/PropertyBackend.java | 2 +- .../SharedPreferencesPropertyBackend.java | 4 ++-- .../net/gsantner/opoc/util/ActivityUtils.java | 2 +- .../java/net/gsantner/opoc/util/Callback.java | 2 +- .../net/gsantner/opoc/util/ContextUtils.java | 2 +- .../java/net/gsantner/opoc/util/FileUtils.java | 2 +- .../net/gsantner/opoc/util/NetworkUtils.java | 2 +- .../gsantner/opoc/util/PermissionChecker.java | 2 +- .../java/net/gsantner/opoc/util/ShareUtil.java | 2 +- .../drawable-anydpi-v26/ic_launcher_test.xml | 5 ----- .../ic_launcher_test_round.xml | 5 ----- app/src/main/res/values/strings-flavor.xml | 4 ++++ build.gradle | 10 ++++++++++ 57 files changed, 101 insertions(+), 33 deletions(-) create mode 100644 app/src/flavorDandelior/ic_launcher-web.png create mode 100644 app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher.xml create mode 100644 app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/flavorDandelior/res/drawable-hdpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-hdpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable-ldpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-ldpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable-mdpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-mdpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable-xhdpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-xhdpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable-xxhdpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-xxhdpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/flavorDandelior/res/drawable/ic_launcher_background.xml rename app/src/{main/res/drawable/ic_launcher_test_foreground.xml => flavorDandelior/res/drawable/ic_launcher_foreground.xml} (100%) create mode 100644 app/src/flavorDandelior/res/values/strings-flavor.xml create mode 100644 app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher.xml create mode 100644 app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher_round.xml rename app/src/{main/res/drawable-hdpi/ic_launcher_test.png => flavorTest/res/drawable-hdpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-hdpi/ic_launcher_test_round.png => flavorTest/res/drawable-hdpi/ic_launcher_round.png} (100%) rename app/src/{main/res/drawable-ldpi/ic_launcher_test.png => flavorTest/res/drawable-ldpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-mdpi/ic_launcher_test.png => flavorTest/res/drawable-mdpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-mdpi/ic_launcher_test_round.png => flavorTest/res/drawable-mdpi/ic_launcher_round.png} (100%) rename app/src/{main/res/drawable-xhdpi/ic_launcher_test.png => flavorTest/res/drawable-xhdpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-xhdpi/ic_launcher_test_round.png => flavorTest/res/drawable-xhdpi/ic_launcher_round.png} (100%) rename app/src/{main/res/drawable-xxhdpi/ic_launcher_test.png => flavorTest/res/drawable-xxhdpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-xxhdpi/ic_launcher_test_round.png => flavorTest/res/drawable-xxhdpi/ic_launcher_round.png} (100%) rename app/src/{main/res/drawable-xxxhdpi/ic_launcher_test.png => flavorTest/res/drawable-xxxhdpi/ic_launcher.png} (100%) rename app/src/{main/res/drawable-xxxhdpi/ic_launcher_test_round.png => flavorTest/res/drawable-xxxhdpi/ic_launcher_round.png} (100%) rename app/src/{main/res/drawable/ic_launcher_test_background.xml => flavorTest/res/drawable/ic_launcher_background.xml} (100%) create mode 100644 app/src/flavorTest/res/drawable/ic_launcher_foreground.xml rename app/src/{main/ic_launcher_test-web.png => flavorTest/res/ic_launcher-web.png} (100%) create mode 100644 app/src/flavorTest/res/values/strings-flavor.xml delete mode 100755 app/src/main/ic_launcher_test.png delete mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_test.xml delete mode 100644 app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml create mode 100644 app/src/main/res/values/strings-flavor.xml diff --git a/app/build.gradle b/app/build.gradle index a11ef9b9..5630dfff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,6 @@ android { vectorDrawables.useSupportLibrary = true - resValue 'string', 'app_name', "dandelion*" - manifestPlaceholders = [appIcon: "@drawable/ic_launcher"] } compileOptions { @@ -55,10 +53,12 @@ android { buildConfigField "boolean", "IS_GPLAY_BUILD", "true" }*/ + flavorDandelior { + applicationId "net.gsantner.dandelior" + } + flavorTest { - applicationId "com.github.dfa.secondlion" - resValue 'string', 'app_name', "secondlion*" - manifestPlaceholders = [appIcon: "@drawable/ic_launcher_test"] + applicationId "net.gsantner.secondlion" versionCode = Integer.parseInt(new Date().format('yyMMdd')) versionName = new Date().format('yyMMdd') buildConfigField "boolean", "IS_TEST_BUILD", "true" diff --git a/app/src/flavorDandelior/ic_launcher-web.png b/app/src/flavorDandelior/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..91d4f752e620fea84e4ca2de5c62249fd3298ada GIT binary patch literal 30659 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 &)!_Vy@*P3 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 D4&5nq literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher.xml b/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..d378acd7 --- /dev/null +++ b/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher_round.xml b/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..d378acd7 --- /dev/null +++ b/app/src/flavorDandelior/res/drawable-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/flavorDandelior/res/drawable-hdpi/ic_launcher.png b/app/src/flavorDandelior/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..63a719acb05fe92c144d4c7ed46d4081cabd3253 GIT binary patch literal 8205 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 literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-ldpi/ic_launcher.png b/app/src/flavorDandelior/res/drawable-ldpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5ccf4981796b83ae66c13fa90beea83522547fc8 GIT binary patch literal 6321 zcmbVQ2OwPA)4yx6tloR?C1Ul68doP5h&#RJb#`>8%g z=c#IZ5+m}m(R=ziq#s7-PVRH?AE%zi1) zrf`aDShGi}dM2wpPMoAF1_sN#yR+#7(>8i3Pn-o!fOLy_Wr}n?Ja6#c)Hxb|;5bC7 zwt<4MlBz{6YT5G!R}qU6lXl?aoBTn$ z`|zE+w3K+90T`8En84z2=Y7Y#na@`8)-_ohNkgRkbJZA6~~XhT2y zp2R2~`~Q3+$5UX~;p!c6Y+;QfX{{1AUf-{zmbu+aol6)F=!ujSp}jMbE;` z7R~Q370BBd!+X5RjI{e3X8_ey&YZ>9k1aFfavWX7KL;OQSdfrP@Cl`=4cqsv-JC1v zE-dP^F4ctS@#=<5(ZLXz9oPe^`Px(o(}RVDXMQid40wK89(PJL1Rm>VY;E&NZ=`Ko zIE<6%`dpU0FnxuKKAT#HjtwUNxIn+U-)-LcdT`0+d`Pe}o#OGwD@}WOrOXOqw=1!Q zg$o(|T8Ks~+RRIeMaR{=8y?pMtvwK?g0wt(!R68W6W-H(i)wr8a{_ComC@6O1Osxr za(r5kr#I*C9Ki66>uOWE)DpLbOV4i{=e9q6R}~u=B)567$qOgx(Fw4T&&9;ub4+VH z&O3FX`zGz3%z^^d<9c5<&M=&hqH`5$AF5iu129Dyv2A-}k3_Z&k2`wqX3kncU)POY zGj6eDQZs29w3m0{S~vN^G(WhQh5E);CL$#v&e-y`dGfMa%uxvCoTh?Jd z(fawlQZ~FdlTc|3v*R8rrhaMS>9d(>n1pFX}>m8yJx6WgQj)>fcS@XN0(Fa7!GtKlA z9m13dgY4+eMh>6O55W?LDoufG>Sbnx1%0;$l{GQVU&sh`&vTxOwza2L_2F8cY5A!; z&BvJ7L>jOY@C0=ff|cVVdXxIxDP!!LEMi(0Q9yH5QddF4ph$`}NO?3{@8OT4*jnep zJyv(t=mMb`af&F&r5sj-Z*;#fHB}JYCbR9nmXJc?LF{sB>as@n#v1cFLYr}GPjfH) zcDN)yL7$Nf$B(kZ&8I>8)h_)nj>uw$JB4ve7ghm)9BpTevPYo=0Rpi6fCRw>AfN=` zfZ`b$2Lc74V7Dtsj1auvY`j64=?^&wl=(rMQ(w>(KtON+VvvJ%5fB4qYLF*^^b{n5 z-#)^i>8bTEu7=XoW)~Adh>A!6VxkBcSy5?OF)?<8xUA#_SqX`=v7LJUiVc*1#Rdmu z=pQkhmTmkqGR+_IDFz76?-B?BokTuAz!j1s`-8CU`md1gHQ6 z`1mkMs5eOk6Au$m#JqZcD7zZXWk zIPoCAwcnwf0)^t@;ll_B;Y6T84f$!Npg6ctJUm=nP#X;D0bB|^N)CiFK9!CYjMIZ! z>~3-{0oSF9HX7Zbb#8HM&oDwbEgd}rBM&bhzkr~Gq?EMG1zDBLNL4j;l!l(ZfuWJH ziK&gPo&8M*M<*|DpWD8E{sH0lA|j)rW6&w7_tPFcOwY)~Cj@W|-<4`Uz4r)Os8<`)*1zAkTUZvEKa+1=YeIK_2}^H=*F*+1c; z0CC~q;zDs@r??{^zFe?u#PO-ZL)R&TTE7}OT#C6wctUZU|wA>QY zJR7Ibena-(0So(oA^Q{9U%18rVkiV0JSYXA2<#uD`Ezjog#?cEpP2T}*LLx!*o3Ky ziLWN_qX9b__J~Atc#4b-rNBckUe$TM>f{M%cw*0}XN3jLQZcJW;P51uJ+3NN6rcJ@ zJHy=W%HB?1a%=_-f3ZVyF{OWpBO1Lb=-1*DmNw54wS@FE>BKHYNI!BdB$h@cu{AEqWkB z4Wzl;GV!l>;})LM>r%Bf51y?{crs`EM3z}l@Y96rCXM?|50lLuNUEk`XFD1Xx;{OF zt|&hpqC^@m{UiWhrJlpznqP`3v7dZ}<}Wy7^!Id}NevD;L0i$=2(lW}f`&D7{a$m& zv0|hEJqRq>>X(@zr)F{L$Oxir5n2~eV}v)7p>P*TZFuj0AL75J0QsBj4nf9RRaL=a zk`m-i$q{S?KL#BZh89rj#R=t$aL?E-x(;l*ZIn|UWh>6*PMiQ^Qd&o(vIm}359ZZul1_jK zvoDDUwBJqu-V=avBQfC#^^hFG3&X;smGH*AWXd5f3!$6795OEXqsC8dm5bJDeQqk= zy(RlWNIrkF>W&;Kn!i*X&W{QG8%5eJjY>*(&2ipO8{{md)-le+Q{c#e)rb{@2G3r* z81qdNOjgI)X+jps;L2m16EmOOz$suI0=dc_9^O`New6(Kg7xcKG){xWYDUfRDX!S| zB_4V!E(lHe4B+j#b)Y|wH^`T^Kkt52bt`;nCGyD0yre5_0F5orZBqVu@$1&Zhf1S% z)ix>Y4c8I!p;lqA4?g~pjq9mh0r-m#QGqY$j?GNiWbUXe9Ck`_ciMX^R((FaFI4^$ zzxM>l<0>y$SqS;KDXkU#uxHs|So6Nv^EOz2wDrsMlEr$DF`uMHK zI?6soVO>&<8fxFoaPf#QUfGA%odB$*X6mu5C}glj&LP#hYi!M8RjOWA2+PXa^`Bp? zLPVW=kLCQVKdWpQJU)uAmfCr^v$r{;S;UtI}* z6@i)T7_Rzd*7=u4J< zAI1ldu4TBYPOa>kt+(GihFU%}VdcqI*TmWUY}Q;`Q&}G|oxH|PKwy=yST6DYOOP5; z7Wt8j-OlA{{OiG=XqQ{|)H+Du7pW*ZMLx^U!3qhun%{<3kR7yi6_2b3w{K&Z&}NiF zNSZ>9UrWI$w_pvQ{Y>rW?DRFD|BZVYaQD-jMCfzF9=1rKEKI2Uu+kCcnP$aal$wcA z)6Th?mhX`=io1j5*VpUfCC)RLU6G2tZNKTx6F5rfE zrq0DNxE`2YzJtIIV^aj{Y2{&u2)BH*Rez<=9-{POeF53etiIvh}XsYR9f=gBr_oVX0WB+kT+50CbuW?Le>LpQ!o-6?gi2QEpeW&65LePL|e@NErQ zPv3J}rS(WHHpWkxAlr9n>13OYOY~TCo~MMT5U?i@$QR90_qui$tbAr^GApJ_=*)SS zBaheMn##KN@vxO<(P%tk?U|>m+uCA7RvZIgQX|E-q$#>Og?AcBtp{Mx{J#iC-~b+0 zkhO`YVsgcE_PPEbt2)+kgIQgE@AQ2!!Jvh#an4Lz9JJ8jOG-b2z1JOKfju$rgw+GX z)F|uLyZ5#gKI^F5hQ2$-_X8X=J@<-rVvodD5%#4gfbg_p_qN;ow&b@FbP<|H362jy zLj{~^*BrvCwwv9w*4I)Mo)wu3(ye21tK^JsU!i~|O;Wmuj3lE#c{_b9m*O@EVD8)q*unuUc_MPQCRSWsjA{M`_8 zwCtXmepZ_GwQQ~@QB5XCYBTb9fvY6OR4W zWB+ZMA8ERy)y48&sD|P5GnC^KT{g*Dxoh$S%VgI4*WNJJulLim%qqgC{G>bTWHqNu zw7-X0zU#QN5~8xCTml~pJ(J?oRO2*tpZ|gV`qp!9*qN^0`9_Yr119OUlP|wQbq)2o zHq!^S*OvPKR(hN1rt3P*%AxkJ7RD?bDSIr20Lrdz20Qr!Z^iU-S#V)H|J|Fxz`tCwnN}fSAz4V{l6QDRQ zaXZA2CHQ5{R;Q-FuSbZ#MfG zBD?9?;kuH1AquSaKP{_#CPS{SPd((#E4IjQt|ToTP2AP@;Ttm|nK>W-gyEex{dtM6 z4|SUB6N3yZ>JV8Wuk{Y;f2&`AalUUkyCN@z&Ajp5pq;4%hdzrj1~O8Jtf1m}+it3jzGMqxj36;&~ zfGrldScwTk^B3~}<_?2N=qSHd$hnA-Tu zA0=(7nuhkmo=$c`BtkJ@*++sC?yqg|1>?e=f*~c^v~XgykG`Rxr{F7frWMmJBaUJ+ za4Ea@YeD|E{QZqQ-sCx=HK#^|O{$)Nv7@=6bvN%LB+XwNwX>@0p|@aVtGRdr zRG}8LHPGk_=_Zs6SwHoN5X+i8)Mec_z!LhaB%kGwlaD|{{-sOcpFAFKq_MZHmA9R& zji(*RemfC3Cn|kTOiUjkAuB2>D=sP|Dh3L9SSa>y4lZuCj`se4bNJ&3;dh6LYjkfx z2gcJU*!ely%U*Ky_R_ZV)U$GNzhwu=2(zDlDOVNvKr4+X0Y7h{ZyVUb|d&=|(?;+L;@8|;L7qcoAw87Lk3MPUOu zAPaQVLtR$ZH*T*L z^HeoHi3xex>5+QyoXYj0r6~U7adj+8LEkCAD9xZw69q{w(9nOLL+8XH*Isomiaoyk z`}W#o#xVKImkcC34R_(IQA2OP9q(kFWO&&}+?OiOe;kx6x*xebYLgs;t5jH8X1|nY zQ#b`5*6fk0p2;eY6DO^TfkHFy?ri!%wT)iNlVss0K)S`eGDW%`o;P@J>Ksila2%pk z+dxTFN!=nBwd{EVUc{=ztR49HCVvw28s{e2V0=#_mad!c#f#7cvV16P*;MIjhDuyf z8BT4^IMIlxI5Xrn=Vm2?zuDv6=r320K_2dvaNhPe#jQYm>#oiuYyxVVUT+uL*$T(L z58t^(3AUMp#p%j;GY5NA;QtaQ|3fqnD|CYw_lk+_W zbq@mht`tmWM?5H+8Wr%}UcE%l1T- z3>~5Bf%Q_FU*ng}6G$zb>z#YKUWqDEM|tLte`=lS%XD%`?>yQKeo%Bv3OV+al)5&S zl!$^jvsw!~COz_6-uL`;yh}L+k}@!0ckBJz$?D0ErWsyl!K}qbBF}6(!{wUndA3X! zHutEts-F3>zaKA*c0yil9DCDvH=Sa;ch%7}c~r<~P$p2ANLpdjj%{)fnPUENN3rF{ zo#XXK(%8~w-4G)mVH>UQFCByL^{l28wxx?gwG~<8Y98noc4Sm73Nleqz7j2YQ`l!; z9>&NT?~w87Dg&P5J$-t8X)5)kJLEz04_h#ei<)eQuXGz;j`SXs)fhp5%N}pq!r7mD z?JAB{thgMI9WsZw82Q7cBP8*bxwJQjp(H8X(|a+gEb>A3^_~r^cS^FRhKiWK=vlbg zqWS%$0!15Bc#k)^k#>LM44|6Im9zNzv1Mjlj-#vi=iuWD3ldTZKB3gLVf((dn{x%- zg++bVrJ4{uUfqx>dMF~Z1A9O{Uz;jnda$tY%Hvt!+N(jkIkG zhjCI}pUaXLrmw&mvT1ba*`e}}3-qh|-R7OI2bXNlhXgy*D;|Hm(zKUX%Az24yAoSi zxRBAWg=n;*%ewVd|!f-x{&Q+*=sA~BRKow=gw(X5Q64^IA?&!IjIco)dT{m{k zxW$@D!>no0Ufzjk;V9I+JZ7?DYE0S2ka|r)WPA;Vs}?9n{@Wv=)!I{)Wpjp{s{X9dc3VYl%b* zy%;OQ`*<;wA)AGkS(wh|lN;-OjL5;G#Hj0+xAS89>ON3@4AJpbk83uIdmOTrOXIT< zsPHxfn$6O1Tc!4c#q=aH$Wy7KHfAg$dZJ0R-XSV+>pWKIh}eCYEx#K#`ha+OrkR1V zLzoI-kR9FG$m!GhAz0#2r74hIz08cLpzqe8vL>ea3ptVQd9HKOw)QltKJew4mY=%Q zd`yW=WC1$?Pf$l8SUEo8H>uB^GRD5iBBpf_1+-Tsbrm!Wilo?rlt;7m9{wnbt#vNk zV{>PVE)bd#r;LJJ%3(wJM)wQTPzS+mGTZKJ2`MBV#4e|%E^Bmetg);kw3)W{H21=9 zhf5L=_8G}={wO=#d>XW0?b83^h&*PvQy8ywVHE%<(00ZsdlX6#AOy<~NDw>#0!jc5 zD4vmVAh-Z7*zF1u69oS^8*fl%{zDD|Wq#1+)E9IG5D*-I1ms{{1jIm@2INT~Jq3yI zw~sJrdTRZPtD!WtImAQ|q9PK2m?%OTVgu!0vB5wY z_m3D(%QnFonf4F)6axh3cZ?LLzJJL67v7d_J3|CtpFwAX-v2fE&zuTf=dZG=>XWl zIPoFBwcnwf0>#C{Cx8+X!H7YF8j90Q;o{)o;^X7tf!bhD58zSaQ*k1c38;0fpj;j_ zVt12s3E`J2+Gur$*15&4J;R7#bo302Ogy}N`~rd!l2Xz#7i3i~BURPZQ5t&s28Kq) zCZ;yFcJ?&R^|!WdDSV z62ygrhlh&?J;epV@jV4jiHFaLAfQs#fm(S`bBWz0q`8!wThT@Y7uQ{(Q!*m z^K6_#`wiKD2Q2LWh3rpYf8iPjNN^$G;NemNiopIcnm-5UUr69s|A}eud~FwxicOfR znD}b)J{qv2<%mc$ho#8aPzgNr;#Hm3t4^N44NvSD^{lXlEawph}~+o9oYGKz^b23TL7 z*A)`|P9oB#W(*jZzVI6!o20NqXFzYi}@qjB= z1Ags(+E-QJ;EiM|^g}?X3@ES(F1hnQ5L;1}|Q0 ziEsxsE}#(g30iz9Vj)cZ?G+jpecrm2X)+RN`2QZHesXtX>hS)s#+S)^>aREbXm0>{ zfbNhfcC5b`4=jn-n8KNx9}6BoyHO⁡9wwVRkW5X(&UQ2&bbWdT zT~U5IM2Re3`bhw+NDxhQeJWjp4ojeTe^>0u*nuI|P|(RaFIx zNlTD7B}cFo{1|jt7+OH77blc2!aZZVkRKO-3E7s!{kzzqm>`Bhi5AMeDKmM?ev#Fb zKGbDbb>?smX!x4*68WCNOTrT%*L7giZKIs(C|hwZcj5#XlhQgOlRfaPdN8kMlXL<^ zn0-k+p!;?L@SXrn8;J=|XolnvUKmzpt%Nt`B~uP@SqRhgyX}Klu1ZHm;|31rRJgL|aM&ry-D&TwSoQhvzEJs3 zg5DD#4_;odvJmodQ(7zfVb8L`u;zWS=WWpbXzQ2hC5!bQV?rGv4s&nga}{LGH54V; zr!6Nf#eb^u2A$9AJ^J*nC6j$UpSA5<&^*%Nt1MY**}$BmsmthG1`us6OurmJ-qkFm zbd-IF!n&jyHPpVFf%AwjUfIX3I|0~A&D3MrP{?45oI~n$*VvlHs#LwK5Z0Bo>p#C( zg@`)$9?SVze^%KrczhIJEw%G-XK!;xvxqwp<_^W37Z{#ONpWqjn3vE&YKNU!CShfw zb9zpwNVdEZ%lXo__aJ9}Mi?Sw3bkKbHI|+2MDw`5rcb zrq0DNcpjKtzJtIIV^f6dY2{&u2)BH*Rez<=9-<6leF53etiIvj}XsYR9f=gBr_oVX0WB(B7c50CbuW?Le>LpQ!o-6?gi2QEpeW&65LePL?c@NErQ zPv3J}rSnKFHYP}!Am4Xr>13acOY~TCo~MGP5OO3C$`{Sj^tyHztbAr|GApJ}=*)SS zBah$Un##8J@vxP4(P%tk?U|>m+uCA7RvaT=QX}QIq$#>Og?AcBqX%Hn{J#iC-~bj@ zkhO`gVsgcE_PPEbn>yBUgGF6_@AQ2!!Jvh#an4Lz9JJ8jODaFYz1JOKfju$rgw+GX z)Trv#yZ5#gKI^F5#(j58;0HKndhQkL#2$&QBJ4{~0O4uH?rpdEZOLyV=pr<&5{v-A z4Ha;vTXP7j+HQ8!T3<_5cvfUCOqX=Gen8$2fb{YW8tm91h2PNX+ore! z$Nt;2KhktZtBd8mPz}T9XQ;*}x@?lQa@XVum&vX9uf1WaU+<@FnN@^M`AK)w$!boS zXnzm0eAjVjB}8ROxdb*AdM3rEsm5vQKK}#z^{waJurqzV^Nk#L2TamyCtrSr>KdAJ zZKe-uuPycet@Jk2PuF#tmE+pKS{So%r0TI40;syW8SUf`ycN^SWxlTb-Kzz8)d|lJgU#k{xetQ`F?Ds8gJnhJ?77Uo7RPFzOmV&P!$xlVzcW zCnNh=3}M=Z&W_COo1$gsATRl)yctUVn0Lo509g4?IE4QSC>=*kiXTf>U99;bFJ2AzAhbpJ?6Sm_t!S~f^lI_!H^PNS~v;XN8eD;Q}C5K^NMMg5oa+u zxRl-dwIKgn{{BWDZ}J@Rno}dfCRI8S+Syeal<^7?EYgyqHzrB- z^YIcQ3sD&JE8hCV2v+|>JoMxWlDoHx{h!t<0F(Jna2K0teP^kYk2~y5`g5ILtfjS| zCB7<(FBN4{FQpr;gQVs8k7+mq7silqZ@A;F{IaaTB)S9RHKDtI0(={h&|9#w)m%IQ zs!)sB8ff%|bQ3DZte<+sh-FP4nzHU2U;&kQEh^6%`jcy^1o(zFqm7gNvK3qrLy%9R4^$_}yXR8vR?) zf$8)Kc7BfbvX>may|nE-^{ianZ`lDd!W^exs#OI((2Da%`i?HYNAgc+6LszH zQbA*yKaEi?RyXag+PU8Jb^s(1V(}3})u5jG?|LIg+uzle`)wCMHRGRZJvV!AUn@^L X;LMqbk}RP;Xat~;*DjY`x)Jsdoc}_l literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-mdpi/ic_launcher.png b/app/src/flavorDandelior/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..162c8910ac40fde6c337cfbb831b5b8c53b8fb43 GIT binary patch literal 6965 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 C!)|5( literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-mdpi/ic_launcher_round.png b/app/src/flavorDandelior/res/drawable-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..062b3c815f6e115124806f5789fed136649d5845 GIT binary patch literal 6965 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 GLjD7JjhRmX literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-xxhdpi/ic_launcher_round.png b/app/src/flavorDandelior/res/drawable-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f4e870917955b322a0d326269110de3805ec89 GIT binary patch literal 12181 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 literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher.png b/app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2e04f097b9498239f46baca1d126f9e5ab4d5454 GIT binary patch literal 15071 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 literal 0 HcmV?d00001 diff --git a/app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher_round.png b/app/src/flavorDandelior/res/drawable-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..abb14898da21c637f7496c4e769ca1050e767736 GIT binary patch literal 15071 zcmbWd1wb9mvMxGnv2b^{g-fvD?kordcL~8IxD%Y<1Pzwp1h-(pEjR=V8iGTBKydfF zviJVa{`a}(zIWdnsP1CAYP!Dan(C%|qST%%V4{(s0RVuh2$R)-*Ij=I1qohiEWSd9 zR}gC{6)6CyiATSCi3tCj#vG=h0sy{@01)&B0B+#7f_4DFg9`w5O#whS9RP@(Gh5U} z;SES;&lF?bLHFM_sv4Znlx4AXZ501mo81oAGF@Pyw)c2`u9LtaNF!WLoI76mc^ zfH_!ER!YlzVL!_&lVC38uyb3-<5HFp2ZhyX#0;#C{wc~xj_T5462sdS`PPhmgq z2|H6>E_K=d@?CmU@B}ao=9BaYN2$R$QnC8YFfh($`cxKH6s*cNfx!z>2)c*X>S|+y zZ-dNfDszY2z!4v*ohJNf{32;VzD|zkg0a%3lCBX7E;x2UQC-TW{9JUWzPxJ4T2@_R z=~ls>t6J}Y-$yDOny-(l(5(a5-=El!*`8C-xDKQA`ClFGowg~to znls@ioF;HO(zLaOvR70$jcBDKwJul?wGBlS;T7a_e%q_wdOh|y7c~NU>D30jdP;0m zwc6}}UhlRogxE}PZU={bJ^NBJZfU&ZE9R9;PJ}9?RB)Q*rn38BkO_&|N1j?+kxx|K z(;iFvmV|@@KMV|}No2IO8JI4_R6iEscK$Sl1$`@-)hbv}s&M2f1DTxS<~Nw{RW#@V zbD;8|XHQK6u7cYiKMJCXB8y_&4UwEGm;E{_g{dGwv4%9OGpRmklyNi{BHWQ&`t3ieVz0Bx#A(8fHTV}| zW@k@Q9n$5+W?ibkAT6PIE< zdZtc{&_!LM7_sGV(~Il<`S1G7>IXz7E_!G|98I5e)DfPOl6glOh9CMgCBhJ#@sD&& zQMvLhBv(Xu>VbHKOK{+k<}$7TnbbXGU6uy6I`BaTjNw&IDezXEZtr{RBTXcN9l7?o zj<&y{{FbZ|)zwmRH$paE;v-(-3z{*|w6(^DU|f!%+|(K|T=7};3o)WsL4vq#pFPd^ zW;Q~)mXYole(@BMhjggQ9tBr+T~Z9(iGE-7W!BJ+LJ}tlUGWv9?{elUcI91{m3k5h zYG{C-7=(ExRV^tAUlClTmOUUPYL-CFP%0uEM0{UvY==BtSV1-zm2<_YkY|{o zbI_COuGfmHdP1~E$jT5VP39)lM7Ci3k^>of8xpbT*)3V?ERvTH60Jqu>5X@9>0u3~ zKjK#7NCeO~jWZx#?mNfGd{7F61G)3PfW5q|qB2l%ML10W1-S&Ne2~=KO-jMgMI5S@ z&`-K$q!WhKhL5jZ;Kp&_vIfgVR=5w#(<3guJ=f5qW-t#K zg?QFxc$WmVY$TvdJYV9;9G(o4TjWs_K}=KyNmHi@&sXtL@8}X;-ANQeUMd3c@vt};mEi@{! zA{Ax{-jj$~9U!afEqbpmL5P>D@LiK1tioGN>{vqimirOqguC|VD9#lz7*{@WkX6?1 z(*x0mS8-D=Xi+-3!NhpEdlp_8B}E>cm_@W(&sUvb)rFYdfx(JUT>UrcEOzZrH2BvE zq`>%+IHSt>b`>ja~LXXHj1OSyD=+&4POpA3zw0@O6H&(TrZ?F>`nPiY~6 ziRjRcX&UyY&o>iP>K%zUN;JigKG?8Of@6K}1#AMh2CkkUJF_V)W4RJfkbpb2V5VhK zL@^r&jYG5B(>JpHU%Nh2vIT&rpWKlf@cT!+*B4l8pz`H2>rnP>Y{0oIlm&CoM6%5oX|JBm5MXMwIwah+!nAwdYwgj( zFdf8KF}U|#%KJ_6N8O$lj(w*^Q4+?YS&t=HWBu^zy9Lw|IYOA0iU<7eZAMl$+9e+G z%gpM;<@fZ;-ZD?#M3R>8u%8RhX4v#8YMO{xV7kjl1I1;aPkNl(O0m}h33G2&v7e+t zB9%e?WjTHj%ykl`B_(4F2pq3@vcu2yrX0Wr`Fqy9^ihN-BMVYu3~0_b%41z#EMz)N zH7I&$M3E{$KC^bAQ+5;IqLC20n|h&{p6g>{u0&Dk#VDgr7#0sIQWj8DLB>7C+Uti( zf*&GLe~@g3kJt`Qw5B(xQ9y2H<+Xuu)!0EBl0Q+ZBy)|4b*0c=$?O@6o7zbh+m_wa z;)d+Y|w@-7_~oK&TAl|gx!Kw=J)FJEA7i<8LE zvqak?CQwC8k>vkAcK3SL9BSDJJt;cE4d*w-BO!(x(G}G;$!MT%IFCYucvsZhKi2Og z#4AH_sX*f#!blq(KR#1e$4tMamd7h8cso6`)Ck=|kYtAh+JxdE z%1Z9bYI%vAYi6SwAO$@C9z@qQs7+mHdFzi!a|kKxK_*^;H5Q$*7G+~u_$H2t#HK?iSAg?J*(*JM-^}zue_D_sCuyAM zUYp9< z3(lpfm`ofp)7)>FRi&@3GJUq;g~uIe$I+hPw4eM zUMb7*CRcI`ga-ehK8k<6;dQ=qC?SfSNJx9tigc7dNq0R+d1y7fsVEDb6c?kme-b4d z!X)7I(|+ZSqx2my)~=Aryj*N6#s)`Z?E8~}=|tj>)$}{qAVK$)7jjFxHPr~aJp&Vn zLE5BZcJxlo_xxmJWH+4DI6D~8uoCZV4@gz%m@0LO=6#lZQNUOp(Zc}M^%6`h=y~h zkmg9f0_~pk>t?a2$aT-af{`x8(5;1s)#gK|NS)c}blqgJJhA$!P)VsI8)RHs_ov3U z=G?f*8;k5vk5EMbqy@DkrmLknduRt$lYYANTvCRhM6{3-h(x+EdLhz6v$ENV~r<*wjqhBeFT%xqBo*pPi^s zln5O;Ux9Qp#6>5Xi-))l@h!04YXx=nVGax*8#YrfV;$*PJ0Q)B6ilNXWAH~!^N#}L zW9vvP+yxif<3HX!&x8OP*8H=nMuu>sAP5j@JGvp$c*_P3E%fn zf?PNhNT{(+Ckzb0VYsktmd@ zUjRi&m1NXVPieMg4!ki9BVoZsWl+lr2?Ci{<)@MJo;g}9?KDlbOY|XWX!}WY5qXa* zj?#DYtkMfog1+EP7)GqotQ*mrF%pCTzt9p~ifMR0lXOeiSx^eBcwjM`su z&zaPPT)S19t-p~ExH)}M<8rDaI?h>zY)>Ke)tv^3{)Qa%?J`;b@R1+9F(2p&oZH_uLaeJm`8@k>R6 zUb$=mu9fnK;ojbARHooRQ6_x4(T~s=CO5xPz3L#As)oz!qnL z^+*rJM#=xXt07Z4{Pi+cu*EbI1 z;sZVQ)aLsw1K(>-5#PTze4b2;Zt}Ft(*{>Y#X~#oq^OO(|D7Vf{$~r&T&2lSKH_OQ zZw;=wZ>mZ^iDQ!^;pM{_@l}AD=+yuX)FWCMSX#`$zvUAuo~G#JAboA^}*}iW;1cwM(nYmmF98G^m$Q zYnCh#Lp)aCa@Q2H=(IWLt5c=dKTJ4sCF%Bb+;OFwn%ehGmz|WPwhmE`3kBnIlJVi6 z&%9?a%k|rw#qk+=v92EQnRsh$x{W;Bn~EdLC_*BmN(Q~Zjed{{bOVTI^7kHDV&s}V zXJ$fce@LsSV2-46SbhK2ch!+ox`zEVmDBiZ;Nq#A4*QE?IZY>;j)VARDH2m6m23vP2x|0y{a{C`SktO}?aTRVMs4D{kF)&AhRs zeR(|!F*b*^2vBn#lFQcX(gRk>s+d9M=s~R%AGa#gZ@u|!ug-rIsbqc8PJ5wq)BNe0S9lvL+%X2y3nyfrE^c@4>9B(@|INjxJBjyd*sYTZ4k8!6{9;!keR40du9p#c|PY$=Tys!XK2C zjJA@ptEh;jL4h%9(k_V9$f0j>*SPp`Ylkj=ohgLumZ~{0C-K|huJuMG-}Q+skK8ru zx^8&PIgbwi{F)x1-n2u35)!nvWo2hCPoO#F6n~ZCxV$M$SU?m-evheU%wCXR1_|!- zpzP<5efd2Jv28cpUcbYFHkna{orOow{(IviuqW_p6B}E!w_q=4bv3UCBE>BW^c5`_ zIF#M(beh<}fwa=S zmM&7x)_UiLD23yEG(pSnu>9puRPx1FZ2xS(h0$w}(8<+vNY<2oCi-9(NLfaHBLmEp zk~B*$&Q}L5n5|$!f7p`7$fr*T#)X}3fAXDig$K~U*I!f2Y^}~QFZogCTOR>(0f((T zzW9^*aHj94C*tdr);i6EIV}9&XJ55n%;mKtx{JtCqpF!ms6uOAgv7EJ?yJ?dUrfT@ zz_$s~1(>p)Rv6U8l1_29&_F}WY9G6#W}W5-?*ol`%*nGYRvr-O@rIyC_d>X3tAy6(EY? zvNfY)OXFN?sP2f;W=qvv8Y-*It4(H7tv&x`?X%h)p?^9k?D^X_`19uryyG)tA&!_L z18m!}4IR0hU(vu)s?^L4%LF8^P%IQT)&&JT62sa4M6W%=V`+t$`$gnh{UOELo}>|;LF(r?V^9=ko7C_L=(P@y^5Hzy~q4-Za{ zA*53g0aI-ad$XsFhb^Jz1FG335fs^s8Eg&&)BV8~jn6A@U(aL7F7&MZ78UT`e-1Q6dUE}YnA4)Wtz2zpib*lta~1(SqeHX&0-S4?Ecs0E{kBe&)o4?sYQQFfmUdQ- zU?MPG21cj;PEX7yWReBwE?# zT)rSO@!#;sc%mmgLf3^mwu~!%D-9rmWw8**7{AyaskYjnQQscjmX=Xaq5qVRCFxd> zIKzggY?gP@K8a-RfzKg3npnBk-+)JyGRndL-cMy3#>RaT0cTiMZGIP@ZX8dyN7oPz zeVA(Wcr&YpzUVsO&6qdq9h5_qI%$uv5h~XbSOXunet3^?C5msu@*aG74ld?cohly^%~dtJA#8&e!u7AZ=akCXi>t}L(LHMXC7I<~B}ge<$kW5atTLVRr5KkWR8lh2gH-S-bp zY!2XgV7lX7;=zJ3WT)&UeQWqPP^^o2a-WMX-MeX{*Eo=`Ij#9j1ox-f94$($1GIjrD=r?F^$W2reQt2VUnZOZx<6a}>s7kd|bhSo;Y z`r)Cv`PYp-y6?)$-37Ma{)d%rgP6z!7~^$g>tohAIX}^v+wxt%q0cF~iLR>#j8D?R z88UO*xl`;~O8ae;JOz9zHu&^;>*hvS{%yq{ z=!_Z4DM17pyfCSRJH9e|fK%b&%ofU?CPZ|^chp$$IR#2BJHXv`>a;wTB!`Z!RK^*& z|KaX;TIarNUUWlhb>QCZ-NSAwvVGxir>G#E>;Z;&T91}{#{3x zh~m|D7zkf{Wag(ymk~8QywvjAGHo>6x~z9Rh{gCu!{zuJjr+i|Psm%z*Z~tBMN?lp zekX-2d5w=$A1#ZB_h+YFUNAezzLANDpIBV{iaA%wI$z=Dpn^%ax7YNjY9DQghRDJT ztB~3E|2PNocCW>1s>Y=m`H0oE~idQ!xsSP@r(ev);E= zMBIFRf^PzFjyAU{UoF>$l_oRs_^d;aq%RKr9+4N%Q=HC9i8!HG9piD^UNzopZI0L{ z2M!O%E1j)5*nua3b#9l>fg~c20D26i)C8Xu@^}Kvf#!ldCwZ^DF-Iph$CRC1t;cHs+eO` zRyv5@?QDo%-aY@b`hl}ym8(|(dTN{Q|q zDua>90)-4Ab72pU2IGgj_`n-<@zbzYbPWew+=UI7?AHNIb4Km&)C*c9YA)dKEPT|e zPmcp1C^$Q7t1T{2ztNydov2Sg2qpvD&x5$tzzO(>nHa3Yy-^iJ+>R_5pCS{Ki{_hr z(6OtH$D6_@zh-jpQv^A^_7pk1eUW3a5*&(%ki#8Lrx5RUHt*ut65x@hK;kgp6m{vh zN_RKcE>ZAgSzY*pMXB6<+&iS@M#V$W`{5`6AscxxO$uu@a-m5uvCwQ0NvXG1V|`+c z?(Vo-A#z~D$miPfU0ND~b6IIr;MFRV_wVDkp`V`Q9es)6RM!;=VTd8hJeSDcKAy_C zPr6(@cHtL0S5|~&*Bu|`1(*@fJ~BE(5dx|OPKr4pf+A=ojD1a*X3!XxngBO*49X~a z_^MzqQ5 z$%oIcelF)cM90aRO|(@Z{{zn=+u-U;4b zP_wRKx)APp2(4q!wJYCezjdQQn@;;Hciq7_7mHFZ`5VJ zN^ti=Obn^T1?nems_*Z$j2xV)oq4eDQpH0)Nk9fi5!#eFj^I^g^zVuuZNjUutu@SW8A({t*Tfkg04l!{&GYnX08E#wFZ4nqkT zdY$Ev2#fsoX3#ZOGusgtMG?m!urNNt_n5Ka!MN*bmiHs**S_@mcy_y$rQMsCP!;8ke1HBEfZy;9Pv;_CCCpi z{i{?T78IQ;E)mZ}0LOs3s~W^_e145p*7-G24Ar-0frM0*R55Ci#-pO9Q3 zi-0$`AXsI$h$^%^)ZB^AN$mA?De)2K3;1N-E3)UhnWa|*qQ{hI;7tR5YMki<&=cfl zXcj?4O5OyIakhyl4eWuWVTGZ+*};yha9m9xsDc7btrguJ;|seoKMR(kTJ5Up<#ler zNk9YtkKF{rlixEO<2^#)%qL+qs4e*JXoH))s9#QOqFNrpo$gu*_N5e=LCQf~%7&k%iT-+;`+R&&8u;}d#n(vdg{%iZluick9l_NLHF7_q znI}s@FGx3khRKkE>XS3Of~W{*h}GILEa>~+2uU4>1~wWz)|EJpfgW?~g)szB->HTx zM`>Zl>~ee}Mko+!pE1>=WF`AuZ1_RFbK^R8dptyJiEk3wo6YuW@7 zD^r^Yhu{(<5qA?+X%{-4*V2IhJ(*1DmsHx|RyxB#d=rY)DWK{d2eyJ1SM_YJxoht^TCTD6#(#P#cMF$N|F zvKJWoeb$2VL1XjTSxob+c5>R*s7VKuXojVn1n`qwyuCh=BhAbFiEc&)>!n+OR zW?S7KwL!Bh4l8+Mt@3gvzQAPQ)b74j?VfU?`@6$vRNI@&w%|ZP+*~%HcT&vhB z_FADVA%c1IWR6Kp@H1zsfD_e>j_hI{VBB~jsk3aaEhMlBH@A4R3AI5L?Xw(TI+8&Y zj0AJ+vgaFcE~3U6pp0<%n15l|)y>hBL-u@?`T(*Mi$Ya4o_`_4OHyDrP#oWfS_8NOXf#7-7yVqAQjigJ-Vtw8uuQesIzH53##D4QQ!z<~JQhv0 zsO{GplR(M&q5QdkB)T;Ow~3!^3Hd@65Z+0j1iA|c&P zDITDnCwDTo%bXhIJ{jNhnw?92ZMX4Bl&`PZG`shEVs4!cO_!pUK%OT#zw^uuX35(^ zI%(LO4g`r{-(#J-O&K!C3&eXu=QmFy=!D47>!q2nS8alt$b2M%X=KlW0&N3#R*Zv|x zI|8!v<8suo?i(ep(HO;}R@fi~?x|gDonEF*mY{lX6V3C;Yj=HQZR~SRn*_TrH{@FT zPU`-wbRL7pH%p*Ey%fQiM4)++<{3o5P0npF;Vsg0EL>KcX4&4wp!A>XvSfWxXpGXf zo*!7th$MIl|&JD*14 zFtqC*x^i0)_Gd9LYS2E1#2VhYq1sK=HAjS}5kal^`zhJt z$VFtr(G?kO$}G)khK#aFoJBnC%uh3P^+FujGB7AH}=u}1HM26?-cVV(Tvk)?Rtgd`i%ShPINZvfUL zpBYDB z!h*&kC-6x#Ip9uj6G+2x2d6GFuY)Z~Yn!rU)7e*RgT8(yy7F0Wt=pc}?=hV~JUV^h zg>;hy1hC-cvO!@cw$s11c*JDG{WJ!fp&dV5=BSp7jg79e#U+|Cg+czhqhSWorp(%V zn54?fdk2xGEwmwLTo(&NE3M#;ebCkCWM-TYaeDZPn^X%d_jSw1c=bFH&J}W}9MzyI zj(x_AnWOHASxt+bvixcN-UM1`kmuTDYuTa=%2fgo7LB!pTflTp*Zvh$Ps~%&D2Xja zjc2MhP{9;(c9xxe0^Fb+;T+L|!bb%!&Q}^FAE^vD_a6}kiOS2KNpe{O08X@}o}!ha zA}fFb|5y=DAP4}0a{w65{*4EN5C8=DZAUnffe`;8;|}M^|Hb>kd1koGA6>XAzzqTe z81NeY6(zs}=Lz6-0-Qd=3FRL@>~PUP(tp(oiYjU}JRICy9J~Mz7q_4=mw+%24-NNI zVLl;YUf#dk_DAzC+u;0PwxPj!gn!xa=Oa&~zww0s;{RX(f&YmS=a25ccpq$d1N{1@ zZIAPhs{oFYyrMk3qd#WCi^m^;41j`!gp7oUf{cueii(1UL4b*Yj*dZ!hmTD_Nk&aY zNk&0IL(joP17)Y9pkNkYVdvuJ<>jSj5)u>S5#@Nw%k$?UAXHRT40H?Fi_5F)n?Jbz;QZ_QC$j&B3m1+H41pj(kpJKUfxZ3!$Auu$awFkMsUyF1 z!H4n$qYy|Z=GAng(mmBUA~bWIL?fc-U1K=@1MMHk{_lW={QpAsU%>v2YXQJO0Ko?j z0T++}t{yH8w~yY+|M9m9wN{4bU*Pr8n7g!35z#EOA<84V@Y#kl>ez& zpSXw+8b3JWT4PMOQ%gXK_x4$DF}zd{kiN}k(MYiOau3r7U({PY?v_DfF@CPjspth?r2sp#kA z5r=5$)BzxK)p`Z_gm*YGj6huy@&A!D%2EXhfE0&U`aaE0^z6%;{qhz@{u_;P*_#&G z!W68mKNfvbPsG(vDbg2ukVCr#CE^LROS~9HYIsNOI0Os~N%GOO*uOHEXKp43JspQI z_ag_`kug`|)zHcjsDb`Yn$ojH8y-tFsn9&7FJBl*`cVYwL|v6KH!rvH^24jZd@%z2 zquWRyhGAX3Z*y8aPv_<{amUr)r?^IFH#MDd(EGJ+DRMW*sWK(;1d@&R)F>GbyKB^@ z2=b;N{?8z_5(iq7r>>`zR+rwuMozp5O@RVHW742xezXwf!*jTdX0+8RD`8o8ju@sanEoR=rRX_d>U0Go|ND}LP@#SA)I#8AJ^IwT~TMREun#1!V7 zabC)d0HCp1RK)&Iwj<~JkxcM*;$AHqikXaZ>?aK?$~wZxLursh5A1iaue3W*9)Uc^ z@e`-xYP|a#iOsylM_`^`^&U(3#r-FIHBM@e|8h=Cd`w?J#1jvr#1^nUfk=$lNY}A&M2vTnYaOKR@U{ zDBN;qhL5j*6Z$S?0$NF+uJ;~MoHhfwfu|_Qf8)7G)Nd8IvwHs?CfMPmjtqLaQ9lz~ zpe$yAAZ41+(C%uZ`apA z?EdZdQ_kj>Fji&N_@=Fa!^~y|5NXCvyz7hI-_9m^pL3^J;*hM{^7-339mCV@XV(bu zBWJ2gLs$%zqMW~R?j8P-V@$(#U9x6oAm!e{i`&(gfn4@O52D^?D>BF0S@&=2`7hEg zu1?lf%IM?KoRJZJvP>-}B{}xg{Nz=aQw#Z9nnbJO+SIgD45uonF!@;-QXG0fT`8qQ z`v~Y>O@*(g_P$e>vxBM25di-p(7A5cJ@zf#+B7jonANnUed_pS!0rQy(F5NvzFu#U zfd}+y_a9H5D$TqM>PC~IY#2Yt0Z9T#YjMbC_KnDN(3;opY4W34KtN4Bai;^(rXdhDSZt4+th{ z`cw=#Fct90iedZbhT7(^wZsE@6qJ{7+ts|Yt9}Y{!gAl~Xe=E*z8#skjdpltMW8MR z{6#VncHzZ2xg~5Yjz*qnHP|B_TP5(E44D2Pk`CDYC8x%p+3qm=59 zJ8q{!!+jsg6&EfNo?+jd;+MY>t?3gL>k9ItS<(Kyi)=6K_zjHfj8>Mq?ZL4bObO8V z-nkD~5gVOh?m@@DmIErCn*nKlg&Z%(Wo^9FwUIzTb5bZtE_D9TdAd zIvs4cWX6&*CA8w6^BF|fCo!(c5oiMW(ae7lnB@j7q$u+QQAYon>&7Ro2`X5L?J)&R z?CQ_^qMsklW(NLS*n*?kCOYuEQLaXMLtYO?ePf5c4pG2sJQ}z<7hh4A@kIFcfaDF> zzIVMUSC6^p+2^*Zd<59nBnHl%exCFFo{lbyCX_@&0uX{&?1>I+Lh8=jom7twlEsV5 zjM#}1f}6+1yaCV<(}ebgr5yWLLM@9VXP`Pooa0VfoO>>y$DHX-vBD_Q**oKg6nhuB zQEW$P-Em+BN0o52&8-_cgb__ii6z6biQ~_zbi^4Ph!ZV*rJ$9WV)i_TE<2)4|6XBT z4Dt0orXGHi?r0~4AL#yVX%4>aq}iAAW7o(wIqnAzVWbD2bHcL}jhXs#F*n7QDb97g zg~fjJMAf_lF_c|wGv?=C$(oNw2|G6=(3ZUgdK-mRmi5&RLrlK)2J8jO>_}Ch%?JI> z#eZB4ZX4h{EBQ6%x;bS}+-z@}>ui&sFkD9vUg#q#+8F3_UC*H595?g`9#UGs-#qY#pg+qVa zKkuMF+KxI8M6-M5U$89J*5+hVN<*39i~AtYwkWZdTYv3G=^|KfBPv~9D`HldZza)B zep^t5h3)7&`<%UjR$TB-hKN7OTlHBwdB)Ve(DWlv9vgois6*-B(Qw+Q;^XBK=)?DO zv68QM%pyrav<^SXj%<<*O5U_nm_(|fmsOBR!Xr#UNS7e>+kP)FtV1lmf0+VlEycr7 zlCD+i&Lj!66DafknygWjZaroN`6}**Zmke^R&DQdNKH;#@!gT6Sg9g>w!by0^H>U0 zK3Yy=EGRcFY_G+toQc2G@?e_R#a!onn@#%7orIJ3SDJczbG)BUO(S<^;E3iO$=TlB z-ZnM9ceUQJXOUAw%;$`LS(i9G2Bw3u3+mDV`f29RnpTfM?|7uc#=g$ddaa=$o8$=6 zDn({u!T1kF`(tpg0i2O1QsKr|N0<^Y@-@%K~(aaSpe_jnlorSKMPp(h3 zc5Pl#tnDguD;Y$eM|CZ!Mr1-Qllk608m~2YQSww2{L!y~Wng5}VjLfSp zNo4Ndvz((%7@ZkiTR~!>Qt`~S%EC@gfGRdma%=vcA4+F7z;vPHqC zeK~l*{d*ZKq*ppvG$~1x5{eP+p{2v>%K8OHzGu*{OIwZ&Pi1fZO343XJ!@LPn7E04 zVAslRo~+5DXKSQmHo*8nj_}_LwZCU+I1ef1rV!xcGF`&dDul#^mn!BPJ#*JW=ce>2 zg+wpy$!pRt_9IZIxSgXE9W9iuk4Kt$ ztBKCNtHMA~HDC&#LjRhQ|6YS0zXL6W($esM@)+FZ^xQ38x?2jHyIR7lf9wc6;SzYl z!=uH`E6l|s%=MJ*Psv3hJht~A3Jy*dwpKp>q42LQgnue5J|`Z7E0F!^!P48-N?6*~ z-A&EXRr95T^D9e0ke%kwFW$a56I_b+zoca0R%qEe{L_;Ewl~q(^DP-JOz>aAiViQW zEtM@Dt=(+^K5m}3VUzXncKrWr*R{3yXS2z5w-CIU^uL-lovhrwUb + + diff --git a/app/src/main/res/drawable/ic_launcher_test_foreground.xml b/app/src/flavorDandelior/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from app/src/main/res/drawable/ic_launcher_test_foreground.xml rename to app/src/flavorDandelior/res/drawable/ic_launcher_foreground.xml diff --git a/app/src/flavorDandelior/res/values/strings-flavor.xml b/app/src/flavorDandelior/res/values/strings-flavor.xml new file mode 100644 index 00000000..75d07bd2 --- /dev/null +++ b/app/src/flavorDandelior/res/values/strings-flavor.xml @@ -0,0 +1,4 @@ + + + dandelior* + diff --git a/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher.xml b/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..d378acd7 --- /dev/null +++ b/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher_round.xml b/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..d378acd7 --- /dev/null +++ b/app/src/flavorTest/res/drawable-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable-hdpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-hdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-hdpi/ic_launcher_test_round.png b/app/src/flavorTest/res/drawable-hdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_launcher_test_round.png rename to app/src/flavorTest/res/drawable-hdpi/ic_launcher_round.png diff --git a/app/src/main/res/drawable-ldpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-ldpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-ldpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-ldpi/ic_launcher.png diff --git a/app/src/main/res/drawable-mdpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-mdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-mdpi/ic_launcher_test_round.png b/app/src/flavorTest/res/drawable-mdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_launcher_test_round.png rename to app/src/flavorTest/res/drawable-mdpi/ic_launcher_round.png diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-xhdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher_test_round.png b/app/src/flavorTest/res/drawable-xhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_launcher_test_round.png rename to app/src/flavorTest/res/drawable-xhdpi/ic_launcher_round.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-xxhdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher_test_round.png b/app/src/flavorTest/res/drawable-xxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_launcher_test_round.png rename to app/src/flavorTest/res/drawable-xxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_launcher_test.png b/app/src/flavorTest/res/drawable-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_launcher_test.png rename to app/src/flavorTest/res/drawable-xxxhdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_launcher_test_round.png b/app/src/flavorTest/res/drawable-xxxhdpi/ic_launcher_round.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_launcher_test_round.png rename to app/src/flavorTest/res/drawable-xxxhdpi/ic_launcher_round.png diff --git a/app/src/main/res/drawable/ic_launcher_test_background.xml b/app/src/flavorTest/res/drawable/ic_launcher_background.xml similarity index 100% rename from app/src/main/res/drawable/ic_launcher_test_background.xml rename to app/src/flavorTest/res/drawable/ic_launcher_background.xml diff --git a/app/src/flavorTest/res/drawable/ic_launcher_foreground.xml b/app/src/flavorTest/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..2610c60c --- /dev/null +++ b/app/src/flavorTest/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/ic_launcher_test-web.png b/app/src/flavorTest/res/ic_launcher-web.png similarity index 100% rename from app/src/main/ic_launcher_test-web.png rename to app/src/flavorTest/res/ic_launcher-web.png diff --git a/app/src/flavorTest/res/values/strings-flavor.xml b/app/src/flavorTest/res/values/strings-flavor.xml new file mode 100644 index 00000000..78eb04f7 --- /dev/null +++ b/app/src/flavorTest/res/values/strings-flavor.xml @@ -0,0 +1,4 @@ + + + secondlion* + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 91d95680..dd74c774 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ @@ -53,7 +53,7 @@ 7 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 VpZL#|hhjQXl2b=iJhOcL{{X(Ib*TUV diff --git a/app/src/main/java/com/github/dfa/diaspora_android/App.java b/app/src/main/java/com/github/dfa/diaspora_android/App.java index 03271637..841730e2 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/App.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/App.java @@ -35,6 +35,7 @@ import com.github.dfa.diaspora_android.util.AppSettings; import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; import net.gsantner.opoc.util.AdBlock; +import net.gsantner.opoc.util.ContextUtils; public class App extends Application { private volatile static App app; @@ -54,6 +55,13 @@ public class App extends Application { final Context c = getApplicationContext(); appSettings = AppSettings.get(); + String a = new ContextUtils(this).bcstr("FLAVOR", ""); + a += "__"; + + if (appSettings.isAppFirstStart() && "flavorDandelior".equals(new ContextUtils(this).bcstr("FLAVOR", ""))){ + appSettings.setAmoledColorMode(true); + } + // Init app log AppLog.setLoggingEnabled(appSettings.isLoggingEnabled()); AppLog.setLoggingSpamEnabled(appSettings.isLoggingSpamEnabled()); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 1488e6de..1b6dbff7 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -431,8 +431,6 @@ public class MainActivity extends ThemedActivity app.getAvatarImageLoader().startImageDownload(navheaderImage, avatarUrl); } } - } else if (BuildConfig.IS_TEST_BUILD) { - navheaderImage.setImageResource(R.drawable.ic_launcher_test); } updateNavigationViewEntryVisibilities(); } diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java index 8f6c5ad5..4e310ae6 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/PodSelectionFragment.java @@ -173,7 +173,7 @@ public class PodSelectionFragment extends ThemedFragment implements SearchView.O rootView.setBackgroundColor(appSettings.isAmoledColorMode() ? Color.BLACK : Color.WHITE); listViewPod.setDivider(new ColorDrawable(Color.GRAY)); listViewPod.setDividerHeight(dividerHeight); - int bgcolor = appSettings.isAmoledColorMode() ? Color.BLACK : appSettings.getAccentColor(); + int bgcolor = appSettings.isAmoledColorMode() ? Color.DKGRAY : appSettings.getAccentColor(); buttonUseCustomPod.setBackgroundColor(bgcolor); buttonUseCustomPod.setTextColor(_cu.shouldColorOnTopBeLight(bgcolor) ? Color.WHITE : Color.BLACK); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 9cbf7049..6b62c0d5 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -443,6 +443,9 @@ public class AppSettings extends SharedPreferencesPropertyBackend { public boolean isAmoledColorMode() { return getBool(R.string.pref_key__primary_color__amoled_mode, false); } + public void setAmoledColorMode(boolean enable) { + setBool(R.string.pref_key__primary_color__amoled_mode, enable); + } public boolean isAdBlockEnabled() { return getBool(R.string.pref_key__adblock_enable, true); diff --git a/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java b/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java index 93019ce9..cab23816 100644 --- a/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java +++ b/app/src/main/java/net/gsantner/opoc/activity/GsFragmentBase.java @@ -3,7 +3,7 @@ * Maintained by Gregor Santner, 2017- * https://gsantner.net/ * - * License: Apache 2.0 + * License: Apache 2.0 / Commercial * https://github.com/gsantner/opoc/#licensing * https://www.apache.org/licenses/LICENSE-2.0 * diff --git a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java index adaafa3b..1e980f8b 100644 --- a/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java +++ b/app/src/main/java/net/gsantner/opoc/format/markdown/SimpleMarkdownParser.java @@ -1,9 +1,9 @@ /*####################################################### * - * Maintained by Gregor Santner, 2016- + * Maintained by Gregor Santner, 2018- * https://gsantner.net/ * - * License: Apache 2.0 + * License: Apache 2.0 / Commercial * https://github.com/gsantner/opoc/#licensing * https://www.apache.org/licenses/LICENSE-2.0 * @@ -124,6 +124,12 @@ public class SimpleMarkdownParser { return text; } }; + public final static SmpFilter FILTER_NONE = new SmpFilter() { + @Override + public String filter(String text) { + return text; + } + }; //######################## //## Singleton diff --git a/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java index f134122b..0847021b 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/preference/PropertyBackend.java @@ -3,7 +3,7 @@ * Maintained by Gregor Santner, 2018- * https://gsantner.net/ * - * License: Apache 2.0 + * License: Apache 2.0 / Commercial * https://github.com/gsantner/opoc/#licensing * https://www.apache.org/licenses/LICENSE-2.0 * diff --git a/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java index bfcce37b..8fb486a3 100644 --- a/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java +++ b/app/src/main/java/net/gsantner/opoc/preference/SharedPreferencesPropertyBackend.java @@ -3,7 +3,7 @@ * Maintained by Gregor Santner, 2016- * https://gsantner.net/ * - * License: Apache 2.0 + * License: Apache 2.0 / Commercial * https://github.com/gsantner/opoc/#licensing * https://www.apache.org/licenses/LICENSE-2.0 * @@ -209,7 +209,7 @@ public class SharedPreferencesPropertyBackend implements PropertyBackend - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml b/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml deleted file mode 100644 index f1b3aaa2..00000000 --- a/app/src/main/res/drawable-anydpi-v26/ic_launcher_test_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings-flavor.xml b/app/src/main/res/values/strings-flavor.xml new file mode 100644 index 00000000..aa9e1c3e --- /dev/null +++ b/app/src/main/res/values/strings-flavor.xml @@ -0,0 +1,4 @@ + + + @string/dandelion + diff --git a/build.gradle b/build.gradle index 5c5bfd78..4780cbe3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,13 @@ +/*####################################################### +* +* Maintained by Gregor Santner, 2017- +* https://gsantner.net/ +* +* License: Apache 2.0 / Commercial +* https://github.com/gsantner/opoc/#licensing +* https://www.apache.org/licenses/LICENSE-2.0 +* +#########################################################*/ import java.text.SimpleDateFormat // Top-level build file where you can add configuration options common to all sub-projects/modules. From dbbd3cef35e599832ec4ebb2758cf638215f1707 Mon Sep 17 00:00:00 2001 From: Gregor Santner Date: Wed, 25 Jul 2018 01:59:25 +0200 Subject: [PATCH 29/31] Use searchable dialog for tag and aspect/contact list * Remove seperate fragments for both cases * Make use of opoc/SearchOrCustomTextDialog * Basically also removes all fragment swaps * Only two fragments are stream and podselection * Pod logout restarts app * Thus long known Android Supportlib bug can't occur * Fixes #198 --- .../activity/AspectListFragment.java | 208 ------------------ .../activity/MainActivity.java | 70 ++++-- .../activity/SettingsActivity.java | 6 +- .../activity/TagListFragment.java | 206 ----------------- .../ui/SearchOrCustomTextDialogCreator.java | 85 +++++++ .../diaspora_android/util/AppSettings.java | 4 +- .../util/DiasporaUrlHelper.java | 9 + .../opoc/ui/SearchOrCustomTextDialog.java | 189 ++++++++++++++++ .../net/gsantner/opoc/util/ContextUtils.java | 4 + app/src/main/res/menu/main__navdrawer.xml | 6 +- .../res/values/strings-not_translatable.xml | 4 +- app/src/main/res/xml-v25/shortcuts.xml | 20 +- .../xml/preferences__sub_navslider_vis.xml | 4 +- 13 files changed, 358 insertions(+), 457 deletions(-) delete mode 100644 app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java delete mode 100644 app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java create mode 100644 app/src/main/java/com/github/dfa/diaspora_android/ui/SearchOrCustomTextDialogCreator.java create mode 100644 app/src/main/java/net/gsantner/opoc/ui/SearchOrCustomTextDialog.java diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java deleted file mode 100644 index 50cf66af..00000000 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/AspectListFragment.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - This file is part of the dandelion*. - - dandelion* is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - dandelion* is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the dandelion*. - - If not, see . - */ -package com.github.dfa.diaspora_android.activity; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.github.dfa.diaspora_android.App; -import com.github.dfa.diaspora_android.R; -import com.github.dfa.diaspora_android.data.DiasporaAspect; -import com.github.dfa.diaspora_android.listener.OnSomethingClickListener; -import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; -import com.github.dfa.diaspora_android.util.AppSettings; -import com.github.dfa.diaspora_android.util.ContextUtils; -import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * Fragment that shows a list of the Aspects - */ -public class AspectListFragment extends ThemedFragment implements OnSomethingClickListener { - - public static final String TAG = "com.github.dfa.diaspora_android.AspectListFragment"; - - @BindView(R.id.fragment_list__recycler_view) - public RecyclerView aspectsRecyclerView; - - @BindView(R.id.fragment_list__spacer) - public View space; - - @BindView(R.id.fragment_list__root) - public RelativeLayout rootView; - - protected App app; - protected DiasporaUrlHelper urls; - - @Override - protected int getLayoutResId() { - return R.layout.recycler_list__fragment; - } - - @Override - public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ButterKnife.bind(this, view); - app = (App) getActivity().getApplication(); - AppSettings appSettings = app.getSettings(); - urls = new DiasporaUrlHelper(appSettings); - - aspectsRecyclerView.setHasFixedSize(true); - aspectsRecyclerView.setNestedScrollingEnabled(false); - - RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); - aspectsRecyclerView.setLayoutManager(layoutManager); - - final AspectAdapter adapter = new AspectAdapter(appSettings, this); - aspectsRecyclerView.setAdapter(adapter); - - //Set window title - getActivity().setTitle(R.string.nav_aspects); - } - - @Override - public String getFragmentTag() { - return TAG; - } - - @Override - public boolean onBackPressed() { - return false; - } - - @Override - public void onSomethingClicked(Object null1, Integer null2, String aspectId) { - ((MainActivity) getActivity()).openDiasporaUrl(urls.getAspectUrl(aspectId)); - } - - @Override - protected void applyColorToViews() { - aspectsRecyclerView.invalidate(); - if (getAppSettings().isAmoledColorMode()) { - rootView.setBackgroundColor(Color.BLACK); - space.setBackgroundColor(Color.BLACK); - } - } - - public static class AspectAdapter extends RecyclerView.Adapter { - private boolean isAmoledColorMode; - private final AppSettings appSettings; - private final DiasporaAspect[] aspectList; - private final List aspectFavsList; - private final OnSomethingClickListener aspectClickedListener; - - static class ViewHolder extends RecyclerView.ViewHolder { - @BindView(R.id.recycler_view__list_item__text) - public TextView title; - @BindView(R.id.recycler_view__list_item__favourite) - AppCompatImageView favouriteImage; - @BindView(R.id.recycler_view__list_item__root) - RelativeLayout root; - - ViewHolder(View v) { - super(v); - ButterKnife.bind(this, v); - } - } - - - AspectAdapter(AppSettings appSettings, OnSomethingClickListener aspectClickedListener) { - this.appSettings = appSettings; - this.aspectList = appSettings.getAspects(); - this.aspectFavsList = new ArrayList<>(Arrays.asList(appSettings.getAspectFavs())); - this.aspectClickedListener = aspectClickedListener; - this.isAmoledColorMode = appSettings.isAmoledColorMode(); - } - - @Override - public int getItemCount() { - return aspectList.length; - } - - @Override - public AspectAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.recycler_list__list_item_with_fav, parent, false); - return new ViewHolder(v); - } - - @Override - public void onBindViewHolder(final ViewHolder holder, int position) { - // Alternating colors - final Context c = holder.root.getContext(); - final DiasporaAspect aspect = aspectList[position]; - holder.title.setText(aspect.name); - if (position % 2 == 1) { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().rcolor(R.color.alternate_row_color)); - holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); - } else { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE); - holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); - } - - // Favourite (Star) Image - applyFavouriteImage(holder.favouriteImage, isAspectFaved(aspect.name)); - - // Click on fav button - holder.favouriteImage.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - if (isAspectFaved(aspect.name)) { - aspectFavsList.remove(aspectFavsList.indexOf(aspect.name)); - } else { - aspectFavsList.add(aspect.name); - } - appSettings.setAspectFavs(aspectFavsList); - applyFavouriteImage(holder.favouriteImage, isAspectFaved(aspect.name)); - } - }); - - holder.root.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - aspectClickedListener.onSomethingClicked(null, null, aspect.id + ""); - } - }); - } - - private boolean isAspectFaved(String tag) { - return aspectFavsList.contains(tag); - } - - private void applyFavouriteImage(AppCompatImageView imageView, boolean isFaved) { - imageView.setImageResource(isFaved ? R.drawable.ic_star_filled_48px : R.drawable.ic_star_border_black_48px); - imageView.setColorFilter(isFaved ? appSettings.getAccentColor() : (isAmoledColorMode ? Color.GRAY : 0), PorterDuff.Mode.SRC_ATOP); - } - } -} diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index 1b6dbff7..9589a66c 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -36,6 +36,7 @@ import android.support.customtabs.CustomTabsSession; import android.support.design.widget.AppBarLayout; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; +import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; @@ -61,8 +62,8 @@ import android.widget.TextView; import android.widget.Toast; import com.github.dfa.diaspora_android.App; -import com.github.dfa.diaspora_android.BuildConfig; import com.github.dfa.diaspora_android.R; +import com.github.dfa.diaspora_android.data.DiasporaAspect; import com.github.dfa.diaspora_android.data.DiasporaPodList; import com.github.dfa.diaspora_android.data.DiasporaUserProfile; import com.github.dfa.diaspora_android.listener.DiasporaUserProfileChangedListener; @@ -71,6 +72,7 @@ import com.github.dfa.diaspora_android.receiver.OpenExternalLinkReceiver; import com.github.dfa.diaspora_android.receiver.UpdateTitleReceiver; import com.github.dfa.diaspora_android.ui.BadgeDrawable; import com.github.dfa.diaspora_android.ui.PodSelectionDialog; +import com.github.dfa.diaspora_android.ui.SearchOrCustomTextDialogCreator; import com.github.dfa.diaspora_android.ui.theme.ThemeHelper; import com.github.dfa.diaspora_android.ui.theme.ThemedActivity; import com.github.dfa.diaspora_android.ui.theme.ThemedAlertDialogBuilder; @@ -306,14 +308,6 @@ public class MainActivity extends ThemedActivity BrowserFragment bf = new BrowserFragment(); fm.beginTransaction().add(bf, fragmentTag).commit(); return bf; - case TagListFragment.TAG: - TagListFragment hlf = new TagListFragment(); - fm.beginTransaction().add(hlf, fragmentTag).commit(); - return hlf; - case AspectListFragment.TAG: - AspectListFragment alf = new AspectListFragment(); - fm.beginTransaction().add(alf, fragmentTag).commit(); - return alf; case PodSelectionFragment.TAG: PodSelectionFragment psf = new PodSelectionFragment(); fm.beginTransaction().add(psf, fragmentTag).commit(); @@ -370,6 +364,13 @@ public class MainActivity extends ThemedActivity * @param fragment Fragment to show */ protected void showFragment(ThemedFragment fragment) { + if (PodSelectionFragment.TAG.equals(fragment.getTag())) { + Fragment fragment1 = fm.findFragmentByTag(DiasporaStreamFragment.TAG); + if (fragment1 != null) { + new net.gsantner.opoc.util.ContextUtils(this).restartApp(MainActivity.class); + } + } + AppLog.v(this, "showFragment()"); ThemedFragment currentTop = (ThemedFragment) fm.findFragmentById(R.id.fragment_container); if (currentTop == null || !currentTop.getFragmentTag().equals(fragment.getFragmentTag())) { @@ -457,7 +458,7 @@ public class MainActivity extends ThemedActivity navMenu.findItem(R.id.nav_statistics).setVisible(_appSettings.isVisibleInNavStatistics()); navMenu.findItem(R.id.nav_reports).setVisible(_appSettings.isVisibleInNavReports()); navMenu.findItem(R.id.nav_toggle_desktop_page).setVisible(_appSettings.isVisibleInNavToggleMobileDesktop()); - navMenu.findItem(R.id.nav_dandelion).setVisible(_appSettings.isVisibleInNavDandelionAccount()); + navMenu.findItem(R.id.nav_product_support).setVisible(_appSettings.isVisibleInNavGsantnerAccount()); // Hide whole group (for logged in use) if no pod was selected @@ -561,16 +562,18 @@ public class MainActivity extends ThemedActivity } else if ("sc_new_post".equals(action)) { openDiasporaUrl(urls.getNewPostUrl()); return; - } else if ("sc_nav_followed_tags".equals(action)) { - showFragment(getFragment(TagListFragment.TAG)); - return; - } else if ("sc_aspects".equals(action)) { - showFragment(getFragment(AspectListFragment.TAG)); - return; } else if ("sc_activities".equals(action)) { openDiasporaUrl(urls.getActivityUrl()); return; } + else if ("sc_contacts".equals(action)) { + onNavigationItemSelected(navView.getMenu().findItem(R.id.nav_aspects)); + return; + } + else if ("sc_tags".equals(action)) { + onNavigationItemSelected(navView.getMenu().findItem(R.id.nav_followed_tags)); + return; + } //Catch split screen recreation if (action != null && action.equals(Intent.ACTION_MAIN) && getTopFragment() != null) { return; @@ -1062,12 +1065,39 @@ public class MainActivity extends ThemedActivity break; case R.id.nav_followed_tags: { - showFragment(getFragment(TagListFragment.TAG)); + SearchOrCustomTextDialogCreator.showDiasporaTagsDialog(this, arg -> { + if (arg.startsWith(SearchOrCustomTextDialogCreator.SPECIAL_PREFIX)) { + arg = arg.replace(SearchOrCustomTextDialogCreator.SPECIAL_PREFIX, "").trim(); + if (arg.equals(getString(R.string.pref_title__manage_tags))) { + openDiasporaUrl(urls.getManageTagsUrl()); + } else { + openDiasporaUrl(urls.getAllFollowedTagsUrl()); + } + } else { + openDiasporaUrl(urls.getSearchTagsUrl(arg)); + } + }); } break; case R.id.nav_aspects: { - showFragment(getFragment(AspectListFragment.TAG)); + SearchOrCustomTextDialogCreator.showDiasporaAspectsDialog(this, arg -> { + if (arg.startsWith(SearchOrCustomTextDialogCreator.SPECIAL_PREFIX)) { + arg = arg.replace(SearchOrCustomTextDialogCreator.SPECIAL_PREFIX, "").trim(); + if (arg.equals(getString(R.string.pref_desc__manage_contacts))) { + openDiasporaUrl(urls.getContactsUrl()); + } else if (arg.equals(getString(R.string.nav_profile))) { + openDiasporaUrl(urls.getProfileUrl()); + } + } else { + for (DiasporaAspect daspect : _appSettings.getAspects()) { + if (arg.equals(daspect.name)) { + openDiasporaUrl(urls.getAspectUrl(Long.toString(daspect.id))); + break; + } + } + } + }); } break; @@ -1148,8 +1178,8 @@ public class MainActivity extends ThemedActivity } break; - case R.id.nav_dandelion: { - openDiasporaUrl(urls.getProfileUrl("48b78420923501341ef3782bcb452bd5")); + case R.id.nav_product_support: { + openDiasporaUrl(urls.getProfileUrl("d1cbdd70095301341e834860008dbc6c")); } break; diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java index 943dbfcc..8d660e46 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/SettingsActivity.java @@ -483,11 +483,7 @@ public class SettingsActivity extends ThemedActivity implements SharedPreference public void onClick(DialogInterface dialogInterface, int i) { appSettings.resetAppSettings(); appSettings.resetPodSettings(); - Intent restartActivity = new Intent(getActivity(), MainActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), 12374, restartActivity, PendingIntent.FLAG_CANCEL_CURRENT); - AlarmManager mgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); - mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent); - System.exit(0); + new net.gsantner.opoc.util.ContextUtils(appSettings.getContext()).restartApp(MainActivity.class); } }).setNegativeButton(android.R.string.cancel, null) .create().show(); diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java deleted file mode 100644 index adb832c5..00000000 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/TagListFragment.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - This file is part of the dandelion*. - - dandelion* is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - dandelion* is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the dandelion*. - - If not, see . - */ -package com.github.dfa.diaspora_android.activity; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.os.Bundle; -import android.support.v7.widget.AppCompatImageView; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.github.dfa.diaspora_android.App; -import com.github.dfa.diaspora_android.R; -import com.github.dfa.diaspora_android.listener.OnSomethingClickListener; -import com.github.dfa.diaspora_android.ui.theme.ThemedFragment; -import com.github.dfa.diaspora_android.util.AppSettings; -import com.github.dfa.diaspora_android.util.ContextUtils; -import com.github.dfa.diaspora_android.util.DiasporaUrlHelper; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; - -/** - * Fragment that shows a list of the HashTags the user follows - */ -public class TagListFragment extends ThemedFragment implements OnSomethingClickListener { - - public static final String TAG = "com.github.dfa.diaspora_android.TagListFragment"; - - @BindView(R.id.fragment_list__recycler_view) - public RecyclerView followedTagsRecyclerView; - - @BindView(R.id.fragment_list__spacer) - public View space; - - @BindView(R.id.fragment_list__root) - public RelativeLayout rootView; - - protected App app; - protected DiasporaUrlHelper urls; - - @Override - protected int getLayoutResId() { - return R.layout.recycler_list__fragment; - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ButterKnife.bind(this, view); - app = (App) getActivity().getApplication(); - AppSettings appSettings = app.getSettings(); - urls = new DiasporaUrlHelper(appSettings); - - followedTagsRecyclerView.setHasFixedSize(true); - followedTagsRecyclerView.setNestedScrollingEnabled(false); - - RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); - followedTagsRecyclerView.setLayoutManager(layoutManager); - - final FollowedTagsAdapter adapter = new FollowedTagsAdapter(appSettings, this); - followedTagsRecyclerView.setAdapter(adapter); - - //Set window title - getActivity().setTitle(R.string.nav_followed_tags); - } - - @Override - public String getFragmentTag() { - return TAG; - } - - @Override - public boolean onBackPressed() { - return false; - } - - @Override - public void onSomethingClicked(Object null1, Integer null2, String tag) { - ((MainActivity) getActivity()).openDiasporaUrl(urls.getSearchTagsUrl(tag)); - } - - @Override - protected void applyColorToViews() { - followedTagsRecyclerView.invalidate(); - if (getAppSettings().isAmoledColorMode()) { - rootView.setBackgroundColor(Color.BLACK); - space.setBackgroundColor(Color.BLACK); - } - } - - public static class FollowedTagsAdapter extends RecyclerView.Adapter { - private boolean isAmoledColorMode; - private AppSettings appSettings; - private String[] followedTagsList; - private List followedTagsFavsList; - private OnSomethingClickListener tagClickedListener; - - static class ViewHolder extends RecyclerView.ViewHolder { - @BindView(R.id.recycler_view__list_item__text) - public TextView title; - @BindView(R.id.recycler_view__list_item__favourite) - AppCompatImageView favouriteImage; - @BindView(R.id.recycler_view__list_item__root) - RelativeLayout root; - - ViewHolder(View v) { - super(v); - ButterKnife.bind(this, v); - } - } - - - FollowedTagsAdapter(AppSettings appSettings, OnSomethingClickListener tagClickedListener) { - this.appSettings = appSettings; - this.followedTagsList = appSettings.getFollowedTags(); - this.followedTagsFavsList = new ArrayList<>(Arrays.asList(appSettings.getFollowedTagsFavs())); - this.tagClickedListener = tagClickedListener; - this.isAmoledColorMode = appSettings.isAmoledColorMode(); - } - - @Override - public int getItemCount() { - return followedTagsList.length; - } - - @Override - public FollowedTagsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View v = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.recycler_list__list_item_with_fav, parent, false); - return new ViewHolder(v); - } - - @Override - public void onBindViewHolder(final ViewHolder holder, final int position) { - // Alternating colors - final Context c = holder.root.getContext(); - final String tag = followedTagsList[position]; - holder.title.setText(tag); - if (position % 2 == 1) { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : ContextUtils.get().rcolor(R.color.alternate_row_color)); - holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); - } else { - holder.root.setBackgroundColor(isAmoledColorMode ? Color.BLACK : Color.WHITE); - holder.title.setTextColor(isAmoledColorMode ? Color.GRAY : Color.BLACK); - } - - // Favourite (Star) Image - applyFavouriteImage(holder.favouriteImage, isFollowedTagFaved(tag)); - - // Click on fav button - holder.favouriteImage.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - if (isFollowedTagFaved(tag)) { - followedTagsFavsList.remove(followedTagsFavsList.indexOf(tag)); - } else { - followedTagsFavsList.add(tag); - } - appSettings.setFollowedTagsFavs(followedTagsFavsList); - applyFavouriteImage(holder.favouriteImage, isFollowedTagFaved(tag)); - } - }); - - holder.root.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - tagClickedListener.onSomethingClicked(null, null, tag); - } - }); - } - - private boolean isFollowedTagFaved(String tag) { - return followedTagsFavsList.contains(tag); - } - - private void applyFavouriteImage(AppCompatImageView imageView, boolean isFaved) { - imageView.setImageResource(isFaved ? R.drawable.ic_star_filled_48px : R.drawable.ic_star_border_black_48px); - imageView.setColorFilter(isFaved ? appSettings.getAccentColor() : (isAmoledColorMode ? Color.GRAY : 0), PorterDuff.Mode.SRC_ATOP); - } - } -} diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/SearchOrCustomTextDialogCreator.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/SearchOrCustomTextDialogCreator.java new file mode 100644 index 00000000..1e9d2be1 --- /dev/null +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/SearchOrCustomTextDialogCreator.java @@ -0,0 +1,85 @@ +package com.github.dfa.diaspora_android.ui; + +import android.app.Activity; +import android.support.v4.content.ContextCompat; + +import com.github.dfa.diaspora_android.R; +import com.github.dfa.diaspora_android.data.DiasporaAspect; +import com.github.dfa.diaspora_android.util.AppSettings; + +import net.gsantner.opoc.ui.SearchOrCustomTextDialog; +import net.gsantner.opoc.util.Callback; + +import java.util.ArrayList; +import java.util.Arrays; + +public class SearchOrCustomTextDialogCreator { + public static final String SPECIAL_PREFIX = "\uD83D\uDCA0"; + + public static void showDiasporaTagsDialog(final Activity activity, final Callback.a1 callback) { + SearchOrCustomTextDialog.DialogOptions dopt = new SearchOrCustomTextDialog.DialogOptions(); + baseConf(activity, dopt); + dopt.callback = callback; + dopt.isSearchEnabled = true; + dopt.searchHintText = R.string.search; + dopt.titleText = R.string.tags; + + new Thread(() -> { + AppSettings appSettings = AppSettings.get(); + ArrayList hl = new ArrayList<>(); + ArrayList data = new ArrayList<>(Arrays.asList(appSettings.getFollowedTags())); + if (data.size() > 0) { + String highlighted = surroundString(data.remove(0)); + data.add(0, highlighted); + hl.add(highlighted); + } + + for (int strid : new int[]{R.string.pref_title__manage_tags}) { + String special = surroundString(appSettings.rstr(strid)); + data.add(0, special); + hl.add(special); + } + dopt.data = data; + dopt.highlightData = hl; + activity.runOnUiThread(() -> SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt)); + }).start(); + } + + private static String surroundString(String text) { + return SPECIAL_PREFIX + " " + text + " "; + } + + + public static void showDiasporaAspectsDialog(final Activity activity, final Callback.a1 callback) { + SearchOrCustomTextDialog.DialogOptions dopt = new SearchOrCustomTextDialog.DialogOptions(); + baseConf(activity, dopt); + dopt.callback = callback; + dopt.isSearchEnabled = false; + dopt.titleText = R.string.contacts; + + new Thread(() -> { + AppSettings appSettings = AppSettings.get(); + ArrayList hl = new ArrayList<>(); + ArrayList data = new ArrayList<>(); + for (DiasporaAspect aspect : AppSettings.get().getAspects()) { + data.add(aspect.name); + } + for (int strid : new int[]{R.string.nav_profile, R.string.pref_desc__manage_contacts}) { + String special = surroundString(appSettings.rstr(strid)); + data.add(0, special); + hl.add(special); + } + dopt.data = data; + dopt.highlightData = hl; + activity.runOnUiThread(() -> SearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt)); + }).start(); + } + + + private static void baseConf(Activity activity, SearchOrCustomTextDialog.DialogOptions dopt) { + AppSettings as = new AppSettings(activity); + dopt.isDarkDialog = as.isAmoledColorMode(); + dopt.textColor = ContextCompat.getColor(activity, dopt.isDarkDialog ? R.color.white : R.color.primary_text); + dopt.highlightColor = as.getAccentColor(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java index 6b62c0d5..8d3bb655 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/AppSettings.java @@ -347,8 +347,8 @@ public class AppSettings extends SharedPreferencesPropertyBackend { return getBool(R.string.pref_key__visibility_nav__reports, false); } - public boolean isVisibleInNavDandelionAccount() { - return getBool(R.string.pref_key__visibility_nav__dandelion_account, false); + public boolean isVisibleInNavGsantnerAccount() { + return getBool(R.string.pref_key__visibility_nav__gsantner_account, false); } public boolean isVisibleInNavToggleMobileDesktop() { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/util/DiasporaUrlHelper.java b/app/src/main/java/com/github/dfa/diaspora_android/util/DiasporaUrlHelper.java index a4bf65c6..a283540b 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/util/DiasporaUrlHelper.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/util/DiasporaUrlHelper.java @@ -229,6 +229,15 @@ public class DiasporaUrlHelper { return getPodUrl() + SUBURL_SEARCH_TAGS + query; } + /** + * Return a url that queries posts for the given hashtag query + * + * @return https://(pod-domain.tld)/followed_tags + */ + public String getAllFollowedTagsUrl() { + return getPodUrl() + SUBURL_FOLOWED_TAGS; + } + /** * Return a url that queries user accounts for query * diff --git a/app/src/main/java/net/gsantner/opoc/ui/SearchOrCustomTextDialog.java b/app/src/main/java/net/gsantner/opoc/ui/SearchOrCustomTextDialog.java new file mode 100644 index 00000000..f83d4e6e --- /dev/null +++ b/app/src/main/java/net/gsantner/opoc/ui/SearchOrCustomTextDialog.java @@ -0,0 +1,189 @@ +/*####################################################### + * + * Maintained by Gregor Santner, 2017- + * https://gsantner.net/ + * + * License: Apache 2.0 + * https://github.com/gsantner/opoc/#licensing + * https://www.apache.org/licenses/LICENSE-2.0 + * +#########################################################*/ +package net.gsantner.opoc.ui; + +import android.app.Activity; +import android.support.annotation.ColorInt; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.AppCompatEditText; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Filter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import net.gsantner.opoc.util.Callback; +import net.gsantner.opoc.util.ContextUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +@SuppressWarnings("WeakerAccess") +public class SearchOrCustomTextDialog { + + public static class DialogOptions { + public Callback.a1 callback; + public List data = new ArrayList<>(); + public List highlightData = new ArrayList<>(); + public String messageText = ""; + public boolean isSearchEnabled = true; + public boolean isDarkDialog = false; + + @ColorInt + public int textColor = 0xFF000000; + @ColorInt + public int highlightColor = 0xFF00FF00; + @StringRes + public int cancelButtonText = android.R.string.cancel; + @StringRes + public int okButtonText = android.R.string.ok; + @StringRes + public int titleText = android.R.string.untitled; + @StringRes + public int searchHintText = android.R.string.search_go; + } + + public static void showMultiChoiceDialogWithSearchFilterUI(final Activity activity, final DialogOptions dopt) { + final List allItems = new ArrayList<>(dopt.data); + final List filteredItems = new ArrayList<>(allItems); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity, dopt.isDarkDialog + ? android.support.v7.appcompat.R.style.Theme_AppCompat_Dialog + : android.support.v7.appcompat.R.style.Theme_AppCompat_Light_Dialog + ); + + final ArrayAdapter listAdapter = new ArrayAdapter(activity, android.R.layout.simple_list_item_1, filteredItems) { + @NonNull + @Override + public View getView(int pos, @Nullable View convertView, @NonNull ViewGroup parent) { + TextView textView = (TextView) super.getView(pos, convertView, parent); + String text = textView.getText().toString(); + + textView.setTextColor(dopt.textColor); + if (dopt.highlightData.contains(text)) { + textView.setTextColor(dopt.highlightColor); + } + return textView; + } + + @Override + public Filter getFilter() { + return new Filter() { + @SuppressWarnings("unchecked") + @Override + protected void publishResults(final CharSequence constraint, final FilterResults results) { + filteredItems.clear(); + filteredItems.addAll((List) results.values); + notifyDataSetChanged(); + } + + @Override + protected FilterResults performFiltering(final CharSequence constraint) { + final FilterResults res = new FilterResults(); + final ArrayList resList = new ArrayList<>(); + final String fil = constraint.toString(); + + for (final CharSequence str : allItems) { + if ("".equals(fil) || str.toString().toLowerCase(Locale.getDefault()).contains(fil.toLowerCase(Locale.getDefault()))) { + resList.add(str); + } + } + res.values = resList; + res.count = resList.size(); + return res; + } + }; + } + }; + + final AppCompatEditText searchEditText = new AppCompatEditText(activity); + searchEditText.setSingleLine(true); + searchEditText.setMaxLines(1); + searchEditText.setTextColor(dopt.textColor); + searchEditText.setHintTextColor((dopt.textColor & 0x00FFFFFF) | 0x99000000); + searchEditText.setHint(dopt.searchHintText); + + searchEditText.addTextChangedListener(new TextWatcher() { + @Override + public void afterTextChanged(final Editable arg0) { + listAdapter.getFilter().filter(searchEditText.getText()); + } + + @Override + public void onTextChanged(final CharSequence arg0, final int arg1, final int arg2, final int arg3) { + } + + @Override + public void beforeTextChanged(final CharSequence arg0, final int arg1, final int arg2, final int arg3) { + } + }); + + final ListView listView = new ListView(activity); + final LinearLayout linearLayout = new LinearLayout(activity); + listView.setAdapter(listAdapter); + linearLayout.setOrientation(LinearLayout.VERTICAL); + if (dopt.isSearchEnabled) { + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + ContextUtils cu = new net.gsantner.opoc.util.ContextUtils(listView.getContext()); + int px = (int) (new net.gsantner.opoc.util.ContextUtils(listView.getContext()).convertDpToPx(8)); + lp.setMargins(px, px / 2, px, px / 2); + linearLayout.addView(searchEditText, lp); + } + final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0); + layoutParams.weight = 1; + linearLayout.addView(listView, layoutParams); + if (!TextUtils.isEmpty(dopt.messageText)) { + dialogBuilder.setMessage(dopt.messageText); + } + dialogBuilder.setView(linearLayout) + .setTitle(dopt.titleText) + .setOnCancelListener(null) + .setNegativeButton(dopt.cancelButtonText, null); + if (dopt.isSearchEnabled) { + dialogBuilder.setPositiveButton(dopt.okButtonText, (dialogInterface, i) -> { + dialogInterface.dismiss(); + if (dopt.callback != null && !TextUtils.isEmpty(searchEditText.getText().toString())) { + dopt.callback.callback(searchEditText.getText().toString()); + } + }); + } + + final AlertDialog dialog = dialogBuilder.create(); + listView.setOnItemClickListener((parent, view, position, id) -> { + dialog.dismiss(); + if (dopt.callback != null) { + dopt.callback.callback(filteredItems.get(position).toString()); + } + }); + + searchEditText.setOnKeyListener((keyView, keyCode, keyEvent) -> { + if ((keyEvent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { + dialog.dismiss(); + if (dopt.callback != null && !TextUtils.isEmpty(searchEditText.getText().toString())) { + dopt.callback.callback(searchEditText.getText().toString()); + } + return true; + } + return false; + }); + + dialog.show(); + } +} diff --git a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java index 3d57f174..1ade61f9 100644 --- a/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/ContextUtils.java @@ -11,6 +11,7 @@ package net.gsantner.opoc.util; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.ActivityNotFoundException; @@ -380,6 +381,9 @@ public class ContextUtils { Intent inte = new Intent(_context, classToStart); PendingIntent inteP = PendingIntent.getActivity(_context, 555, inte, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager mgr = (AlarmManager) _context.getSystemService(Context.ALARM_SERVICE); + if (_context instanceof Activity) { + ((Activity) _context).finish(); + } if (mgr != null) { mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, inteP); } else { diff --git a/app/src/main/res/menu/main__navdrawer.xml b/app/src/main/res/menu/main__navdrawer.xml index 9a69c2f5..b542506a 100644 --- a/app/src/main/res/menu/main__navdrawer.xml +++ b/app/src/main/res/menu/main__navdrawer.xml @@ -17,7 +17,7 @@ + android:title="@string/tags" /> + android:title="@string/gsantner" /> + Tags Tor HTTP @@ -116,7 +117,7 @@ pref_key__visibility_nav__reports pref_key__visibility_nav__statistics pref_key__visibility_nav__toggle_mobile_desktop - pref_key__visibility_nav__dandelion_account + pref_key__visibility_nav__gsantner_account pref_key__podprofile_avatar_url pref_key__podprofile_name pref_key__podprofile_id @@ -146,4 +147,5 @@ pref_key__recreate_main_activity pref_key__show_title PDF + gsantner diff --git a/app/src/main/res/xml-v25/shortcuts.xml b/app/src/main/res/xml-v25/shortcuts.xml index cb3852d1..a667dcf1 100755 --- a/app/src/main/res/xml-v25/shortcuts.xml +++ b/app/src/main/res/xml-v25/shortcuts.xml @@ -35,14 +35,14 @@ + android:shortcutShortLabel="@string/contacts" + android:shortcutLongLabel="@string/contacts" + android:shortcutDisabledMessage="@string/contacts"> Ten que permitir \"Permiso de acceso a almacenamento\" para gardar capturas. Despois de iso debería - pechar o aplicativo ou reiniciar o dispositivo. Si non permite acceder ao almacenamento pero que utilizar máis tarde a captura de pantalla, poderá permitir entón o acceso abrindo: preferencias do sistema - apps - dandelion* no dispositivo. + pechar a aplicación ou reiniciar o dispositivo. Si non permite acceder ao almacenamento pero que utilizar máis tarde a captura de pantalla, poderá permitir entón o acceso abrindo: preferencias do sistema - apps - dandelion* no dispositivo. Na sección de permisos pode activar o \"permiso de acceso a almacenamento\". Ten que permitir \"Permiso de acceso a almacenamento\" para gardar/subir imaxes. Despois de iso debería - pechar o aplicativo ou reiniciar o dispositivo. Se non permite acceder ao almacenamento, para poder gardar imaxes posteriormente, deberá abrir: preferencias do sistema - apps - dandelion* no dispositivo. + pechar a aplicación ou reiniciar o dispositivo. Se non permite acceder ao almacenamento, para poder gardar imaxes posteriormente, deberá abrir: preferencias do sistema - apps - dandelion* no dispositivo. Na sección de permisos pode activar o \"permiso de escritura no almacenamento\". Permiso denegado. Permiso concedido. Inténteo de novo. @@ -83,7 +83,7 @@ Sobre Licenza Depurando - Aplicativo + Aplicación Dispositivo Nodo diaspora* Rexistro de depuración @@ -95,23 +95,23 @@ Nome do perfil do nodo: %1$s Dominio do nodo: %1$s Ficheiro de depuración copiado ao portapapeis - dandelion* é o seu aplicativo para a rede social diaspora*. Engade características como barras de ferramentas e soporte para servidores proxy como a rede Tor para a súa experiencia social. + dandelion* é a súa aplicación para a rede social diaspora*. Engade características como barras de ferramentas e soporte para servidores proxy como a rede Tor para a súa experiencia social. Contribúa ao código! dandelion* é desenvolto libre, libre de Liberdade, e segue o espíritu que marca o proxecto diaspora*. Se quere contribuír, adiante! Por agora somos un equipo pequeno, así que agradecemos calquer tipo de axuda! Obteña as fontes Traduza o app! - Non está o aplicativo no seu idioma? Pode cambiar eso! Por qué non nos axuda traducíndoa? Utilizamos a plataforma github para que calquera poida traducir a app. + Non está a aplicación no seu idioma? Pode cambiar eso! Por qué non nos axuda traducíndoa? Utilizamos a plataforma github para que calquera poida traducir a app. Deixame traducir Qué lle parece! dandelion* aínda está en desenvolvemento, asi que si ten suxerencias de calquer tipo o valoración, por favor utilice o noso xestor de erros para facérnolo saber! Reporte erros Difunda! Dígalle aos seus amigos e familiares que utiliza diaspora* e #dandelion! Por qué no escribir sobre a experiencia? Encantaríanos saber de vostede! - Comparta o aplicativo + Comparta a aplicación Ei!! Olla a #dandelion! %1$s Mantedores - Este aplicativo está a ser desenvolto e mantido por <br><br>%1$s + Esta aplicación está a ser desenvolta e mantida por <br><br>%1$s Contribúen %1$s<br><br>Grazas! Licenza GNU GPLv3+ @@ -138,17 +138,17 @@ Admin Decorado e cores - Estableza qué cores se utilizan no aplicativo + Estableza qué cores se utilizan na aplicación Cor primaria Cor das barras de ferramentas Cor de énfase Cor da barra de progreso Modo AMOLED - Sobreescribir as cores co negro dos dispositivos AMOLED en varios lugares do aplicativo. Precisa reiniciar para habilitar esta preferencia. Para navegar diaspora* en modo oscuro tamén precisa activar o Decorado Oscuro, que pode atopar nos axustes personais na súa conta de diaspora*. + Sobreescribir as cores co negro dos dispositivos AMOLED en varios lugares da aplicación. Precisa reiniciar para habilitar esta preferencia. Para navegar diaspora* en modo oscuro tamén precisa activar o Decorado Oscuro, que pode atopar nos axustes personais na súa conta de diaspora*. Notificacións extendidas Extender a icona da campá de notificación con un menú desplegable que mostre a categoría das notificacións - Mudar o idioma de este aplicativo. Reinicie para que se aplique o troco + Cambiar o idioma de esta aplicación. Reinicie para que se aplique o troco Idioma Idioma do sistema @@ -193,12 +193,12 @@ Agochar automáticamente as barras superior e inferior mentras desplaza Barras de ferramentas intelixentes Engadir aviso-compartido-por - Engadir unha referencia a que foi compartido desde este aplicativo: [via #dandelion] + Engadir unha referencia a que foi compartido desde esta aplicación: [via #dandelion] Varios Restablecer completamente Eliminar todas os axustes locais do app e desconectar todas as contas - Esto restablecerá todos os axustes do aplicativo ao valor por omisión e desconectarao de todos os nodos. As súas imaxes descargadas permanecerán. Seguro que quere proceder? + Esto restablecerá todos os axustes da aplicación ao valor por omisión e desconectarao de todos os nodos. As súas imaxes descargadas permanecerán. Seguro que quere proceder? Habilitar un AdBlocker básico. Poderían verse anuncios por exemplo en vistas incrustadas Bloquear publicidade