[tor-commits] [orbot/master] use context.stopService() to shutdown TorService instead of custom message

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Jun 25 14:59:59 UTC 2015


commit 6ac9a2cee6e4b0635c69706e184b66acae048eda
Author: Hans-Christoph Steiner <hans at eds.org>
Date:   Tue Jun 9 14:01:01 2015 -0400

    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.
---
 res/values/strings.xml                             |    2 +-
 src/org/torproject/android/OrbotMainActivity.java  |  114 ++++++--------------
 src/org/torproject/android/service/TorService.java |   26 +----
 .../android/service/TorServiceConstants.java       |    1 -
 4 files changed, 38 insertions(+), 105 deletions(-)

diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7030a37..87aa35f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11,7 +11,7 @@
   <string name="status_starting_up">Orbot is starting…</string>
   <string name="status_activated">Connected to the Tor network</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_complete">complete.</string>
   <string name="tor_process_waiting">waiting.</string>
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index d286c47..7b0bb31 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -121,22 +121,16 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
 		torService.setAction(action);
 		startService(torService);
 	}
-	
-	private void stopService ()
-	{
-		
-		Intent torService = new Intent(this, TorService.class);
-		stopService(torService);
-		
-	}
-	
-    
+
+    private void stopTor() {
+        Intent torService = new Intent(this, TorService.class);
+        stopService(torService);
+    }
+
     // Our handler for received Intents. This will be called whenever an Intent
     // with an action named "custom-event-name" is broadcasted.
     private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
-        
-        
-        
+
       @Override
       public void onReceive(Context context, Intent intent) {
         // Get extra data included in the Intent
@@ -425,34 +419,21 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
             
         
         }
-      
-        /**
-        * 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
-        * be quite right b/c no matter what we do, it seems like the TorService still exists
-        **/
-        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();
-                        stopService ();
-                        
-                        
-                } catch (RemoteException e) {
-                        Log.w(TAG, e);
-                }
-                
-                //Kill all the wizard activities
-                setResult(RESULT_CLOSE_ALL);
-                finish();
-                
-        }
-        
+
+    /**
+     * 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 be quite right b/c no matter what we do, it seems like the TorService
+     * still exists
+     **/
+    private void doExit() {
+        stopTor();
+
+        // Kill all the wizard activities
+        setResult(RESULT_CLOSE_ALL);
+        finish();
+    }
+
 	protected void onPause() {
 		try
 		{
@@ -1223,49 +1204,20 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
         msg.getData().putString(HANDLER_TOR_MSG, getString(R.string.status_starting_up));
         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) {
-             
-            try
-            {
-                    
-                if (torStatus == TorServiceConstants.STATUS_OFF)
-                {
 
-                        startTor();
-                }
-                else
-                {
-                        
-                        stopTor();
-                        stopService ();
-                        
-                }
-                
-                return true;
-                    
-            }
-            catch (Exception e)
-            {
-                    Log.d(TAG,"error onclick",e);
+    public boolean onLongClick(View view) {
+        try {
+            if (torStatus == TorServiceConstants.STATUS_OFF) {
+                startTor();
+            } else {
+                stopTor();
             }
-            
-            return false;
-                    
+            return true;
+        } catch (RemoteException e) {
+            Log.d(TAG, "error onclick", e);
         }
+        return false;
+    }
 
 // this is what takes messages or values from the callback threads or other non-mainUI threads
 //and passes them back into the main UI thread for display to the user
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 58aa9ce..5884f62 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -343,8 +343,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             if (action != null) {
                 if (action.equals(CMD_START)) {
                     startTor();
-                } else if (action.equals(CMD_STOP)) {
-                    stopTor();
+                    // stopTor() is called when the Service is destroyed
                 } else if (action.equals(CMD_NEWNYM)) {
                     newIdentity();
                 } else if (action.equals(CMD_FLUSH)) {
@@ -371,20 +370,9 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     }
 
     @Override
-    public boolean stopService(Intent name) {
-        logNotice("TorService is being stopped: " + name);
-        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);
+    public void onDestroy() {
+        stopTor();
         unregisterReceiver(mNetworkStateReceiver);
-        clearNotifications ();
         super.onDestroy();
     }
 
@@ -392,9 +380,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         Log.i("TorService", "stopTor");
         try {
             sendCallbackStatus(STATUS_STOPPING);
-
             sendCallbackLogMessage(getString(R.string.status_shutting_down));
-            Log.d(TAG,"Tor is stopping NOW");
 
             killAllDaemons();
 
@@ -408,13 +394,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
             	shellRoot.close();
             }
 
-            clearNotifications();
-
             sendCallbackLogMessage(getString(R.string.status_disabled));
         }
         catch (CannotKillException e)
         {
-            Log.d(TAG, "An error occured stopping Tor", e);
             logNotice("An error occured stopping Tor: " + e.getMessage());
             sendCallbackLogMessage(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)
         {
-            Log.d(TAG, "An error occured stopping Tor",e);
             logNotice("An error occured stopping Tor: " + e.getMessage());
             sendCallbackLogMessage(getString(R.string.something_bad_happened));
         }
-
+        clearNotifications();
         sendCallbackStatus(STATUS_OFF);
     }
 
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index fdf5e77..7a5a14a 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -84,7 +84,6 @@ public interface TorServiceConstants {
     public static final int LOG_MSG = 4;
     
     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_NEWNYM = "newnym";
     public static final String CMD_VPN = "vpn";





More information about the tor-commits mailing list