Merge branch 'wizard'
Conflicts: res/values/strings.xml src/org/torproject/android/Orbot.java
This commit is contained in:
commit
cd6c533a71
2
AUTHORS
2
AUTHORS
|
@ -27,7 +27,7 @@ provided guidance in the entire effort.
|
||||||
|
|
||||||
Adam Langley made the original valiant effort to port Tor to Android.
|
Adam Langley made the original valiant effort to port Tor to Android.
|
||||||
|
|
||||||
Sathyanarayanan <gsathya.ceg@gmail.com> created a patch for the wizard
|
Sathyanarayanan <me@gsathya.in> created a patch for the wizard
|
||||||
which updated the icon and link for the secure chat app info to point
|
which updated the icon and link for the secure chat app info to point
|
||||||
to Gibberbot, and hopefully will continue to contribute useful patches.
|
to Gibberbot, and hopefully will continue to contribute useful patches.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
|
|
||||||
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
|
<application android:theme="@style/DefaultTheme" android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false">
|
||||||
|
|
||||||
<activity android:name=".Orbot"
|
<activity android:name=".Orbot"
|
||||||
android:theme="@android:style/Theme.NoTitleBar">
|
android:theme="@android:style/Theme.NoTitleBar">
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 9.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
|
@ -5,12 +5,13 @@
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:stretchColumns="1">
|
android:stretchColumns="1">
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<ImageView android:id="@+id/itemicon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dip"></ImageView>
|
<ImageView android:id="@+id/itemicon" android:layout_width="50dip" android:layout_height="50dip" android:padding="3dip"></ImageView>
|
||||||
|
|
||||||
<TextView android:layout_height="wrap_content" android:id="@+id/itemtext" android:text="uid:packages" android:textSize="18sp" android:padding="3dip"></TextView>
|
<TextView android:layout_height="wrap_content" android:id="@+id/itemtext" android:text="uid:packages" android:textSize="18sp" android:padding="3dip"></TextView>
|
||||||
|
|
||||||
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/itemcheck" ></CheckBox>
|
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/itemcheck" ></CheckBox>
|
||||||
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
</TableLayout>
|
</TableLayout>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?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">
|
||||||
|
|
||||||
|
<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/WizardTextTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:fadingEdge="vertical"
|
||||||
|
android:text="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">
|
||||||
|
|
||||||
|
|
||||||
|
<ScrollView android:id="@+id/helpscrollview"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_span="3"
|
||||||
|
>
|
||||||
|
<LinearLayout android:background="#575757" android:layout_width="wrap_content" android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:orientation="vertical">
|
||||||
|
<TextView android:layout_width="wrap_content" android:textColor="#ffffff" android:layout_height="wrap_content" android:textSize="8pt" android:id="@+id/WizardTextBody1" android:text="this is sample text this is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample text" android:padding="20dip"></TextView>
|
||||||
|
<Button android:layout_width="wrap_content" android:visibility="gone" android:layout_height="wrap_content" android:gravity="center" android:text="Grant Permission" android:id="@+id/grantPermissions" android:layout_gravity="center"></Button>
|
||||||
|
<TextView android:layout_width="wrap_content" android:visibility="gone" android:textColor="#ffffff" android:layout_height="wrap_content" android:textSize="8pt" android:id="@+id/WizardTextBody2" android:text="this is sample text this is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample text" android:padding="20dip"></TextView>
|
||||||
|
<CheckBox android:id="@+id/checkBox" android:layout_gravity="center" android:text="@string/wizard_permissions_consent" android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="center" android:visibility="visible"></CheckBox>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</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="Back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
<Button android:text="Next" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,69 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="fill_parent">
|
||||||
|
|
||||||
|
<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/WizardTextTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:fadingEdge="vertical"
|
||||||
|
android:text="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">
|
||||||
|
|
||||||
|
|
||||||
<ScrollView android:id="@+id/helpscrollview"
|
<ScrollView android:id="@+id/helpscrollview"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent">
|
android:layout_height="fill_parent"
|
||||||
<LinearLayout
|
android:layout_span="3">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:background="#575757"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:padding="3px">
|
android:padding="3px">
|
||||||
<TextView android:text="@string/wizard_configure_msg" android:textColor="#ffffff" android:id="@+id/WizardRootTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
|
<TextView android:text="@string/wizard_transproxy_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>
|
||||||
|
<RadioGroup android:id="@+id/radioGroup" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingLeft="15dip">
|
||||||
|
<RadioButton android:text="@string/wizard_configure_all" android:id="@+id/radio0" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
|
||||||
<CheckBox android:layout_marginTop="20px" android:text="@string/wizard_configure_all" android:id="@+id/WizardRootCheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
|
<TextView android:layout_height="wrap_content"
|
||||||
<TextView android:text=" or " android:textColor="#ffffff" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
|
android:text="@string/wizard_transproxy_hint"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
<Button android:text="@string/wizard_configure_select_apps" android:id="@+id/WizardRootButton01" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
android:textSize="15sp"
|
||||||
|
android:paddingBottom="10dip" android:paddingRight="20dip">
|
||||||
|
</TextView>
|
||||||
|
<RadioButton android:text="@string/wizard_configure_select_apps" android:id="@+id/radio1" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
|
||||||
|
<RadioButton android:text="@string/wizard_transproxy_none" android:id="@+id/radio2" android:layout_height="wrap_content" android:layout_width="wrap_content"></RadioButton>
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
|
</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="Back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
<Button android:text="Next" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,63 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="fill_parent">
|
||||||
|
|
||||||
|
<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/WizardTextTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:fadingEdge="vertical"
|
||||||
|
android:text="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">
|
||||||
|
|
||||||
|
|
||||||
<ScrollView android:id="@+id/helpscrollview"
|
<ScrollView android:id="@+id/helpscrollview"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent">
|
android:layout_height="fill_parent"
|
||||||
<LinearLayout
|
android:layout_span="3">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:background="#575757"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:padding="3px">
|
android:paddingRight="20dip"
|
||||||
|
>
|
||||||
|
|
||||||
<TextView android:text="@string/wizard_tips_msg" android:layout_gravity="left" android:textColor="#ffffff" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
|
<TextView android:text="@string/wizard_tips_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>
|
||||||
|
<Button android:text="@string/wizard_tips_gibberbot" android:layout_gravity="left" android:drawableLeft="@drawable/ic_launcher_gibberbot" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallGibberbot" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<Button android:text="@string/wizard_tips_otrchat" android:layout_gravity="left" android:drawableLeft="@drawable/ic_launcher_gibberbot" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallOtrchat" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
<Button android:text="@string/wizard_tips_firefox" android:layout_gravity="left" android:drawableLeft="@drawable/icon_firefox" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallFirefox" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<Button android:text="@string/wizard_tips_orweb" android:drawableLeft="@drawable/icon_orweb" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonInstallOrweb" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
<Button android:text="@string/wizard_tips_proxymob" android:layout_marginTop="10px" android:drawableLeft="@drawable/proxymob" android:id="@+id/WizardRootButtonInstallProxyMob" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<Button android:text="@string/wizard_tips_proxy" android:layout_marginTop="10px" android:id="@+id/WizardRootButtonProxyHelp" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
|
</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="Back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
<Button android:text="Next" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?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"
|
||||||
|
>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/relativeLayout1"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:background="#000000"
|
||||||
|
>
|
||||||
|
<ImageView
|
||||||
|
android:src="@drawable/warning"
|
||||||
|
android:id="@+id/orbot_image"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:paddingLeft="20px" android:layout_marginLeft="10dip" android:layout_marginTop="8dip">
|
||||||
|
</ImageView>
|
||||||
|
<TextView
|
||||||
|
android:textColor="#FFFFFF"
|
||||||
|
android:textSize="10pt"
|
||||||
|
android:layout_toRightOf="@id/orbot_image"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/WizardTextTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:fadingEdge="vertical"
|
||||||
|
android:text="TITLE"
|
||||||
|
android:singleLine="true"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:paddingLeft="5px"
|
||||||
|
android:padding="20px"
|
||||||
|
>
|
||||||
|
</TextView>
|
||||||
|
</RelativeLayout>
|
||||||
|
<TableLayout android:id="@+id/TableLayout01" android:stretchColumns="*" android:layout_height="fill_parent" android:layout_width="wrap_content" >
|
||||||
|
|
||||||
|
<TableRow android:id="@+id/TableRow01" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_margin="10dip">
|
||||||
|
|
||||||
|
|
||||||
|
<ScrollView android:id="@+id/helpscrollview"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_span="3">
|
||||||
|
|
||||||
|
<TextView android:background="#575757" android:text="this is sample text this is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample textthis is sample text" android:textColor="#ffffff" android:id="@+id/WizardTextBody" android:textSize="8pt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="20dip"></TextView>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
<TableRow android:background="#000000" android:id="@+id/TableRow01" android:textColor="#00ff00" android:layout_width="fill_parent" android:layout_height="30px" android:layout_marginTop="10dip" android:paddingTop="10dip">
|
||||||
|
<Button android:text="Back" android:id="@+id/btnWizard1" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
<Button android:text="Next" android:id="@+id/btnWizard2" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -130,9 +130,32 @@
|
||||||
<string name="pref_general_group">General</string>
|
<string name="pref_general_group">General</string>
|
||||||
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
<string name="pref_start_boot_title">Start Orbot on Boot</string>
|
||||||
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
<string name="pref_start_boot_summary">Automatically start Orbot and connect Tor when your Android device boots</string>
|
||||||
|
<!-- New Wizard Strings -->
|
||||||
|
<!-- Title Screen -->
|
||||||
|
<string name="wizard_title_msg">Orbot brings Tor to Android \n\nTor helps you defend against a form of network surveillance that threatens privacy, confidential business activity and relationships, and state security known as traffic analysis</string>
|
||||||
|
<!-- Warning screen -->
|
||||||
|
<string name="wizard_warning_title">Warning</string>
|
||||||
|
<string name="wizard_warning_msg">Simply installing Orbot will not automatically anonymize your mobile traffic.\n\nPlease follow the following steps to get started</string>
|
||||||
|
<!-- Permissions screen -->
|
||||||
|
<string name="wizard_permissions_title">Permissions</string>
|
||||||
|
<string name="wizard_permissions_root_msg1">Orbot has detected that you have root permissions enabled. To enable \'Transparent Proxying\', please grant superuser privileges to Orbot</string>
|
||||||
|
<string name="wizard_permissions_root_msg2">If you choose to continue without providing superuser privileges, make sure to use apps made to work with orbot</string>
|
||||||
|
<string name="wizard_permissions_msg">Orbot has detected that you do not have root permissions.\nTransparent Proxying is not possible without superuser privileges.\nMake sure to use apps that have been configured to work with Orbot</string>
|
||||||
|
<!-- TipsAndTricks screen -->
|
||||||
|
<string name="wizard_tips_title">Orbot configured Apps</string>
|
||||||
|
<string name="wizard_tips_gibberbot">Gibberbot - Secure instant messaging client for Android</string>
|
||||||
|
<string name="wizard_tips_firefox">Firefox - Android browser - To be used along with ProxyMob Add-on </string>
|
||||||
|
<string name="wizard_tips_proxymob">ProxyMob - Simple Firefox Add-on for setting HTTP, SOCKS and SSL proxy settings</string>
|
||||||
|
<string name="gibberbot_apk_url">https://market.android.com/details?id=info.guardianproject.otr.app.im</string>
|
||||||
|
<string name="firefox_apk_url">https://market.android.com/details?id=org.mozilla.firefox</string>
|
||||||
|
<string name="proxymob_url">https://addons.mozilla.org/mobile/downloads/latest/251558/type:attachment/addon-251558-latest.xpi?src=addon-detail</string>
|
||||||
|
<!-- Transparent Proxy screen -->
|
||||||
|
<string name="wizard_transproxy_title">Transparent Proxy</string>
|
||||||
|
<string name="wizard_transproxy_msg">Transparent Proxying allows you to redirect client requests without any special configuration or knowledge at the client.</string>
|
||||||
|
<string name="wizard_transproxy_hint">(Check this box if you have no idea what we are talking about)</string>
|
||||||
|
<string name="wizard_transproxy_none">None</string>
|
||||||
|
|
||||||
<string name="pref_transparent_tethering_title">Tor Tethering</string>
|
<string name="pref_transparent_tethering_title">Tor Tethering</string>
|
||||||
<string name="pref_transparent_tethering_summary">Enable Tor Transparent Proxying for Wifi and USB Tethered Devices</string>
|
<string name="pref_transparent_tethering_summary">Enable Tor Transparent Proxying for Wifi and USB Tethered Devices</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<color name="custom_theme_color">#333</color>
|
||||||
|
<style name="DefaultTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<item name="android:windowBackground">@drawable/bgtitanium</item>
|
||||||
|
<item name="android:windowNoTitle">true</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
|
@ -0,0 +1,183 @@
|
||||||
|
package org.torproject.android;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.RadioButton;
|
||||||
|
import android.widget.RadioGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
public class ConfigureTransProxy extends Activity implements TorConstants {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private int flag = 0;
|
||||||
|
|
||||||
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
context = this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
|
||||||
|
super.onStart();
|
||||||
|
setContentView(R.layout.layout_wizard_root);
|
||||||
|
|
||||||
|
stepSix();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void stepSix(){
|
||||||
|
|
||||||
|
String title = context.getString(R.string.wizard_transproxy_title);
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
Button back = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
next.setEnabled(false);
|
||||||
|
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), Permissions.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
//Dirty flag variable - improve logic
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if( flag == 1 )
|
||||||
|
context.startActivity(new Intent(context, AppManager.class));
|
||||||
|
|
||||||
|
else
|
||||||
|
showWizardFinal();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
RadioGroup mRadioGroup = (RadioGroup)findViewById(R.id.radioGroup);
|
||||||
|
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener (){
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(RadioGroup group, int checkedId){
|
||||||
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
next.setEnabled(true);
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
showWizardFinal();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
RadioButton rb0 = (RadioButton)findViewById(R.id.radio0);
|
||||||
|
RadioButton rb1 = (RadioButton)findViewById(R.id.radio1);
|
||||||
|
RadioButton rb2 = (RadioButton)findViewById(R.id.radio2);
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT, rb0.isChecked());
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT_ALL, rb0.isChecked());
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
if(rb0.isChecked())
|
||||||
|
{
|
||||||
|
pEdit.putString("radiobutton","rb0");
|
||||||
|
pEdit.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(rb1.isChecked())
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT, true);
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT_ALL, false);
|
||||||
|
pEdit.putString("radiobutton","rb1");
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
context.startActivity(new Intent(context, AppManager.class));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if(rb2.isChecked())
|
||||||
|
{
|
||||||
|
pEdit.putString("radiobutton", "rb2");
|
||||||
|
pEdit.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,133 @@
|
||||||
|
package org.torproject.android;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class LotsaText extends Activity implements TorConstants{
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
context = this;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
|
||||||
|
super.onStart();
|
||||||
|
setContentView(R.layout.scrollingtext_buttons_view);
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
boolean wizardScreen1 = prefs.getBoolean("wizardscreen1",true);
|
||||||
|
if(wizardScreen1)
|
||||||
|
stepOne();
|
||||||
|
else
|
||||||
|
stepTwo();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void stepOne() {
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
pEdit.putBoolean("wizardscreen1",true);
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
String title = context.getString(R.string.wizard_title);
|
||||||
|
String msg = context.getString(R.string.wizard_title_msg);
|
||||||
|
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody));
|
||||||
|
txtBody.setText(msg);
|
||||||
|
|
||||||
|
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
ImageView img = (ImageView) findViewById(R.id.orbot_image);
|
||||||
|
|
||||||
|
btn1.setVisibility(Button.INVISIBLE);
|
||||||
|
img.setImageResource(R.drawable.tor);
|
||||||
|
|
||||||
|
btn2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
stepTwo();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stepTwo() {
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
pEdit.putBoolean("wizardscreen1",false);
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
setContentView(R.layout.scrollingtext_buttons_view);
|
||||||
|
String title = context.getString(R.string.wizard_warning_title);
|
||||||
|
String msg = context.getString(R.string.wizard_warning_msg);
|
||||||
|
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody));
|
||||||
|
txtBody.setText(msg);
|
||||||
|
|
||||||
|
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
ImageView img = (ImageView) findViewById(R.id.orbot_image);
|
||||||
|
|
||||||
|
btn1.setVisibility(Button.VISIBLE);
|
||||||
|
img.setImageResource(R.drawable.warning);
|
||||||
|
|
||||||
|
btn1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
stepOne();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btn2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), Permissions.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
package org.torproject.android;
|
package org.torproject.android;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
@ -269,253 +272,222 @@ public class Orbot extends Activity implements OnLongClickListener, TorConstants
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see android.app.Activity#onPause()
|
* @see android.app.Activity#onPause()
|
||||||
*/
|
*/
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
hideProgressDialog();
|
hideProgressDialog();
|
||||||
|
|
||||||
if (aDialog != null)
|
if (aDialog != null)
|
||||||
aDialog.dismiss();
|
aDialog.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void onSaveInstanceState(Bundle savedInstanceState) {
|
||||||
* i think we need to suport this onSave/Restore code more b/c i think
|
// Save UI state changes to the savedInstanceState.
|
||||||
* when someone rotates the screen, and the state is lost during setup
|
// This bundle will be passed to onCreate if the process is
|
||||||
* etc it causes problems. this might be the place to solve that in the wizard - hmm this prob coz android restarts the activity when the screen is rotated. this will prob be fixed(?) when
|
// killed and restarted.
|
||||||
we redesign the wizard into a view not just a dialogbox
|
// etc.
|
||||||
cool
|
super.onSaveInstanceState(savedInstanceState);
|
||||||
**/
|
}
|
||||||
public void onSaveInstanceState(Bundle savedInstanceState) {
|
|
||||||
// Save UI state changes to the savedInstanceState.
|
|
||||||
// This bundle will be passed to onCreate if the process is
|
|
||||||
// killed and restarted.
|
|
||||||
// etc.
|
|
||||||
super.onSaveInstanceState(savedInstanceState);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onRestoreInstanceState(Bundle savedInstanceState) {
|
|
||||||
super.onRestoreInstanceState(savedInstanceState);
|
|
||||||
// Restore UI state from the savedInstanceState.
|
|
||||||
// This bundle has also been passed to onCreate.
|
|
||||||
|
|
||||||
//we do nothing here
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* confirm with the user that they want to open a browser to connect to https://check.torproject.org
|
|
||||||
and then launch the URL.
|
|
||||||
this may be where the TorCheck API code/UI is added, though always offering the web-based confirm
|
|
||||||
should be an option, since users know it
|
|
||||||
|
|
||||||
**/
|
|
||||||
private void doTorCheck ()
|
|
||||||
{
|
|
||||||
|
|
||||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
switch (which){
|
|
||||||
case DialogInterface.BUTTON_POSITIVE:
|
|
||||||
|
|
||||||
openBrowser(URL_TOR_CHECK);
|
public void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
// Restore UI state from the savedInstanceState.
|
||||||
|
// This bundle has also been passed to onCreate.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doTorCheck ()
|
||||||
|
{
|
||||||
|
|
||||||
break;
|
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
case DialogInterface.BUTTON_NEGATIVE:
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
switch (which){
|
||||||
|
case DialogInterface.BUTTON_POSITIVE:
|
||||||
|
|
||||||
//do nothing
|
openBrowser(URL_TOR_CHECK);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
|
|
||||||
.setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
break;
|
||||||
* this adds a port to the list of hidden service ports
|
|
||||||
* we might want to add remove/disable port too
|
|
||||||
* this is used by external apps that launch an intent
|
|
||||||
* to request a hidden service on a specific port
|
|
||||||
* currently, we haven't promoted this intent API or capability
|
|
||||||
* that much, but we hope to
|
|
||||||
**/
|
|
||||||
private void enableHiddenServicePort (int hsPort)
|
|
||||||
{
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
Editor pEdit = prefs.edit();
|
|
||||||
|
|
||||||
String hsPortString = prefs.getString("pref_hs_ports", "");
|
case DialogInterface.BUTTON_NEGATIVE:
|
||||||
|
|
||||||
if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
|
//do nothing
|
||||||
hsPortString += ',' + hsPort;
|
break;
|
||||||
else
|
}
|
||||||
hsPortString = hsPort + "";
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pEdit.putString("pref_hs_ports", hsPortString);
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||||
pEdit.putBoolean("pref_hs_enable", true);
|
builder.setMessage(R.string.tor_check).setPositiveButton(R.string.btn_okay, dialogClickListener)
|
||||||
|
.setNegativeButton(R.string.btn_cancel, dialogClickListener).show();
|
||||||
|
|
||||||
pEdit.commit();
|
}
|
||||||
|
|
||||||
String onionHostname = prefs.getString("pref_hs_hostname","");
|
private void enableHiddenServicePort (int hsPort)
|
||||||
|
{
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
|
||||||
Intent nResult = new Intent();
|
String hsPortString = prefs.getString("pref_hs_ports", "");
|
||||||
nResult.putExtra("hs_host", onionHostname);
|
|
||||||
setResult(RESULT_OK, nResult);
|
|
||||||
|
|
||||||
}
|
if (hsPortString.length() > 0 && hsPortString.indexOf(hsPort+"")==-1)
|
||||||
|
hsPortString += ',' + hsPort;
|
||||||
|
else
|
||||||
|
hsPortString = hsPort + "";
|
||||||
|
|
||||||
/* (non-Javadoc)
|
pEdit.putString("pref_hs_ports", hsPortString);
|
||||||
* @see android.app.Activity#onResume()
|
pEdit.putBoolean("pref_hs_enable", true);
|
||||||
*/
|
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
//this is where we make sure we have a handle to ITorService
|
pEdit.commit();
|
||||||
bindService();
|
|
||||||
|
|
||||||
//this is a hack which basically pings the ITorService to update our status for the UI
|
String onionHostname = prefs.getString("pref_hs_hostname","");
|
||||||
// - the dialogbox/progressbar ?
|
|
||||||
// right, this was for when the label displayed the status, and not the progress, so it may
|
|
||||||
// not make as much sense now; there is a bunch of loose ends like this that should be
|
|
||||||
// cleaned up with the transition to the progressdialog - ok
|
|
||||||
updateStatus("");
|
|
||||||
|
|
||||||
//this checks if we were launched via an Intent call from another app or activity
|
Intent nResult = new Intent();
|
||||||
//- how does this matter? if Orbot has been launched via an Intent or not ?
|
nResult.putExtra("hs_host", onionHostname);
|
||||||
//we want to know if this is a launch by the user from the home screen, or via back, or some
|
setResult(RESULT_OK, nResult);
|
||||||
// standard interaction, or if it is another app launching Orbot for a programmatic/API request
|
|
||||||
// this is how we can add more functionality into ORlib, for instance via Intent launching - hmm ok
|
|
||||||
if (getIntent() == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
String action = getIntent().getAction();
|
}
|
||||||
|
|
||||||
if (action == null)
|
/* (non-Javadoc)
|
||||||
return;
|
* @see android.app.Activity#onResume()
|
||||||
|
*/
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
//this relates to the previously discussed hidden port capability
|
bindService();
|
||||||
if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
|
|
||||||
{
|
|
||||||
|
|
||||||
//tell the user an app is trying to open a hidden port and ask for permission
|
updateStatus("");
|
||||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
switch (which){
|
|
||||||
case DialogInterface.BUTTON_POSITIVE:
|
|
||||||
|
|
||||||
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
if (getIntent() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
enableHiddenServicePort (hsPort);
|
String action = getIntent().getAction();
|
||||||
|
|
||||||
finish();
|
if (action == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (action.equals("org.torproject.android.REQUEST_HS_PORT"))
|
||||||
|
{
|
||||||
|
|
||||||
break;
|
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
switch (which){
|
||||||
|
case DialogInterface.BUTTON_POSITIVE:
|
||||||
|
|
||||||
case DialogInterface.BUTTON_NEGATIVE:
|
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
||||||
//No button clicked
|
|
||||||
finish();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
enableHiddenServicePort (hsPort);
|
||||||
|
|
||||||
String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
|
finish();
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
|
||||||
builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
|
|
||||||
.setNegativeButton("Deny", dialogClickListener).show();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
break;
|
||||||
else if (action.equals("org.torproject.android.START_TOR")) //this is the intent used to start Tor from another app, again meant for ORlib functionality
|
|
||||||
{
|
|
||||||
autoStartOnBind = true;
|
|
||||||
|
|
||||||
if (mService == null)
|
case DialogInterface.BUTTON_NEGATIVE:
|
||||||
bindService();
|
//No button clicked
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
int hsPort = getIntent().getIntExtra("hs_port", -1);
|
||||||
else
|
|
||||||
{
|
|
||||||
//hmm not sure when this is ever reached honestly ;P
|
|
||||||
//but it looks like a general UI reset
|
|
||||||
|
|
||||||
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
String requestMsg = "An app wants to open a server port (" + hsPort + ") to the Tor network. This is safe if you trust the app.";
|
||||||
mNotificationManager.cancelAll();
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||||
|
builder.setMessage(requestMsg).setPositiveButton("Allow", dialogClickListener)
|
||||||
|
.setNegativeButton("Deny", dialogClickListener).show();
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
|
|
||||||
boolean showWizard = prefs.getBoolean("show_wizard",true);
|
}
|
||||||
|
else if (action.equals("org.torproject.android.START_TOR"))
|
||||||
|
{
|
||||||
|
autoStartOnBind = true;
|
||||||
|
|
||||||
if (showWizard)
|
if (mService == null)
|
||||||
{
|
bindService();
|
||||||
|
|
||||||
Editor pEdit = prefs.edit();
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
pEdit.putBoolean("show_wizard",false);
|
//setTitle(getString(R.string.app_name) + ' ' + getString(R.string.app_version));
|
||||||
|
|
||||||
pEdit.commit();
|
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
mNotificationManager.cancelAll();
|
||||||
|
|
||||||
new WizardHelper(this).showWizard();
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
|
||||||
}
|
boolean showWizard = prefs.getBoolean("show_wizard",true);
|
||||||
|
|
||||||
}
|
if (showWizard)
|
||||||
}
|
{
|
||||||
|
|
||||||
/* (non-Javadoc)
|
Editor pEdit = prefs.edit();
|
||||||
* @see android.app.Activity#onStart()
|
|
||||||
*/
|
|
||||||
protected void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
|
pEdit.putBoolean("show_wizard",false);
|
||||||
|
|
||||||
updateStatus ("");
|
pEdit.commit();
|
||||||
|
|
||||||
}
|
startActivityForResult(new Intent(getBaseContext(), LotsaText.class), 1);
|
||||||
|
|
||||||
/* (non-Javadoc)
|
}
|
||||||
* @see android.app.Activity#onStop()
|
|
||||||
*/
|
|
||||||
protected void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
|
|
||||||
//unbindService();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see android.app.Activity#onStart()
|
||||||
|
*/
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
|
||||||
|
|
||||||
/*
|
updateStatus ("");
|
||||||
* Launch the system activity for Uri viewing with the provided url
|
|
||||||
*/
|
|
||||||
private void openBrowser(String url)
|
|
||||||
{
|
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see android.app.Activity#onStop()
|
||||||
|
*/
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
|
||||||
|
//unbindService();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Show the help view - a popup dialog
|
|
||||||
*/
|
|
||||||
private void showHelp ()
|
|
||||||
{
|
|
||||||
|
|
||||||
new WizardHelper(this).showWizard();
|
|
||||||
}
|
/*
|
||||||
|
* Launch the system activity for Uri viewing with the provided url
|
||||||
|
*/
|
||||||
|
private void openBrowser(String url)
|
||||||
|
{
|
||||||
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Show the help view - a popup dialog
|
||||||
|
*/
|
||||||
|
private void showHelp ()
|
||||||
|
{
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
pEdit.putBoolean("wizardscreen1",true);
|
||||||
|
pEdit.commit();
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), LotsaText.class), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -0,0 +1,229 @@
|
||||||
|
package org.torproject.android;
|
||||||
|
|
||||||
|
import org.torproject.android.service.TorService;
|
||||||
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
|
import org.torproject.android.service.TorTransProxy;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
public class Permissions extends Activity implements TorConstants {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
context = this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
|
||||||
|
super.onStart();
|
||||||
|
setContentView(R.layout.layout_wizard_permissions);
|
||||||
|
|
||||||
|
stepThree();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stepThree(){
|
||||||
|
|
||||||
|
boolean hasRoot = TorServiceUtils.checkRootAccess();
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
pEdit.putBoolean("has_root",hasRoot);
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
if (hasRoot)
|
||||||
|
{
|
||||||
|
stepFourRoot();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stepFour();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stepFourRoot(){
|
||||||
|
|
||||||
|
String title = context.getString(R.string.wizard_permissions_title);
|
||||||
|
String msg1 = context.getString(R.string.wizard_permissions_root_msg1);
|
||||||
|
String msg2 = context.getString(R.string.wizard_permissions_root_msg2);
|
||||||
|
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
TextView txtBody1 = ((TextView)findViewById(R.id.WizardTextBody1));
|
||||||
|
txtBody1.setText(msg1);
|
||||||
|
|
||||||
|
|
||||||
|
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
||||||
|
txtBody2.setText(msg2);
|
||||||
|
txtBody2.setVisibility(TextView.VISIBLE);
|
||||||
|
|
||||||
|
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
||||||
|
grantPermissions.setVisibility(Button.VISIBLE);
|
||||||
|
|
||||||
|
Button back = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
next.setEnabled(false);
|
||||||
|
|
||||||
|
CheckBox consent = (CheckBox)findViewById(R.id.checkBox);
|
||||||
|
consent.setVisibility(CheckBox.VISIBLE);
|
||||||
|
|
||||||
|
consent.setOnCheckedChangeListener(new OnCheckedChangeListener (){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView,
|
||||||
|
boolean isChecked) {
|
||||||
|
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
|
||||||
|
Editor pEdit = prefs.edit();
|
||||||
|
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT, !isChecked);
|
||||||
|
pEdit.putBoolean(PREF_TRANSPARENT_ALL, !isChecked);
|
||||||
|
|
||||||
|
pEdit.commit();
|
||||||
|
|
||||||
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
if(isChecked)
|
||||||
|
next.setEnabled(true);
|
||||||
|
else
|
||||||
|
next.setEnabled(false);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
grantPermissions.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
//Check and Install iptables - TorTransProxy.testOwnerModule(this)
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
boolean hasRoot = prefs.getBoolean("has_root",false);
|
||||||
|
|
||||||
|
if (hasRoot)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
int resp = TorTransProxy.testOwnerModule(context);
|
||||||
|
|
||||||
|
if (resp < 0)
|
||||||
|
{
|
||||||
|
hasRoot = false;
|
||||||
|
Toast.makeText(context, "ERROR: IPTables OWNER module not available", Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
|
Log.i(TorService.TAG,"ERROR: IPTables OWNER module not available");
|
||||||
|
stepFour();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
hasRoot = false;
|
||||||
|
Log.d(TorService.TAG,"ERROR: IPTables OWNER module not available",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), ConfigureTransProxy.class), 1);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), LotsaText.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), TipsAndTricks.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stepFour(){
|
||||||
|
|
||||||
|
Toast.makeText(context, "NON ROOT FUNC", Toast.LENGTH_SHORT).show();
|
||||||
|
String title = context.getString(R.string.wizard_permissions_title);
|
||||||
|
String msg = context.getString(R.string.wizard_permissions_msg);
|
||||||
|
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody1));
|
||||||
|
txtBody.setText(msg);
|
||||||
|
|
||||||
|
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
btn2.setEnabled(true);
|
||||||
|
|
||||||
|
|
||||||
|
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
||||||
|
txtBody2.setVisibility(TextView.GONE);
|
||||||
|
|
||||||
|
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
||||||
|
grantPermissions.setVisibility(Button.GONE);
|
||||||
|
|
||||||
|
|
||||||
|
CheckBox consent = (CheckBox)findViewById(R.id.checkBox);
|
||||||
|
consent.setVisibility(CheckBox.GONE);
|
||||||
|
|
||||||
|
btn1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), LotsaText.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btn2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), TipsAndTricks.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
package org.torproject.android;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class TipsAndTricks extends Activity implements TorConstants {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
context = this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
|
||||||
|
super.onStart();
|
||||||
|
setContentView(R.layout.layout_wizard_tips);
|
||||||
|
|
||||||
|
stepFive();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void stepFive(){
|
||||||
|
|
||||||
|
String title = context.getString(R.string.wizard_tips_title);
|
||||||
|
TextView txtTitle = ((TextView)findViewById(R.id.WizardTextTitle));
|
||||||
|
txtTitle.setText(title);
|
||||||
|
|
||||||
|
Button btn1 = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
|
||||||
|
|
||||||
|
btn1.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
|
||||||
|
String url = context.getString(R.string.gibberbot_apk_url);
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button btn2 = (Button)findViewById(R.id.WizardRootButtonInstallFirefox);
|
||||||
|
|
||||||
|
btn2.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
|
||||||
|
String url = context.getString(R.string.firefox_apk_url);
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button btn3 = (Button)findViewById(R.id.WizardRootButtonInstallProxyMob);
|
||||||
|
|
||||||
|
btn3.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
|
||||||
|
String url = context.getString(R.string.proxymob_url);
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button back = ((Button)findViewById(R.id.btnWizard1));
|
||||||
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
startActivityForResult(new Intent(getBaseContext(), Permissions.class), 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
showWizardFinal();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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,71 +0,0 @@
|
||||||
package org.torproject.android;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.DialogInterface.OnClickListener;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
public class WizardActivity extends Activity implements OnClickListener
|
|
||||||
{
|
|
||||||
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
|
|
||||||
this.setContentView(R.layout.layout_help);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStart() {
|
|
||||||
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
showStep1();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void showStep1()
|
|
||||||
{
|
|
||||||
showDialog("Test","","foo","bar",this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showDialog (String title, String msg, String button1, String button2, OnClickListener ocListener)
|
|
||||||
{
|
|
||||||
|
|
||||||
new AlertDialog.Builder(this)
|
|
||||||
.setInverseBackgroundForced(true)
|
|
||||||
.setTitle(title)
|
|
||||||
.setMessage(msg)
|
|
||||||
.setNeutralButton(button1, ocListener)
|
|
||||||
.setNegativeButton(button2, ocListener)
|
|
||||||
.show();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface arg0, int arg1) {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -215,7 +215,7 @@ public class WizardHelper implements TorConstants {
|
||||||
LayoutInflater li = LayoutInflater.from(context);
|
LayoutInflater li = LayoutInflater.from(context);
|
||||||
View view = li.inflate(R.layout.layout_wizard_tips, null);
|
View view = li.inflate(R.layout.layout_wizard_tips, null);
|
||||||
|
|
||||||
Button btn1 = (Button)view.findViewById(R.id.WizardRootButtonInstallOtrchat);
|
Button btn1 = (Button)view.findViewById(R.id.WizardRootButtonInstallGibberbot);
|
||||||
|
|
||||||
btn1.setOnClickListener(new OnClickListener() {
|
btn1.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ public class WizardHelper implements TorConstants {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Button btn2 = (Button)view.findViewById(R.id.WizardRootButtonInstallOrweb);
|
Button btn2 = (Button)view.findViewById(R.id.WizardRootButtonInstallFirefox);
|
||||||
|
|
||||||
btn2.setOnClickListener(new OnClickListener() {
|
btn2.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ public class WizardHelper implements TorConstants {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Button btn3 = (Button)view.findViewById(R.id.WizardRootButtonProxyHelp);
|
Button btn3 = (Button)view.findViewById(R.id.WizardRootButtonInstallProxyMob);
|
||||||
|
|
||||||
btn3.setOnClickListener(new OnClickListener() {
|
btn3.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ public class WizardHelper implements TorConstants {
|
||||||
|
|
||||||
public void showWizardRootConfigureTorification()
|
public void showWizardRootConfigureTorification()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
LayoutInflater li = LayoutInflater.from(context);
|
LayoutInflater li = LayoutInflater.from(context);
|
||||||
View view = li.inflate(R.layout.layout_wizard_root, null);
|
View view = li.inflate(R.layout.layout_wizard_root, null);
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ public class WizardHelper implements TorConstants {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,9 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
* Check if we have root access
|
* Check if we have root access
|
||||||
* @return boolean true if we have root
|
* @return boolean true if we have root
|
||||||
*/
|
*/
|
||||||
public static boolean checkRootAccess() {
|
/*
|
||||||
|
public static boolean checkRootAccess() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
StringBuilder log = new StringBuilder();
|
StringBuilder log = new StringBuilder();
|
||||||
|
@ -45,7 +47,40 @@ public class TorServiceUtils implements TorServiceConstants {
|
||||||
TorService.logMessage("Could not acquire root permissions");
|
TorService.logMessage("Could not acquire root permissions");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static boolean checkRootAccess(){
|
||||||
|
|
||||||
|
StringBuilder log = new StringBuilder();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
// Check if Superuser.apk exists
|
||||||
|
File file = new File("/system/app/Superuser.apk");
|
||||||
|
|
||||||
|
//Check for 'su' binary
|
||||||
|
String[] cmd = {"which su"};
|
||||||
|
int exitCode = TorServiceUtils.doShellCommand(cmd, log, false, true);
|
||||||
|
|
||||||
|
if (file.exists() && exitCode == 0) {
|
||||||
|
TorService.logMessage("Can acquire root permissions");
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
//this means that there is no root to be had (normally) so we won't log anything
|
||||||
|
TorService.logException("Error checking for root access",e);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
TorService.logException("Error checking for root access",e);
|
||||||
|
//this means that there is no root to be had (normally)
|
||||||
|
}
|
||||||
|
|
||||||
|
TorService.logMessage("Could not acquire root permissions");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static int findProcessId(String command)
|
public static int findProcessId(String command)
|
||||||
|
|
Loading…
Reference in New Issue