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:
- Tor
@ -7,45 +8,53 @@ Orbot includes, in the external directory, git repo submodules of:
- LibEvent
- 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):
ant: http://ant.apache.org/
Android Native Dev Kit or NDK (for C/C++ code): http://developer.android.com/sdk/ndk/index.html
Android Software Dev Kit or SDK (for Java code): http://developer.android.com/sdk/index.html
Android Native Dev Kit or NDK (for C/C++ code):
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:
git submodule init
git submodule update
git submodule update --init --recursive
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}
make -C external
At this point, you'll have Tor and Privoxy binaries that can be run on an Android handset.
You can verify the ARM binary was properly built using the following command:
At this point, you'll have Tor and Polipo binaries that can be run on an
Android handset. You can verify the ARM binary was properly built using the
following command:
file res/raw/tor
file res/raw/privoxy
file external/bin/tor external/bin/polipo
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
that will handle basic Tor controlling features.
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
#because some Android devices don't like resources larger than 1M.
#split --bytes=1m $DROID_ROOT/external/tor/tor/src/or/tor res/raw/tor
Now you need to split and copy the tor binary into external/bin. We split it
into < 1M chunks because some Android devices don't like resources larger than
1M.
split --bytes=1m ./external/tor/src/or/tor ./external/bin/tor
Now build the Android app
./update-ant-build
ant release
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"?>
<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:"
@ -11,9 +16,59 @@
/>
-->
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/btnsave"
android:text="@string/button_close" android:layout_alignParentBottom="true" />
<ListView
android:id="@+id/applistview"
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>

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_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_type_title">Outbound Proxy Type</string>

View File

@ -11,11 +11,16 @@ import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import org.torproject.android.R;
import org.torproject.android.TorConstants;
import org.torproject.android.service.TorService;
import org.torproject.android.service.TorServiceUtils;
//import android.R;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
@ -25,8 +30,13 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
@ -42,15 +52,87 @@ import android.widget.TextView;
public class AppManager extends Activity implements OnCheckedChangeListener, OnClickListener, TorConstants {
private ListView listApps;
private final static String TAG = "Orbot";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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
protected void onResume() {
@ -295,6 +377,8 @@ public class AppManager extends Activity implements OnCheckedChangeListener, OnC
}
public void onClick(View v) {
CheckBox cbox = (CheckBox)v.getTag();