From c1f9296164d567a19850e76831beeac85fd75191 Mon Sep 17 00:00:00 2001 From: Nathan Freitas Date: Fri, 30 May 2014 10:36:03 -0400 Subject: [PATCH] new work on binding and service starting --- src/org/torproject/android/Orbot.java | 132 +++++++++++++++----------- 1 file changed, 75 insertions(+), 57 deletions(-) diff --git a/src/org/torproject/android/Orbot.java b/src/org/torproject/android/Orbot.java index 94300d1d..1848f9b5 100644 --- a/src/org/torproject/android/Orbot.java +++ b/src/org/torproject/android/Orbot.java @@ -33,6 +33,8 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -83,7 +85,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic //should move this up with all the other class variables private boolean mIsBound = false; - private Intent mTorService = null; private boolean autoStartFromIntent = false; @@ -98,12 +99,32 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic doLayout(); - mTorService = new Intent(this, TorService.class); - getApplication().getApplicationContext().startService(mTorService); - appConflictChecker (); + + startService (); } + + private void startService () + { + Intent torService = new Intent(this, TorService.class); + + if (Build.VERSION.SDK_INT > 14) + { + + bindService(torService, + mConnection, Context.BIND_AUTO_CREATE|Context.BIND_IMPORTANT|Context.BIND_ABOVE_CLIENT); + } + else + { + + bindService(torService, + mConnection, Context.BIND_AUTO_CREATE); + } + + startService(torService); + + } private void doLayout () { @@ -159,9 +180,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic downloadText.setText(formatCount(0) + " / " + formatTotal(0)); uploadText.setText(formatCount(0) + " / " + formatTotal(0)); - updateStatus(""); - - // Gesture detection mGestureDetector = new GestureDetector(this, new MyGestureDetector()); @@ -516,24 +534,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } - /* (non-Javadoc) - * @see android.app.Activity#onResume() - */ - protected void onResume() { - super.onResume(); - - bindService(); - updateStatus(""); - } - - - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - updateStatus(""); handleIntents(); } @@ -589,12 +594,8 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic { autoStartFromIntent = true; - if (mService == null) - { - bindService(); - } - else - { + if (mService != null) + { try { startTor(); } catch (RemoteException e) { @@ -847,17 +848,50 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic */ public void updateStatus (String torServiceMsg) { + new updateStatusAsync().execute(torServiceMsg); + } + + private class updateStatusAsync extends AsyncTask { + + String mTorServiceMsg = null; + + @Override + protected Integer doInBackground(String... params) { + + mTorServiceMsg = params[0]; + int newTorStatus = -1; try { - if (torServiceMsg == null || torServiceMsg.length()==0) - torStatus = -1; //reset Tor status - - int newTorStatus = -1; - + if (mTorServiceMsg != null && mTorServiceMsg.length()>0) + { //if the serivce is bound, query it for the curren status value (int) if (mService != null) - newTorStatus = mService.getStatus(); + return new Integer(mService.getStatus()); + } + + } + catch (Exception e) + { + //error + Log.d(TAG,"error in update status",e); + } + + return newTorStatus; + + } + + @Override + protected void onPostExecute(Integer result) { + + updateUI(result.intValue()); + + super.onPostExecute(result); + } + + private void updateUI (int newTorStatus) + { + //now update the layout_main UI based on the status if (imgStatus != null) { @@ -877,10 +911,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } - if (torServiceMsg != null && torServiceMsg.length() > 0) + if (mTorServiceMsg != null && mTorServiceMsg.length() > 0) { - appendLogTextAndScroll(torServiceMsg); + appendLogTextAndScroll(mTorServiceMsg); } + SharedPreferences mPrefs = TorServiceUtils.getSharedPrefs(getApplicationContext()); boolean showFirstTime = mPrefs.getBoolean("connect_first_time",true); @@ -916,11 +951,11 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic mItemOnOff.setTitle(R.string.menu_stop); } - if (lblStatus != null && torServiceMsg != null) - if (torServiceMsg.indexOf('%')!=-1) - lblStatus.setText(torServiceMsg); + if (lblStatus != null && mTorServiceMsg != null) + if (mTorServiceMsg.indexOf('%')!=-1) + lblStatus.setText(mTorServiceMsg); - appendLogTextAndScroll(torServiceMsg); + appendLogTextAndScroll(mTorServiceMsg); } @@ -937,14 +972,10 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } torStatus = newTorStatus; - - } - catch (RemoteException e) - { - Log.e(TAG,"remote exception updating status",e); - } + + } } // guess what? this start's Tor! actually no it just requests via the local ITorService to the remote TorService instance @@ -1201,19 +1232,6 @@ public class Orbot extends ActionBarActivity implements TorConstants, OnLongClic } }; - //this is where we bind! - private void bindService () - { - - //since its auto create, we prob don't ever need to call startService - //also we should again be consistent with using either iTorService.class.getName() - //or the variable constant - bindService(mTorService, - mConnection, Context.BIND_AUTO_CREATE); - - - - } //unbind removes the callback, and unbinds the service private void unbindService ()