mirror of https://github.com/M66B/NetGuard.git
Set enabled state on service start/stop
This commit is contained in:
parent
9b0ec8aa17
commit
a2f5d8f084
|
@ -156,6 +156,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
if (running) {
|
||||
Log.i(TAG, "Start intent=" + prepare);
|
||||
try {
|
||||
prefs.edit().putBoolean("enabled", true).apply();
|
||||
startActivityForResult(prepare, REQUEST_VPN);
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
|
@ -176,7 +177,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
}
|
||||
} else {
|
||||
Log.i(TAG, "Switch off");
|
||||
prefs.edit().putBoolean("enabled", false).apply();
|
||||
SinkholeService.stop(ActivityMain.this);
|
||||
}
|
||||
}
|
||||
|
@ -303,6 +303,63 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
|
||||
Log.i(TAG, "onActivityResult request=" + requestCode + " result=" + requestCode + " ok=" + (resultCode == RESULT_OK));
|
||||
Util.logExtras(TAG, data);
|
||||
|
||||
if (requestCode == REQUEST_VPN) {
|
||||
// Handle VPN approval
|
||||
if (resultCode == RESULT_OK)
|
||||
SinkholeService.start(this);
|
||||
else {
|
||||
Log.i(TAG, "Dialog cancelled");
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
prefs.edit().putBoolean("enabled", false).apply();
|
||||
}
|
||||
|
||||
} else if (requestCode == REQUEST_IAB) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
// Handle donation
|
||||
Intent intent = new Intent(ACTION_IAB);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
} else {
|
||||
int response = (data == null ? -1 : data.getIntExtra("RESPONSE_CODE", -1));
|
||||
Log.i(TAG, "IAB response=" + getIABResult(response));
|
||||
}
|
||||
|
||||
} else if (requestCode == REQUEST_EXPORT) {
|
||||
if (resultCode == RESULT_OK && data != null)
|
||||
handleExport(data);
|
||||
|
||||
} else if (requestCode == REQUEST_IMPORT) {
|
||||
if (resultCode == RESULT_OK && data != null)
|
||||
handleImport(data);
|
||||
|
||||
} else {
|
||||
Log.w(TAG, "Unknown activity result request=" + requestCode);
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String name) {
|
||||
Log.i(TAG, "Preference " + name + "=" + prefs.getAll().get(name));
|
||||
if ("enabled".equals(name)) {
|
||||
// Get enabled
|
||||
boolean enabled = prefs.getBoolean(name, false);
|
||||
|
||||
// Display disabled warning
|
||||
TextView tvDisabled = (TextView) findViewById(R.id.tvDisabled);
|
||||
tvDisabled.setVisibility(enabled ? View.GONE : View.VISIBLE);
|
||||
|
||||
// Check switch state
|
||||
SwitchCompat swEnabled = (SwitchCompat) getSupportActionBar().getCustomView().findViewById(R.id.swEnabled);
|
||||
if (swEnabled.isChecked() != enabled)
|
||||
swEnabled.setChecked(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
private BroadcastReceiver interactiveStateReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
|
@ -396,24 +453,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
}.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String name) {
|
||||
Log.i(TAG, "Preference " + name + "=" + prefs.getAll().get(name));
|
||||
if ("enabled".equals(name)) {
|
||||
// Get enabled
|
||||
boolean enabled = prefs.getBoolean(name, false);
|
||||
|
||||
// Display disabled warning
|
||||
TextView tvDisabled = (TextView) findViewById(R.id.tvDisabled);
|
||||
tvDisabled.setVisibility(enabled ? View.GONE : View.VISIBLE);
|
||||
|
||||
// Check switch state
|
||||
SwitchCompat swEnabled = (SwitchCompat) getSupportActionBar().getCustomView().findViewById(R.id.swEnabled);
|
||||
if (swEnabled.isChecked() != enabled)
|
||||
swEnabled.setChecked(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
|
@ -668,44 +707,6 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
|
|||
}.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
|
||||
Log.i(TAG, "onActivityResult request=" + requestCode + " result=" + requestCode + " ok=" + (resultCode == RESULT_OK));
|
||||
Util.logExtras(TAG, data);
|
||||
|
||||
if (requestCode == REQUEST_VPN) {
|
||||
// Update enabled state
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
prefs.edit().putBoolean("enabled", resultCode == RESULT_OK).apply();
|
||||
|
||||
// Start service
|
||||
if (resultCode == RESULT_OK)
|
||||
SinkholeService.start(this);
|
||||
|
||||
} else if (requestCode == REQUEST_IAB) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
// Handle donation
|
||||
Intent intent = new Intent(ACTION_IAB);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
} else {
|
||||
int response = (data == null ? -1 : data.getIntExtra("RESPONSE_CODE", -1));
|
||||
Log.i(TAG, "IAB response=" + getIABResult(response));
|
||||
}
|
||||
|
||||
} else if (requestCode == REQUEST_EXPORT) {
|
||||
if (resultCode == RESULT_OK && data != null)
|
||||
handleExport(data);
|
||||
|
||||
} else if (requestCode == REQUEST_IMPORT) {
|
||||
if (resultCode == RESULT_OK && data != null)
|
||||
handleImport(data);
|
||||
|
||||
} else {
|
||||
Log.w(TAG, "Unknown activity result request=" + requestCode);
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleExport(final Intent data) {
|
||||
new AsyncTask<Object, Object, Throwable>() {
|
||||
@Override
|
||||
|
|
|
@ -22,7 +22,9 @@ package eu.faircode.netguard;
|
|||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.VpnService;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
|
||||
public class Receiver extends BroadcastReceiver {
|
||||
|
@ -46,8 +48,10 @@ public class Receiver extends BroadcastReceiver {
|
|||
|
||||
} else {
|
||||
// Start service
|
||||
if (VpnService.prepare(context) == null)
|
||||
SinkholeService.start(context);
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
if (prefs.getBoolean("enabled", false))
|
||||
if (VpnService.prepare(context) == null)
|
||||
SinkholeService.start(context);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -57,12 +57,11 @@ public class SinkholeService extends VpnService {
|
|||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
// Get enabled
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final boolean enabled = prefs.getBoolean("enabled", false);
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
||||
// Get command
|
||||
final Command cmd = (intent == null ? Command.start : (Command) intent.getSerializableExtra(EXTRA_COMMAND));
|
||||
Log.i(TAG, "Start intent=" + intent + " command=" + cmd + " enabled=" + enabled + " vpn=" + (vpn != null));
|
||||
Log.i(TAG, "Start intent=" + intent + " command=" + cmd + " vpn=" + (vpn != null));
|
||||
|
||||
// Process command
|
||||
new Thread(new Runnable() {
|
||||
|
@ -71,22 +70,21 @@ public class SinkholeService extends VpnService {
|
|||
synchronized (SinkholeService.this) {
|
||||
switch (cmd) {
|
||||
case start:
|
||||
if (enabled && vpn == null) {
|
||||
if (vpn == null) {
|
||||
last_roaming = Util.isRoaming(SinkholeService.this);
|
||||
vpn = startVPN();
|
||||
startDebug(vpn);
|
||||
removeDisabledNotification();
|
||||
prefs.edit().putBoolean("enabled", true).apply();
|
||||
}
|
||||
break;
|
||||
|
||||
case reload:
|
||||
// Seamless handover
|
||||
ParcelFileDescriptor prev = vpn;
|
||||
if (enabled) {
|
||||
vpn = startVPN();
|
||||
stopDebug();
|
||||
startDebug(vpn);
|
||||
}
|
||||
vpn = startVPN();
|
||||
stopDebug();
|
||||
startDebug(vpn);
|
||||
if (prev != null)
|
||||
stopVPN(prev);
|
||||
break;
|
||||
|
@ -97,6 +95,7 @@ public class SinkholeService extends VpnService {
|
|||
stopVPN(vpn);
|
||||
vpn = null;
|
||||
}
|
||||
prefs.edit().putBoolean("enabled", false).apply();
|
||||
stopSelf();
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue