From a3b7622c52f440abb3e4596bc0a022809e9be537 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 7 Nov 2015 10:19:47 +0100 Subject: [PATCH] Added widget Closes #81 --- app/src/main/AndroidManifest.xml | 11 +++ .../eu/faircode/netguard/ActivityMain.java | 49 ----------- .../faircode/netguard/ActivitySettings.java | 18 ---- .../eu/faircode/netguard/SinkholeService.java | 19 +---- .../main/java/eu/faircode/netguard/Util.java | 24 ++++++ .../java/eu/faircode/netguard/Widget.java | 82 +++++++++++++++++++ app/src/main/res/layout/delay.xml | 49 ----------- app/src/main/res/layout/widget.xml | 12 +++ app/src/main/res/values-ar/strings.xml | 3 - app/src/main/res/values-de/strings.xml | 3 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-fr/strings.xml | 3 - app/src/main/res/values-it/strings.xml | 3 - app/src/main/res/values-ko/strings.xml | 3 - app/src/main/res/values-nl/strings.xml | 3 - app/src/main/res/values-ro/strings.xml | 3 - app/src/main/res/values-sk/strings.xml | 3 - app/src/main/res/values-zh-rCN/strings.xml | 3 - app/src/main/res/values/strings.xml | 3 - app/src/main/res/xml/preferences.xml | 5 -- app/src/main/res/xml/widget.xml | 10 +++ 21 files changed, 141 insertions(+), 171 deletions(-) create mode 100644 app/src/main/java/eu/faircode/netguard/Widget.java delete mode 100644 app/src/main/res/layout/delay.xml create mode 100644 app/src/main/res/layout/widget.xml create mode 100644 app/src/main/res/xml/widget.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 67bfcc85..afd6f810 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,5 +48,16 @@ + + + + + + + + + diff --git a/app/src/main/java/eu/faircode/netguard/ActivityMain.java b/app/src/main/java/eu/faircode/netguard/ActivityMain.java index 55166f36..c624aeba 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivityMain.java +++ b/app/src/main/java/eu/faircode/netguard/ActivityMain.java @@ -19,7 +19,6 @@ package eu.faircode.netguard; Copyright 2015 by Marcel Bokhorst (M66B) */ -import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -38,7 +37,6 @@ import android.net.VpnService; import android.os.AsyncTask; import android.os.IBinder; import android.os.RemoteException; -import android.os.SystemClock; import android.preference.PreferenceManager; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.MenuItemCompat; @@ -57,7 +55,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; -import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -87,7 +84,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences private IInAppBillingService IABService = null; private AlertDialog dialogFirst = null; private AlertDialog dialogVpn = null; - private AlertDialog dialogDelay = null; private AlertDialog dialogAbout = null; private static final int REQUEST_VPN = 1; @@ -130,10 +126,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences swEnabled.setChecked(enabled); swEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - final AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); - final PendingIntent pi = SinkholeService.getStartIntent(ActivityMain.this); - am.cancel(pi); - if (isChecked) { Log.i(TAG, "Switch on"); final Intent prepare = VpnService.prepare(ActivityMain.this); @@ -176,43 +168,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences Log.i(TAG, "Switch off"); prefs.edit().putBoolean("enabled", false).apply(); SinkholeService.stop(ActivityMain.this); - - // Delayed auto enable - final int minutes = Integer.parseInt(prefs.getString("delay_time", "5")); - if (minutes > 0) { - LayoutInflater inflater = LayoutInflater.from(ActivityMain.this); - View view = inflater.inflate(R.layout.delay, null); - TextView tvDelay = (TextView) view.findViewById(R.id.tvDelay); - final CheckBox cbDontAskAgain = (CheckBox) view.findViewById(R.id.cbDontAskAgain); - - tvDelay.setText(getString(R.string.setting_delay, minutes)); - - dialogDelay = new AlertDialog.Builder(ActivityMain.this) - .setView(view) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - long time = SystemClock.elapsedRealtime() + minutes * 60 * 1000L; - am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pi); - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (cbDontAskAgain.isChecked()) - prefs.edit().putString("delay_time", "0").apply(); - } - }) - .setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialogInterface) { - dialogDelay = null; - } - }) - .create(); - dialogDelay.show(); - } } } }); @@ -333,10 +288,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences dialogVpn.dismiss(); dialogVpn = null; } - if (dialogDelay != null) { - dialogDelay.dismiss(); - dialogDelay = null; - } if (dialogAbout != null) { dialogAbout.dismiss(); dialogAbout = null; diff --git a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java index 8b21b442..ea24a575 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java +++ b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java @@ -24,7 +24,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; -import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; @@ -52,8 +51,6 @@ import javax.xml.parsers.SAXParserFactory; public class ActivitySettings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "NetGuard.Settings"; - private PreferenceScreen settings; - private static final int REQUEST_EXPORT = 1; private static final int REQUEST_IMPORT = 2; private static final Intent INTENT_VPN_SETTINGS = new Intent("android.net.vpn.SETTINGS"); @@ -74,14 +71,6 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere } public void setup(PreferenceScreen screen) { - this.settings = screen; - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - - int minutes = Integer.parseInt(prefs.getString("delay_time", "5")); - EditTextPreference pref_delay = (EditTextPreference) screen.findPreference("delay_time"); - pref_delay.setTitle(getString(R.string.setting_delay, minutes)); - Preference pref_export = screen.findPreference("export"); pref_export.setEnabled(getIntentCreateDocument().resolveActivity(getPackageManager()) != null); pref_export.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @@ -125,13 +114,6 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere else if ("dark_theme".equals(name)) recreate(); - - else if ("delay_time".equals(name)) { - if (settings != null) { - EditTextPreference pref_delay = (EditTextPreference) settings.findPreference("delay_time"); - pref_delay.setTitle(getString(R.string.setting_delay, Integer.parseInt(prefs.getString(name, "0")))); - } - } } @Override diff --git a/app/src/main/java/eu/faircode/netguard/SinkholeService.java b/app/src/main/java/eu/faircode/netguard/SinkholeService.java index fbc4726a..24f36ae0 100644 --- a/app/src/main/java/eu/faircode/netguard/SinkholeService.java +++ b/app/src/main/java/eu/faircode/netguard/SinkholeService.java @@ -54,25 +54,15 @@ public class SinkholeService extends VpnService { private static final int NOTIFY_DISABLED = 1; private static final String EXTRA_COMMAND = "Command"; - private static final String EXTRA_UPDATE = "Update"; private enum Command {start, reload, stop} @Override public int onStartCommand(Intent intent, int flags, int startId) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SinkholeService.this); - // Get command final Command cmd = (intent == null ? Command.start : (Command) intent.getSerializableExtra(EXTRA_COMMAND)); Log.i(TAG, "Start intent=" + intent + " command=" + cmd + " vpn=" + (vpn != null)); - // Update enabled state - if (intent != null && intent.getBooleanExtra(EXTRA_UPDATE, false)) - if (cmd == Command.start) - prefs.edit().putBoolean("enabled", true).apply(); - else if (cmd == Command.stop) - prefs.edit().putBoolean("enabled", false).apply(); - // Process command new Thread(new Runnable() { @Override @@ -86,6 +76,7 @@ public class SinkholeService extends VpnService { vpn = startVPN(); startDebug(vpn); removeDisabledNotification(); + Widget.updateWidgets(SinkholeService.this); } break; @@ -104,6 +95,7 @@ public class SinkholeService extends VpnService { stopDebug(); stopVPN(vpn); vpn = null; + Widget.updateWidgets(SinkholeService.this); } stopSelf(); break; @@ -377,13 +369,6 @@ public class SinkholeService extends VpnService { context.startService(intent); } - public static PendingIntent getStartIntent(Context context) { - Intent intent = new Intent(context, SinkholeService.class); - intent.putExtra(EXTRA_COMMAND, Command.start); - intent.putExtra(EXTRA_UPDATE, true); - return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - } - public static void reload(String network, Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); if (prefs.getBoolean("enabled", false)) diff --git a/app/src/main/java/eu/faircode/netguard/Util.java b/app/src/main/java/eu/faircode/netguard/Util.java index dc5d85b7..c73068cf 100644 --- a/app/src/main/java/eu/faircode/netguard/Util.java +++ b/app/src/main/java/eu/faircode/netguard/Util.java @@ -24,6 +24,10 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; @@ -97,6 +101,26 @@ public class Util { }); } + public static Bitmap drawableToBitmap(Drawable drawable) { + if (drawable instanceof BitmapDrawable) { + BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; + if (bitmapDrawable.getBitmap() != null) + return bitmapDrawable.getBitmap(); + } + + Bitmap bitmap; + if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) + bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + else + 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); + + return bitmap; + } + public static boolean hasValidFingerprint(String tag, Context context) { try { PackageManager pm = context.getPackageManager(); diff --git a/app/src/main/java/eu/faircode/netguard/Widget.java b/app/src/main/java/eu/faircode/netguard/Widget.java new file mode 100644 index 00000000..f21e4c03 --- /dev/null +++ b/app/src/main/java/eu/faircode/netguard/Widget.java @@ -0,0 +1,82 @@ +package eu.faircode.netguard; + +/* + This file is part of NetGuard. + + NetGuard 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. + + NetGuard 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 NetGuard. If not, see . + + Copyright 2015 by Marcel Bokhorst (M66B) +*/ + +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.util.Log; +import android.widget.RemoteViews; + +public class Widget extends AppWidgetProvider { + private static final String TAG = "NetGuard.Widget"; + + private static final String INTENT_ON = "eu.faircode.netguard.APPWIDGET_ON"; + private static final String INTENT_OFF = "eu.faircode.netguard.APPWIDGET_OFF"; + + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + update(appWidgetIds, appWidgetManager, context); + } + + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + + Log.i(TAG, "Received " + intent); + Util.logExtras(TAG, intent); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + if (INTENT_OFF.equals(intent.getAction())) { + prefs.edit().putBoolean("enabled", false).apply(); + SinkholeService.stop(context); + + } else if (INTENT_ON.equals(intent.getAction())) { + prefs.edit().putBoolean("enabled", true).apply(); + SinkholeService.start(context); + } + } + + private static void update(int[] appWidgetIds, AppWidgetManager appWidgetManager, Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean enabled = prefs.getBoolean("enabled", false); + Intent intent = new Intent(enabled ? INTENT_OFF : INTENT_ON); + PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + + for (int id : appWidgetIds) { + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); + views.setOnClickPendingIntent(R.id.ivEnabled, pi); + views.setImageViewResource(R.id.ivEnabled, enabled ? R.mipmap.ic_launcher : R.drawable.ic_security_white_24dp); + appWidgetManager.updateAppWidget(id, views); + } + } + + public static void updateWidgets(Context context) { + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + int appWidgetIds[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, Widget.class)); + update(appWidgetIds, appWidgetManager, context); + } +} diff --git a/app/src/main/res/layout/delay.xml b/app/src/main/res/layout/delay.xml deleted file mode 100644 index 9ed153e6..00000000 --- a/app/src/main/res/layout/delay.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml new file mode 100644 index 00000000..085cb1ac --- /dev/null +++ b/app/src/main/res/layout/widget.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d8ec33a2..2ec4a186 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -18,21 +18,18 @@ This is caused by bugs in Android, or in the software provided by the manufactur Manage system applications استخدام الثيم الداكن Show state indicators - Enable again after %d minutes Export settings Import settings فتح إعدادات الـVPN Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again هل أنت متأكد؟ التطبيق غير مُفعّل, قم بتفعيل التطبيق من الخيار أعلاه. NetGuard has been disabled Action completed NetGuard uses a local VPN as a sinkhole for blocked internet traffic, for this reason you should allow a VPN connection in the next dialog - Don\'t ask again السماح عند استخدام الجهاز Block when roaming diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5b329a97..5ebb974a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -17,21 +17,18 @@ Das wird von Fehlern in Android oder in Software vom Hersteller verursacht. Bitt System Apps anzeigen Verwende dunkles Theme Zustandsanzeigen - Enable again after %d minutes Exportiere Einstellungen Importiere Einstellungen Öffne Android VPN Einstellungen Regeln für System Apps definieren, nur für Experten Netzwerk Typ und ob Netzwerk getaktet ist in Action Bar anzeigen - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Bist du sicher? NetGuard ist deaktiviert, verwende den Schalter um NetGuard zu aktivieren NetGuard wurde deaktiviert Aktion abgeschlossen Netguard verwendet ein lokales VPN als Senkgrube für blockierten Netzwerkverkehr, daher muss im nächsten Dialog die VPN Verbindung bestätigt werden. - Don\'t ask again Erlauben wenn Gerät verwendet wird Blockiere bei Roaming diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 759031f5..f7de6cc5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -18,21 +18,18 @@ Esto es causado por errores en Android, o por el software proporcionado por el f Administrar aplicaciones de sistema Usar tema oscuro Show state indicators - Enable again after %d minutes Exportar configuración Importar configuración Abrir configuración VPN de Android Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again ¿Estás seguro? NetGuard está deshabilitado, utiliza el interruptor de arriba para habilitar a NetGuard NetGuard ha sido deshabilitado Acción completada NetGuard utiliza un VPN local como un "sumidero" para conexiones de internet bloqueadas, por esta razón debes permitir la conexión VPN en el siguiente diálogo - Don\'t ask again Permitir cuando el dispositivo esté en uso Bloquear cuando se esté en roaming diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bea1a239..1bd8d214 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -18,21 +18,18 @@ Ceci est causé par des bugs dans Android, ou dans le logiciel fourni par le con Gérer les applications système Utiliser le thème sombre Show state indicators - Enable again after %d minutes Exporter paramètres Importer paramètres Ouvrir les paramètres VPN Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Etes-vous sûr ? NetGuard est désactivé, utilisez le bouton ci-dessus pour activer NetGuard NetGuard a été désactivé Action completed NetGuard uses a local VPN as a sinkhole for blocked internet traffic, for this reason you should allow a VPN connection in the next dialog - Don\'t ask again Permettre quand l\'appareil est utilisé Bloquer si roaming diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 71aa109e..e220b885 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -19,21 +19,18 @@ Ció è causato da alcuni bug contenuti in Android, o in programmi forniti dal p Gestisci applicazioni di sistema Usa il tema scuro Mostra indicatori di stato - Enable again after %d minutes Esporta impostazioni Importa impostazioni Apri impostazioni VPN Definisci regole per le applicazioni di sistema, solo per esperti Mostra, nella action bar, il tipo di rete e se la rete è a consumo - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Sei sicuro? NetGuard è disabilitata, usa lo switch per abilitarla nuovamente NetGuard è stata disabilitata Azione completata NetGuard utilizza una VPN locale come pozzo per bloccare il traffico internet, per questo motivo è necessario abilitare la connessione VPN nella schermata successiva - Don\'t ask again Consenti quando il dispositivo è in uso Blocca quando in roaming diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index feee988e..f75981a0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -18,21 +18,18 @@ This is caused by bugs in Android, or in the software provided by the manufactur Manage system applications 어두운 테마 사용 Show state indicators - Enable again after %d minutes Export settings Import settings Android VPN 설정 열기 Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again 계속 하시겠습니까? 넷가드가 해제되어 있습니다. 상단 스위치를 사용해 넷가드를 활성화하세요. 넷가드가 해제되었습니다 Action completed NetGuard uses a local VPN as a sinkhole for blocked internet traffic, for this reason you should allow a VPN connection in the next dialog - Don\'t ask again 기기가 사용중일때 허용 Block when roaming diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c04a6d29..f30fff70 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -18,21 +18,18 @@ This is caused by bugs in Android, or in the software provided by the manufactur Beheer systeemapplicaties Gebruik donker thema Toon staat indicatoren - Zet na %d minuten weer aan Exporteer instellingen Importeer instellingen Open Android VPN-instellingen Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Weet u het zeker? NetGuard staat uit, gebruik de schakelaar boven om NetGuard aan te zetten NetGuard is uitgezet Actie uitgevoerd NetGuard gebruikt een lokaal VPN als een sinkhole voor geblokkeerd internetverkeer, om deze reden moet u een VPN-verbinding in de volgende dialoog toestaan. - Niet meer vragen Sta toe als apparaat in gebruik Blokkeer bij roamen diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ac20c321..e9776275 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -18,21 +18,18 @@ Acest lucru este cauzat de bug-uri in Android sau in software-ul pus la dispozit Gestionati aplicatiile de sistem Foloseste tema intunecata Arata indicatorii de stare - Enable again after %d minutes Exporta setari Importa setari Deschide setari VPN Android Defineste reguli pentru aplicatiile de sistem, setare expert Arata tipul retelei conectate precum si daca aceasta este una contorizata - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Esti sigur? NetGuard este momentan dezactivat, foloseste comutatorul de mai sus pentru a il activa NetGuard a fost dezactivat Setari aplicate NetGuard foloseste o conexiune locala VPN ca o \"gaura neagra\" pentru traficul de internet blocat, din acest motiv la urmatoarea fereastra de dialog trebuie sa acceptati crearea conexiunii VPN. - Don\'t ask again Permite cand dispozitivul este folosit Blocheaza in roaming diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index b35a5abd..deaeb3d6 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -18,21 +18,18 @@ Je to spôsobené chybami v Androide alebo v softvéri poskytovanom výrobcom, p Spravovať systémové aplikácie Použiť tmavú tému Show state indicators - Enable again after %d minutes Exportovať nastavenia Importovať nastavenia Otvoriť nastavenia VPN Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Ste si istý? NetGuard je vypnutý, použite prepínač vyššie na zapnutie NetGuard NetGuard je vypnutý Akcia bola dokončená NetGuard používa lokálnu VPN sieť na zablokovanie sieťovej prevádzky, a preto by ste mali povoliť VPN pripojenie v ďalšom okne - Don\'t ask again Povoliť pri používaní zariadenia Blokovať pri roamingu diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ec26887d..af4d7deb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -18,21 +18,18 @@ 管理系统应用 使用暗色主题 显示状态指示器 - Enable again after %d minutes 导出设置 导入设置 打开安卓VPN设置 定义系统应用规则, 仅供专业用户 在状态栏显示网络类型及网络是否按流量计费 - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again 是否确认? NetGuard已被停用, 请使用上方的开关启用NetGuard NetGuard已被停用 操作完成 NetGuard使用一个本地VPN服务来重定向被阻挡的网络流量, 因此请在下一个对话框中允许建立VPN连接 - Don\'t ask again 设备使用时允许 漫游时阻止 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aef7bdde..2e8deefa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,21 +19,18 @@ This is caused by bugs in Android, or in the software provided by the manufactur Manage system applications Use dark theme Show state indicators - Enable again after %d minutes Export settings Import settings Open Android VPN settings Define rules for system applications, for experts only Display the network type and if the network is metered in the action bar - After disabling, enable again after the set number of minutes; zero means don\'t ask to enable again Are you sure? NetGuard is disabled, use the switch above to enable NetGuard NetGuard has been disabled Action completed NetGuard uses a local VPN as a sinkhole for blocked internet traffic, for this reason you should allow a VPN connection in the next dialog - Don\'t ask again Allow when device is in use Block when roaming diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index a1bcc2ca..553766d6 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -26,11 +26,6 @@ android:key="indicators" android:summary="@string/summary_indicators" android:title="@string/setting_indicators" /> - diff --git a/app/src/main/res/xml/widget.xml b/app/src/main/res/xml/widget.xml new file mode 100644 index 00000000..a6e55e73 --- /dev/null +++ b/app/src/main/res/xml/widget.xml @@ -0,0 +1,10 @@ + + \ No newline at end of file