tor-commits
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2015
- 22 participants
- 1870 discussions

[orbot/master] convert status variable to String for easy sharing in Intents
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit a336a294fbd37739096c1f06a52a147cf19a31cb
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 14:54:38 2015 -0400
convert status variable to String for easy sharing in Intents
Instead of making the apps who receive the broadcasts decipher a number
scheme, send the string of the status. Then it'll be self-documenting.
---
src/org/torproject/android/OrbotMainActivity.java | 4 +--
src/org/torproject/android/service/TorService.java | 26 +++++++-------------
.../android/service/TorServiceConstants.java | 9 ++++---
3 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 786849a..e9c9699 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -87,7 +87,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
private Toolbar mToolbar;
/* Some tracking bits */
- private int torStatus = TorServiceConstants.STATUS_OFF; //latest status reported from the tor service
+ private String torStatus = TorServiceConstants.STATUS_OFF; //latest status reported from the tor service
private SharedPreferences mPrefs = null;
@@ -178,7 +178,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
}
else if (intent.hasExtra("status"))
{
- torStatus = intent.getIntExtra("status", TorServiceConstants.STATUS_OFF);
+ torStatus = intent.getStringExtra("status");
updateStatus("");
}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 195fe98..7a97e70 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -84,7 +84,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
public static boolean ENABLE_DEBUG_LOG = true;
- private int mCurrentStatus = STATUS_OFF;
+ private String mCurrentStatus = STATUS_OFF;
private final static int CONTROL_SOCKET_TIMEOUT = 0;
@@ -223,14 +223,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
-
- public int getTorStatus ()
- {
-
+ public String getTorStatus() {
return mCurrentStatus;
-
}
-
+
private void clearNotifications ()
{
if (mNotificationManager != null)
@@ -1427,7 +1423,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- public void setTorProfile(int newState) {
+ public void setTorProfile(String newState) {
if (newState == STATUS_ON)
{
@@ -2111,17 +2107,13 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- private void sendCallbackStatus (int currentStatus)
- {
-
-
- Intent intent = new Intent("status");
- // You can also include some extra data.
- intent.putExtra("status", currentStatus);
- LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
+ private void sendCallbackStatus(String currentStatus) {
+ Intent intent = new Intent("status"); // TODO rename to proper action
+ // You can also include some extra data.
+ intent.putExtra("status", currentStatus);
+ LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
-
/*
* Another way to do this would be to use the Observer pattern by defining the
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 55ff6c3..29ac47b 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -66,10 +66,11 @@ public interface TorServiceConstants {
//control port
public final static String TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE = "Bootstrapped 100%";
-
- public final static int STATUS_OFF = 0;
- public final static int STATUS_ON = 1;
- public final static int STATUS_CONNECTING = 2;
+
+ public final static String STATUS_OFF = "OFF";
+ public final static String STATUS_ON = "ON";
+ public final static String STATUS_CONNECTING = "CONNECTING";
+ public final static String STATUS_DISCONNECTING = "DISCONNECTING";
public static final int STATUS_MSG = 1;
public static final int ENABLE_TOR_MSG = 2;
1
0

[orbot/master] purge troublesome half-disabled Wizard, rename menu to "Get Apps..."
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit fd23da52372729166fcd4c5d59f4b9fe1ff190c8
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 15:38:22 2015 -0400
purge troublesome half-disabled Wizard, rename menu to "Get Apps..."
When clicking on "Wizard" from the menu, then clicking back, it gets stuck
in a strange back stack purgatory, and then randomly changes the language.
So purge the wizard stuff for now, and add back the parts that are still
needed once that is all figured out.
This also simplifies the refactoring of the Intent handling.
---
AndroidManifest.xml | 3 +-
res/layout/layout_promo_apps.xml | 115 +++++++++
res/layout/layout_wizard.xml | 22 --
res/layout/layout_wizard_locale.xml | 57 -----
res/layout/layout_wizard_tips.xml | 115 ---------
res/menu/orbot_main.xml | 4 +-
res/values/strings.xml | 2 +-
src/org/torproject/android/OrbotMainActivity.java | 39 +--
.../torproject/android/ui/PromoAppsActivity.java | 213 +++++++++++++++
.../ui/wizard/ChooseLocaleWizardActivity.java | 108 --------
.../android/ui/wizard/PromoAppsActivity.java | 270 --------------------
11 files changed, 335 insertions(+), 613 deletions(-)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f95ec15..d7912e5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -81,8 +81,7 @@
/>
- <activity android:name="org.torproject.android.ui.wizard.PromoAppsActivity" android:exported="false"/>
- <activity android:name="org.torproject.android.ui.wizard.ChooseLocaleWizardActivity" android:exported="false"/>
+ <activity android:name="org.torproject.android.ui.PromoAppsActivity" android:exported="false"/>
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
diff --git a/res/layout/layout_promo_apps.xml b/res/layout/layout_promo_apps.xml
new file mode 100644
index 0000000..83ed2d4
--- /dev/null
+++ b/res/layout/layout_promo_apps.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+
+<TableLayout android:id="@+id/TableLayout01" android:stretchColumns="*" android:layout_height="fill_parent" android:layout_width="wrap_content">
+
+<TableRow android:layout_margin="10dip" android:id="@+id/TableRow01" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent">
+
+
+ <ScrollView android:id="@+id/helpscrollview"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_span="3">
+
+<LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#575757"
+ android:orientation="vertical"
+ android:paddingRight="20dip" >
+
+ <TextView
+ android:id="@+id/WizardTextBody1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.31"
+ android:padding="20dip"
+ android:text="@string/wizard_tips_msg"
+ android:textColor="#ffffff"
+ android:textSize="8pt" >
+ </TextView>
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallOrweb"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/icon_orweb"
+ android:text="@string/wizard_tips_orweb" />
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallGibberbot"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/ic_chatsecure"
+ android:text="@string/wizard_tips_gibberbot" />
+
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallDuckgo"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/ic_duckduckgo"
+ android:text="@string/wizard_tips_duckgo" />
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallTwitter"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/ic_twitter"
+ android:text="@string/wizard_tips_twitter" />
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallStoryMaker"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/icon_story_maker"
+ android:text="@string/wizard_tips_story_maker" />
+
+ <Button
+ android:id="@+id/WizardRootButtonInstallMartus"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/icon_martus"
+ android:text="@string/wizard_tips_martus" />
+
+ <Button
+ android:id="@+id/WizardRootButtonGooglePlay"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_marginTop="10px"
+ android:drawableLeft="@drawable/ic_play"
+ android:text="@string/wizard_tips_fdroid_org" />
+
+
+</LinearLayout>
+
+ </ScrollView>
+
+</TableRow>
+<TableRow android:background="#000000" android:layout_marginTop="10dip" android:paddingTop="10dip" android:id="@+id/TableRow02" android:textColor="#00ff00" android:layout_width="fill_parent" android:layout_height="30px">
+ <!-- <Button android:text="@string/btn_back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> -->
+ <Button android:text="@string/btn_okay" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
+</TableRow>
+</TableLayout>
+</LinearLayout>
+
+
diff --git a/res/layout/layout_wizard.xml b/res/layout/layout_wizard.xml
deleted file mode 100644
index 848f744..0000000
--- a/res/layout/layout_wizard.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <ScrollView android:id="@+id/helpscrollview"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:text=""
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textColor="#ffffff" />
- </LinearLayout>
- </ScrollView>
-</LinearLayout>
-
-
\ No newline at end of file
diff --git a/res/layout/layout_wizard_locale.xml b/res/layout/layout_wizard_locale.xml
deleted file mode 100644
index ae3aecb..0000000
--- a/res/layout/layout_wizard_locale.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
-<RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/relativeLayout1"
- android:layout_gravity="center_horizontal"
- android:background="#000000">
- <TextView android:textSize="10pt"
- android:textColor="#FFFFFF"
- android:layout_alignParentTop="true"
- android:layout_height="wrap_content"
- android:id="@+id/WizardLocaleTitle"
- android:layout_width="wrap_content"
- android:fadingEdge="vertical"
- android:text="@string/wizard_locale_title"
- android:singleLine="true"
- android:padding="20px" android:layout_centerInParent="true">
- </TextView>
- </RelativeLayout>
-<TableLayout android:id="@+id/TableLayout01" android:stretchColumns="*" android:layout_height="fill_parent" android:layout_width="wrap_content">
-
-<TableRow android:layout_margin="10dip" android:id="@+id/TableRow01" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent">
-
-
-<LinearLayout
- android:background="#575757"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:padding="3px">
-<TextView android:text="@string/wizard_locale_msg" android:layout_width="wrap_content" android:textColor="#ffffff" android:layout_height="wrap_content" android:textSize="8pt" android:id="@+id/WizardTextBody1" android:padding="20dip"></TextView>
-<ListView
- android:id="@+id/wizard_locale_list"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- >
-</ListView>
-
-
- </LinearLayout>
-
-</TableRow>
-<TableRow android:background="#000000" android:layout_marginTop="10dip" android:paddingTop="10dip" android:id="@+id/TableRow01" android:textColor="#00ff00" android:layout_width="fill_parent" android:layout_height="30px">
- <Button android:text="@string/btn_next" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
-</TableRow>
-</TableLayout>
-</LinearLayout>
-
-
-
diff --git a/res/layout/layout_wizard_tips.xml b/res/layout/layout_wizard_tips.xml
deleted file mode 100644
index 83ed2d4..0000000
--- a/res/layout/layout_wizard_tips.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
-
-
-<TableLayout android:id="@+id/TableLayout01" android:stretchColumns="*" android:layout_height="fill_parent" android:layout_width="wrap_content">
-
-<TableRow android:layout_margin="10dip" android:id="@+id/TableRow01" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent">
-
-
- <ScrollView android:id="@+id/helpscrollview"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_span="3">
-
-<LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#575757"
- android:orientation="vertical"
- android:paddingRight="20dip" >
-
- <TextView
- android:id="@+id/WizardTextBody1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="0.31"
- android:padding="20dip"
- android:text="@string/wizard_tips_msg"
- android:textColor="#ffffff"
- android:textSize="8pt" >
- </TextView>
-
- <Button
- android:id="@+id/WizardRootButtonInstallOrweb"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/icon_orweb"
- android:text="@string/wizard_tips_orweb" />
-
- <Button
- android:id="@+id/WizardRootButtonInstallGibberbot"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/ic_chatsecure"
- android:text="@string/wizard_tips_gibberbot" />
-
-
- <Button
- android:id="@+id/WizardRootButtonInstallDuckgo"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/ic_duckduckgo"
- android:text="@string/wizard_tips_duckgo" />
-
- <Button
- android:id="@+id/WizardRootButtonInstallTwitter"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/ic_twitter"
- android:text="@string/wizard_tips_twitter" />
-
- <Button
- android:id="@+id/WizardRootButtonInstallStoryMaker"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/icon_story_maker"
- android:text="@string/wizard_tips_story_maker" />
-
- <Button
- android:id="@+id/WizardRootButtonInstallMartus"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/icon_martus"
- android:text="@string/wizard_tips_martus" />
-
- <Button
- android:id="@+id/WizardRootButtonGooglePlay"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="left"
- android:layout_marginTop="10px"
- android:drawableLeft="@drawable/ic_play"
- android:text="@string/wizard_tips_fdroid_org" />
-
-
-</LinearLayout>
-
- </ScrollView>
-
-</TableRow>
-<TableRow android:background="#000000" android:layout_marginTop="10dip" android:paddingTop="10dip" android:id="@+id/TableRow02" android:textColor="#00ff00" android:layout_width="fill_parent" android:layout_height="30px">
- <!-- <Button android:text="@string/btn_back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button> -->
- <Button android:text="@string/btn_okay" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
-</TableRow>
-</TableLayout>
-</LinearLayout>
-
-
diff --git a/res/menu/orbot_main.xml b/res/menu/orbot_main.xml
index cff67e9..f37373a 100644
--- a/res/menu/orbot_main.xml
+++ b/res/menu/orbot_main.xml
@@ -57,8 +57,8 @@
-->
- <item android:id="@+id/menu_wizard"
- android:title="@string/menu_wizard"
+ <item android:id="@+id/menu_promo_apps"
+ android:title="@string/menu_promo_apps"
android:icon="@drawable/ic_menu_goto"
yourapp:showAsAction="never"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e5b4cd3..7030a37 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -25,7 +25,7 @@
<string name="menu_start">Start</string>
<string name="menu_stop">Stop</string>
<string name="menu_about">About</string>
- <string name="menu_wizard">Wizard</string>
+ <string name="menu_promo_apps">Get apps…</string>
<string name="main_layout_download">Download</string>
<string name="main_layout_upload">Upload</string>
<string name="button_help">Help</string>
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index e9c9699..15faf31 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -14,8 +14,8 @@ import org.torproject.android.service.TorServiceConstants;
import org.torproject.android.service.TorServiceUtils;
import org.torproject.android.settings.SettingsPreferences;
import org.torproject.android.ui.ImageProgressView;
+import org.torproject.android.ui.PromoAppsActivity;
import org.torproject.android.ui.Rotate3dAnimation;
-import org.torproject.android.ui.wizard.PromoAppsActivity;
import android.annotation.TargetApi;
import android.app.Activity;
@@ -32,7 +32,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Configuration;
import android.net.Uri;
import android.net.VpnService;
import android.os.Build;
@@ -392,7 +391,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
Intent intent = new Intent(OrbotMainActivity.this, SettingsPreferences.class);
startActivityForResult(intent, REQUEST_SETTINGS);
}
- else if (item.getItemId() == R.id.menu_wizard)
+ else if (item.getItemId() == R.id.menu_promo_apps)
{
startActivity(new Intent(OrbotMainActivity.this, PromoAppsActivity.class));
@@ -653,26 +652,6 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
}
}
}
- else
- {
-
- showWizard = mPrefs.getBoolean("show_wizard",showWizard);
-
- //let's not show the wizard now for new users
-
- if (showWizard)
- {
- Editor pEdit = mPrefs.edit();
- pEdit.putBoolean("show_wizard",false);
- pEdit.commit();
- showWizard = false;
-
-
- showAlert(getString(R.string.app_name),getString(R.string.wizard_final_msg),true);
-
- }
-
- }
updateStatus("");
@@ -698,19 +677,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
mBtnBridges.setChecked(true);
enableBridges(true);
- }
-
- private boolean showWizard = true;
-
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- // doLayout();
- //updateStatus("");
- }
-
+ }
/*
* Launch the system activity for Uri viewing with the provided url
diff --git a/src/org/torproject/android/ui/PromoAppsActivity.java b/src/org/torproject/android/ui/PromoAppsActivity.java
new file mode 100644
index 0000000..5d120d3
--- /dev/null
+++ b/src/org/torproject/android/ui/PromoAppsActivity.java
@@ -0,0 +1,213 @@
+package org.torproject.android.ui;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+
+import org.torproject.android.OrbotConstants;
+import org.torproject.android.R;
+import java.util.List;
+
+public class PromoAppsActivity extends Activity implements OrbotConstants {
+
+ final static String MARKET_URI = "market://details?id=";
+ final static String FDROID_APP_URI = "https://f-droid.org/repository/browse/?fdid=";
+ final static String PLAY_APP_URI = "https://play.google.com/store/apps/details?id=";
+ final static String FDROID_URI = "https://f-droid.org/repository/browse/?fdfilter=info.guardianproject";
+ final static String PLAY_URI = "https://play.google.com/store/apps/developer?id=The+Guardian+Project";
+
+ private final static String FDROID_PACKAGE_NAME = "org.fdroid.fdroid";
+ private final static String PLAY_PACKAGE_NAME = "com.android.vending";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ }
+
+ @Override
+ protected void onStart() {
+
+ super.onStart();
+ setContentView(R.layout.layout_promo_apps);
+
+ stepFive();
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+
+ }
+
+ void stepFive(){
+
+
+ String title = getString(R.string.wizard_tips_title);
+
+ setTitle(title);
+
+ Button btnLink = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ finish();
+ startActivity(getInstallIntent("info.guardianproject.otr.app.im"));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonInstallOrweb);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ finish();
+ startActivity(getInstallIntent("info.guardianproject.browser"));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonInstallDuckgo);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+
+ finish();
+ startActivity(getInstallIntent("com.duckduckgo.mobile.android"));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonInstallTwitter);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+
+ String url = getString(R.string.twitter_setup_url);
+ finish();
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonInstallStoryMaker);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ finish();
+ startActivity(getInstallIntent("info.guardianproject.mrapp"));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonInstallMartus);
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ finish();
+ startActivity(getInstallIntent("org.martus.android"));
+
+ }
+ });
+
+ btnLink = (Button)findViewById(R.id.WizardRootButtonGooglePlay);
+ PackageManager pm = getPackageManager();
+ final Intent intent = new Intent(Intent.ACTION_VIEW);
+ // change text and icon based on which app store is installed (or not)
+ try {
+ if (isAppInstalled(pm, FDROID_PACKAGE_NAME)) {
+ Drawable icon = pm.getApplicationIcon(FDROID_PACKAGE_NAME);
+ btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
+ btnLink.setText(R.string.wizard_tips_fdroid);
+ intent.setPackage(FDROID_PACKAGE_NAME);
+ intent.setData(Uri.parse(FDROID_URI));
+ } else if (isAppInstalled(pm, PLAY_PACKAGE_NAME)) {
+ Drawable icon = pm.getApplicationIcon(PLAY_PACKAGE_NAME);
+ btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
+ btnLink.setText(R.string.wizard_tips_play);
+ intent.setPackage(PLAY_PACKAGE_NAME);
+ intent.setData(Uri.parse(PLAY_URI));
+ }
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ btnLink.setText(R.string.wizard_tips_fdroid_org);
+ intent.setData(Uri.parse(FDROID_URI));
+ }
+
+ btnLink.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ startActivity(intent);
+ }
+ });
+
+ Button next = ((Button)findViewById(R.id.btnWizard2));
+ next.setOnClickListener(new View.OnClickListener() {
+
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ }
+
+ boolean isAppInstalled(PackageManager pm, String packageName) {
+ try {
+ pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ Intent getInstallIntent(String packageName) {
+ final Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(MARKET_URI + packageName));
+
+ PackageManager pm = getPackageManager();
+ List<ResolveInfo> resInfos = pm.queryIntentActivities(intent, 0);
+
+ String foundPackageName = null;
+ for (ResolveInfo r : resInfos) {
+ Log.i(TAG, "market: " + r.activityInfo.packageName);
+ if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME)
+ || TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) {
+ foundPackageName = r.activityInfo.packageName;
+ break;
+ }
+ }
+
+ if (foundPackageName == null) {
+ intent.setData(Uri.parse(FDROID_APP_URI + packageName));
+ } else {
+ intent.setPackage(foundPackageName);
+ }
+ return intent;
+ }
+}
diff --git a/src/org/torproject/android/ui/wizard/ChooseLocaleWizardActivity.java b/src/org/torproject/android/ui/wizard/ChooseLocaleWizardActivity.java
deleted file mode 100644
index a804f45..0000000
--- a/src/org/torproject/android/ui/wizard/ChooseLocaleWizardActivity.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.torproject.android.ui.wizard;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.ListView;
-import android.widget.Toast;
-
-import info.guardianproject.util.Languages;
-
-import org.torproject.android.OrbotApp;
-import org.torproject.android.OrbotConstants;
-import org.torproject.android.R;
-import org.torproject.android.service.TorServiceUtils;
-
-import java.util.Locale;
-
-public class ChooseLocaleWizardActivity extends Activity implements OrbotConstants {
-
- private ListView listLocales;
- private String[] localeValues;
-
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.layout_wizard_locale);
-
- listLocales = (ListView)findViewById(R.id.wizard_locale_list);
- Button next = ((Button)findViewById(R.id.btnWizard2));
- // next.setEnabled(false);
-
- Languages languages = OrbotApp.getLanguages(this);
- localeValues = languages.getSupportedLocales();
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, android.R.id.text1,
- languages.getAllNames());
- listLocales.setAdapter(adapter);
-
- listLocales.setSelection(0);
- listLocales.setOnItemClickListener(new OnItemClickListener() {
-
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1,
- int arg2, long arg3) {
-
- setLocalePref(arg2);
- finish();
- startActivity(new Intent(ChooseLocaleWizardActivity.this, PromoAppsActivity.class));
- }
- });
-
- next.setOnClickListener(new View.OnClickListener() {
-
- public void onClick(View v) {
- setLocalePref(0);
- finish();
- startActivity(new Intent(ChooseLocaleWizardActivity.this, PromoAppsActivity.class));
-
- }
- });
- }
-
- private void setLocalePref(int selId)
- {
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
-
- Configuration config = getResources().getConfiguration();
-
- String lang = localeValues[selId];
-
- Editor pEdit = prefs.edit();
- pEdit.putString(PREF_DEFAULT_LOCALE, lang);
- pEdit.commit();
- Locale locale = null;
-
- if (lang.equals("xx"))
- {
- locale = Locale.getDefault();
-
- }
- else
- locale = new Locale(lang);
-
- Locale.setDefault(locale);
- config.locale = locale;
- getResources().updateConfiguration(config, getResources().getDisplayMetrics());
- }
-
- //Code to override the back button!
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode == KeyEvent.KEYCODE_BACK){
- Toast.makeText(getApplicationContext(), R.string.wizard_exit_at_first_screen_toast, Toast.LENGTH_SHORT).show();
- return true;
- }
- return false;
- }
-}
\ No newline at end of file
diff --git a/src/org/torproject/android/ui/wizard/PromoAppsActivity.java b/src/org/torproject/android/ui/wizard/PromoAppsActivity.java
deleted file mode 100644
index 048528f..0000000
--- a/src/org/torproject/android/ui/wizard/PromoAppsActivity.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package org.torproject.android.ui.wizard;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-import org.torproject.android.OrbotConstants;
-import org.torproject.android.R;
-
-import java.util.List;
-
-public class PromoAppsActivity extends Activity implements OrbotConstants {
-
- final static String MARKET_URI = "market://details?id=";
- final static String FDROID_APP_URI = "https://f-droid.org/repository/browse/?fdid=";
- final static String PLAY_APP_URI = "https://play.google.com/store/apps/details?id=";
- final static String FDROID_URI = "https://f-droid.org/repository/browse/?fdfilter=info.guardianproject";
- final static String PLAY_URI = "https://play.google.com/store/apps/developer?id=The+Guardian+Project";
-
- private final static String FDROID_PACKAGE_NAME = "org.fdroid.fdroid";
- private final static String PLAY_PACKAGE_NAME = "com.android.vending";
-
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
-
- }
-
- @Override
- protected void onStart() {
-
- super.onStart();
- setContentView(R.layout.layout_wizard_tips);
-
- stepFive();
-
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
-
- }
-
- void stepFive(){
-
-
- String title = getString(R.string.wizard_tips_title);
-
- setTitle(title);
-
- Button btnLink = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- finish();
- startActivity(getInstallIntent("info.guardianproject.otr.app.im"));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonInstallOrweb);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- finish();
- startActivity(getInstallIntent("info.guardianproject.browser"));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonInstallDuckgo);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
-
- finish();
- startActivity(getInstallIntent("com.duckduckgo.mobile.android"));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonInstallTwitter);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
-
- String url = getString(R.string.twitter_setup_url);
- finish();
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonInstallStoryMaker);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- finish();
- startActivity(getInstallIntent("info.guardianproject.mrapp"));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonInstallMartus);
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- finish();
- startActivity(getInstallIntent("org.martus.android"));
-
- }
- });
-
- btnLink = (Button)findViewById(R.id.WizardRootButtonGooglePlay);
- PackageManager pm = getPackageManager();
- final Intent intent = new Intent(Intent.ACTION_VIEW);
- // change text and icon based on which app store is installed (or not)
- try {
- if (isAppInstalled(pm, FDROID_PACKAGE_NAME)) {
- Drawable icon = pm.getApplicationIcon(FDROID_PACKAGE_NAME);
- btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
- btnLink.setText(R.string.wizard_tips_fdroid);
- intent.setPackage(FDROID_PACKAGE_NAME);
- intent.setData(Uri.parse(FDROID_URI));
- } else if (isAppInstalled(pm, PLAY_PACKAGE_NAME)) {
- Drawable icon = pm.getApplicationIcon(PLAY_PACKAGE_NAME);
- btnLink.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
- btnLink.setText(R.string.wizard_tips_play);
- intent.setPackage(PLAY_PACKAGE_NAME);
- intent.setData(Uri.parse(PLAY_URI));
- }
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- btnLink.setText(R.string.wizard_tips_fdroid_org);
- intent.setData(Uri.parse(FDROID_URI));
- }
-
- btnLink.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- startActivity(intent);
- }
- });
-
-
- // Button back = ((Button)findViewById(R.id.btnWizard1));
- Button next = ((Button)findViewById(R.id.btnWizard2));
-
- /*
- back.setOnClickListener(new View.OnClickListener() {
-
- public void onClick(View v) {
- finish();
- startActivityForResult(new Intent(PromoAppsActivity.this, ChooseLocaleWizardActivity.class), 1);
- }
- });*/
-
- next.setOnClickListener(new View.OnClickListener() {
-
- public void onClick(View v) {
- //showWizardFinal();
-
- finish();
- }
- });
-
- }
-
-
-
- //Code to override the back button!
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode == KeyEvent.KEYCODE_BACK){
- finish();
- startActivity(new Intent(getBaseContext(), ChooseLocaleWizardActivity.class));
- return true;
- }
- return false;
- }
-
- boolean isAppInstalled(PackageManager pm, String packageName) {
- try {
- pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
- return true;
- } catch (PackageManager.NameNotFoundException e) {
- return false;
- }
- }
-
- Intent getInstallIntent(String packageName) {
- final Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse(MARKET_URI + packageName));
-
- PackageManager pm = getPackageManager();
- List<ResolveInfo> resInfos = pm.queryIntentActivities(intent, 0);
-
- String foundPackageName = null;
- for (ResolveInfo r : resInfos) {
- Log.i(TAG, "market: " + r.activityInfo.packageName);
- if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME)
- || TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) {
- foundPackageName = r.activityInfo.packageName;
- break;
- }
- }
-
- if (foundPackageName == null) {
- intent.setData(Uri.parse(FDROID_APP_URI + packageName));
- } else {
- intent.setPackage(foundPackageName);
- }
- return intent;
- }
-
- /*
- private void showWizardFinal ()
- {
- String title = null;
- String msg = null;
-
-
- title = context.getString(R.string.wizard_final);
- msg = context.getString(R.string.wizard_final_msg);
-
- DialogInterface.OnClickListener ocListener = new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- context.startActivity(new Intent(context, Orbot.class));
-
- }
- };
-
-
- new AlertDialog.Builder(context)
- .setIcon(R.drawable.icon)
- .setTitle(title)
- .setPositiveButton(R.string.button_close, ocListener)
- .setMessage(msg)
- .show();
- }*/
-}
1
0

[orbot/master] purge CMD_INIT/initialize() from TorService, an IntentService doesn't need it
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit ae83f011b24f4725c9443b75b4b7f7f26ac2f9e6
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 20:22:03 2015 -0400
purge CMD_INIT/initialize() from TorService, an IntentService doesn't need it
when switching to an IntentService, a new Intent will always start the
Service, and onCreate() can be used to initialize the Service.
---
src/org/torproject/android/OrbotMainActivity.java | 10 ----------
src/org/torproject/android/service/OnBootReceiver.java | 3 ---
src/org/torproject/android/service/TorService.java | 8 --------
src/org/torproject/android/service/TorServiceConstants.java | 1 -
4 files changed, 22 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index fa17655..2f1e67a 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -113,16 +113,6 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
-
- mHandler.postDelayed(new Runnable ()
- {
-
- public void run ()
- {
- startService(TorServiceConstants.CMD_INIT);
- }
- },INIT_DELAY);
-
}
diff --git a/src/org/torproject/android/service/OnBootReceiver.java b/src/org/torproject/android/service/OnBootReceiver.java
index a97091e..bc667b2 100644
--- a/src/org/torproject/android/service/OnBootReceiver.java
+++ b/src/org/torproject/android/service/OnBootReceiver.java
@@ -20,13 +20,10 @@ public class OnBootReceiver extends BroadcastReceiver {
if (startOnBoot)
{
-
- startService(TorServiceConstants.CMD_INIT,context);
startService(TorServiceConstants.CMD_START,context);
if (useVPN)
startVpnService(context);
-
}
}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 012bbef..4e23e72 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -375,9 +375,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
setTorProfile(STATUS_ON);
}else if (action.equals(CMD_STOP)){
setTorProfile(STATUS_OFF);
- }else if (action.equals(CMD_INIT)){
- initialize();
- sendCallbackStatus(mCurrentStatus);
}else if (action.equals(CMD_NEWNYM)){
newIdentity();
}else if (action.equals(CMD_FLUSH)){
@@ -623,11 +620,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
@Override
public void onCreate() {
super.onCreate();
- initialize();
- }
-
- private void initialize()
- {
try
{
mNumberFormat = NumberFormat.getInstance(Locale.getDefault()); //localized numbers!
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index a269ef0..2a23895 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -87,7 +87,6 @@ public interface TorServiceConstants {
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_INIT = "init";
public static final String CMD_VPN = "vpn";
public static final String CMD_VPN_CLEAR = "vpnclear";
public static final String CMD_UPDATE = "update";
1
0

[orbot/master] handle logging native process Exceptions closer to the source
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit 12d92f48f5f43ccb80da63698765478df46eb46e
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 20:42:18 2015 -0400
handle logging native process Exceptions closer to the source
Instead of passing Exceptions through many layers only to log them, just
log them where they are thrown. Keeps things neater.
---
src/org/torproject/android/service/TorService.java | 70 +++++++++-----------
.../torproject/android/service/TorTransProxy.java | 20 +++---
2 files changed, 40 insertions(+), 50 deletions(-)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 4e23e72..23801f3 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -348,11 +348,12 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
* @see android.app.Service#onStart(android.content.Intent, int)
*/
public int onStartCommand(Intent intent, int flags, int startId) {
+ if (intent != null)
+ new Thread (new TorStarter(intent)).start();
+ else
+ Log.d(TAG, "Got null onStartCommand() intent");
- new Thread (new TorStarter(intent)).start();
-
return Service.START_STICKY;
-
}
private class TorStarter implements Runnable
@@ -364,36 +365,27 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
mIntent = intent;
}
- public void run (){
- try{
- //if this is a start on boot launch turn tor on
- if (mIntent != null){
- String action = mIntent.getAction();
-
- if (action!=null){
- if(action.equals(Intent.ACTION_BOOT_COMPLETED)||action.equals(CMD_START)){
- setTorProfile(STATUS_ON);
- }else if (action.equals(CMD_STOP)){
- setTorProfile(STATUS_OFF);
- }else if (action.equals(CMD_NEWNYM)){
- newIdentity();
- }else if (action.equals(CMD_FLUSH)){
- flushTransparentProxyRules();
- }else if (action.equals(CMD_UPDATE)){
- processSettings();
- }else if (action.equals(CMD_VPN)){
- enableVpnProxy();
- }
- else if (action.equals(CMD_VPN_CLEAR)){
- clearVpnProxy();
- }
- }
- }else{
- Log.d(TAG, "Got null onStartCommand() intent");
+ public void run() {
+ String action = mIntent.getAction();
+
+ if (action != null) {
+ if (action.equals(Intent.ACTION_BOOT_COMPLETED) || action.equals(CMD_START)) {
+ setTorProfile(STATUS_ON);
+ } else if (action.equals(CMD_STOP)) {
+ setTorProfile(STATUS_OFF);
+ } else if (action.equals(CMD_NEWNYM)) {
+ newIdentity();
+ } else if (action.equals(CMD_FLUSH)) {
+ flushTransparentProxyRules();
+ } else if (action.equals(CMD_UPDATE)) {
+ processSettings();
+ } else if (action.equals(CMD_VPN)) {
+ enableVpnProxy();
+ } else if (action.equals(CMD_VPN_CLEAR)) {
+ clearVpnProxy();
+ } else {
+ Log.w(TAG, "unhandled TorService Intent: " + action);
}
-
- }catch (Exception e){
- Log.e(TAG,"error onBind",e);
}
}
}
@@ -879,18 +871,18 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
shellUser.close();
}
- private boolean flushTransparentProxyRules () throws Exception
- {
-
+ private boolean flushTransparentProxyRules () {
if (mHasRoot)
{
if (mTransProxy == null)
- {
mTransProxy = new TorTransProxy(this, fileXtables);
-
+
+ try {
+ mTransProxy.flushTransproxyRules(this);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
}
-
- mTransProxy.flushTransproxyRules(this);
return true;
}
diff --git a/src/org/torproject/android/service/TorTransProxy.java b/src/org/torproject/android/service/TorTransProxy.java
index 89663fb..d63abb2 100644
--- a/src/org/torproject/android/service/TorTransProxy.java
+++ b/src/org/torproject/android/service/TorTransProxy.java
@@ -3,8 +3,6 @@ package org.torproject.android.service;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.concurrent.TimeoutException;
-
import org.sufficientlysecure.rootcommands.Shell;
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
import org.torproject.android.OrbotConstants;
@@ -12,7 +10,6 @@ import org.torproject.android.settings.TorifiedApp;
import android.content.Context;
import android.content.SharedPreferences;
-import android.util.Log;
public class TorTransProxy implements TorServiceConstants {
@@ -335,7 +332,7 @@ public class TorTransProxy implements TorServiceConstants {
return code;
}*/
- public int setTransparentProxyingByApp(Context context, ArrayList<TorifiedApp> apps, boolean enableRule, Shell shell) throws Exception
+ public int setTransparentProxyingByApp(Context context, ArrayList<TorifiedApp> apps, boolean enableRule, Shell shell)
{
String ipTablesPath = getIpTablesPath(context);
@@ -439,10 +436,13 @@ public class TorTransProxy implements TorServiceConstants {
return lastExit;
}
- private int executeCommand (Shell shell, String cmdString) throws IOException, TimeoutException
- {
+ private int executeCommand (Shell shell, String cmdString) {
SimpleCommand cmd = new SimpleCommand(cmdString);
- shell.add(cmd);
+ try {
+ shell.add(cmd);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
int exitCode = cmd.getExitCode();
String output = cmd.getOutput();
@@ -524,8 +524,7 @@ public class TorTransProxy implements TorServiceConstants {
}
- public int dropAllIPv6Traffic (Context context, int appUid, boolean enableDrop, Shell shell) throws Exception
- {
+ public int dropAllIPv6Traffic (Context context, int appUid, boolean enableDrop, Shell shell) {
String action = " -A ";
String chain = "OUTPUT";
@@ -575,8 +574,7 @@ public class TorTransProxy implements TorServiceConstants {
return lastExit;
}*/
- public int flushTransproxyRules (Context context) throws Exception
- {
+ public int flushTransproxyRules (Context context) throws IOException {
int exit = -1;
String ipTablesPath = getIpTablesPath(context);
1
0

[orbot/master] rework killing all daemons to continue trying after a failure
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit 2bc85a4a3a8e260ab62b7378a933ca37ff6fffac
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 23:38:56 2015 -0400
rework killing all daemons to continue trying after a failure
Before, it would quit the process on the first exception while killing.
This makes it keep on trying each daemon.
---
src/org/torproject/android/service/TorService.java | 50 +++++++++++++-------
1 file changed, 34 insertions(+), 16 deletions(-)
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 599d8c8..26a7df8 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -399,7 +399,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
Log.d(TAG,"Tor is stopping NOW");
- shutdownTorProcess ();
+ killAllDaemons ();
//stop the foreground priority and make sure to remove the persistant notification
stopForeground(true);
@@ -505,31 +505,49 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- private void shutdownTorProcess () throws Exception
- {
-
- if (conn != null)
- {
-
+ private void killAllDaemons() throws CannotKillException {
+ if (conn != null) {
logNotice("Using control port to shutdown Tor");
-
try {
logNotice("sending HALT signal to Tor process");
conn.shutdownTor("HALT");
- } catch (Exception e) {
- Log.d(TAG,"error shutting down Tor via connection",e);
+ } catch (IOException e) {
+ Log.d(TAG, "error shutting down Tor via connection", e);
}
conn = null;
}
- killProcess(fileTor);
-
- killProcess(filePolipo);
- killProcess(fileObfsclient);
- killProcess(fileMeekclient);
+ // try these separately in case one fails, then it can try the next
+ File cannotKillFile = null;
+ try {
+ killProcess(fileObfsclient);
+ } catch (IOException e) {
+ e.printStackTrace();
+ cannotKillFile = fileObfsclient;
+ }
+ try {
+ killProcess(fileMeekclient);
+ } catch (IOException e) {
+ e.printStackTrace();
+ cannotKillFile = fileMeekclient;
+ }
+ try {
+ killProcess(filePolipo);
+ } catch (IOException e) {
+ e.printStackTrace();
+ cannotKillFile = filePolipo;
+ }
+ try {
+ killProcess(fileTor);
+ } catch (IOException e) {
+ e.printStackTrace();
+ cannotKillFile = fileTor;
+ }
+ if (cannotKillFile != null)
+ throw new CannotKillException(cannotKillFile);
}
public class CannotKillException extends IllegalStateException {
@@ -540,7 +558,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
}
- private void killProcess(File fileProcBin) throws IOException {
+ private void killProcess(File fileProcBin) throws IOException, CannotKillException {
int procId = -1;
int killAttempts = 0;
1
0

[orbot/master] create String constants for Intent actions and extras
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit f09379d86c3c529e77b057627a34577208d35e7b
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 20:04:29 2015 -0400
create String constants for Intent actions and extras
Following the Android system naming convention, this uses constants for
the action and extra names for Intents. This makes it much easier to track
which "log" is which, since there are "log" actions, extras, and messages.
---
src/org/torproject/android/OrbotMainActivity.java | 20 ++++++++++----------
src/org/torproject/android/service/TorService.java | 12 +++++-------
.../android/service/TorServiceConstants.java | 6 ++++++
.../torproject/android/ui/OrbotLogActivity.java | 7 ++++---
4 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 15faf31..fa17655 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -105,14 +105,14 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
doLayout();
- // Register to receive messages.
- // We are registering an observer (mMessageReceiver) to receive Intents
- // with actions named "custom-event-name".
- LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
- new IntentFilter("status"));
+ /* receive the internal status broadcasts, which are separate from the public
+ * status broadcasts to prevent other apps from sending fake/wrong status
+ * info to this app */
+ LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_STATUS));
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
- new IntentFilter("log"));
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
mHandler.postDelayed(new Runnable ()
{
@@ -155,9 +155,9 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
- if (intent.hasExtra("log"))
+ if (intent.hasExtra(TorServiceConstants.LOCAL_EXTRA_LOG))
{
- String log = intent.getStringExtra("log");
+ String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
updateStatus(log);
}
else if (intent.hasExtra("up"))
@@ -175,9 +175,9 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
mHandler.sendMessage(msg);
}
- else if (intent.hasExtra("status"))
+ else if (intent.hasExtra(TorServiceConstants.EXTRA_STATUS))
{
- torStatus = intent.getStringExtra("status");
+ torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
updateStatus("");
}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 7a97e70..012bbef 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -2083,7 +2083,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
- Intent intent = new Intent("log");
+ Intent intent = new Intent(LOCAL_ACTION_LOG);
// You can also include some extra data.
intent.putExtra("up",upload);
intent.putExtra("down",download);
@@ -2100,19 +2100,17 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
- Intent intent = new Intent("log");
+ Intent intent = new Intent(LOCAL_ACTION_LOG);
// You can also include some extra data.
- intent.putExtra("log", logMessage);
+ intent.putExtra(LOCAL_EXTRA_LOG, logMessage);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
private void sendCallbackStatus(String currentStatus) {
- Intent intent = new Intent("status"); // TODO rename to proper action
- // You can also include some extra data.
- intent.putExtra("status", currentStatus);
+ Intent intent = new Intent(ACTION_STATUS);
+ intent.putExtra(EXTRA_STATUS, currentStatus);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
-
}
/*
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 29ac47b..a269ef0 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -67,6 +67,12 @@ public interface TorServiceConstants {
//control port
public final static String TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE = "Bootstrapped 100%";
+ public final static String ACTION_STATUS = "org.torproject.android.intent.action.STATUS";
+ public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
+ public final static String LOCAL_ACTION_STATUS = "status";
+ public final static String LOCAL_ACTION_LOG = "log";
+ public final static String LOCAL_EXTRA_LOG = "log";
+
public final static String STATUS_OFF = "OFF";
public final static String STATUS_ON = "ON";
public final static String STATUS_CONNECTING = "CONNECTING";
diff --git a/src/org/torproject/android/ui/OrbotLogActivity.java b/src/org/torproject/android/ui/OrbotLogActivity.java
index 4a24d3f..fbf05d2 100644
--- a/src/org/torproject/android/ui/OrbotLogActivity.java
+++ b/src/org/torproject/android/ui/OrbotLogActivity.java
@@ -4,6 +4,7 @@
package org.torproject.android.ui;
import org.torproject.android.OrbotConstants;
+import org.torproject.android.service.TorServiceConstants;
import android.app.Activity;
import android.content.BroadcastReceiver;
@@ -23,7 +24,7 @@ public class OrbotLogActivity extends Activity implements OrbotConstants
doLayout();
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
- new IntentFilter("log"));
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
}
@@ -38,9 +39,9 @@ public class OrbotLogActivity extends Activity implements OrbotConstants
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
- if (intent.hasExtra("log"))
+ if (intent.hasExtra(TorServiceConstants.LOCAL_EXTRA_LOG))
{
- String log = intent.getStringExtra("log");
+ String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
updateStatus(log);
}
1
0

[orbot/master] make prefs called directly when needed instead of requiring refresh
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit a3d37e8b2a3d7da43188ca54bd471d209f38bc02
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 22:57:42 2015 -0400
make prefs called directly when needed instead of requiring refresh
The code was using global variables that were refreshed from the prefs on
certain occasions. That means that the global vars could easily get out of
sync with the actual values. Instead, just read the prefs directly when
the values are needed, and they will always be up-to-date.
---
src/org/torproject/android/OrbotApp.java | 16 +--
src/org/torproject/android/OrbotConstants.java | 13 --
src/org/torproject/android/OrbotMainActivity.java | 62 +++------
src/org/torproject/android/Prefs.java | 116 ++++++++++++++++
.../torproject/android/service/OnBootReceiver.java | 15 +--
src/org/torproject/android/service/TorService.java | 141 ++++++--------------
.../android/service/TorServiceConstants.java | 2 +-
.../torproject/android/service/TorTransProxy.java | 16 +--
8 files changed, 191 insertions(+), 190 deletions(-)
diff --git a/src/org/torproject/android/OrbotApp.java b/src/org/torproject/android/OrbotApp.java
index 070d7d7..c6f4797 100644
--- a/src/org/torproject/android/OrbotApp.java
+++ b/src/org/torproject/android/OrbotApp.java
@@ -5,8 +5,6 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
import android.content.res.Configuration;
import android.os.Build;
import android.text.TextUtils;
@@ -14,29 +12,26 @@ import android.util.Log;
import info.guardianproject.util.Languages;
-import org.torproject.android.service.TorServiceUtils;
-
import java.util.Locale;
public class OrbotApp extends Application implements OrbotConstants
{
private Locale locale;
- private SharedPreferences prefs;
@Override
public void onCreate() {
super.onCreate();
+ Prefs.setContext(this);
- prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- setNewLocale(prefs.getString(PREF_DEFAULT_LOCALE, Locale.getDefault().getLanguage()));
+ setNewLocale(Prefs.getDefaultLocale());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(TAG, "onConfigurationChanged " + newConfig.locale.getLanguage());
- setNewLocale(prefs.getString(PREF_DEFAULT_LOCALE, Locale.getDefault().getLanguage()));
+ setNewLocale(Prefs.getDefaultLocale());
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@@ -65,10 +60,7 @@ public class OrbotApp extends Application implements OrbotConstants
* wrong. If setting the locale causes an Exception, it should be set in
* the preferences, otherwise ChatSecure will be stuck in a crash loop.
*/
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(this);
- Editor prefEdit = prefs.edit();
- prefEdit.putString(PREF_DEFAULT_LOCALE, language);
- prefEdit.apply();
+ Prefs.setDefaultLocale(language);
Log.i(TAG, "setNewLocale complete: locale: " + locale.getLanguage()
+ " Locale.getDefault: " + Locale.getDefault().getLanguage());
}
diff --git a/src/org/torproject/android/OrbotConstants.java b/src/org/torproject/android/OrbotConstants.java
index f1521e8..373ff3f 100644
--- a/src/org/torproject/android/OrbotConstants.java
+++ b/src/org/torproject/android/OrbotConstants.java
@@ -6,7 +6,6 @@ package org.torproject.android;
public interface OrbotConstants {
public final static String TAG = "Orbot";
-
public final static String PREFS_KEY = "OrbotPrefs";
public final static String PREFS_KEY_TORIFIED = "PrefTord";
@@ -22,27 +21,15 @@ public interface OrbotConstants {
public final static String HANDLER_TOR_MSG = "torServiceMsg";
- public final static String PREF_BRIDGES_ENABLED = "pref_bridges_enabled";
public final static String PREF_BRIDGES_UPDATED = "pref_bridges_enabled";
- public final static String PREF_BRIDGES_LIST = "pref_bridges_list";
//public final static String PREF_BRIDGES_OBFUSCATED = "pref_bridges_obfuscated";
public final static String PREF_OR = "pref_or";
public final static String PREF_OR_PORT = "pref_or_port";
public final static String PREF_OR_NICKNAME = "pref_or_nickname";
public final static String PREF_REACHABLE_ADDRESSES = "pref_reachable_addresses";
public final static String PREF_REACHABLE_ADDRESSES_PORTS = "pref_reachable_addresses_ports";
- public final static String PREF_TRANSPARENT = "pref_transparent";
- public final static String PREF_TRANSPARENT_ALL = "pref_transparent_all";
-
- public final static String PREF_HAS_ROOT = "has_root";
public final static int RESULT_CLOSE_ALL = 0;
- public final static String PREF_USE_SYSTEM_IPTABLES = "pref_use_sys_iptables";
-
- public final static String PREF_PERSIST_NOTIFICATIONS = "pref_persistent_notifications";
-
- public final static String PREF_DEFAULT_LOCALE = "pref_default_locale";
-
public final static String PREF_DISABLE_NETWORK = "pref_disable_network";
public final static String PREF_TOR_SHARED_PREFS = "org.torproject.android_preferences";
diff --git a/src/org/torproject/android/OrbotMainActivity.java b/src/org/torproject/android/OrbotMainActivity.java
index 2f1e67a..b68c9aa 100644
--- a/src/org/torproject/android/OrbotMainActivity.java
+++ b/src/org/torproject/android/OrbotMainActivity.java
@@ -92,14 +92,13 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
private boolean autoStartFromIntent = false;
- private final static long INIT_DELAY = 100;
private final static int REQUEST_VPN = 8888;
private final static int REQUEST_SETTINGS = 0x9874;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
+
mPrefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
mPrefs.registerOnSharedPreferenceChangeListener(this);
@@ -238,7 +237,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
mBtnVPN = (ToggleButton)findViewById(R.id.btnVPN);
- boolean useVPN = mPrefs.getBoolean("pref_vpn", false);
+ boolean useVPN = Prefs.useVpn();
mBtnVPN.setChecked(useVPN);
if (useVPN)
@@ -262,12 +261,8 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
});
- mBtnBridges = (ToggleButton)findViewById(R.id.btnBridges);
- boolean useBridges = mPrefs.getBoolean("pref_bridges_enabled", false);
- mBtnBridges.setChecked(useBridges);
-
-
-
+ mBtnBridges = (ToggleButton)findViewById(R.id.btnBridges);
+ mBtnBridges.setChecked(Prefs.bridgesEnabled());
mBtnBridges.setOnClickListener(new View.OnClickListener ()
{
@@ -407,7 +402,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
else if (item.getItemId() == R.id.menu_share_bridge)
{
- String bridges = mPrefs.getString(OrbotConstants.PREF_BRIDGES_LIST, null);
+ String bridges = Prefs.getBridgesList();
if (bridges != null && bridges.length() > 0)
{
@@ -655,12 +650,8 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
showAlert(getString(R.string.bridges_updated),getString(R.string.restart_orbot_to_use_this_bridge_) + newBridgeValue,false);
- Editor pEdit = mPrefs.edit();
-
- pEdit.putString(OrbotConstants.PREF_BRIDGES_LIST,newBridgeValue); //set the string to a preference
- pEdit.putBoolean(OrbotConstants.PREF_BRIDGES_ENABLED,true);
-
- pEdit.commit();
+ Prefs.setBridgesList(newBridgeValue); //set the string to a preference
+ Prefs.putBridgesEnabled(true);
setResult(RESULT_OK);
@@ -675,7 +666,6 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
private void openBrowser(final String browserLaunchUrl,boolean forceExternal)
{
boolean isOrwebInstalled = appInstalledOrNot("info.guardianproject.browser");
- boolean isTransProxy = mPrefs.getBoolean("pref_transparent", false);
if (mBtnVPN.isChecked()||forceExternal)
{
@@ -684,7 +674,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
- else if (isTransProxy)
+ else if (Prefs.useTransparentProxying())
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -793,7 +783,7 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
}
else if (torStatus == TorServiceConstants.STATUS_ON)
{
- updateSettings();
+ updateTransProxy();
Toast.makeText(this, R.string.you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_, Toast.LENGTH_SHORT).show();
}
@@ -867,17 +857,17 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
break;
case 3: //azure
- mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"2").commit();
+ Prefs.setBridgesList("2");
enableBridges(true);
break;
case 4: //amazon
- mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"1").commit();
+ Prefs.setBridgesList("1");
enableBridges(true);
break;
case 5: //google
- mPrefs.edit().putString(OrbotConstants.PREF_BRIDGES_LIST,"0").commit();
+ Prefs.setBridgesList("0");
enableBridges(true);
break;
@@ -974,24 +964,17 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
private void enableBridges (boolean enable)
{
+ Prefs.putBridgesEnabled(enable);
- Editor edit = mPrefs.edit();
- edit.putBoolean(OrbotConstants.PREF_BRIDGES_ENABLED, enable);
- edit.commit();
-
- updateSettings();
-
if (torStatus == TorServiceConstants.STATUS_ON)
{
- String bridgeList = mPrefs.getString(OrbotConstants.PREF_BRIDGES_LIST,null);
+ String bridgeList = Prefs.getBridgesList();
if (bridgeList != null && bridgeList.length() > 0)
{
restartTor ();
}
}
-
-
}
private void restartTor ()
@@ -1038,11 +1021,8 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
@Override
public void onClick(DialogInterface dialog, int which) {
-
- mPrefs.edit().putBoolean("pref_vpn", true).commit();
-
+ Prefs.putUseVpn(true);
startVpnService();
-
}
@@ -1090,10 +1070,9 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
return true;
}
- private boolean updateSettings ()
+ private boolean updateTransProxy ()
{
- //todo send service command
- startService(TorServiceConstants.CMD_UPDATE);
+ startService(TorServiceConstants.CMD_UPDATE_TRANS_PROXY);
return true;
}
@@ -1103,11 +1082,8 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
if (mPrefs != null)
{
- boolean useVPN = mPrefs.getBoolean("pref_vpn", false);
- mBtnVPN.setChecked(useVPN);
-
- boolean useBridges = mPrefs.getBoolean("pref_bridges_enabled", false);
- mBtnBridges.setChecked(useBridges);
+ mBtnVPN.setChecked(Prefs.useVpn());
+ mBtnBridges.setChecked(Prefs.bridgesEnabled());
}
mHandler.postDelayed(new Runnable ()
diff --git a/src/org/torproject/android/Prefs.java b/src/org/torproject/android/Prefs.java
new file mode 100644
index 0000000..b1b1793
--- /dev/null
+++ b/src/org/torproject/android/Prefs.java
@@ -0,0 +1,116 @@
+
+package org.torproject.android;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import org.torproject.android.service.TorServiceUtils;
+
+import java.util.Locale;
+
+public class Prefs {
+ private final static String PREF_BRIDGES_ENABLED = "pref_bridges_enabled";
+ private final static String PREF_BRIDGES_LIST = "pref_bridges_list";
+ private final static String PREF_DEFAULT_LOCALE = "pref_default_locale";
+ private final static String PREF_ENABLE_LOGGING = "pref_enable_logging";
+ private final static String PREF_EXPANDED_NOTIFICATIONS = "pref_expanded_notifications";
+ private final static String PREF_HAS_ROOT = "has_root";
+ private final static String PREF_PERSIST_NOTIFICATIONS = "pref_persistent_notifications";
+ private final static String PREF_START_ON_BOOT = "pref_start_boot";
+ private final static String PREF_TRANSPARENT = "pref_transparent";
+ private final static String PREF_TRANSPARENT_ALL = "pref_transparent_all";
+ private final static String PREF_TRANSPARENT_TETHERING = "pref_transparent_tethering";
+ private final static String PREF_TRANSPROXY_REFRESH = "pref_transproxy_refresh";
+ private final static String PREF_USE_SYSTEM_IPTABLES = "pref_use_sys_iptables";
+ private final static String PREF_USE_VPN = "pref_vpn";
+
+ private static SharedPreferences prefs;
+
+ public static void setContext(Context context) {
+ if (prefs == null)
+ prefs = TorServiceUtils.getSharedPrefs(context);
+ }
+
+ private static void putBoolean(String key, boolean value) {
+ prefs.edit().putBoolean(key, value).apply();
+ }
+
+ private static void putString(String key, String value) {
+ prefs.edit().putString(key, value).apply();
+ }
+
+ public static boolean bridgesEnabled() {
+ return prefs.getBoolean(PREF_BRIDGES_ENABLED, false);
+ }
+
+ public static void putBridgesEnabled(boolean value) {
+ putBoolean(PREF_BRIDGES_ENABLED, value);
+ }
+
+ public static String getBridgesList() {
+ return prefs.getString(PREF_BRIDGES_LIST, "");
+ }
+
+ public static void setBridgesList(String value) {
+ putString(PREF_BRIDGES_LIST, value);
+ }
+
+ public static String getDefaultLocale() {
+ return prefs.getString(PREF_DEFAULT_LOCALE, Locale.getDefault().getLanguage());
+ }
+
+ public static void setDefaultLocale(String value) {
+ putString(PREF_DEFAULT_LOCALE, value);
+ }
+
+ public static boolean useSystemIpTables() {
+ return prefs.getBoolean(PREF_USE_SYSTEM_IPTABLES, false);
+ }
+
+ public static boolean useRoot() {
+ return prefs.getBoolean(PREF_HAS_ROOT, false);
+ }
+
+ public static boolean useTransparentProxying() {
+ return prefs.getBoolean(PREF_TRANSPARENT, false);
+ }
+
+ public static boolean transparentProxyAll() {
+ return prefs.getBoolean(PREF_TRANSPARENT_ALL, false);
+ }
+
+ public static boolean transparentTethering() {
+ return prefs.getBoolean(PREF_TRANSPARENT_TETHERING, false);
+ }
+
+ public static boolean transProxyNetworkRefresh() {
+ return prefs.getBoolean(PREF_TRANSPROXY_REFRESH, false);
+ }
+
+ public static boolean expandedNotifications() {
+ return prefs.getBoolean(PREF_EXPANDED_NOTIFICATIONS, false);
+ }
+
+ public static boolean useDebugLogging() {
+ return prefs.getBoolean(PREF_ENABLE_LOGGING, false);
+ }
+
+ public static boolean persistNotifications() {
+ return prefs.getBoolean(PREF_PERSIST_NOTIFICATIONS, true);
+ }
+
+ public static boolean useVpn() {
+ return prefs.getBoolean(PREF_USE_VPN, false);
+ }
+
+ public static void putUseVpn(boolean value) {
+ putBoolean(PREF_USE_VPN, value);
+ }
+
+ public static boolean startOnBoot() {
+ return prefs.getBoolean(PREF_START_ON_BOOT, true);
+ }
+
+ public static void putStartOnBoot(boolean value) {
+ putBoolean(PREF_START_ON_BOOT, value);
+ }
+}
diff --git a/src/org/torproject/android/service/OnBootReceiver.java b/src/org/torproject/android/service/OnBootReceiver.java
index bc667b2..49c4ab8 100644
--- a/src/org/torproject/android/service/OnBootReceiver.java
+++ b/src/org/torproject/android/service/OnBootReceiver.java
@@ -5,27 +5,22 @@ import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.net.VpnService;
+import org.torproject.android.Prefs;
+
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(context.getApplicationContext());
-
- boolean startOnBoot = prefs.getBoolean("pref_start_boot",true);
- boolean useVPN = prefs.getBoolean("pref_vpn",true);
-
- if (startOnBoot)
+ Prefs.setContext(context);
+ if (Prefs.startOnBoot())
{
startService(TorServiceConstants.CMD_START,context);
- if (useVPN)
+ if (Prefs.useVpn())
startVpnService(context);
}
-
}
@SuppressLint("NewApi")
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 38b4bd3..9baf723 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -8,6 +8,7 @@
package org.torproject.android.service;
+import org.torproject.android.Prefs;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
@@ -82,8 +83,6 @@ import android.widget.RemoteViews;
public class TorService extends Service implements TorServiceConstants, OrbotConstants, EventHandler
{
- public static boolean ENABLE_DEBUG_LOG = true;
-
private String mCurrentStatus = STATUS_OFF;
private final static int CONTROL_SOCKET_TIMEOUT = 0;
@@ -101,8 +100,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private static final int ERROR_NOTIFY_ID = 3;
private static final int HS_NOTIFY_ID = 4;
- private boolean prefPersistNotifications = true;
-
private static final int MAX_START_TRIES = 3;
private ArrayList<String> configBuffer = null;
@@ -134,16 +131,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
private NotificationManager mNotificationManager = null;
private Builder mNotifyBuilder;
private Notification mNotification;
- private boolean mShowExpandedNotifications = false;
private boolean mNotificationShowing = false;
-
- private boolean mHasRoot = false;
- private boolean mEnableTransparentProxy = false;
- private boolean mTransProxyAll = false;
- private boolean mTransProxyTethering = false;
- private boolean mTransProxyNetworkRefresh = false;
-
- private boolean mUseVPN = false;
+
boolean mIsLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
private ExecutorService mExecutor = Executors.newFixedThreadPool(1);
@@ -152,7 +141,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
public void debug(String msg)
{
- if (ENABLE_DEBUG_LOG)
+ if (Prefs.useDebugLogging())
{
Log.d(TAG,msg);
sendCallbackLogMessage(msg);
@@ -162,7 +151,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
public void logException(String msg, Exception e)
{
- if (ENABLE_DEBUG_LOG)
+ if (Prefs.useDebugLogging())
{
Log.e(TAG,msg,e);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -268,11 +257,11 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
mNotifyBuilder.setTicker(null);
}
- mNotifyBuilder.setOngoing(prefPersistNotifications);
+ mNotifyBuilder.setOngoing(Prefs.persistNotifications());
mNotification = mNotifyBuilder.build();
- if (Build.VERSION.SDK_INT >= 16 && mShowExpandedNotifications) {
+ if (Build.VERSION.SDK_INT >= 16 && Prefs.expandedNotifications()) {
// Create remote view that needs to be set as bigContentView for the notification.
RemoteViews expandedView = new RemoteViews(this.getPackageName(),
R.layout.layout_notification_expanded);
@@ -317,7 +306,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
mNotification.bigContentView = expandedView;
}
- if (prefPersistNotifications && (!mNotificationShowing))
+ if (Prefs.persistNotifications() && (!mNotificationShowing))
{
startForeground(NOTIFY_ID, mNotification);
logNotice("Set background service to FOREGROUND");
@@ -364,8 +353,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
newIdentity();
} else if (action.equals(CMD_FLUSH)) {
flushTransparentProxyRules();
- } else if (action.equals(CMD_UPDATE)) {
- processSettings();
+ } else if (action.equals(CMD_UPDATE_TRANS_PROXY)) {
+ processTransparentProxying();
} else if (action.equals(CMD_VPN)) {
enableVpnProxy();
} else if (action.equals(CMD_VPN_CLEAR)) {
@@ -394,6 +383,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
@Override
public void onDestroy ()
{
+ Log.i("TorService", "onDestroy");
String msg = ("TorService is being DESTROYED... shutting down!");
Log.d(TAG, msg);
sendCallbackLogMessage(msg);
@@ -417,7 +407,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
mCurrentStatus = STATUS_OFF;
sendCallbackStatus(mCurrentStatus);
- if (mHasRoot && mEnableTransparentProxy)
+ if (Prefs.useRoot() && Prefs.useTransparentProxying())
{
Shell shellRoot = Shell.startRootShell();
disableTransparentProxy(shellRoot);
@@ -564,7 +554,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
* uninstall/reinstall with different UID.
*/
Shell shell;
- if (mHasRoot && killAttempts > 2) {
+ if (Prefs.useRoot() && killAttempts > 2) {
shell = Shell.startRootShell();
Log.i(TAG, "using a root shell");
} else {
@@ -589,7 +579,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
if (msg != null && msg.trim().length() > 0)
{
- if (ENABLE_DEBUG_LOG)
+ if (Prefs.useDebugLogging())
Log.d(TAG, msg);
sendCallbackLogMessage(msg);
@@ -599,6 +589,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
@Override
public void onCreate() {
super.onCreate();
+ Log.i("TorService", "onCreate");
+
try
{
mNumberFormat = NumberFormat.getInstance(Locale.getDefault()); //localized numbers!
@@ -614,7 +606,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
initBinariesAndDirectories();
- updateSettings();
new Thread(new Runnable ()
{
@@ -703,7 +694,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
fileControlPort = new File(appBinHome,"control.txt");
extraLines.append(TORRC_CONTROLPORT_FILE_KEY).append(' ').append(fileControlPort.getCanonicalPath()).append('\n');
- if (mTransProxyTethering)
+ if (Prefs.transparentTethering())
{
extraLines.append("TransListenAddress 0.0.0.0").append('\n');
extraLines.append("DNSListenAddress 0.0.0.0").append('\n');
@@ -768,29 +759,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return fileBin.canExecute();
}
-
- private void updateSettings () throws TimeoutException, IOException
- {
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
-
- mHasRoot = prefs.getBoolean(PREF_HAS_ROOT,false);
-
- mEnableTransparentProxy = prefs.getBoolean("pref_transparent", false);
- mTransProxyAll = prefs.getBoolean("pref_transparent_all", false);
- mTransProxyTethering = prefs.getBoolean("pref_transparent_tethering", false);
- mTransProxyNetworkRefresh = prefs.getBoolean("pref_transproxy_refresh", false);
-
- mShowExpandedNotifications = prefs.getBoolean("pref_expanded_notifications", false);
-
- ENABLE_DEBUG_LOG = prefs.getBoolean("pref_enable_logging",false);
- Log.i(TAG,"debug logging:" + ENABLE_DEBUG_LOG);
-
- prefPersistNotifications = prefs.getBoolean(OrbotConstants.PREF_PERSIST_NOTIFICATIONS, true);
-
- mUseVPN = prefs.getBoolean("pref_vpn", false);
- }
-
private void startTor () throws Exception
{
@@ -805,19 +773,14 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
enableBinExec(fileObfsclient);
enableBinExec(fileMeekclient);
enableBinExec(fileXtables);
-
- updateSettings ();
logNotice(getString(R.string.status_starting_up));
sendCallbackLogMessage(getString(R.string.status_starting_up));
ArrayList<String> customEnv = new ArrayList<String>();
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- boolean useBridges = prefs.getBoolean(OrbotConstants.PREF_BRIDGES_ENABLED, false);
- if (useBridges)
- if (mUseVPN && !mIsLollipop)
+ if (Prefs.bridgesEnabled())
+ if (Prefs.useVpn() && !mIsLollipop)
customEnv.add("TOR_PT_PROXY=socks5://127.0.0.1:" + OrbotVpnService.mSocksProxyPort);
String baseDirectory = fileTor.getParent();
@@ -830,7 +793,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (mPortHTTP != -1)
runPolipoShellCmd(shellUser);
- if (mHasRoot && mEnableTransparentProxy)
+ if (Prefs.useRoot() && Prefs.useTransparentProxying())
{
Shell shellRoot = Shell.startRootShell();
@@ -840,7 +803,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
shellRoot.close();
}
- if (mUseVPN) //we need to turn on VPN here so the proxy is running
+ if (Prefs.useVpn()) //we need to turn on VPN here so the proxy is running
{
enableVpnProxy();
}
@@ -858,7 +821,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
private boolean flushTransparentProxyRules () {
- if (mHasRoot)
+ if (Prefs.useRoot())
{
if (mTransProxy == null)
mTransProxy = new TorTransProxy(this, fileXtables);
@@ -909,7 +872,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
int code = 0; // Default state is "okay"
- if(mTransProxyAll)
+ if(Prefs.transparentProxyAll())
{
code = mTransProxy.setTransparentProxyingAll(this, true, shell);
@@ -926,7 +889,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (code == 0)
{
- if (mTransProxyTethering)
+ if (Prefs.transparentTethering())
{
showToolbarNotification(getString(R.string.transproxy_enabled_for_tethering_), TRANSPROXY_NOTIFY_ID, R.drawable.ic_stat_tor);
@@ -1404,17 +1367,10 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
public void enableVpnProxy () {
-
debug ("enabling VPN Proxy");
-
- mUseVPN = true;
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- Editor ePrefs = prefs.edit();
- ePrefs.putBoolean("pref_vpn", true);
- ePrefs.commit();
- processSettings();
+ Prefs.putUseVpn(true);
+ processTransparentProxying();
Intent intent = new Intent(TorService.this, OrbotVpnService.class);
intent.setAction("start");
@@ -1458,16 +1414,8 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
public void clearVpnProxy ()
{
debug ("clearing VPN Proxy");
-
- mUseVPN = false;
-
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
- Editor ePrefs = prefs.edit();
- ePrefs.putBoolean("pref_vpn", false);
- ePrefs.commit();
-
- processSettings();
+ Prefs.putUseVpn(false);
+ processTransparentProxying();
Intent intent = new Intent(TorService.this, OrbotVpnService.class);
intent.setAction("stop");
@@ -1556,7 +1504,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (read > 0 || written > 0)
iconId = R.drawable.ic_stat_tor_xfer;
- if (mConnectivity && prefPersistNotifications)
+ if (mConnectivity && Prefs.persistNotifications())
showToolbarNotification(sb.toString(), NOTIFY_ID, iconId);
mTotalTrafficWritten += written;
@@ -1631,7 +1579,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
sb.append (" > ");
}
- if (ENABLE_DEBUG_LOG)
+ if (Prefs.useDebugLogging())
debug(sb.toString());
else if(status.equals("BUILT"))
{
@@ -1651,7 +1599,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- if (mShowExpandedNotifications)
+ if (Prefs.expandedNotifications())
{
//get IP from last nodename
if(status.equals("BUILT")){
@@ -1707,7 +1655,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
Proxy proxy = null;
- if (!mUseVPN) //if not on the VPN then we should proxy
+ if (!Prefs.useVpn()) //if not on the VPN then we should proxy
{
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8118));
conn = new URL(ONIONOO_BASE_URL + mNode.id).openConnection(proxy);
@@ -1787,21 +1735,16 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
else
return node;
}
-
-
- public void processSettings (){
+ public void processTransparentProxying() {
try{
- boolean hadEnableTransparentProxy = mEnableTransparentProxy;
- updateSettings ();
- if (mHasRoot)
+ if (Prefs.useRoot())
{
Shell shell = Shell.startRootShell();
- if (hadEnableTransparentProxy){
- disableTransparentProxy(shell);
- }
- if (mEnableTransparentProxy){
+ if (Prefs.useTransparentProxying()){
enableTransparentProxy(shell);
+ } else {
+ disableTransparentProxy(shell);
}
shell.close();
}
@@ -2101,7 +2044,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
{
if (mConnectivity)
{
- if (mHasRoot && mEnableTransparentProxy && mTransProxyNetworkRefresh)
+ if (Prefs.useRoot() && Prefs.useTransparentProxying() && Prefs.transProxyNetworkRefresh())
{
Shell shell = Shell.startRootShell();
@@ -2111,7 +2054,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
shell.close();
}
- else if (mUseVPN) //we need to turn on VPN here so the proxy is running
+ else if (Prefs.useVpn()) //we need to turn on VPN here so the proxy is running
refreshVpnProxy();
}
@@ -2145,7 +2088,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
enableTransProxyAndDNSPorts(transPort, dnsPort);
*/
- boolean useBridges = prefs.getBoolean(OrbotConstants.PREF_BRIDGES_ENABLED, false);
+ boolean useBridges = Prefs.bridgesEnabled();
boolean becomeRelay = prefs.getBoolean(OrbotConstants.PREF_OR, false);
boolean ReachableAddresses = prefs.getBoolean(OrbotConstants.PREF_REACHABLE_ADDRESSES,false);
@@ -2161,7 +2104,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
extraLines.append("UseBridges 0").append('\n');
- if (mUseVPN) //set the proxy here if we aren't using a bridge
+ if (Prefs.useVpn()) //set the proxy here if we aren't using a bridge
{
if (!mIsLollipop)
@@ -2212,7 +2155,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
extraLines.append("UseBridges 1").append('\n');
- String bridgeList = new String(prefs.getString(OrbotConstants.PREF_BRIDGES_LIST,"").getBytes("ISO-8859-1"));
+ String bridgeList = new String(Prefs.getBridgesList().getBytes("ISO-8859-1"));
if (bridgeList != null && bridgeList.length() > 1) //longer then 1 = some real values here
{
@@ -2411,7 +2354,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
- if (mUseVPN)
+ if (Prefs.useVpn())
{
extraLines.append("DNSListenAddress" + ' ' + "10.0.0.1:" + TorServiceConstants.TOR_DNS_PORT_DEFAULT).append('\n');
}
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 2a23895..f466dae 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -89,7 +89,7 @@ public interface TorServiceConstants {
public static final String CMD_NEWNYM = "newnym";
public static final String CMD_VPN = "vpn";
public static final String CMD_VPN_CLEAR = "vpnclear";
- public static final String CMD_UPDATE = "update";
+ public static final String CMD_UPDATE_TRANS_PROXY = "update";
public static final String BINARY_TOR_VERSION = "0.2.6.7";
diff --git a/src/org/torproject/android/service/TorTransProxy.java b/src/org/torproject/android/service/TorTransProxy.java
index d63abb2..f88e46b 100644
--- a/src/org/torproject/android/service/TorTransProxy.java
+++ b/src/org/torproject/android/service/TorTransProxy.java
@@ -6,6 +6,7 @@ import java.util.ArrayList;
import org.sufficientlysecure.rootcommands.Shell;
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
import org.torproject.android.OrbotConstants;
+import org.torproject.android.Prefs;
import org.torproject.android.settings.TorifiedApp;
import android.content.Context;
@@ -13,7 +14,6 @@ import android.content.SharedPreferences;
public class TorTransProxy implements TorServiceConstants {
- private boolean useSystemIpTables = false;
private String mSysIptables = null;
private TorService mTorService = null;
private File mFileXtables = null;
@@ -43,12 +43,8 @@ public class TorTransProxy implements TorServiceConstants {
{
String ipTablesPath = null;
-
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(context);
- useSystemIpTables = prefs.getBoolean(OrbotConstants.PREF_USE_SYSTEM_IPTABLES, false);
-
- if (useSystemIpTables)
+ if (Prefs.useSystemIpTables())
{
ipTablesPath = findSystemIPTables();
}
@@ -67,11 +63,7 @@ public class TorTransProxy implements TorServiceConstants {
String ipTablesPath = null;
- SharedPreferences prefs = TorServiceUtils.getSharedPrefs(context);
-
- useSystemIpTables = prefs.getBoolean(OrbotConstants.PREF_USE_SYSTEM_IPTABLES, false);
-
- if (useSystemIpTables)
+ if (Prefs.useSystemIpTables())
{
ipTablesPath = findSystemIP6Tables();
}
@@ -674,7 +666,7 @@ public class TorTransProxy implements TorServiceConstants {
script = new StringBuilder();
- if (TorService.ENABLE_DEBUG_LOG)
+ if (Prefs.useDebugLogging())
{
//XXX: Comment the following rules for non-debug builds
script.append(ipTablesPath);
1
0

[orbot/master] use Java methods for setting permissions on native executables
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit 73658ce3cfdee85d0d4d1eacf4881f87648e8d1f
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Mon Jun 8 23:21:21 2015 -0400
use Java methods for setting permissions on native executables
As of android-9, java.io.File has native methods for setting permissions,
inherited from Java 1.6. Using these will help deal with compatibility
across devices, since some devices might not have chmod installed.
---
.../android/service/TorResourceInstaller.java | 15 ++++++--
src/org/torproject/android/service/TorService.java | 40 +-------------------
2 files changed, 14 insertions(+), 41 deletions(-)
diff --git a/src/org/torproject/android/service/TorResourceInstaller.java b/src/org/torproject/android/service/TorResourceInstaller.java
index 3d99225..648f752 100644
--- a/src/org/torproject/android/service/TorResourceInstaller.java
+++ b/src/org/torproject/android/service/TorResourceInstaller.java
@@ -8,12 +8,10 @@ import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
-import java.io.PrintWriter;
import java.io.StringBufferInputStream;
import java.util.ArrayList;
import java.util.concurrent.TimeoutException;
@@ -96,11 +94,13 @@ public class TorResourceInstaller implements TorServiceConstants {
outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
+ setExecutable(outFile);
is = context.getResources().openRawResource(R.raw.meek);
outFile = new File(installFolder, MEEK_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
+ setExecutable(outFile);
cpuPath = "armeabi";
}
@@ -111,17 +111,19 @@ public class TorResourceInstaller implements TorServiceConstants {
outFile = new File(installFolder, TOR_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
+ setExecutable(outFile);
is = context.getAssets().open(cpuPath + "/polipo.mp3");
outFile = new File(installFolder, POLIPO_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
+ setExecutable(outFile);
is = context.getAssets().open(cpuPath + "/xtables.mp3");
outFile = new File(installFolder, IPTABLES_ASSET_KEY);
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
streamToFile(is,outFile, false, true);
-
+ setExecutable(outFile);
return true;
}
@@ -359,4 +361,11 @@ public class TorResourceInstaller implements TorServiceConstants {
}*/
+ private void setExecutable(File fileBin) {
+ fileBin.setReadable(true);
+ fileBin.setExecutable(true);
+ fileBin.setWritable(false);
+ fileBin.setWritable(true, true);
+ }
+
}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 9baf723..599d8c8 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -649,17 +649,12 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
appCacheHome = getDir(DIRECTORY_TOR_DATA,Application.MODE_PRIVATE);
fileTor= new File(appBinHome, TOR_ASSET_KEY);
-
filePolipo = new File(appBinHome, POLIPO_ASSET_KEY);
-
fileObfsclient = new File(appBinHome, OBFSCLIENT_ASSET_KEY);
-
fileMeekclient = new File(appBinHome, MEEK_ASSET_KEY);
-
fileTorRc = new File(appBinHome, TORRC_ASSET_KEY);
-
fileXtables = new File(appBinHome, IPTABLES_ASSET_KEY);
-
+
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
String version = prefs.getString(PREF_BINARY_TOR_VERSION_INSTALLED,null);
@@ -678,8 +673,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
}
updateTorConfigFile ();
-
-
}
private boolean updateTorConfigFile () throws FileNotFoundException, IOException, TimeoutException
@@ -737,28 +730,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
return success;
}
-
- private boolean enableBinExec (File fileBin) throws Exception
- {
-
- logNotice(fileBin.getName() + ": PRE: Is binary exec? " + fileBin.canExecute());
-
- if (!fileBin.canExecute())
- {
- logNotice("(re)Setting permission on binary: " + fileBin.getCanonicalPath());
-
- Shell shell = Shell.startShell();
- shell.add(new SimpleCommand("chmod " + CHMOD_EXE_VALUE + ' ' + fileBin.getCanonicalPath())).waitForFinish();
-
- File fileTest = new File(fileBin.getCanonicalPath());
- logNotice(fileTest.getName() + ": POST: Is binary exec? " + fileTest.canExecute());
-
- shell.close();
- }
-
- return fileBin.canExecute();
- }
-
+
private void startTor () throws Exception
{
@@ -767,12 +739,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
if (fileTor == null)
initBinariesAndDirectories();
-
- enableBinExec(fileTor);
- enableBinExec(filePolipo);
- enableBinExec(fileObfsclient);
- enableBinExec(fileMeekclient);
- enableBinExec(fileXtables);
logNotice(getString(R.string.status_starting_up));
sendCallbackLogMessage(getString(R.string.status_starting_up));
@@ -1361,8 +1327,6 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
mCurrentStatus = STATUS_OFF;
sendCallbackStatus(mCurrentStatus);
-
-
}
}
1
0

25 Jun '15
commit 6989f9b2b018748cb329d84b187fd7c73552da38
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Thu Jun 4 15:24:05 2015 -0400
add standard ./make-release-build script
---
make-release-build | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/make-release-build b/make-release-build
new file mode 100755
index 0000000..0372ee7
--- /dev/null
+++ b/make-release-build
@@ -0,0 +1,76 @@
+#!/bin/bash
+# bash is required because we need bash's printf to guarantee a cross-platform
+# timestamp format.
+
+set -e
+set -x
+
+# make sure we're on a signed tag that matches the version name
+versionName=`sed -n 's,.*versionName="\([^"]*\)".*,\1,p' AndroidManifest.xml`
+describe=`git describe`
+if [ $versionName != $describe ]; then
+ echo "WARNING: building $describe, which is not the latest release ($versionName)"
+else
+ # make a clearer warning above by putting this here
+ set +x
+ echo ""
+ echo ""
+ echo "Checking git tag signature for release build:"
+ git tag -v $versionName
+ echo ""
+ echo ""
+ set -x
+fi
+
+
+if [ -z $ANDROID_HOME ]; then
+ if [ -e ~/.android/bashrc ]; then
+ . ~/.android/bashrc
+ else
+ echo "ANDROID_HOME must be set!"
+ exit
+ fi
+fi
+
+projectroot=`pwd`
+projectname=`sed -n 's,.*name="app_name">\(.*\)<.*,\1,p' res/values/strings.xml`
+
+# standardize timezone to reduce build differences
+export TZ=UTC
+TIMESTAMP=`printf '%(%Y-%m-%d %H:%M:%S)T' \
+ $(git log -n1 --format=format:%at)`
+# run the clock at 5% speed, ant requires a moving clock
+TIMESTAMP_5=`printf '@%(%Y-%m-%d %H:%M:%S)T x0.05' \
+ $(git log -n1 --format=format:%at)`
+
+git reset --hard
+git clean -fdx
+git submodule foreach git reset --hard
+git submodule foreach git clean -fdx
+git submodule sync
+git submodule foreach git submodule sync
+git submodule update --init --recursive
+
+
+if [ -e ~/.android/ant.properties ]; then
+ cp ~/.android/ant.properties $projectroot/
+else
+ echo "skipping release ant.properties"
+fi
+
+faketime "$TIMESTAMP" make -C external
+
+./setup-ant
+faketime -f "$TIMESTAMP_5" ant release
+
+apk=$projectroot/bin/$projectname-v$describe.apk
+
+if which gpg > /dev/null; then
+ if [ -z "`gpg --list-secret-keys`" ]; then
+ echo "No GPG secret keys found, not signing APK"
+ else
+ gpg --armor --detach-sign $apk
+ fi
+else
+ echo "gpg not found, not signing APK"
+fi
1
0

[orbot/master] add custom ant rules for automating the release process
by n8fr8@torproject.org 25 Jun '15
by n8fr8@torproject.org 25 Jun '15
25 Jun '15
commit 6775f86b6537d4485964f48f0a8c4aa22700e9b5
Author: Hans-Christoph Steiner <hans(a)eds.org>
Date: Thu Jun 4 15:21:00 2015 -0400
add custom ant rules for automating the release process
---
custom_rules.xml | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/custom_rules.xml b/custom_rules.xml
new file mode 100644
index 0000000..5f473de
--- /dev/null
+++ b/custom_rules.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+
+ <target name="-getgitdetails" >
+ <exec executable="git" outputproperty="git.describe">
+ <arg value="describe"/>
+ </exec>
+ <exec executable="git" outputproperty="git.revision">
+ <arg value="rev-parse"/>
+ <arg value="HEAD"/>
+ </exec>
+ </target>
+
+ <target name="rename-release-with-version-number" depends="-getgitdetails">
+ <xmlproperty file="AndroidManifest.xml"
+ prefix="themanifest"
+ collapseAttributes="true"/>
+ <!-- see ${sdk.dir}/tools/ant/build.xml -set-release-mode -->
+ <property name="out.packaged.file"
+ location="${out.absolute.dir}/${ant.project.name}-v${git.describe}-unsigned.apk" />
+ <property name="out.final.file"
+ location="${out.absolute.dir}/${ant.project.name}-v${git.describe}.apk" />
+ </target>
+
+ <target name="-set-release-mode"
+ depends="rename-release-with-version-number,android_rules.-set-release-mode">
+ <echo message="target: ${build.target}"></echo>
+ </target>
+
+ <target name="-post-package" depends="-getgitdetails">
+ <property file="${sdk.dir}/tools/source.properties"/>
+ <property name="meta.inf.dir" value="${out.dir}/META-INF"/>
+ <property name="build.manifest.file" value="${meta.inf.dir}/BUILD.MF"/>
+ <mkdir dir="${meta.inf.dir}"/>
+ <manifest file="${build.manifest.file}">
+ <attribute name="Implementation-Package-Name" value="${themanifest.manifest.package}"/>
+ <attribute name="Implementation-Version-Name" value="${themanifest.manifest.android:versionName}"/>
+ <attribute name="Implementation-Version-Code" value="${themanifest.manifest.android:versionCode}"/>
+ <attribute name="Git-Revision" value="${git.revision}"/>
+ <attribute name="Android-SDK-Release" value="${Pkg.Revision}"/>
+ <attribute name="Android-SDK-Host-OS" value="${Archive.HostOs}"/>
+ <attribute name="Android-SDK-aapt" value="${aapt}"/>
+ <attribute name="Android-SDK-zipalign" value="${zipalign}"/>
+ </manifest>
+ <condition property="build.is.debug" value="true" else="false">
+ <equals arg1="${build.target}" arg2="debug" />
+ </condition>
+ <!-- adding BUILD.MF breaks debug builds, but not releases -->
+ <if condition="${build.is.debug}">
+ <else>
+ <jar update="true" destfile="${out.packaged.file}">
+ <fileset dir="${out.dir}" includes="META-INF/BUILD.MF"/>
+ </jar>
+ </else>
+ </if>
+ </target>
+</project>
1
0