Require credentials - proof of concept

Refs #92
This commit is contained in:
M66B 2015-11-10 14:41:32 +01:00
parent 2d65d732e1
commit 98557b4158
19 changed files with 97 additions and 11 deletions

View File

@ -20,6 +20,7 @@ package eu.faircode.netguard;
*/
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@ -73,6 +74,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
private static final String TAG = "NetGuard.Main";
private boolean running = false;
private boolean unlocked = false;
private View actionView;
private LinearLayout llIndicators;
private ImageView ivInteractive;
@ -89,6 +91,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
private static final int REQUEST_VPN = 1;
private static final int REQUEST_IAB = 2;
private static final int REQUEST_INVITE = 3;
private static final int REQUEST_KEYGUARD = 4;
// adb shell pm clear com.android.vending
private static final String SKU_DONATE = "donation";
@ -106,6 +109,17 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
setContentView(R.layout.main);
running = true;
if (savedInstanceState != null && savedInstanceState.containsKey("unlocked"))
unlocked = savedInstanceState.getBoolean("unlocked");
KeyguardManager kgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
Intent intent = kgm.createConfirmDeviceCredentialIntent("NetGuard", null);
if (unlocked || !prefs.getBoolean("credentials", false) || !kgm.isKeyguardSecure() || intent == null)
unlocked = true;
else
startActivityForResult(intent, REQUEST_KEYGUARD);
boolean enabled = prefs.getBoolean("enabled", false);
if (enabled)
@ -120,10 +134,12 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
ivInteractive = (ImageView) actionView.findViewById(R.id.ivInteractive);
ivNetwork = (ImageView) actionView.findViewById(R.id.ivNetwork);
ivMetered = (ImageView) actionView.findViewById(R.id.ivMetered);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setCustomView(actionView);
// On/off switch
swEnabled.setEnabled(unlocked);
swEnabled.setChecked(enabled);
swEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@ -183,7 +199,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
RecyclerView rvApplication = (RecyclerView) findViewById(R.id.rvApplication);
rvApplication.setHasFixedSize(true);
rvApplication.setLayoutManager(new LinearLayoutManager(this));
adapter = new RuleAdapter(ActivityMain.this);
adapter = new RuleAdapter(unlocked, ActivityMain.this);
rvApplication.setAdapter(adapter);
// Swipe to refresh
@ -264,6 +280,16 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("unlocked", unlocked);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
unlocked = savedInstanceState.getBoolean("unlocked");
}
@Override
public void onDestroy() {
Log.i(TAG, "Destroy");
@ -327,6 +353,14 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
} else if (requestCode == REQUEST_INVITE) {
// Do nothing
} else if (requestCode == REQUEST_KEYGUARD) {
// Handle confirm credentials
unlocked = (resultCode == RESULT_OK);
if (unlocked)
recreate();
//else
// finish();
} else {
Log.w(TAG, "Unknown activity result request=" + requestCode);
super.onActivityResult(requestCode, resultCode, data);
@ -506,7 +540,9 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_settings:
startActivity(new Intent(this, ActivitySettings.class));
Intent settings = new Intent(this, ActivitySettings.class);
settings.putExtra(ActivitySettings.EXTRA_UNLOCKED, unlocked);
startActivity(settings);
return true;
case R.id.menu_invite:

View File

@ -51,6 +51,9 @@ import javax.xml.parsers.SAXParserFactory;
public class ActivitySettings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "NetGuard.Settings";
private boolean unlocked = false;
public static final String EXTRA_UNLOCKED = "unlocked";
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");
@ -61,12 +64,15 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
super.onCreate(savedInstanceState);
unlocked = getIntent().getBooleanExtra(EXTRA_UNLOCKED, false);
getFragmentManager().beginTransaction().replace(android.R.id.content, new FragmentSettings()).commit();
}
@Override
public void onDestroy() {
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
@ -98,7 +104,12 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} else
screen.removePreference(pref_vpn);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
if (!unlocked)
for (int i = 0; i < screen.getPreferenceCount(); i++)
screen.getPreference(i).setEnabled(false);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
}
@Override

View File

@ -53,6 +53,7 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
private Context context;
private boolean debuggable;
private boolean unlocked;
private int colorText;
private int colorAccent;
private List<Rule> listAll = new ArrayList<>();
@ -130,9 +131,10 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
}
}
public RuleAdapter(Context context) {
public RuleAdapter(boolean unlocked, Context context) {
this.context = context;
this.debuggable = Util.isDebuggable(context);
this.unlocked = unlocked;
colorAccent = ContextCompat.getColor(context, R.color.colorAccent);
TypedArray ta = context.getTheme().obtainStyledAttributes(new int[]{android.R.attr.textColorSecondary});
try {
@ -208,10 +210,12 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
holder.cbWifi.setOnCheckedChangeListener(null);
holder.cbWifi.setChecked(rule.wifi_blocked);
holder.cbWifi.setEnabled(unlocked);
holder.cbWifi.setOnCheckedChangeListener(cbListener);
holder.cbOther.setOnCheckedChangeListener(null);
holder.cbOther.setChecked(rule.other_blocked);
holder.cbOther.setEnabled(unlocked);
holder.cbOther.setOnCheckedChangeListener(cbListener);
holder.llAttributes.setOnClickListener(llListener);
@ -226,7 +230,7 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
holder.cbUsing.setOnCheckedChangeListener(null);
holder.cbUsing.setChecked(rule.unused);
holder.cbUsing.setEnabled(rule.wifi_blocked || rule.other_blocked);
holder.cbUsing.setEnabled(unlocked && (rule.wifi_blocked || rule.other_blocked));
holder.cbUsing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
@ -252,7 +256,7 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
holder.cbRoaming.setOnCheckedChangeListener(null);
holder.cbRoaming.setChecked(rule.roaming);
holder.cbRoaming.setEnabled(!rule.other_blocked || rule.unused);
holder.cbRoaming.setEnabled(unlocked && (!rule.other_blocked || rule.unused));
holder.cbRoaming.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override

View File

@ -17,12 +17,14 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="setting_whitelist_other">حظر الشبكة بشكل افتراضي</string>
<string name="setting_whitelist_roaming">Block roaming by default</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">استخدام الثيم الداكن</string>
<string name="setting_export">Export settings</string>
<string name="setting_import">Import settings</string>
<string name="setting_vpn">فتح إعدادات الـVPN</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">هل أنت متأكد؟</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -16,12 +16,14 @@ Das wird von Fehlern in Android oder in Software vom Hersteller verursacht. Bitt
<string name="setting_whitelist_other">Blockiere Mobilfunk standardmäßig</string>
<string name="setting_whitelist_roaming">Blockiere Roaming standardmäßig</string>
<string name="setting_system">System Apps anzeigen</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Verwende dunkles Theme</string>
<string name="setting_export">Exportiere Einstellungen</string>
<string name="setting_import">Importiere Einstellungen</string>
<string name="setting_vpn">Öffne Android VPN Einstellungen</string>
<string name="summary_system">Regeln für System Apps definieren, nur für Experten</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Bist du sicher?</string>
<string name="msg_started">Regeln werden angewendet</string>

View File

@ -17,12 +17,14 @@ Esto es causado por errores en Android, o por el software proporcionado por el f
<string name="setting_whitelist_other">Bloquear red móvil por defecto</string>
<string name="setting_whitelist_roaming">Bloquear roaming por defecto</string>
<string name="setting_system">Administrar aplicaciones de sistema</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Usar tema oscuro</string>
<string name="setting_export">Exportar configuración</string>
<string name="setting_import">Importar configuración</string>
<string name="setting_vpn">Abrir configuración VPN de Android</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">¿Estás seguro?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -17,12 +17,14 @@ Ceci est causé par des bugs dans Android, ou dans le logiciel fourni par le con
<string name="setting_whitelist_other">Blocage données mobiles par défaut</string>
<string name="setting_whitelist_roaming">Blocage roaming par défaut</string>
<string name="setting_system">Gérer les applications système</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Utiliser le thème sombre</string>
<string name="setting_export">Exporter paramètres</string>
<string name="setting_import">Importer paramètres</string>
<string name="setting_vpn">Ouvrir les paramètres VPN</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Etes-vous sûr ?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -18,12 +18,14 @@ Ció è causato da alcuni bug contenuti in Android, o in programmi forniti dal p
<string name="setting_whitelist_other">Blocca rete dati di default</string>
<string name="setting_whitelist_roaming">Blocca roaming di default</string>
<string name="setting_system">Gestisci applicazioni di sistema</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Usa il tema scuro</string>
<string name="setting_export">Esporta impostazioni</string>
<string name="setting_import">Importa impostazioni</string>
<string name="setting_vpn">Apri impostazioni VPN</string>
<string name="summary_system">Definisci regole per le applicazioni di sistema (solo per esperti)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Sei sicuro?</string>
<string name="msg_started">Regole applicate</string>

View File

@ -17,6 +17,7 @@
<string name="setting_whitelist_other">デフォルトでモバイル通信をブロック</string>
<string name="setting_whitelist_roaming">デフォルトでローミングをブロック</string>
<string name="setting_system">システムアプリケーションの管理</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">ダークテーマを使用する</string>
<string name="setting_export">設定をエクスポート</string>
<string name="setting_import">設定をインポート</string>
@ -24,6 +25,7 @@
<string name="msg_try">Try NetGuard</string>
<string name="summary_system">システムアプリケーションのルールを定義します (エキスパート向け)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">よろしいですか?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -17,12 +17,14 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="setting_whitelist_other">모바일 데이터 차단을 기본 설정으로</string>
<string name="setting_whitelist_roaming">Block roaming by default</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">어두운 테마 사용</string>
<string name="setting_export">Export settings</string>
<string name="setting_import">Import settings</string>
<string name="setting_vpn">Android VPN 설정 열기</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">계속 하시겠습니까?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -17,12 +17,14 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="setting_whitelist_other">Blokkeer mobiel standaard</string>
<string name="setting_whitelist_roaming">Blokkeer roaming standaard</string>
<string name="setting_system">Beheer systeemapplicaties</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Gebruik donker thema</string>
<string name="setting_export">Exporteer instellingen</string>
<string name="setting_import">Importeer instellingen</string>
<string name="setting_vpn">Open Android VPN-instellingen</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Weet u het zeker?</string>
<string name="msg_started">Regels worden afgedwongen</string>

View File

@ -17,12 +17,14 @@ Problemy te są spowodowane błędami w samym Androidzie, lub oprogramowaniu dos
<string name="setting_whitelist_other">Domyślnie blokuj Mobilne</string>
<string name="setting_whitelist_roaming">Domyślnie blokuj Roaming</string>
<string name="setting_system">Zarządzaj aplikacjami systemowymi</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Użyj ciemnej skórki</string>
<string name="setting_export">Eksport ustawień</string>
<string name="setting_import">Import ustawień</string>
<string name="setting_vpn">Otwórz ustawienia VPN w Androidzie</string>
<string name="summary_system">Stwórz reguły dla aplikacji systemowych(zaawansowane)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Na pewno?</string>
<string name="msg_started">Wymuś Reguły</string>

View File

@ -17,12 +17,14 @@ Acest lucru este cauzat de bug-uri in Android sau in software-ul pus la dispozit
<string name="setting_whitelist_other">Blocheaza implicit date mobile</string>
<string name="setting_whitelist_roaming">Blocheaza implicit in roaming</string>
<string name="setting_system">Gestionati aplicatiile de sistem</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Foloseste tema intunecata</string>
<string name="setting_export">Exporta setari</string>
<string name="setting_import">Importa setari</string>
<string name="setting_vpn">Deschide setari VPN Android</string>
<string name="summary_system">Defineste reguli pentru aplicatiile de sistem (setare expert)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Esti sigur?</string>
<string name="msg_started">Limitari activate</string>

View File

@ -15,12 +15,14 @@
<string name="setting_whitelist_other">Блокировать моб. сеть по умолч.</string>
<string name="setting_whitelist_roaming">Блокировать роуминг по умолч.</string>
<string name="setting_system">Управлять сист. приложениями</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Использовать темную тему</string>
<string name="setting_export">Экспорт настроек</string>
<string name="setting_import">Импорт настроек</string>
<string name="setting_vpn">Открыть параметры VPN</string>
<string name="summary_system">Определить правила для системных приложений (для профи)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Вы уверены?</string>
<string name="msg_started">Определить правила</string>

View File

@ -17,12 +17,14 @@ Je to spôsobené chybami v Androide alebo v softvéri poskytovanom výrobcom, p
<string name="setting_whitelist_other">Predvolene blokovať mobilné dáta</string>
<string name="setting_whitelist_roaming">Predvolene blokovať roaming</string>
<string name="setting_system">Spravovať systémové aplikácie</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Použiť tmavú tému</string>
<string name="setting_export">Exportovať nastavenia</string>
<string name="setting_import">Importovať nastavenia</string>
<string name="setting_vpn">Otvoriť nastavenia VPN</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Ste si istý?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -17,12 +17,14 @@
<string name="setting_whitelist_other">默认阻止移动网络</string>
<string name="setting_whitelist_roaming">默认阻止漫游</string>
<string name="setting_system">管理系统应用</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">使用暗色主题</string>
<string name="setting_export">导出设置</string>
<string name="setting_import">导入设置</string>
<string name="setting_vpn">打开安卓VPN设置</string>
<string name="summary_system">定义系统应用规则, 仅供专业用户</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">是否确认?</string>
<string name="msg_started">规则加载中</string>

View File

@ -18,12 +18,14 @@ These issues are caused by bugs in Android, or in the software provided by the m
<string name="setting_whitelist_other">Block mobile by default</string>
<string name="setting_whitelist_roaming">Block roaming by default</string>
<string name="setting_system">Manage system applications</string>
<string name="setting_credentials">Require credentials</string>
<string name="setting_dark">Use dark theme</string>
<string name="setting_export">Export settings</string>
<string name="setting_import">Import settings</string>
<string name="setting_vpn">Open Android VPN settings</string>
<string name="summary_system">Define rules for system applications (for experts)</string>
<string name="summary_credentials">Prompt to confirm credentials (pin, pattern or password)</string>
<string name="msg_sure">Are you sure?</string>
<string name="msg_started">Enforcing rules</string>

View File

@ -17,6 +17,11 @@
android:key="manage_system"
android:summary="@string/summary_system"
android:title="@string/setting_system" />
<SwitchPreference
android:defaultValue="false"
android:key="credentials"
android:summary="@string/summary_credentials"
android:title="@string/setting_credentials" />
<SwitchPreference
android:defaultValue="false"
android:key="dark_theme"

View File

@ -1,10 +1,12 @@
#!/bin/bash
#grep -RIl "\<string name=\"msg_settings_specific" app/src/main/res | xargs sed -i -e '/msg_settings_specific/a \
#\ \ \ \ <string name=\"msg_corrupt\">The privacy database was reset, because it was corrupt</string>'
grep -RIl "\<string name=\"setting_system" app/src/main/res | xargs sed -i -e '/setting_system/a \
\ \ \ \ <string name=\"setting_credentials\">Require credentials</string>'
grep -RIl "\<string name=\"summary_system" app/src/main/res | xargs sed -i -e '/summary_system/a \
\ \ \ \ <string name=\"summary_credentials\">Prompt to confirm credentials (pin, pattern or password)</string>'
#grep -RIl "\<string name=\"title_template_merge" app/src/main/res | xargs sed -i -e 's/Apply template (merge)/Apply template (merge set)/g'
grep -RIl "\<string name=\"setting_foreground" app/src/main/res | xargs sed -i -e '/setting_foreground/d'
grep -RIl "\<string name=\"summary_foreground" app/src/main/res | xargs sed -i -e '/summary_foreground/d'
#grep -RIl "\<string name=\"setting_foreground" app/src/main/res | xargs sed -i -e '/setting_foreground/d'
#grep -RIl "\<string name=\"summary_foreground" app/src/main/res | xargs sed -i -e '/summary_foreground/d'
#grep -RIl "\<string name=\"restrict_help_internet" app/src/main/res | xargs sed -i -e 's/internet</Internet</g'
#grep -RIl "\<string name=\"settings_aosp" app/src/main/res | xargs sed -i -e 's/requires restart/requires reboot/g'