Merge branch 'master' of https://github.com/freckles-the-pirate/orbot into freckles-the-pirate-master

This commit is contained in:
Nathan Freitas 2014-09-30 23:34:08 -04:00
commit dbbd8292c2
53 changed files with 426 additions and 277 deletions

41
BUILD
View File

@ -1,5 +1,6 @@
This document explains how to properly build an Android package of Orbot from source. This document explains how to properly build an Android package of Orbot from
source.
Orbot includes, in the external directory, git repo submodules of: Orbot includes, in the external directory, git repo submodules of:
- Tor - Tor
@ -7,45 +8,53 @@ Orbot includes, in the external directory, git repo submodules of:
- LibEvent - LibEvent
- JTorControl: The Tor Control Library for Java - JTorControl: The Tor Control Library for Java
The Orbot repo also includes the Privoxy source code of a recent stable release. The Orbot repo also includes the Polipo source code of a recent stable release.
Please install the following prerequisites (instructions for each follows): Please install the following prerequisites (instructions for each follows):
ant: http://ant.apache.org/ ant: http://ant.apache.org/
Android Native Dev Kit or NDK (for C/C++ code): http://developer.android.com/sdk/ndk/index.html Android Native Dev Kit or NDK (for C/C++ code):
Android Software Dev Kit or SDK (for Java code): http://developer.android.com/sdk/index.html http://developer.android.com/sdk/ndk/index.html
Android Software Dev Kit or SDK (for Java code):
http://developer.android.com/sdk/index.html
You will need to run the 'android' command in the SDK to install the necessary Android platform supports (ICS 4.x or android-15) You will need to run the 'android' command in the SDK to install the necessary
Android platform supports (ICS 4.x or android-15)
Be sure that you have all of the git submodules up-to-date: Be sure that you have all of the git submodules up-to-date:
git submodule init git submodule update --init --recursive
git submodule update
To begin building, from the Orbot root directory, you first need to build all external C/native dependencies: To begin building, from the Orbot root directory, you first need to build all
external C/native dependencies:
export NDK_BASE={PATH TO YOUR NDK INSTALL} export NDK_BASE={PATH TO YOUR NDK INSTALL}
make -C external make -C external
At this point, you'll have Tor and Privoxy binaries that can be run on an Android handset. At this point, you'll have Tor and Polipo binaries that can be run on an
You can verify the ARM binary was properly built using the following command: Android handset. You can verify the ARM binary was properly built using the
following command:
file res/raw/tor file external/bin/tor external/bin/polipo
file res/raw/privoxy
You should see something like: You should see something like:
src/or/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped external/bin/tor: ELF 32-bit LSB executable, ARM, version 1 (SYSV),
dynamically linked (uses shared libs), not stripped
external/bin/polipo: ELF 32-bit LSB executable, ARM, version 1 (SYSV),
dynamically linked (uses shared libs), not stripped
This isn't enough though and we'll now sew up the binary into a small package This isn't enough though and we'll now sew up the binary into a small package
that will handle basic Tor controlling features. that will handle basic Tor controlling features.
android update project --name Orbot --target android-15 --path . android update project --name Orbot --target android-15 --path .
#Now you need to split and copy the tor binary into res/raw. We split it into < 1M chunks Now you need to split and copy the tor binary into external/bin. We split it
#because some Android devices don't like resources larger than 1M. into < 1M chunks because some Android devices don't like resources larger than
#split --bytes=1m $DROID_ROOT/external/tor/tor/src/or/tor res/raw/tor 1M.
split --bytes=1m ./external/tor/src/or/tor ./external/bin/tor
Now build the Android app Now build the Android app
./update-ant-build
ant release ant release
This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk! This will produce an unsigned Tor package in ./bin/Orbot-unsigned.apk!

1
external/iptables vendored

@ -1 +0,0 @@
Subproject commit 99b85b7837707bd6c6d578c9328e1321fceb8082

1
external/libevent vendored

@ -1 +0,0 @@
Subproject commit 64177777165d9684bafbfa946abd126f7ebff11f

@ -1 +0,0 @@
Subproject commit be997be8fff6dc00cd249fdfd128d6820461db99

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
res/drawable/ic_inverse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
res/drawable/ic_menu_agenda.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/drawable/inverse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:duplicateParentState="false"> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:duplicateParentState="true">
<!-- <!--
<TextView android:text="Select apps to use with Tor:" <TextView android:text="Select apps to use with Tor:"
@ -11,9 +16,59 @@
/> />
--> -->
<Button android:layout_width="fill_parent" <ListView
android:layout_height="wrap_content" android:id="@+id/btnsave" android:id="@+id/applistview"
android:text="@string/button_close" android:layout_alignParentBottom="true" /> android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/layout_button_filters"
android:layout_alignParentTop="true" >
</ListView>
<Button
android:id="@+id/btnsave"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:text="@string/button_close" />
<RelativeLayout
android:id="@+id/layout_button_filters"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/btnsave"
android:orientation="horizontal" >
<Button
android:id="@+id/button_proxy_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_toLeftOf="@+id/button_proxy_none"
android:layout_toStartOf="@+id/button_proxy_none"
android:text="@string/button_proxy_all" />
<Button
android:id="@+id/button_invert_selection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:text="@string/button_invert_selection" />
<Button
android:id="@+id/button_proxy_none"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/button_invert_selection"
android:layout_toStartOf="@+id/button_invert_selection"
android:text="@string/button_proxy_none" />
</RelativeLayout>
<ListView android:layout_above="@id/btnsave" android:layout_alignParentTop="true" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/applistview"></ListView>
</RelativeLayout> </RelativeLayout>

View File

@ -134,6 +134,10 @@
<string name="pref_entrance_node_summary">Fingerprints, nicks, countries and addresses for the first hop</string> <string name="pref_entrance_node_summary">Fingerprints, nicks, countries and addresses for the first hop</string>
<string name="pref_entrance_node_dialog">Enter Entrance Nodes</string> <string name="pref_entrance_node_dialog">Enter Entrance Nodes</string>
<string name="button_proxy_all">Proxy All</string>
<string name="button_proxy_none">Proxy None</string>
<string name="button_invert_selection">Invert Selection</string>
<string name="pref_proxy_title">Outbound Network Proxy (Optional)</string> <string name="pref_proxy_title">Outbound Network Proxy (Optional)</string>
<string name="pref_proxy_type_title">Outbound Proxy Type</string> <string name="pref_proxy_type_title">Outbound Proxy Type</string>

View File

@ -11,11 +11,16 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.torproject.android.R; import org.torproject.android.R;
import org.torproject.android.TorConstants; import org.torproject.android.TorConstants;
import org.torproject.android.service.TorService; import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceUtils; import org.torproject.android.service.TorServiceUtils;
//import android.R;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -25,8 +30,13 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View; import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
@ -42,15 +52,87 @@ import android.widget.TextView;
public class AppManager extends Activity implements OnCheckedChangeListener, OnClickListener, TorConstants { public class AppManager extends Activity implements OnCheckedChangeListener, OnClickListener, TorConstants {
private ListView listApps; private ListView listApps;
private final static String TAG = "Orbot";
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
this.setContentView(R.layout.layout_apps); this.setContentView(R.layout.layout_apps);
Button buttonSelectAll, buttonSelectNone, buttonInvert;
buttonSelectAll = (Button) findViewById(R.id.button_proxy_all);
buttonSelectNone = (Button) findViewById(R.id.button_proxy_none);
buttonInvert = (Button) findViewById(R.id.button_invert_selection);
buttonSelectAll.setOnClickListener(new OnAutoClickListener(0));
buttonSelectNone.setOnClickListener(new OnAutoClickListener(1));
buttonInvert.setOnClickListener(new OnAutoClickListener(2));
} }
class OnAutoClickListener implements Button.OnClickListener {
private int status;
public OnAutoClickListener(int status){
this.status = status;
}
@SuppressWarnings("unchecked")
public void onClick(View button){
ListView listView;
ViewGroup viewGroup;
View parentView, currentView;
ArrayAdapter<TorifiedApp> adapter;
TorifiedApp app;
CheckBox box;
float buttonId;
boolean[] isSelected;
int posI, selectedI, lvSz;
buttonId = button.getId();
listView = (ListView) findViewById(R.id.applistview);
lvSz = listView.getCount();
isSelected = new boolean[lvSz];
selectedI = -1;
if (this.status == 0){
Log.d(TAG, "Proxifying ALL");
}else if (this.status == 1){
Log.d(TAG, "Proxifying NONE");
}else {
Log.d(TAG, "Proxifying invert");
}
Context context = getApplicationContext();
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(context);
ArrayList<TorifiedApp> apps = getApps(context, prefs);
parentView = (View) findViewById(R.layout.layout_apps);
viewGroup = (ViewGroup) listView;
adapter = (ArrayAdapter<TorifiedApp>) listApps.getAdapter();
if (adapter == null){
Log.w(TAG, "List adapter is null. Getting apps.");
loadApps(prefs);
adapter = (ArrayAdapter<TorifiedApp>) listApps.getAdapter();
}
for (int i = 0 ; i < adapter.getCount(); ++i){
app = (TorifiedApp) adapter.getItem(i);
currentView = adapter.getView(i, parentView, viewGroup);
box = (CheckBox) currentView.findViewById(R.id.itemcheck);
if (this.status == 0){
if (!box.isChecked())
box.performClick();
}else if (this.status == 1){
if (box.isChecked())
box.performClick();
}else {
box.performClick();
}
}
saveAppSettings(context);
loadApps(prefs);
}
}
@Override @Override
protected void onResume() { protected void onResume() {
@ -295,6 +377,8 @@ public class AppManager extends Activity implements OnCheckedChangeListener, OnC
} }
public void onClick(View v) { public void onClick(View v) {
CheckBox cbox = (CheckBox)v.getTag(); CheckBox cbox = (CheckBox)v.getTag();