commit 144460beed66ee595f37cbbc87b2245420dad128
Author: Nathan Freitas <nat...@freitas.net>
Date:   Fri Apr 25 12:44:21 2014 -0400

    fixes for preference handling in multi process context
---
 src/org/torproject/android/OnBootReceiver.java     |    6 +-
 src/org/torproject/android/OrbotApp.java           |    4 +-
 src/org/torproject/android/service/TorService.java |  115 ++++++++++++--------
 .../android/service/TorServiceConstants.java       |    4 +-
 .../android/service/TorServiceUtils.java           |   15 +++
 .../torproject/android/service/TorTransProxy.java  |    4 +-
 .../torproject/android/settings/AppManager.java    |    5 +-
 .../android/settings/SettingsPreferences.java      |   21 +++-
 8 files changed, 115 insertions(+), 59 deletions(-)

diff --git a/src/org/torproject/android/OnBootReceiver.java 
b/src/org/torproject/android/OnBootReceiver.java
index a5ca1d6..92104e0 100644
--- a/src/org/torproject/android/OnBootReceiver.java
+++ b/src/org/torproject/android/OnBootReceiver.java
@@ -1,12 +1,12 @@
 package org.torproject.android;
 
 import org.torproject.android.service.TorService;
+import org.torproject.android.service.TorServiceUtils;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
 
 public class OnBootReceiver extends BroadcastReceiver {
        
@@ -16,7 +16,8 @@ public class OnBootReceiver extends BroadcastReceiver {
                if (intent.getAction() != null 
                                && 
intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
                {
-                       SharedPreferences prefs = 
TorService.getSharedPrefs(context.getApplicationContext());
+                       
+                       SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(context.getApplicationContext());
                        
                        boolean startOnBoot = 
prefs.getBoolean("pref_start_boot",false);
                        
@@ -34,5 +35,6 @@ public class OnBootReceiver extends BroadcastReceiver {
        }
 
        
+       
 }
 
diff --git a/src/org/torproject/android/OrbotApp.java 
b/src/org/torproject/android/OrbotApp.java
index d470afb..cb1824c 100644
--- a/src/org/torproject/android/OrbotApp.java
+++ b/src/org/torproject/android/OrbotApp.java
@@ -2,6 +2,8 @@ package org.torproject.android;
 
 import java.util.Locale;
 
+import org.torproject.android.service.TorServiceUtils;
+
 import android.app.Application;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
@@ -18,7 +20,7 @@ public class OrbotApp extends Application implements 
TorConstants
     public void onCreate() {
         super.onCreate();
         
-        settings = PreferenceManager.getDefaultSharedPreferences(this);
+        settings =  TorServiceUtils.getSharedPrefs(getApplicationContext());
 
         Configuration config = getResources().getConfiguration();
 
diff --git a/src/org/torproject/android/service/TorService.java 
b/src/org/torproject/android/service/TorService.java
index 5264370..4f897e9 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -292,7 +292,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                        if (intent != null && intent.getAction()!=null && 
intent.getAction().equals("onboot"))
                        {
                                
-                               boolean startOnBoot = 
getSharedPrefs(getApplicationContext()).getBoolean("pref_start_boot",false);
+                               boolean startOnBoot = 
TorServiceUtils.getSharedPrefs(getApplicationContext()).getBoolean("pref_start_boot",false);
                                
                                if (startOnBoot)
                                {
@@ -308,7 +308,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
 
                    // We want this service to continue running until it is 
explicitly
                    // stopped, so return sticky.
-                   return START_STICKY;
+                   return START_NOT_STICKY;
                    
                }
                catch (Exception e)
@@ -319,14 +319,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
 
        }
        
-       public static SharedPreferences getSharedPrefs (Context context)
-       {
-               if (Build.VERSION.SDK_INT>=11)
-                       return 
context.getSharedPreferences(TorConstants.PREF_TOR_SHARED_PREFS,Context.MODE_MULTI_PROCESS);
-               else
-                       return 
context.getSharedPreferences(TorConstants.PREF_TOR_SHARED_PREFS,Context.MODE_PRIVATE);
-               
-       }
+
        
         
        public void run ()
@@ -341,11 +334,10 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                     }
                     catch (Exception e)
                     {                          
-                       logException("Unable to start Tor: " + 
e.getMessage(),e);       
-                       
sendCallbackStatusMessage(getString(R.string.unable_to_start_tor) + ' ' + 
e.getMessage());
+                       
+                       logException("Unable to start Tor: " + e.toString(),e); 
                         currentStatus = STATUS_OFF;
                         
this.showToolbarNotification(getString(R.string.unable_to_start_tor) + ": " + 
e.getMessage(), ERROR_NOTIFY_ID, R.drawable.ic_stat_notifyerr, -1, false);
-                        Log.d(TAG,"Unable to start Tor: " + e.getMessage(),e);
                     }
                        
                }
@@ -404,7 +396,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
        private String getHiddenServiceHostname ()
        {
 
-               SharedPreferences prefs = 
getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
                
         boolean enableHiddenServices = prefs.getBoolean("pref_hs_enable", 
false);
         
@@ -538,7 +530,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                
                fileXtables = new File(appBinHome, IPTABLES_ASSET_KEY);
                
-               SharedPreferences prefs = 
getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
                String version = 
prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
 
                logNotice("checking binary version: " + version);
@@ -595,7 +587,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
     
     private void updateSettings ()
     {
-               SharedPreferences prefs = 
getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
 
        mHasRoot = prefs.getBoolean(PREF_HAS_ROOT,false);
                mEnableTransparentProxy = prefs.getBoolean("pref_transparent", 
false);
@@ -611,8 +603,6 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
     public void initTor () throws Exception
     {
        
-       boolean portsAvail = checkPortsAvailable();
-       
        try
        {
                initBinaries();
@@ -645,6 +635,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                //checkAddressAndCountry();
     }
     
+    /**
     private boolean checkPortsAvailable ()
     {
        int[] ports = {9050,9051,8118};
@@ -669,6 +660,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
        return true;
        
     }
+    */
     
     /*
      * activate means whether to apply the users preferences
@@ -703,7 +695,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                {
                        
showToolbarNotification(getString(R.string.setting_up_app_based_transparent_proxying_),
 TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_tor, -1, false);
 
-                       code = 
mTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this, 
getSharedPrefs(getApplicationContext())));
+                       code = 
mTransProxy.setTransparentProxyingByApp(this,AppManager.getApps(this, 
TorServiceUtils.getSharedPrefs(getApplicationContext())));
                }
                        
        
@@ -752,7 +744,7 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
     private void runTorShellCmd() throws Exception
     {
        
-               SharedPreferences prefs 
=getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs 
=TorServiceUtils.getSharedPrefs(getApplicationContext());
 
                String torrcPath = new File(appBinHome, 
TORRC_ASSET_KEY).getAbsolutePath();
                
@@ -1360,8 +1352,8 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                }
                catch (IOException ioe)
                {
-                       Log.e(TAG, "Unable to update Tor configuration", ioe);
-                       logNotice("Unable to update Tor configuration: " + 
ioe.getMessage());
+                       
+                       logException("Unable to get Tor configuration: " + 
ioe.getMessage(),ioe);
                }
                
                return null;
@@ -1442,8 +1434,14 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                }
                catch (Exception ioe)
                {
-                       Log.e(TAG, "Unable to update Tor configuration", ioe);
-                       logNotice("Unable to update Tor configuration: " + 
ioe.getMessage());
+                       
+                       logException("Unable to update Tor configuration: " + 
ioe.getMessage(),ioe);
+                       if (configBuffer != null)
+                               for (String config : configBuffer)
+                               {
+                                       logNotice("Error applying config: " + 
config);
+                               }
+
                }
                
                return false;
@@ -1569,13 +1567,13 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
        @Override
        public void onReceive(Context context, Intent intent) {
 
-               SharedPreferences prefs = 
getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
 
                mConnectivity = 
!intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
 
-               boolean disableNetwork = 
prefs.getBoolean(TorConstants.PREF_DISABLE_NETWORK, true);
+               boolean doNetworKSleep = 
prefs.getBoolean(TorConstants.PREF_DISABLE_NETWORK, true);
                
-               if (currentStatus == STATUS_ON && disableNetwork)
+               if (doNetworKSleep && mBinder != null)
                {
                        try {
                                        
mBinder.updateConfiguration("DisableNetwork", mConnectivity ? "0" : "1", false);
@@ -1591,13 +1589,14 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                                        {
                                                logNotice("Network connectivity 
is good. Waking Tor up...");
                                                
showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_tor,-1,prefPersistNotifications);
-
+       
                                }
                                        
                        } catch (Exception e) {
                                        logException ("error updating state 
after network restart",e);
                                }
                }
+               
        }
     };
 
@@ -1605,8 +1604,10 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
     {
        logNotice("updating settings in Tor service");
        
-               SharedPreferences prefs = 
getSharedPrefs(getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
 
+               enableSocks ("127.0.0.1",9050,false);
+               
                boolean useBridges = 
prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
                
                //boolean autoUpdateBridges = 
prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
@@ -1685,14 +1686,33 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
         
                if (useBridges)
                {
-                       String bridgeList = 
prefs.getString(TorConstants.PREF_BRIDGES_LIST,getString(R.string.default_bridges));
+               
+                       logMessage ("Using bridges");
+                       boolean obfsBridges = 
prefs.getBoolean(TorConstants.PREF_BRIDGES_OBFUSCATED, false);
+                       String bridgeCfgKey = "Bridge";
+
+
+                       if (obfsBridges)
+                       {
+                               String bridgeConfig = "obfs2,obfs3,scramblesuit 
exec " + fileObfsclient.getAbsolutePath();
+                               
+                               logMessage ("Using OBFUSCATED bridges: " + 
bridgeConfig);
+                               
+                               
mBinder.updateConfiguration("ClientTransportPlugin",bridgeConfig, false);
+                       }
+                       else
+                       {
+                               logMessage ("Using standard bridges");
+                       }
+                       
+                       String bridgeList = 
prefs.getString(TorConstants.PREF_BRIDGES_LIST,null);
 
                        if (bridgeList == null || bridgeList.length() == 0)
                        {
                                String msgBridge = 
getString(R.string.bridge_requires_ip) +
                                                
getString(R.string.send_email_for_bridges);
                                showToolbarNotification(msgBridge, 
ERROR_NOTIFY_ID, R.drawable.ic_stat_tor, -1, false);
-
+                               logMessage(msgBridge);
                        
                                return false;
                        }
@@ -1708,25 +1728,15 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                        
                        
showToolbarNotification(getString(R.string.notification_using_bridges) + ": " + 
bridgeList, TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_tor, -1, false);
 
-                       boolean obfsBridges = 
prefs.getBoolean(TorConstants.PREF_BRIDGES_OBFUSCATED, false);
-                       String bridgeCfgKey = "bridge";
-
-                       if (obfsBridges)
-                       {
-                               bridgeCfgKey = bridgeCfgKey + " obfsclient";
-                       }
-
+                                               
+                         
                        StringTokenizer st = new 
StringTokenizer(bridgeList,bridgeDelim);
                        while (st.hasMoreTokens())
                        {
+                               String bridgeConfigLine = st.nextToken().trim();
+                               logMessage("Adding bridge: " + 
bridgeConfigLine);
+                               mBinder.updateConfiguration(bridgeCfgKey, 
bridgeConfigLine, false);
 
-                               mBinder.updateConfiguration(bridgeCfgKey, 
st.nextToken(), false);
-
-                       }
-
-                       if (obfsBridges)
-                       {
-                               
mBinder.updateConfiguration("ClientTransportPlugin","obfsclient exec " + 
fileObfsclient.getAbsolutePath(), false);
                        }
 
                        
mBinder.updateConfiguration("UpdateBridgesFromAuthority", "0", false);
@@ -1813,6 +1823,8 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
                                        hsPortConfig = hsPortConfig + " 
0.0.0.0:" + hsPortConfig;
                                }
                                
+                               logMessage("Adding hidden service on port: " + 
hsPortConfig);
+                               
                                
mBinder.updateConfiguration("HiddenServicePort",hsPortConfig, false);
                                
                                hsPort = Integer.parseInt(hsPortConfig.split(" 
")[0]);
@@ -1837,6 +1849,17 @@ public class TorService extends Service implements 
TorServiceConstants, TorConst
         return true;
     }
     
+    private void enableSocks (String ip, int port, boolean safeSocks) throws 
RemoteException
+    {
+       mBinder.updateConfiguration("SOCKSPort", port + "", false);
+       mBinder.updateConfiguration("SOCKSListenAddress", ip, false);
+       mBinder.updateConfiguration("SafeSocks", safeSocks ? "1" : "0", false);
+       mBinder.updateConfiguration("TestSocks", "1", false);
+       mBinder.updateConfiguration("WarnUnsafeSocks", "1", false);
+       
+
+    }
+    
     //using Google DNS for now as the public DNS server
     private String writeDNSFile () throws IOException
     {
diff --git a/src/org/torproject/android/service/TorServiceConstants.java 
b/src/org/torproject/android/service/TorServiceConstants.java
index 2fe9ff8..1b2fa5d 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -77,10 +77,8 @@ public interface TorServiceConstants {
     public static final int DISABLE_TOR_MSG = 3;
     public static final int LOG_MSG = 4;
     
-    public static final String BINARY_TOR_VERSION = 
"0.2.4.21-openssl1.0.1g-if8";
-    public static final String BINARY_PRIVOXY_VERSION = "3.0.12";
+    public static final String BINARY_TOR_VERSION = 
"0.2.5.3-alpha-openssl1.0.1g-b87a";
     public static final String PREF_BINARY_TOR_VERSION_INSTALLED = 
"BINARY_TOR_VERSION_INSTALLED";
-    public static final String PREF_BINARY_PRIVOXY_VERSION_INSTALLED = 
"BINARY_PRIVOXY_VERSION_INSTALLED";
     
     //obfsproxy 
     public static final String OBFSCLIENT_ASSET_KEY = "obfsclient";
diff --git a/src/org/torproject/android/service/TorServiceUtils.java 
b/src/org/torproject/android/service/TorServiceUtils.java
index 5e87cb5..fe6ad01 100644
--- a/src/org/torproject/android/service/TorServiceUtils.java
+++ b/src/org/torproject/android/service/TorServiceUtils.java
@@ -11,6 +11,11 @@ import java.util.StringTokenizer;
 
 import org.torproject.android.TorConstants;
 
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Build;
 import android.util.Log;
 
 public class TorServiceUtils implements TorServiceConstants {
@@ -95,4 +100,14 @@ public class TorServiceUtils implements TorServiceConstants 
{
         return procId;
 
        }
+       
+       @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+       public static SharedPreferences getSharedPrefs (Context context)
+       {
+               if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
+                       return 
context.getSharedPreferences(TorConstants.PREF_TOR_SHARED_PREFS,0 | 
Context.MODE_MULTI_PROCESS);
+               else
+                       return 
context.getSharedPreferences(TorConstants.PREF_TOR_SHARED_PREFS,Context.MODE_PRIVATE);
+               
+       }
 }
diff --git a/src/org/torproject/android/service/TorTransProxy.java 
b/src/org/torproject/android/service/TorTransProxy.java
index f7fd535..5722612 100644
--- a/src/org/torproject/android/service/TorTransProxy.java
+++ b/src/org/torproject/android/service/TorTransProxy.java
@@ -34,7 +34,7 @@ public class TorTransProxy implements TorServiceConstants {
 
                String ipTablesPath = null;
                
-               SharedPreferences prefs = 
TorService.getSharedPrefs(context.getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(context);
 
                useSystemIpTables = 
prefs.getBoolean(TorConstants.PREF_USE_SYSTEM_IPTABLES, false);
                
@@ -57,7 +57,7 @@ public class TorTransProxy implements TorServiceConstants {
 
                String ipTablesPath = null;
                
-               SharedPreferences prefs = 
TorService.getSharedPrefs(context.getApplicationContext());
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(context);
 
                useSystemIpTables = 
prefs.getBoolean(TorConstants.PREF_USE_SYSTEM_IPTABLES, false);
                
diff --git a/src/org/torproject/android/settings/AppManager.java 
b/src/org/torproject/android/settings/AppManager.java
index 6e2b90b..b80fccd 100644
--- a/src/org/torproject/android/settings/AppManager.java
+++ b/src/org/torproject/android/settings/AppManager.java
@@ -14,6 +14,7 @@ import java.util.StringTokenizer;
 import org.torproject.android.R;
 import org.torproject.android.TorConstants;
 import org.torproject.android.service.TorService;
+import org.torproject.android.service.TorServiceUtils;
 
 import android.app.Activity;
 import android.content.Context;
@@ -22,6 +23,7 @@ import android.content.SharedPreferences.Editor;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.os.Build;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -50,7 +52,6 @@ public class AppManager extends Activity implements 
OnCheckedChangeListener, OnC
        }
        
        
-       
        @Override
        protected void onResume() {
                super.onResume();
@@ -65,7 +66,7 @@ public class AppManager extends Activity implements 
OnCheckedChangeListener, OnC
                        }
                });
                
-               mPrefs = TorService.getSharedPrefs(getApplicationContext());
+               mPrefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
                loadApps(mPrefs);
        }
 
diff --git a/src/org/torproject/android/settings/SettingsPreferences.java 
b/src/org/torproject/android/settings/SettingsPreferences.java
index 84b8c91..57d3fc4 100644
--- a/src/org/torproject/android/settings/SettingsPreferences.java
+++ b/src/org/torproject/android/settings/SettingsPreferences.java
@@ -9,6 +9,7 @@ import org.sufficientlysecure.rootcommands.RootCommands;
 import org.torproject.android.R;
 import org.torproject.android.service.TorServiceUtils;
 
+import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
@@ -42,8 +43,8 @@ public class SettingsPreferences
                super.onCreate(savedInstanceState);
                
                addPreferencesFromResource(R.xml.preferences);
-               
-               SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+               
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
+               SharedPreferences prefs = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
                
                hasRoot = prefs.getBoolean("has_root",false);
                
@@ -104,6 +105,20 @@ public class SettingsPreferences
        
        
        
+       @Override
+       protected void onPause() {
+
+               super.onPause();
+               
+
+
+               
+               
+               
+               
+       }
+
+
        /* (non-Javadoc)
         * @see android.app.Activity#onStop()
         */
@@ -147,7 +162,7 @@ public class SettingsPreferences
                }
                else if (preference == prefLocale)
                {
-                        SharedPreferences settings = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+                        SharedPreferences settings = 
TorServiceUtils.getSharedPrefs(getApplicationContext());
 
                        Configuration config = 
getResources().getConfiguration();
 



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to