use context.stopService() to shutdown TorService instead of custom message
Since running stopService() automatically triggers Service.onDestroy(), there is a nice way to hook in and run the shutdown procedure. This provides an obvious point of entry as well as simplifying the shutdown procedure.
This commit is contained in:
parent
bfb0a80a18
commit
6ac9a2cee6
|
@ -11,7 +11,7 @@
|
||||||
<string name="status_starting_up">Orbot is starting…</string>
|
<string name="status_starting_up">Orbot is starting…</string>
|
||||||
<string name="status_activated">Connected to the Tor network</string>
|
<string name="status_activated">Connected to the Tor network</string>
|
||||||
<string name="status_disabled">Orbot is deactivated</string>
|
<string name="status_disabled">Orbot is deactivated</string>
|
||||||
<string name="status_shutting_down">Orbot is shutting down</string>
|
<string name="status_shutting_down">TorService is shutting down</string>
|
||||||
<string name="tor_process_starting">Starting Tor client…</string>
|
<string name="tor_process_starting">Starting Tor client…</string>
|
||||||
<string name="tor_process_complete">complete.</string>
|
<string name="tor_process_complete">complete.</string>
|
||||||
<string name="tor_process_waiting">waiting.</string>
|
<string name="tor_process_waiting">waiting.</string>
|
||||||
|
|
|
@ -122,21 +122,15 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
|
||||||
startService(torService);
|
startService(torService);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stopService ()
|
private void stopTor() {
|
||||||
{
|
|
||||||
|
|
||||||
Intent torService = new Intent(this, TorService.class);
|
Intent torService = new Intent(this, TorService.class);
|
||||||
stopService(torService);
|
stopService(torService);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Our handler for received Intents. This will be called whenever an Intent
|
// Our handler for received Intents. This will be called whenever an Intent
|
||||||
// with an action named "custom-event-name" is broadcasted.
|
// with an action named "custom-event-name" is broadcasted.
|
||||||
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
|
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
// Get extra data included in the Intent
|
// Get extra data included in the Intent
|
||||||
|
@ -428,29 +422,16 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is our attempt to REALLY exit Orbot, and stop the background service
|
* This is our attempt to REALLY exit Orbot, and stop the background service
|
||||||
* However, Android doesn't like people "quitting" apps, and/or our code may not
|
* However, Android doesn't like people "quitting" apps, and/or our code may
|
||||||
* be quite right b/c no matter what we do, it seems like the TorService still exists
|
* not be quite right b/c no matter what we do, it seems like the TorService
|
||||||
|
* still exists
|
||||||
**/
|
**/
|
||||||
private void doExit ()
|
private void doExit() {
|
||||||
{
|
|
||||||
try {
|
|
||||||
|
|
||||||
//one of the confusing things about all of this code is the multiple
|
|
||||||
//places where things like "stopTor" are called, both in the Activity and the Service
|
|
||||||
//not something to tackle in your first iteration, but i thin we can talk about fixing
|
|
||||||
//terminology but also making sure there are clear distinctions in control
|
|
||||||
stopTor();
|
stopTor();
|
||||||
stopService ();
|
|
||||||
|
|
||||||
|
// Kill all the wizard activities
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.w(TAG, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Kill all the wizard activities
|
|
||||||
setResult(RESULT_CLOSE_ALL);
|
setResult(RESULT_CLOSE_ALL);
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
|
@ -1224,47 +1205,18 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
|
||||||
mStatusUpdateHandler.sendMessage(msg);
|
mStatusUpdateHandler.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
//now we stop Tor! amazing!
|
|
||||||
private void stopTor () throws RemoteException
|
|
||||||
{
|
|
||||||
sendIntentToService (TorServiceConstants.CMD_STOP);
|
|
||||||
torStatus = TorServiceConstants.STATUS_OFF;
|
|
||||||
Message msg = mStatusUpdateHandler.obtainMessage(TorServiceConstants.DISABLE_TOR_MSG);
|
|
||||||
mStatusUpdateHandler.sendMessage(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
|
||||||
*/
|
|
||||||
public boolean onLongClick(View view) {
|
public boolean onLongClick(View view) {
|
||||||
|
try {
|
||||||
try
|
if (torStatus == TorServiceConstants.STATUS_OFF) {
|
||||||
{
|
|
||||||
|
|
||||||
if (torStatus == TorServiceConstants.STATUS_OFF)
|
|
||||||
{
|
|
||||||
|
|
||||||
startTor();
|
startTor();
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
stopTor();
|
stopTor();
|
||||||
stopService ();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.d(TAG, "error onclick", e);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Log.d(TAG,"error onclick",e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is what takes messages or values from the callback threads or other non-mainUI threads
|
// this is what takes messages or values from the callback threads or other non-mainUI threads
|
||||||
|
|
|
@ -343,8 +343,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
if (action.equals(CMD_START)) {
|
if (action.equals(CMD_START)) {
|
||||||
startTor();
|
startTor();
|
||||||
} else if (action.equals(CMD_STOP)) {
|
// stopTor() is called when the Service is destroyed
|
||||||
stopTor();
|
|
||||||
} else if (action.equals(CMD_NEWNYM)) {
|
} else if (action.equals(CMD_NEWNYM)) {
|
||||||
newIdentity();
|
newIdentity();
|
||||||
} else if (action.equals(CMD_FLUSH)) {
|
} else if (action.equals(CMD_FLUSH)) {
|
||||||
|
@ -371,20 +370,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean stopService(Intent name) {
|
public void onDestroy() {
|
||||||
logNotice("TorService is being stopped: " + name);
|
stopTor();
|
||||||
return super.stopService(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy ()
|
|
||||||
{
|
|
||||||
Log.i("TorService", "onDestroy");
|
|
||||||
String msg = ("TorService is being DESTROYED... shutting down!");
|
|
||||||
Log.d(TAG, msg);
|
|
||||||
sendCallbackLogMessage(msg);
|
|
||||||
unregisterReceiver(mNetworkStateReceiver);
|
unregisterReceiver(mNetworkStateReceiver);
|
||||||
clearNotifications ();
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,9 +380,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
Log.i("TorService", "stopTor");
|
Log.i("TorService", "stopTor");
|
||||||
try {
|
try {
|
||||||
sendCallbackStatus(STATUS_STOPPING);
|
sendCallbackStatus(STATUS_STOPPING);
|
||||||
|
|
||||||
sendCallbackLogMessage(getString(R.string.status_shutting_down));
|
sendCallbackLogMessage(getString(R.string.status_shutting_down));
|
||||||
Log.d(TAG,"Tor is stopping NOW");
|
|
||||||
|
|
||||||
killAllDaemons();
|
killAllDaemons();
|
||||||
|
|
||||||
|
@ -408,13 +394,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
shellRoot.close();
|
shellRoot.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
clearNotifications();
|
|
||||||
|
|
||||||
sendCallbackLogMessage(getString(R.string.status_disabled));
|
sendCallbackLogMessage(getString(R.string.status_disabled));
|
||||||
}
|
}
|
||||||
catch (CannotKillException e)
|
catch (CannotKillException e)
|
||||||
{
|
{
|
||||||
Log.d(TAG, "An error occured stopping Tor", e);
|
|
||||||
logNotice("An error occured stopping Tor: " + e.getMessage());
|
logNotice("An error occured stopping Tor: " + e.getMessage());
|
||||||
sendCallbackLogMessage(getString(R.string.unable_to_reset_tor));
|
sendCallbackLogMessage(getString(R.string.unable_to_reset_tor));
|
||||||
showToolbarNotification(getString(R.string.unable_to_reset_tor),
|
showToolbarNotification(getString(R.string.unable_to_reset_tor),
|
||||||
|
@ -422,11 +405,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log.d(TAG, "An error occured stopping Tor",e);
|
|
||||||
logNotice("An error occured stopping Tor: " + e.getMessage());
|
logNotice("An error occured stopping Tor: " + e.getMessage());
|
||||||
sendCallbackLogMessage(getString(R.string.something_bad_happened));
|
sendCallbackLogMessage(getString(R.string.something_bad_happened));
|
||||||
}
|
}
|
||||||
|
clearNotifications();
|
||||||
sendCallbackStatus(STATUS_OFF);
|
sendCallbackStatus(STATUS_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,6 @@ public interface TorServiceConstants {
|
||||||
public static final int LOG_MSG = 4;
|
public static final int LOG_MSG = 4;
|
||||||
|
|
||||||
public static final String CMD_START = "start";
|
public static final String CMD_START = "start";
|
||||||
public static final String CMD_STOP = "stop";
|
|
||||||
public static final String CMD_FLUSH = "flush";
|
public static final String CMD_FLUSH = "flush";
|
||||||
public static final String CMD_NEWNYM = "newnym";
|
public static final String CMD_NEWNYM = "newnym";
|
||||||
public static final String CMD_VPN = "vpn";
|
public static final String CMD_VPN = "vpn";
|
||||||
|
|
Loading…
Reference in New Issue