vpn changes
This commit is contained in:
parent
09bdd8fd29
commit
21b75b4c56
16
.project
16
.project
|
@ -5,6 +5,12 @@
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
||||||
<buildSpec>
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
|
||||||
<arguments>
|
<arguments>
|
||||||
|
@ -30,10 +36,20 @@
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
</buildSpec>
|
</buildSpec>
|
||||||
<natures>
|
<natures>
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
|
|
@ -3,17 +3,17 @@
|
||||||
package="org.torproject.android"
|
package="org.torproject.android"
|
||||||
android:versionName="14.1.4-noPIE"
|
android:versionName="14.1.4-noPIE"
|
||||||
android:versionCode="132"
|
android:versionCode="132"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
>
|
>
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="9" android:maxSdkVersion="20" android:targetSdkVersion="19"/>
|
<uses-sdk android:minSdkVersion="9" android:maxSdkVersion="20" android:targetSdkVersion="19"/>
|
||||||
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
||||||
|
|
||||||
<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"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
||||||
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
||||||
|
|
||||||
<application android:name=".OrbotApp" android:icon="@drawable/ic_launcher"
|
<application android:name=".OrbotApp" android:icon="@drawable/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
@ -52,11 +52,11 @@
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.START_TOR" />
|
<action android:name="org.torproject.android.START_TOR" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -76,56 +76,56 @@
|
||||||
<!--
|
<!--
|
||||||
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
||||||
-->
|
-->
|
||||||
<activity
|
<activity
|
||||||
android:name=".service.DummyActivity"
|
android:name=".service.DummyActivity"
|
||||||
android:theme="@android:style/Theme.NoDisplay"
|
android:theme="@android:style/Theme.NoDisplay"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:allowTaskReparenting="true"
|
android:allowTaskReparenting="true"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:alwaysRetainTaskState="false"
|
android:alwaysRetainTaskState="false"
|
||||||
android:stateNotNeeded="true"
|
android:stateNotNeeded="true"
|
||||||
android:clearTaskOnLaunch="true"
|
android:clearTaskOnLaunch="true"
|
||||||
android:finishOnTaskLaunch="true"
|
android:finishOnTaskLaunch="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
<activity android:name=".wizard.LotsaText" android:exported="false"/>
|
<activity android:name=".wizard.LotsaText" android:exported="false"/>
|
||||||
<activity android:name=".wizard.Permissions" android:exported="false"/>
|
<activity android:name=".wizard.Permissions" android:exported="false"/>
|
||||||
<activity android:name=".wizard.TipsAndTricks" android:exported="false"/>
|
<activity android:name=".wizard.TipsAndTricks" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ConfigureTransProxy" android:exported="false"/>
|
<activity android:name=".wizard.ConfigureTransProxy" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
<activity android:name=".wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
||||||
|
|
||||||
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
|
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
|
||||||
<activity android:name=".settings.AppManager" android:label="@string/app_name"/>
|
<activity android:name=".settings.AppManager" android:label="@string/app_name"/>
|
||||||
|
|
||||||
<service android:enabled="true"
|
<service android:enabled="true"
|
||||||
android:name=".service.TorService"
|
android:name=".service.TorService"
|
||||||
android:permission="org.torproject.android.MANAGE_TOR"
|
android:permission="org.torproject.android.MANAGE_TOR"
|
||||||
android:stopWithTask="false"
|
android:stopWithTask="false"
|
||||||
>
|
>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.torproject.android.service.ITorService" />
|
<action android:name="org.torproject.android.service.ITorService" />
|
||||||
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<receiver android:name=".OnBootReceiver">
|
<receiver android:name=".OnBootReceiver">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
||||||
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
|
||||||
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
||||||
android:permission="android.permission.BIND_VPN_SERVICE">
|
android:permission="android.permission.BIND_VPN_SERVICE">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.net.VpnService"/>
|
<action android:name="android.net.VpnService"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,17 @@
|
||||||
package="org.torproject.android"
|
package="org.torproject.android"
|
||||||
android:versionName="14.1.4-PIE"
|
android:versionName="14.1.4-PIE"
|
||||||
android:versionCode="133"
|
android:versionCode="133"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
>
|
>
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="21" android:maxSdkVersion="21" android:targetSdkVersion="21"/>
|
<uses-sdk android:minSdkVersion="21" android:maxSdkVersion="21" android:targetSdkVersion="21"/>
|
||||||
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
||||||
|
|
||||||
<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"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
||||||
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
||||||
|
|
||||||
<application android:name=".OrbotApp" android:icon="@drawable/ic_launcher"
|
<application android:name=".OrbotApp" android:icon="@drawable/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
@ -52,11 +52,11 @@
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.START_TOR" />
|
<action android:name="org.torproject.android.START_TOR" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -76,56 +76,56 @@
|
||||||
<!--
|
<!--
|
||||||
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
||||||
-->
|
-->
|
||||||
<activity
|
<activity
|
||||||
android:name=".service.DummyActivity"
|
android:name=".service.DummyActivity"
|
||||||
android:theme="@android:style/Theme.NoDisplay"
|
android:theme="@android:style/Theme.NoDisplay"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:allowTaskReparenting="true"
|
android:allowTaskReparenting="true"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:alwaysRetainTaskState="false"
|
android:alwaysRetainTaskState="false"
|
||||||
android:stateNotNeeded="true"
|
android:stateNotNeeded="true"
|
||||||
android:clearTaskOnLaunch="true"
|
android:clearTaskOnLaunch="true"
|
||||||
android:finishOnTaskLaunch="true"
|
android:finishOnTaskLaunch="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
<activity android:name=".wizard.LotsaText" android:exported="false"/>
|
<activity android:name=".wizard.LotsaText" android:exported="false"/>
|
||||||
<activity android:name=".wizard.Permissions" android:exported="false"/>
|
<activity android:name=".wizard.Permissions" android:exported="false"/>
|
||||||
<activity android:name=".wizard.TipsAndTricks" android:exported="false"/>
|
<activity android:name=".wizard.TipsAndTricks" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ConfigureTransProxy" android:exported="false"/>
|
<activity android:name=".wizard.ConfigureTransProxy" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
<activity android:name=".wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
||||||
|
|
||||||
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
|
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
|
||||||
<activity android:name=".settings.AppManager" android:label="@string/app_name"/>
|
<activity android:name=".settings.AppManager" android:label="@string/app_name"/>
|
||||||
|
|
||||||
<service android:enabled="true"
|
<service android:enabled="true"
|
||||||
android:name=".service.TorService"
|
android:name=".service.TorService"
|
||||||
android:permission="org.torproject.android.MANAGE_TOR"
|
android:permission="org.torproject.android.MANAGE_TOR"
|
||||||
android:stopWithTask="false"
|
android:stopWithTask="false"
|
||||||
>
|
>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.torproject.android.service.ITorService" />
|
<action android:name="org.torproject.android.service.ITorService" />
|
||||||
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<receiver android:name=".OnBootReceiver">
|
<receiver android:name=".OnBootReceiver">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
||||||
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
|
||||||
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
||||||
android:permission="android.permission.BIND_VPN_SERVICE">
|
android:permission="android.permission.BIND_VPN_SERVICE">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.net.VpnService"/>
|
<action android:name="android.net.VpnService"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.torproject.android"
|
package="org.sandroproxy.ony"
|
||||||
android:versionName="14.1.4-noPIE"
|
android:versionName="14.1.4-noPIE"
|
||||||
android:versionCode="132"
|
android:versionCode="132"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
>
|
>
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="9" android:maxSdkVersion="20" android:targetSdkVersion="19"/>
|
<uses-sdk android:minSdkVersion="9" android:maxSdkVersion="20" android:targetSdkVersion="19"/>
|
||||||
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
<permission android:name="org.torproject.android.MANAGE_TOR" android:label="@string/permission_manage_tor_label" android:description="@string/permission_manage_tor_description" android:protectionLevel="signature"></permission>
|
||||||
|
|
||||||
<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"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
||||||
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
<uses-permission android:name="org.torproject.android.MANAGE_TOR"/>
|
||||||
|
|
||||||
<application android:name=".OrbotApp" android:icon="@drawable/ic_launcher"
|
<application android:name="org.sandroproxy.ony.OrbotApp" android:icon="@drawable/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:description="@string/app_description"
|
android:description="@string/app_description"
|
||||||
android:configChanges="locale|orientation|screenSize"
|
android:configChanges="locale|orientation|screenSize"
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
android:largeHeap="false"
|
android:largeHeap="false"
|
||||||
>
|
>
|
||||||
|
|
||||||
<activity android:name=".Orbot"
|
<activity android:name="org.torproject.android.Orbot"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
|
@ -52,11 +52,11 @@
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
<action android:name="org.torproject.android.REQUEST_HS_PORT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<action android:name="org.torproject.android.START_TOR" />
|
<action android:name="org.torproject.android.START_TOR" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -76,56 +76,56 @@
|
||||||
<!--
|
<!--
|
||||||
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
<activity android:name=".OrbotDiagnosticsActivity" android:label="OrbotDiag"/>
|
||||||
-->
|
-->
|
||||||
<activity
|
<activity
|
||||||
android:name=".service.DummyActivity"
|
android:name="org.torproject.android.service.DummyActivity"
|
||||||
android:theme="@android:style/Theme.NoDisplay"
|
android:theme="@android:style/Theme.NoDisplay"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:allowTaskReparenting="true"
|
android:allowTaskReparenting="true"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:alwaysRetainTaskState="false"
|
android:alwaysRetainTaskState="false"
|
||||||
android:stateNotNeeded="true"
|
android:stateNotNeeded="true"
|
||||||
android:clearTaskOnLaunch="true"
|
android:clearTaskOnLaunch="true"
|
||||||
android:finishOnTaskLaunch="true"
|
android:finishOnTaskLaunch="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
<activity android:name=".wizard.LotsaText" android:exported="false"/>
|
<activity android:name="org.torproject.android.wizard.LotsaText" android:exported="false"/>
|
||||||
<activity android:name=".wizard.Permissions" android:exported="false"/>
|
<activity android:name="org.torproject.android.wizard.Permissions" android:exported="false"/>
|
||||||
<activity android:name=".wizard.TipsAndTricks" android:exported="false"/>
|
<activity android:name="org.torproject.android.wizard.TipsAndTricks" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ConfigureTransProxy" android:exported="false"/>
|
<activity android:name="org.torproject.android.wizard.ConfigureTransProxy" android:exported="false"/>
|
||||||
<activity android:name=".wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
<activity android:name="org.torproject.android.wizard.ChooseLocaleWizardActivity" android:exported="false"/>
|
||||||
|
|
||||||
<activity android:name=".settings.SettingsPreferences" android:label="@string/app_name"/>
|
<activity android:name="org.torproject.android.settings.SettingsPreferences" android:label="@string/app_name"/>
|
||||||
<activity android:name=".settings.AppManager" android:label="@string/app_name"/>
|
<activity android:name="org.torproject.android.settings.AppManager" android:label="@string/app_name"/>
|
||||||
|
|
||||||
<service android:enabled="true"
|
<service android:enabled="true"
|
||||||
android:name=".service.TorService"
|
android:name="org.torproject.android.service.TorService"
|
||||||
android:permission="org.torproject.android.MANAGE_TOR"
|
android:permission="org.torproject.android.MANAGE_TOR"
|
||||||
android:stopWithTask="false"
|
android:stopWithTask="false"
|
||||||
>
|
>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.torproject.android.service.ITorService" />
|
<action android:name="org.torproject.android.service.ITorService" />
|
||||||
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
<action android:name="org.torproject.android.service.TOR_SERVICE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<receiver android:name=".OnBootReceiver">
|
<receiver android:name="org.torproject.android.OnBootReceiver">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
||||||
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
|
||||||
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
<service android:name="org.torproject.android.vpn.OrbotVpnService"
|
||||||
android:permission="android.permission.BIND_VPN_SERVICE">
|
android:permission="android.permission.BIND_VPN_SERVICE">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.net.VpnService"/>
|
<action android:name="android.net.VpnService"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Sealed: true
|
Sealed: true
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,14 @@ EXTERNAL_ROOT := $(shell pwd)
|
||||||
# user building this will have to manually set NDK_PROCESSOR or NDK_TOOLCHAIN.
|
# user building this will have to manually set NDK_PROCESSOR or NDK_TOOLCHAIN.
|
||||||
CPU := $(shell uname -m)
|
CPU := $(shell uname -m)
|
||||||
ifeq ($(CPU),x86_64)
|
ifeq ($(CPU),x86_64)
|
||||||
NDK_PROCESSOR=x86_64
|
NDK_PROCESSOR=x86
|
||||||
else
|
else
|
||||||
NDK_PROCESSOR=x86
|
NDK_PROCESSOR=x86
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Android NDK setup
|
# Android NDK setup
|
||||||
NDK_BASE ?= /opt/android-ndk
|
NDK_BASE ?= /opt/android-ndk
|
||||||
NDK_PLATFORM_LEVEL ?= 9
|
NDK_PLATFORM_LEVEL ?= 19
|
||||||
NDK_ABI ?= arm
|
NDK_ABI ?= arm
|
||||||
NDK_TOOLCHAIN_VERSION=4.8
|
NDK_TOOLCHAIN_VERSION=4.8
|
||||||
NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_LEVEL)/arch-$(NDK_ABI)
|
NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_LEVEL)/arch-$(NDK_ABI)
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||||
<classpathentry exported="true" kind="lib" path="libs/android-support-v4.jar"/>
|
<classpathentry exported="true" kind="lib" path="libs/android-support-v4.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="libs/android-support-v7-appcompat.jar"/>
|
<classpathentry exported="true" kind="lib" path="libs/android-support-v7-appcompat.jar"/>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="src" path="gen"/>
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
<classpathentry kind="output" path="bin/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
##include ../OriginalDest/Android.mk
|
##include ../OriginalDest/Android.mk
|
||||||
##include ../external/badvpn/Android.mk
|
include ./external/badvpn/Android.mk
|
||||||
##include ../kalium-jni/jni/Android.mk
|
##include ../kalium-jni/jni/Android.mk
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
android:id="@+id/menu_verify_list"
|
android:id="@+id/menu_verify_list"
|
||||||
android:title="@string/menu_verify"
|
android:title="@string/menu_verify"
|
||||||
android:icon="@drawable/ic_action_browse"
|
android:icon="@drawable/ic_action_browse"
|
||||||
yourapp:showAsAction="always"
|
yourapp:showAsAction="always"
|
||||||
>
|
>
|
||||||
<menu>
|
<menu>
|
||||||
<item android:id="@+id/menu_verify"
|
<item android:id="@+id/menu_verify"
|
||||||
|
@ -65,11 +65,9 @@
|
||||||
yourapp:showAsAction="never"
|
yourapp:showAsAction="never"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
<!--
|
|
||||||
<item android:id="@+id/menu_vpn"
|
<item android:id="@+id/menu_vpn"
|
||||||
android:title="@string/menu_vpn"
|
android:title="@string/menu_vpn"
|
||||||
yourapp:showAsAction="never"/>
|
yourapp:showAsAction="never"/>
|
||||||
-->
|
|
||||||
|
|
||||||
<item android:id="@+id/menu_exit"
|
<item android:id="@+id/menu_exit"
|
||||||
android:title="@string/menu_exit"
|
android:title="@string/menu_exit"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Orbot</string>
|
<string name="app_name">Ony</string>
|
||||||
<string name="app_description">Orbot is a free proxy app that empowers other apps to use the internet more securely. Orbot uses Tor to encrypt your Internet traffic and then hides it by bouncing through a series of computers around the world. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.</string>
|
<string name="app_description">Orbot is a free proxy app that empowers other apps to use the internet more securely. Orbot uses Tor to encrypt your Internet traffic and then hides it by bouncing through a series of computers around the world. Tor is free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.</string>
|
||||||
<string name="internal_web_url">http://orbot/</string>
|
<string name="internal_web_url">http://orbot/</string>
|
||||||
<string name="default_web_url">http://check.torproject.org</string>
|
<string name="default_web_url">http://check.torproject.org</string>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -7,6 +7,7 @@ import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.sufficientlysecure.rootcommands.Shell;
|
import org.sufficientlysecure.rootcommands.Shell;
|
||||||
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
|
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
|
||||||
import org.torproject.android.service.TorResourceInstaller;
|
import org.torproject.android.service.TorResourceInstaller;
|
||||||
|
|
|
@ -17,9 +17,9 @@ import java.util.concurrent.TimeoutException;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.sufficientlysecure.rootcommands.Shell;
|
import org.sufficientlysecure.rootcommands.Shell;
|
||||||
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
|
import org.sufficientlysecure.rootcommands.command.SimpleCommand;
|
||||||
import org.torproject.android.R;
|
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -28,44 +28,44 @@ import android.util.Log;
|
||||||
|
|
||||||
public class TorResourceInstaller implements TorServiceConstants {
|
public class TorResourceInstaller implements TorServiceConstants {
|
||||||
|
|
||||||
|
|
||||||
File installFolder;
|
File installFolder;
|
||||||
Context context;
|
Context context;
|
||||||
|
|
||||||
public TorResourceInstaller (Context context, File installFolder)
|
public TorResourceInstaller (Context context, File installFolder)
|
||||||
{
|
{
|
||||||
this.installFolder = installFolder;
|
this.installFolder = installFolder;
|
||||||
|
|
||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteDirectory(File file) {
|
public void deleteDirectory(File file) {
|
||||||
if( file.exists() ) {
|
if( file.exists() ) {
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
File[] files = file.listFiles();
|
File[] files = file.listFiles();
|
||||||
for(int i=0; i<files.length; i++) {
|
for(int i=0; i<files.length; i++) {
|
||||||
if(files[i].isDirectory()) {
|
if(files[i].isDirectory()) {
|
||||||
deleteDirectory(files[i]);
|
deleteDirectory(files[i]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
files[i].delete();
|
files[i].delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file.delete();
|
file.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String COMMAND_RM_FORCE = "rm -f ";
|
private final static String COMMAND_RM_FORCE = "rm -f ";
|
||||||
|
|
||||||
//
|
//
|
||||||
/*
|
/*
|
||||||
* Extract the Tor resources from the APK file using ZIP
|
* Extract the Tor resources from the APK file using ZIP
|
||||||
*/
|
*/
|
||||||
public boolean installResources () throws IOException, FileNotFoundException, TimeoutException
|
public boolean installResources () throws IOException, FileNotFoundException, TimeoutException
|
||||||
{
|
{
|
||||||
|
|
||||||
InputStream is;
|
InputStream is;
|
||||||
File outFile;
|
File outFile;
|
||||||
|
|
||||||
deleteDirectory(installFolder);
|
deleteDirectory(installFolder);
|
||||||
|
@ -74,129 +74,129 @@ public class TorResourceInstaller implements TorServiceConstants {
|
||||||
|
|
||||||
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.torrc);
|
is = context.getResources().openRawResource(R.raw.torrc);
|
||||||
outFile = new File(installFolder, TORRC_ASSET_KEY);
|
outFile = new File(installFolder, TORRC_ASSET_KEY);
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,outFile, false, false);
|
streamToFile(is,outFile, false, false);
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.torpolipo);
|
is = context.getResources().openRawResource(R.raw.torpolipo);
|
||||||
outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
|
outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,outFile, false, false);
|
streamToFile(is,outFile, false, false);
|
||||||
|
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.tor);
|
|
||||||
outFile = new File(installFolder, TOR_ASSET_KEY);
|
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
|
||||||
streamToFile(is,outFile, false, true);
|
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.polipo);
|
|
||||||
outFile = new File(installFolder, POLIPO_ASSET_KEY);
|
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
|
||||||
streamToFile(is,outFile, false, true);
|
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.obfsclient);
|
|
||||||
outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
|
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
|
||||||
streamToFile(is,outFile, false, true);
|
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.xtables);
|
|
||||||
outFile = new File(installFolder, IPTABLES_ASSET_KEY);
|
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
|
||||||
streamToFile(is,outFile, false, true);
|
|
||||||
|
|
||||||
|
|
||||||
return true;
|
is = context.getResources().openRawResource(R.raw.tor);
|
||||||
}
|
outFile = new File(installFolder, TOR_ASSET_KEY);
|
||||||
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
public boolean updateTorConfigCustom (File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException
|
streamToFile(is,outFile, false, true);
|
||||||
{
|
|
||||||
|
is = context.getResources().openRawResource(R.raw.polipo);
|
||||||
|
outFile = new File(installFolder, POLIPO_ASSET_KEY);
|
||||||
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
|
streamToFile(is,outFile, false, true);
|
||||||
|
|
||||||
|
is = context.getResources().openRawResource(R.raw.obfsclient);
|
||||||
|
outFile = new File(installFolder, OBFSCLIENT_ASSET_KEY);
|
||||||
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
|
streamToFile(is,outFile, false, true);
|
||||||
|
|
||||||
|
is = context.getResources().openRawResource(R.raw.xtables);
|
||||||
|
outFile = new File(installFolder, IPTABLES_ASSET_KEY);
|
||||||
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
|
streamToFile(is,outFile, false, true);
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean updateTorConfigCustom (File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
StringBufferInputStream sbis = new StringBufferInputStream(extraLines + '\n');
|
StringBufferInputStream sbis = new StringBufferInputStream(extraLines + '\n');
|
||||||
streamToFile(sbis,fileTorRcCustom,false,false);
|
streamToFile(sbis,fileTorRcCustom,false,false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean updatePolipoConfig (File filePolipo, String extraLines) throws IOException, FileNotFoundException, TimeoutException
|
public boolean updatePolipoConfig (File filePolipo, String extraLines) throws IOException, FileNotFoundException, TimeoutException
|
||||||
{
|
{
|
||||||
|
|
||||||
InputStream is;
|
InputStream is;
|
||||||
|
|
||||||
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.torpolipo);
|
is = context.getResources().openRawResource(R.raw.torpolipo);
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + filePolipo.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + filePolipo.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,filePolipo, false, false);
|
streamToFile(is,filePolipo, false, false);
|
||||||
|
|
||||||
if (extraLines != null && extraLines.length() > 0)
|
if (extraLines != null && extraLines.length() > 0)
|
||||||
{
|
{
|
||||||
StringBufferInputStream sbis = new StringBufferInputStream('\n' + extraLines + '\n');
|
StringBufferInputStream sbis = new StringBufferInputStream('\n' + extraLines + '\n');
|
||||||
streamToFile(sbis,filePolipo,true,false);
|
streamToFile(sbis,filePolipo,true,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
shell.close();
|
shell.close();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean installPolipoConf () throws IOException, FileNotFoundException, TimeoutException
|
public boolean installPolipoConf () throws IOException, FileNotFoundException, TimeoutException
|
||||||
{
|
{
|
||||||
|
|
||||||
InputStream is;
|
InputStream is;
|
||||||
File outFile;
|
File outFile;
|
||||||
|
|
||||||
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.torpolipo);
|
is = context.getResources().openRawResource(R.raw.torpolipo);
|
||||||
outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
|
outFile = new File(installFolder, POLIPOCONFIG_ASSET_KEY);
|
||||||
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
shell.add(new SimpleCommand(COMMAND_RM_FORCE + outFile.getAbsolutePath())).waitForFinish();
|
||||||
streamToFile(is,outFile, false, false);
|
streamToFile(is,outFile, false, false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Extract the Tor binary from the APK file using ZIP
|
* Extract the Tor binary from the APK file using ZIP
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public boolean installGeoIP () throws IOException, FileNotFoundException
|
public boolean installGeoIP () throws IOException, FileNotFoundException
|
||||||
{
|
{
|
||||||
|
|
||||||
InputStream is;
|
InputStream is;
|
||||||
File outFile;
|
File outFile;
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.geoip);
|
is = context.getResources().openRawResource(R.raw.geoip);
|
||||||
outFile = new File(installFolder, GEOIP_ASSET_KEY);
|
outFile = new File(installFolder, GEOIP_ASSET_KEY);
|
||||||
streamToFile(is, outFile, false, true);
|
streamToFile(is, outFile, false, true);
|
||||||
|
|
||||||
is = context.getResources().openRawResource(R.raw.geoip6);
|
is = context.getResources().openRawResource(R.raw.geoip6);
|
||||||
outFile = new File(installFolder, GEOIP6_ASSET_KEY);
|
outFile = new File(installFolder, GEOIP6_ASSET_KEY);
|
||||||
streamToFile(is, outFile, false, true);
|
streamToFile(is, outFile, false, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
private static void copyAssetFile(Context ctx, String asset, File file) throws IOException, InterruptedException
|
private static void copyAssetFile(Context ctx, String asset, File file) throws IOException, InterruptedException
|
||||||
{
|
{
|
||||||
|
|
||||||
DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
|
DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
|
||||||
InputStream is = new GZIPInputStream(ctx.getAssets().open(asset));
|
InputStream is = new GZIPInputStream(ctx.getAssets().open(asset));
|
||||||
|
|
||||||
byte buf[] = new byte[8172];
|
byte buf[] = new byte[8172];
|
||||||
int len;
|
int len;
|
||||||
while ((len = is.read(buf)) > 0) {
|
while ((len = is.read(buf)) > 0) {
|
||||||
out.write(buf, 0, len);
|
out.write(buf, 0, len);
|
||||||
}
|
}
|
||||||
out.close();
|
out.close();
|
||||||
is.close();
|
is.close();
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write the inputstream contents to the file
|
* Write the inputstream contents to the file
|
||||||
*/
|
*/
|
||||||
public static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException
|
public static boolean streamToFile(InputStream stm, File outFile, boolean append, boolean zip) throws IOException
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -204,17 +204,17 @@ public class TorResourceInstaller implements TorServiceConstants {
|
||||||
|
|
||||||
int bytecount;
|
int bytecount;
|
||||||
|
|
||||||
OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
|
OutputStream stmOut = new FileOutputStream(outFile.getAbsolutePath(), append);
|
||||||
ZipInputStream zis = null;
|
ZipInputStream zis = null;
|
||||||
|
|
||||||
if (zip)
|
if (zip)
|
||||||
{
|
{
|
||||||
zis = new ZipInputStream(stm);
|
zis = new ZipInputStream(stm);
|
||||||
ZipEntry ze = zis.getNextEntry();
|
ZipEntry ze = zis.getNextEntry();
|
||||||
stm = zis;
|
stm = zis;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((bytecount = stm.read(buffer)) > 0)
|
while ((bytecount = stm.read(buffer)) > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -226,97 +226,97 @@ public class TorResourceInstaller implements TorServiceConstants {
|
||||||
stm.close();
|
stm.close();
|
||||||
|
|
||||||
if (zis != null)
|
if (zis != null)
|
||||||
zis.close();
|
zis.close();
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//copy the file from inputstream to File output - alternative impl
|
//copy the file from inputstream to File output - alternative impl
|
||||||
public static void copyFile (InputStream is, File outputFile)
|
public static void copyFile (InputStream is, File outputFile)
|
||||||
{
|
{
|
||||||
|
|
||||||
try {
|
try {
|
||||||
outputFile.createNewFile();
|
outputFile.createNewFile();
|
||||||
DataOutputStream out = new DataOutputStream(new FileOutputStream(outputFile));
|
DataOutputStream out = new DataOutputStream(new FileOutputStream(outputFile));
|
||||||
DataInputStream in = new DataInputStream(is);
|
DataInputStream in = new DataInputStream(is);
|
||||||
|
|
||||||
int b = -1;
|
int b = -1;
|
||||||
byte[] data = new byte[1024];
|
byte[] data = new byte[1024];
|
||||||
|
|
||||||
while ((b = in.read(data)) != -1) {
|
while ((b = in.read(data)) != -1) {
|
||||||
out.write(data);
|
out.write(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b == -1); //rejoice
|
if (b == -1); //rejoice
|
||||||
|
|
||||||
//
|
//
|
||||||
out.flush();
|
out.flush();
|
||||||
out.close();
|
out.close();
|
||||||
in.close();
|
in.close();
|
||||||
// chmod?
|
// chmod?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Log.e(TorConstants.TAG, "error copying binary", ex);
|
Log.e(TorConstants.TAG, "error copying binary", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copies a raw resource file, given its ID to the given location
|
|
||||||
* @param ctx context
|
|
||||||
* @param resid resource id
|
|
||||||
* @param file destination file
|
|
||||||
* @param mode file permissions (E.g.: "755")
|
|
||||||
* @throws IOException on error
|
|
||||||
* @throws InterruptedException when interrupted
|
|
||||||
*/
|
|
||||||
public static void copyRawFile(Context ctx, int resid, File file, String mode, boolean isZipd) throws IOException, InterruptedException
|
|
||||||
{
|
|
||||||
final String abspath = file.getAbsolutePath();
|
|
||||||
// Write the iptables binary
|
|
||||||
final FileOutputStream out = new FileOutputStream(file);
|
|
||||||
InputStream is = ctx.getResources().openRawResource(resid);
|
|
||||||
|
|
||||||
if (isZipd)
|
|
||||||
{
|
|
||||||
ZipInputStream zis = new ZipInputStream(is);
|
|
||||||
ZipEntry ze = zis.getNextEntry();
|
|
||||||
is = zis;
|
|
||||||
}
|
|
||||||
|
|
||||||
byte buf[] = new byte[1024];
|
|
||||||
int len;
|
|
||||||
while ((len = is.read(buf)) > 0) {
|
|
||||||
out.write(buf, 0, len);
|
|
||||||
}
|
|
||||||
out.close();
|
|
||||||
is.close();
|
|
||||||
// Change the permissions
|
|
||||||
Runtime.getRuntime().exec("chmod "+mode+" "+abspath).waitFor();
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Asserts that the binary files are installed in the bin directory.
|
* Copies a raw resource file, given its ID to the given location
|
||||||
* @param ctx context
|
* @param ctx context
|
||||||
|
* @param resid resource id
|
||||||
|
* @param file destination file
|
||||||
|
* @param mode file permissions (E.g.: "755")
|
||||||
|
* @throws IOException on error
|
||||||
|
* @throws InterruptedException when interrupted
|
||||||
|
*/
|
||||||
|
public static void copyRawFile(Context ctx, int resid, File file, String mode, boolean isZipd) throws IOException, InterruptedException
|
||||||
|
{
|
||||||
|
final String abspath = file.getAbsolutePath();
|
||||||
|
// Write the iptables binary
|
||||||
|
final FileOutputStream out = new FileOutputStream(file);
|
||||||
|
InputStream is = ctx.getResources().openRawResource(resid);
|
||||||
|
|
||||||
|
if (isZipd)
|
||||||
|
{
|
||||||
|
ZipInputStream zis = new ZipInputStream(is);
|
||||||
|
ZipEntry ze = zis.getNextEntry();
|
||||||
|
is = zis;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte buf[] = new byte[1024];
|
||||||
|
int len;
|
||||||
|
while ((len = is.read(buf)) > 0) {
|
||||||
|
out.write(buf, 0, len);
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
is.close();
|
||||||
|
// Change the permissions
|
||||||
|
Runtime.getRuntime().exec("chmod "+mode+" "+abspath).waitFor();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Asserts that the binary files are installed in the bin directory.
|
||||||
|
* @param ctx context
|
||||||
* @param showErrors indicates if errors should be alerted
|
* @param showErrors indicates if errors should be alerted
|
||||||
* @return false if the binary files could not be installed
|
* @return false if the binary files could not be installed
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
public static boolean assertIpTablesBinaries(Context ctx, boolean showErrors) throws Exception {
|
public static boolean assertIpTablesBinaries(Context ctx, boolean showErrors) throws Exception {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
|
|
||||||
// Check iptables_g1
|
// Check iptables_g1
|
||||||
File file = new File(ctx.getDir("bin",0), "iptables");
|
File file = new File(ctx.getDir("bin",0), "iptables");
|
||||||
copyRawFile(ctx, R.raw.iptables, file, CHMOD_EXEC, false);
|
copyRawFile(ctx, R.raw.iptables, file, CHMOD_EXEC, false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11,10 +11,7 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.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;
|
||||||
|
|
|
@ -5,8 +5,8 @@ package org.torproject.android.settings;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.sufficientlysecure.rootcommands.RootCommands;
|
import org.sufficientlysecure.rootcommands.RootCommands;
|
||||||
import org.torproject.android.R;
|
|
||||||
import org.torproject.android.service.TorServiceUtils;
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -20,23 +20,36 @@ import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
|
import org.torproject.android.Orbot;
|
||||||
|
import org.torproject.android.service.TorService;
|
||||||
import org.torproject.android.service.TorServiceConstants;
|
import org.torproject.android.service.TorServiceConstants;
|
||||||
|
|
||||||
|
import com.runjva.sourceforge.jsocks.protocol.ProxyServer;
|
||||||
|
import com.runjva.sourceforge.jsocks.server.ServerAuthenticatorNone;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.VpnService;
|
import android.net.VpnService;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.support.v4.app.NotificationCompat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.widget.RemoteViews;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
||||||
public class OrbotVpnService extends VpnService implements Handler.Callback {
|
public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
private static final String TAG = "OrbotVpnService";
|
private static final String TAG = "DrobotVpnService";
|
||||||
|
|
||||||
private PendingIntent mConfigureIntent;
|
private PendingIntent mConfigureIntent;
|
||||||
|
|
||||||
|
@ -48,14 +61,28 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
private ParcelFileDescriptor mInterface;
|
private ParcelFileDescriptor mInterface;
|
||||||
|
|
||||||
private int mSocksProxyPort = 9999;
|
private int mSocksProxyPort = 9999;
|
||||||
// private ProxyServer mProxyServer;
|
private ProxyServer mProxyServer;
|
||||||
|
|
||||||
private final static int VPN_MTU = 1500;
|
private final static int VPN_MTU = 1500;
|
||||||
|
|
||||||
|
private static final int NOTIFY_ID = 10;
|
||||||
|
private static final int TRANSPROXY_NOTIFY_ID = 20;
|
||||||
|
private static final int ERROR_NOTIFY_ID = 30;
|
||||||
|
private static final int HS_NOTIFY_ID = 40;
|
||||||
|
|
||||||
|
private boolean prefPersistNotifications = true;
|
||||||
|
|
||||||
|
private NotificationManager mNotificationManager = null;
|
||||||
|
private android.support.v4.app.NotificationCompat.Builder mNotifyBuilder;
|
||||||
|
private Notification mNotification;
|
||||||
|
private boolean mShowExpandedNotifications = false;
|
||||||
|
private boolean mNotificationShowing = false;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
|
|
||||||
// The handler is only used to show messages.
|
// The handler is only used to show messages.
|
||||||
if (mHandler == null) {
|
if (mHandler == null) {
|
||||||
mHandler = new Handler(this);
|
mHandler = new Handler(this);
|
||||||
}
|
}
|
||||||
|
@ -63,30 +90,46 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
// Stop the previous session by interrupting the thread.
|
// Stop the previous session by interrupting the thread.
|
||||||
if (mThreadVPN == null || (!mThreadVPN.isAlive()))
|
if (mThreadVPN == null || (!mThreadVPN.isAlive()))
|
||||||
{
|
{
|
||||||
startSocksBypass ();
|
startSocksBypass ();
|
||||||
setupTun2Socks();
|
setupTun2Socks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startSocksBypass ()
|
private void startSocksBypass(){
|
||||||
{
|
mThreadProxy = new Thread ()
|
||||||
|
{
|
||||||
|
public void run ()
|
||||||
|
{
|
||||||
|
|
||||||
|
try {
|
||||||
|
mProxyServer = new ProxyServer(new ServerAuthenticatorNone(null, null));
|
||||||
|
ProxyServer.setVpnService(OrbotVpnService.this);
|
||||||
|
mProxyServer.start(mSocksProxyPort, 5, InetAddress.getLocalHost());
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.d(TAG,"proxy server error: " + e.getLocalizedMessage(),e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mThreadProxy.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
if (mProxyServer != null){
|
||||||
|
mProxyServer.stop();
|
||||||
|
}
|
||||||
if (mInterface != null)
|
if (mInterface != null){
|
||||||
try {
|
try {
|
||||||
mInterface.close();
|
mInterface.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -100,152 +143,158 @@ public class OrbotVpnService extends VpnService implements Handler.Callback {
|
||||||
|
|
||||||
private void setupTun2Socks() {
|
private void setupTun2Socks() {
|
||||||
|
|
||||||
mThreadVPN = new Thread ()
|
mThreadVPN = new Thread ()
|
||||||
{
|
{
|
||||||
|
|
||||||
public void run ()
|
public void run ()
|
||||||
{
|
{
|
||||||
if (mInterface == null)
|
if (mInterface == null)
|
||||||
{
|
{
|
||||||
// Set the locale to English (or probably any other language that^M
|
// Set the locale to English (or probably any other language that^M
|
||||||
// uses Hindu-Arabic (aka Latin) numerals).^M
|
// uses Hindu-Arabic (aka Latin) numerals).^M
|
||||||
// We have found that VpnService.Builder does something locale-dependent^M
|
// We have found that VpnService.Builder does something locale-dependent^M
|
||||||
// internally that causes errors when the locale uses its own numerals^M
|
// internally that causes errors when the locale uses its own numerals^M
|
||||||
// (i.e., Farsi and Arabic).^M
|
// (i.e., Farsi and Arabic).^M
|
||||||
Locale.setDefault(new Locale("en"));
|
Locale.setDefault(new Locale("en"));
|
||||||
|
|
||||||
Builder builder = new Builder();
|
Builder builder = new Builder();
|
||||||
|
|
||||||
builder.setMtu(VPN_MTU);
|
builder.setMtu(VPN_MTU);
|
||||||
builder.addAddress("10.0.0.1",8);
|
builder.addAddress("10.0.0.1",28);
|
||||||
builder.setSession("OrbotVPN");
|
builder.setSession("DrobotVPN");
|
||||||
builder.addRoute("0.0.0.0",0);
|
builder.addRoute("0.0.0.0",0);
|
||||||
builder.addRoute("10.0.0.0",8);
|
//builder.addRoute("192.0.0.0",8);
|
||||||
//builder.addRoute("192.0.0.0",8);
|
//builder.addRoute("192.168.43.0",8);
|
||||||
//builder.addRoute("192.168.43.0",8);
|
|
||||||
builder.addDnsServer("8.8.8.8");
|
// Create a new interface using the builder and save the parameters.
|
||||||
|
mInterface = builder.setSession(mSessionName)
|
||||||
// Create a new interface using the builder and save the parameters.
|
.setConfigureIntent(mConfigureIntent)
|
||||||
mInterface = builder.setSession(mSessionName)
|
.establish();
|
||||||
.setConfigureIntent(mConfigureIntent)
|
|
||||||
.establish();
|
try
|
||||||
|
{
|
||||||
try
|
Tun2Socks.Start(mInterface,
|
||||||
{
|
VPN_MTU,
|
||||||
Tun2Socks.Start(mInterface, VPN_MTU, "10.0.0.2", "255.255.255.0", "localhost:" + TorServiceConstants.PORT_SOCKS_DEFAULT, "50.116.51.157:7300", true);
|
"10.0.0.2",
|
||||||
}
|
"255.255.255.0",
|
||||||
catch (Exception e)
|
"127.0.0.1:" + TorServiceConstants.PORT_SOCKS_DEFAULT,
|
||||||
{
|
"10.0.0.1:" + String.valueOf(TorServiceConstants.TOR_DNS_PORT_DEFAULT),
|
||||||
Log.d(TAG,"tun2Socks has stopped",e);
|
true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
catch (Exception e)
|
||||||
};
|
{
|
||||||
|
Log.d(TAG,"tun2Socks has stopped",e);
|
||||||
mThreadVPN.start();
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mThreadVPN.start();
|
||||||
|
showToolbarNotification(getString(R.string.status_activated), NOTIFY_ID, R.drawable.ic_stat_tor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRevoke() {
|
public void onRevoke() {
|
||||||
|
|
||||||
new Thread ()
|
new Thread ()
|
||||||
{
|
{
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
mInterface.close();
|
mInterface.close();
|
||||||
Tun2Socks.Stop();
|
Tun2Socks.Stop();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log.d(TAG,"error stopping tun2socks",e);
|
Log.d(TAG,"error stopping tun2socks",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
|
clearNotifications();
|
||||||
super.onRevoke();
|
super.onRevoke();
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
private void clearNotifications()
|
||||||
private void debugPacket(ByteBuffer packet)
|
|
||||||
{
|
{
|
||||||
|
if (mNotificationManager != null)
|
||||||
|
mNotificationManager.cancelAll();
|
||||||
|
mNotificationShowing = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
private void showToolbarNotification (String notifyMsg, int notifyType, int icon)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Reusable code.
|
||||||
|
Intent intent = new Intent(OrbotVpnService.this, Orbot.class);
|
||||||
|
PendingIntent pendIntent = PendingIntent.getActivity(OrbotVpnService.this, 0, intent, 0);
|
||||||
|
|
||||||
|
if (mNotifyBuilder == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
|
if (mNotifyBuilder == null)
|
||||||
|
{
|
||||||
|
mNotifyBuilder = new NotificationCompat.Builder(this)
|
||||||
|
.setContentTitle(getString(R.string.app_name))
|
||||||
|
.setSmallIcon(R.drawable.ic_stat_tor);
|
||||||
|
mNotifyBuilder.setContentIntent(pendIntent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int buffer = packet.get();
|
mNotifyBuilder.setContentText(notifyMsg);
|
||||||
int version;
|
mNotifyBuilder.setSmallIcon(icon);
|
||||||
int headerlength;
|
|
||||||
version = buffer >> 4;
|
if (notifyType != NOTIFY_ID)
|
||||||
headerlength = buffer & 0x0F;
|
{
|
||||||
headerlength *= 4;
|
mNotifyBuilder.setTicker(notifyMsg);
|
||||||
Log.d(TAG, "IP Version:"+version);
|
// mNotifyBuilder.setLights(Color.GREEN, 1000, 1000);
|
||||||
Log.d(TAG, "Header Length:"+headerlength);
|
}
|
||||||
|
else
|
||||||
String status = "";
|
{
|
||||||
status += "Header Length:"+headerlength;
|
mNotifyBuilder.setTicker(null);
|
||||||
|
}
|
||||||
buffer = packet.get(); //DSCP + EN
|
|
||||||
buffer = packet.getChar(); //Total Length
|
mNotifyBuilder.setOngoing(prefPersistNotifications);
|
||||||
|
|
||||||
Log.d(TAG, "Total Length:"+buffer);
|
mNotification = mNotifyBuilder.build();
|
||||||
|
|
||||||
buffer = packet.getChar(); //Identification
|
if (Build.VERSION.SDK_INT >= 16 && mShowExpandedNotifications) {
|
||||||
Log.d(TAG, "Identification:"+buffer);
|
|
||||||
|
|
||||||
buffer = packet.getChar(); //Flags + Fragment Offset
|
// Create remote view that needs to be set as bigContentView for the notification.
|
||||||
buffer = packet.get(); //Time to Live
|
RemoteViews expandedView = new RemoteViews(this.getPackageName(),
|
||||||
buffer = packet.get(); //Protocol
|
R.layout.layout_notification_expanded);
|
||||||
|
|
||||||
Log.d(TAG, "Protocol:"+buffer);
|
StringBuffer sbInfo = new StringBuffer();
|
||||||
|
|
||||||
status += " Protocol:"+buffer;
|
|
||||||
|
if (notifyType == NOTIFY_ID)
|
||||||
buffer = packet.getChar(); //Header checksum
|
expandedView.setTextViewText(R.id.text, notifyMsg);
|
||||||
|
else
|
||||||
String sourceIP = "";
|
{
|
||||||
buffer = packet.get(); //Source IP 1st Octet
|
expandedView.setTextViewText(R.id.info, notifyMsg);
|
||||||
sourceIP += buffer;
|
|
||||||
sourceIP += ".";
|
}
|
||||||
|
expandedView.setTextViewText(R.id.title, getString(R.string.app_name));
|
||||||
buffer = packet.get(); //Source IP 2nd Octet
|
|
||||||
sourceIP += buffer;
|
expandedView.setImageViewResource(R.id.icon, icon);
|
||||||
sourceIP += ".";
|
mNotification.bigContentView = expandedView;
|
||||||
|
}
|
||||||
buffer = packet.get(); //Source IP 3rd Octet
|
|
||||||
sourceIP += buffer;
|
if (prefPersistNotifications && (!mNotificationShowing))
|
||||||
sourceIP += ".";
|
{
|
||||||
|
startForeground(NOTIFY_ID, mNotification);
|
||||||
buffer = packet.get(); //Source IP 4th Octet
|
}
|
||||||
sourceIP += buffer;
|
else
|
||||||
|
{
|
||||||
Log.d(TAG, "Source IP:"+sourceIP);
|
mNotificationManager.notify(NOTIFY_ID, mNotification);
|
||||||
|
}
|
||||||
status += " Source IP:"+sourceIP;
|
|
||||||
|
mNotificationShowing = true;
|
||||||
String destIP = "";
|
}
|
||||||
buffer = packet.get(); //Destination IP 1st Octet
|
|
||||||
destIP += buffer;
|
|
||||||
destIP += ".";
|
|
||||||
|
|
||||||
buffer = packet.get(); //Destination IP 2nd Octet
|
|
||||||
destIP += buffer;
|
|
||||||
destIP += ".";
|
|
||||||
|
|
||||||
buffer = packet.get(); //Destination IP 3rd Octet
|
|
||||||
destIP += buffer;
|
|
||||||
destIP += ".";
|
|
||||||
|
|
||||||
buffer = packet.get(); //Destination IP 4th Octet
|
|
||||||
destIP += buffer;
|
|
||||||
|
|
||||||
Log.d(TAG, "Destination IP:"+destIP);
|
|
||||||
|
|
||||||
status += " Destination IP:"+destIP;
|
|
||||||
|
|
||||||
//Log.d(TAG, "version:"+packet.getInt());
|
|
||||||
//Log.d(TAG, "version:"+packet.getInt());
|
|
||||||
//Log.d(TAG, "version:"+packet.getInt());
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.net.Socket;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
|
||||||
public class Tun2Socks
|
public class Tun2Socks
|
||||||
|
@ -35,6 +36,8 @@ public class Tun2Socks
|
||||||
boolean doVpnProtect(DatagramSocket socket);
|
boolean doVpnProtect(DatagramSocket socket);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String TAG = Tun2Socks.class.getSimpleName();
|
||||||
|
private static final boolean LOGD = true;
|
||||||
|
|
||||||
private static Thread mThread;
|
private static Thread mThread;
|
||||||
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
|
private static ParcelFileDescriptor mVpnInterfaceFileDescriptor;
|
||||||
|
@ -61,11 +64,11 @@ public class Tun2Socks
|
||||||
boolean udpgwTransparentDNS)
|
boolean udpgwTransparentDNS)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!mLibLoaded)
|
if (!mLibLoaded)
|
||||||
{
|
{
|
||||||
System.loadLibrary("tun2socks");
|
System.loadLibrary("tun2socks");
|
||||||
mLibLoaded = true;
|
mLibLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
|
mVpnInterfaceFileDescriptor = vpnInterfaceFileDescriptor;
|
||||||
mVpnInterfaceMTU = vpnInterfaceMTU;
|
mVpnInterfaceMTU = vpnInterfaceMTU;
|
||||||
|
@ -76,16 +79,14 @@ public class Tun2Socks
|
||||||
mUdpgwTransparentDNS = udpgwTransparentDNS;
|
mUdpgwTransparentDNS = udpgwTransparentDNS;
|
||||||
|
|
||||||
if (mVpnInterfaceFileDescriptor != null)
|
if (mVpnInterfaceFileDescriptor != null)
|
||||||
runTun2Socks(
|
runTun2Socks(
|
||||||
mVpnInterfaceFileDescriptor.detachFd(),
|
mVpnInterfaceFileDescriptor.detachFd(),
|
||||||
mVpnInterfaceMTU,
|
mVpnInterfaceMTU,
|
||||||
mVpnIpAddress,
|
mVpnIpAddress,
|
||||||
mVpnNetMask,
|
mVpnNetMask,
|
||||||
mSocksServerAddress,
|
mSocksServerAddress,
|
||||||
mUdpgwServerAddress,
|
mUdpgwServerAddress,
|
||||||
mUdpgwTransparentDNS ? 1 : 0);
|
mUdpgwTransparentDNS ? 1 : 0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Stop()
|
public static void Stop()
|
||||||
|
@ -94,7 +95,23 @@ public class Tun2Socks
|
||||||
terminateTun2Socks();
|
terminateTun2Socks();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void logTun2Socks(
|
||||||
|
String level,
|
||||||
|
String channel,
|
||||||
|
String msg)
|
||||||
|
{
|
||||||
|
String logMsg = level + "(" + channel + "): " + msg;
|
||||||
|
if (0 == level.compareTo("ERROR"))
|
||||||
|
{
|
||||||
|
Log.e(TAG, logMsg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (LOGD) Log.d(TAG, logMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private native static int runTun2Socks(
|
private native static int runTun2Socks(
|
||||||
int vpnInterfaceFileDescriptor,
|
int vpnInterfaceFileDescriptor,
|
||||||
int vpnInterfaceMTU,
|
int vpnInterfaceMTU,
|
||||||
|
|
|
@ -2,7 +2,7 @@ package org.torproject.android.wizard;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.torproject.android.R;
|
import org.sandroproxy.ony.R;
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
import org.torproject.android.service.TorServiceUtils;
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
|
|
||||||
|
@ -24,66 +24,66 @@ import android.widget.Toast;
|
||||||
|
|
||||||
public class ChooseLocaleWizardActivity extends Activity implements TorConstants {
|
public class ChooseLocaleWizardActivity extends Activity implements TorConstants {
|
||||||
|
|
||||||
private int flag = 0;
|
private int flag = 0;
|
||||||
private ListView listLocales;
|
private ListView listLocales;
|
||||||
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
|
|
||||||
super.onStart();
|
super.onStart();
|
||||||
setContentView(R.layout.layout_wizard_locale);
|
setContentView(R.layout.layout_wizard_locale);
|
||||||
|
|
||||||
|
|
||||||
listLocales = (ListView)findViewById(R.id.wizard_locale_list);
|
listLocales = (ListView)findViewById(R.id.wizard_locale_list);
|
||||||
Button next = ((Button)findViewById(R.id.btnWizard2));
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
// next.setEnabled(false);
|
// next.setEnabled(false);
|
||||||
|
|
||||||
String[] strLangs = getResources().getStringArray(R.array.languages);
|
String[] strLangs = getResources().getStringArray(R.array.languages);
|
||||||
strLangs[0] = Locale.getDefault().getDisplayName();
|
strLangs[0] = Locale.getDefault().getDisplayName();
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, strLangs);
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, strLangs);
|
||||||
listLocales.setAdapter(adapter);
|
listLocales.setAdapter(adapter);
|
||||||
|
|
||||||
listLocales.setSelection(0);
|
listLocales.setSelection(0);
|
||||||
|
|
||||||
|
|
||||||
listLocales.setOnItemClickListener(new OnItemClickListener() {
|
listLocales.setOnItemClickListener(new OnItemClickListener() {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> arg0, View arg1,
|
public void onItemClick(AdapterView<?> arg0, View arg1,
|
||||||
int arg2, long arg3) {
|
int arg2, long arg3) {
|
||||||
|
|
||||||
setLocalePref(arg2);
|
setLocalePref(arg2);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(ChooseLocaleWizardActivity.this, LotsaText.class));
|
startActivity(new Intent(ChooseLocaleWizardActivity.this, LotsaText.class));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
next.setOnClickListener(new View.OnClickListener() {
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
setLocalePref(0);
|
setLocalePref(0);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(ChooseLocaleWizardActivity.this, LotsaText.class));
|
startActivity(new Intent(ChooseLocaleWizardActivity.this, LotsaText.class));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLocalePref(int selId)
|
private void setLocalePref(int selId)
|
||||||
{
|
{
|
||||||
|
|
||||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
||||||
|
|
||||||
Configuration config = getResources().getConfiguration();
|
Configuration config = getResources().getConfiguration();
|
||||||
|
|
||||||
|
@ -91,18 +91,18 @@ public class ChooseLocaleWizardActivity extends Activity implements TorConstants
|
||||||
|
|
||||||
String lang = localeVals[selId];
|
String lang = localeVals[selId];
|
||||||
|
|
||||||
Editor pEdit = prefs.edit();
|
Editor pEdit = prefs.edit();
|
||||||
pEdit.putString(PREF_DEFAULT_LOCALE, lang);
|
pEdit.putString(PREF_DEFAULT_LOCALE, lang);
|
||||||
pEdit.commit();
|
pEdit.commit();
|
||||||
Locale locale = null;
|
Locale locale = null;
|
||||||
|
|
||||||
if (lang.equals("xx"))
|
if (lang.equals("xx"))
|
||||||
{
|
{
|
||||||
locale = Locale.getDefault();
|
locale = Locale.getDefault();
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
locale = new Locale(lang);
|
locale = new Locale(lang);
|
||||||
|
|
||||||
Locale.setDefault(locale);
|
Locale.setDefault(locale);
|
||||||
config.locale = locale;
|
config.locale = locale;
|
||||||
|
@ -110,27 +110,27 @@ public class ChooseLocaleWizardActivity extends Activity implements TorConstants
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
super.onRestoreInstanceState(savedInstanceState);
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Code to override the back button!
|
//Code to override the back button!
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if(keyCode == KeyEvent.KEYCODE_BACK){
|
if(keyCode == KeyEvent.KEYCODE_BACK){
|
||||||
Toast.makeText(getApplicationContext(), R.string.wizard_exit_at_first_screen_toast, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplicationContext(), R.string.wizard_exit_at_first_screen_toast, Toast.LENGTH_SHORT).show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,12 +1,8 @@
|
||||||
package org.torproject.android.wizard;
|
package org.torproject.android.wizard;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.torproject.android.Orbot;
|
import org.torproject.android.Orbot;
|
||||||
import org.torproject.android.R;
|
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
import org.torproject.android.R.drawable;
|
|
||||||
import org.torproject.android.R.id;
|
|
||||||
import org.torproject.android.R.layout;
|
|
||||||
import org.torproject.android.R.string;
|
|
||||||
import org.torproject.android.service.TorServiceUtils;
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
import org.torproject.android.settings.AppManager;
|
import org.torproject.android.settings.AppManager;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package org.torproject.android.wizard;
|
package org.torproject.android.wizard;
|
||||||
|
|
||||||
import org.torproject.android.R;
|
import org.sandroproxy.ony.R;
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
import org.torproject.android.service.TorServiceUtils;
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package org.torproject.android.wizard;
|
package org.torproject.android.wizard;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.sufficientlysecure.rootcommands.RootCommands;
|
import org.sufficientlysecure.rootcommands.RootCommands;
|
||||||
import org.torproject.android.R;
|
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
import org.torproject.android.service.TorServiceUtils;
|
import org.torproject.android.service.TorServiceUtils;
|
||||||
|
|
||||||
|
@ -22,49 +22,49 @@ import android.widget.TextView;
|
||||||
|
|
||||||
public class Permissions extends Activity implements TorConstants {
|
public class Permissions extends Activity implements TorConstants {
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
context = this;
|
context = this;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
|
|
||||||
super.onStart();
|
super.onStart();
|
||||||
setContentView(R.layout.layout_wizard_permissions);
|
setContentView(R.layout.layout_wizard_permissions);
|
||||||
|
|
||||||
stepFourRoot();
|
stepFourRoot();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void stepFourRoot(){
|
private void stepFourRoot(){
|
||||||
|
|
||||||
String msg1 = context.getString(R.string.wizard_permissions_root_msg1);
|
String msg1 = context.getString(R.string.wizard_permissions_root_msg1);
|
||||||
String msg2 = context.getString(R.string.wizard_permissions_root_msg2);
|
String msg2 = context.getString(R.string.wizard_permissions_root_msg2);
|
||||||
|
|
||||||
TextView txtBody1 = ((TextView)findViewById(R.id.WizardTextBody1));
|
TextView txtBody1 = ((TextView)findViewById(R.id.WizardTextBody1));
|
||||||
txtBody1.setText(msg1);
|
txtBody1.setText(msg1);
|
||||||
|
|
||||||
|
|
||||||
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
||||||
txtBody2.setText(msg2);
|
txtBody2.setText(msg2);
|
||||||
txtBody2.setVisibility(TextView.VISIBLE);
|
txtBody2.setVisibility(TextView.VISIBLE);
|
||||||
|
|
||||||
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
||||||
grantPermissions.setVisibility(Button.VISIBLE);
|
grantPermissions.setVisibility(Button.VISIBLE);
|
||||||
|
|
||||||
Button back = ((Button)findViewById(R.id.btnWizard1));
|
Button back = ((Button)findViewById(R.id.btnWizard1));
|
||||||
Button next = ((Button)findViewById(R.id.btnWizard2));
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
next.setEnabled(false);
|
next.setEnabled(false);
|
||||||
|
@ -74,133 +74,133 @@ public class Permissions extends Activity implements TorConstants {
|
||||||
|
|
||||||
consent.setOnCheckedChangeListener(new OnCheckedChangeListener (){
|
consent.setOnCheckedChangeListener(new OnCheckedChangeListener (){
|
||||||
|
|
||||||
public void onCheckedChanged(CompoundButton buttonView,
|
public void onCheckedChanged(CompoundButton buttonView,
|
||||||
boolean isChecked) {
|
boolean isChecked) {
|
||||||
|
|
||||||
|
|
||||||
//this is saying do not use root
|
//this is saying do not use root
|
||||||
|
|
||||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
||||||
|
|
||||||
Editor pEdit = prefs.edit();
|
Editor pEdit = prefs.edit();
|
||||||
|
|
||||||
pEdit.putBoolean(PREF_TRANSPARENT, false);
|
pEdit.putBoolean(PREF_TRANSPARENT, false);
|
||||||
pEdit.putBoolean(PREF_TRANSPARENT_ALL, false);
|
pEdit.putBoolean(PREF_TRANSPARENT_ALL, false);
|
||||||
pEdit.putBoolean(PREF_HAS_ROOT, false);
|
pEdit.putBoolean(PREF_HAS_ROOT, false);
|
||||||
|
|
||||||
pEdit.commit();
|
pEdit.commit();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Button next = ((Button)findViewById(R.id.btnWizard2));
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
if(isChecked)
|
if(isChecked)
|
||||||
next.setEnabled(true);
|
next.setEnabled(true);
|
||||||
else
|
else
|
||||||
next.setEnabled(false);
|
next.setEnabled(false);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
stepFour();
|
stepFour();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
grantPermissions.setOnClickListener(new View.OnClickListener() {
|
grantPermissions.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
//Check and Install iptables - TorTransProxy.testOwnerModule(this)
|
//Check and Install iptables - TorTransProxy.testOwnerModule(this)
|
||||||
|
|
||||||
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
|
||||||
|
|
||||||
boolean hasRoot = RootCommands.rootAccessGiven();
|
boolean hasRoot = RootCommands.rootAccessGiven();
|
||||||
Editor pEdit = prefs.edit();
|
Editor pEdit = prefs.edit();
|
||||||
pEdit.putBoolean(PREF_HAS_ROOT,hasRoot);
|
pEdit.putBoolean(PREF_HAS_ROOT,hasRoot);
|
||||||
pEdit.commit();
|
pEdit.commit();
|
||||||
|
|
||||||
if (!hasRoot)
|
if (!hasRoot)
|
||||||
{
|
{
|
||||||
|
|
||||||
stepFour();
|
stepFour();
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Permissions.this, ConfigureTransProxy.class));
|
startActivity(new Intent(Permissions.this, ConfigureTransProxy.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
public void onClick(View v) {
|
||||||
|
finish();
|
||||||
|
startActivity(new Intent(Permissions.this, LotsaText.class));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
|
||||||
|
public void onClick(View v) {
|
||||||
|
finish();
|
||||||
|
startActivity(new Intent(Permissions.this, TipsAndTricks.class));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stepFour(){
|
||||||
|
|
||||||
|
String title = context.getString(R.string.wizard_permissions_title);
|
||||||
|
String msg = context.getString(R.string.wizard_permissions_no_root_msg);
|
||||||
|
|
||||||
|
setTitle(title);
|
||||||
|
|
||||||
back.setOnClickListener(new View.OnClickListener() {
|
|
||||||
|
|
||||||
public void onClick(View v) {
|
|
||||||
finish();
|
|
||||||
startActivity(new Intent(Permissions.this, LotsaText.class));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
next.setOnClickListener(new View.OnClickListener() {
|
|
||||||
|
|
||||||
|
|
||||||
public void onClick(View v) {
|
|
||||||
finish();
|
|
||||||
startActivity(new Intent(Permissions.this, TipsAndTricks.class));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void stepFour(){
|
|
||||||
|
|
||||||
String title = context.getString(R.string.wizard_permissions_title);
|
|
||||||
String msg = context.getString(R.string.wizard_permissions_no_root_msg);
|
|
||||||
|
|
||||||
setTitle(title);
|
|
||||||
|
|
||||||
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody1));
|
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody1));
|
||||||
txtBody.setText(msg);
|
txtBody.setText(msg);
|
||||||
|
|
||||||
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
||||||
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
||||||
btn2.setEnabled(true);
|
btn2.setEnabled(true);
|
||||||
|
|
||||||
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
TextView txtBody2 = ((TextView)findViewById(R.id.WizardTextBody2));
|
||||||
txtBody2.setVisibility(TextView.GONE);
|
txtBody2.setVisibility(TextView.GONE);
|
||||||
|
|
||||||
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
Button grantPermissions = ((Button)findViewById(R.id.grantPermissions));
|
||||||
grantPermissions.setVisibility(Button.GONE);
|
grantPermissions.setVisibility(Button.GONE);
|
||||||
|
|
||||||
CheckBox consent = (CheckBox)findViewById(R.id.checkBox);
|
CheckBox consent = (CheckBox)findViewById(R.id.checkBox);
|
||||||
consent.setVisibility(CheckBox.GONE);
|
consent.setVisibility(CheckBox.GONE);
|
||||||
|
|
||||||
btn1.setOnClickListener(new View.OnClickListener() {
|
btn1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Permissions.this, LotsaText.class));
|
startActivity(new Intent(Permissions.this, LotsaText.class));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btn2.setOnClickListener(new View.OnClickListener() {
|
btn2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Permissions.this, TipsAndTricks.class));
|
startActivity(new Intent(Permissions.this, TipsAndTricks.class));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//Code to override the back button!
|
//Code to override the back button!
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if(keyCode == KeyEvent.KEYCODE_BACK){
|
if(keyCode == KeyEvent.KEYCODE_BACK){
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(getBaseContext(), LotsaText.class));
|
startActivity(new Intent(getBaseContext(), LotsaText.class));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
package org.torproject.android.wizard;
|
package org.torproject.android.wizard;
|
||||||
|
|
||||||
|
import org.sandroproxy.ony.R;
|
||||||
import org.torproject.android.Orbot;
|
import org.torproject.android.Orbot;
|
||||||
import org.torproject.android.R;
|
|
||||||
import org.torproject.android.TorConstants;
|
import org.torproject.android.TorConstants;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
@ -17,233 +17,229 @@ import android.widget.TextView;
|
||||||
|
|
||||||
public class TipsAndTricks extends Activity implements TorConstants {
|
public class TipsAndTricks extends Activity implements TorConstants {
|
||||||
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
|
|
||||||
super.onStart();
|
|
||||||
setContentView(R.layout.layout_wizard_tips);
|
|
||||||
|
|
||||||
stepFive();
|
|
||||||
|
|
||||||
}
|
super.onStart();
|
||||||
|
setContentView(R.layout.layout_wizard_tips);
|
||||||
@Override
|
|
||||||
protected void onResume() {
|
stepFive();
|
||||||
super.onResume();
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void stepFive(){
|
void stepFive(){
|
||||||
|
|
||||||
|
|
||||||
String title = getString(R.string.wizard_tips_title);
|
String title = getString(R.string.wizard_tips_title);
|
||||||
|
|
||||||
setTitle(title);
|
setTitle(title);
|
||||||
|
|
||||||
Button btnLink = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
|
Button btnLink = (Button)findViewById(R.id.WizardRootButtonInstallGibberbot);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.gibberbot_apk_url);
|
String url = getString(R.string.gibberbot_apk_url);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallOrweb);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallOrweb);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.orweb_apk_url);
|
String url = getString(R.string.orweb_apk_url);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallDuckgo);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallDuckgo);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.duckgo_apk_url);
|
String url = getString(R.string.duckgo_apk_url);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallFirefox);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallFirefox);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.proxymob_setup_url);
|
String url = getString(R.string.proxymob_setup_url);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallTwitter);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallTwitter);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.twitter_setup_url);
|
String url = getString(R.string.twitter_setup_url);
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallStoryMaker);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallStoryMaker);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.story_maker_url);
|
String url = getString(R.string.story_maker_url);
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallMartus);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonInstallMartus);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.martus_url);
|
String url = getString(R.string.martus_url);
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
btnLink = (Button)findViewById(R.id.WizardRootButtonGooglePlay);
|
btnLink = (Button)findViewById(R.id.WizardRootButtonGooglePlay);
|
||||||
|
|
||||||
btnLink.setOnClickListener(new OnClickListener() {
|
btnLink.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
String url = getString(R.string.wizard_tips_play_url);
|
String url = getString(R.string.wizard_tips_play_url);
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Button back = ((Button)findViewById(R.id.btnWizard1));
|
Button back = ((Button)findViewById(R.id.btnWizard1));
|
||||||
Button next = ((Button)findViewById(R.id.btnWizard2));
|
Button next = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
|
||||||
back.setOnClickListener(new View.OnClickListener() {
|
back.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
finish();
|
finish();
|
||||||
startActivityForResult(new Intent(TipsAndTricks.this, Permissions.class), 1);
|
startActivityForResult(new Intent(TipsAndTricks.this, Permissions.class), 1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
next.setOnClickListener(new View.OnClickListener() {
|
|
||||||
|
|
||||||
public void onClick(View v) {
|
|
||||||
showWizardFinal();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
next.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
private void showWizardFinal ()
|
public void onClick(View v) {
|
||||||
{
|
showWizardFinal();
|
||||||
setContentView(R.layout.scrollingtext_buttons_view);
|
}
|
||||||
String title = getString(R.string.wizard_final);
|
});
|
||||||
String msg = getString(R.string.wizard_final_msg);
|
|
||||||
|
}
|
||||||
setTitle(title);
|
|
||||||
|
private void showWizardFinal ()
|
||||||
|
{
|
||||||
|
setContentView(R.layout.scrollingtext_buttons_view);
|
||||||
|
String title = getString(R.string.wizard_final);
|
||||||
|
String msg = getString(R.string.wizard_final_msg);
|
||||||
|
|
||||||
|
setTitle(title);
|
||||||
|
|
||||||
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody));
|
TextView txtBody = ((TextView)findViewById(R.id.WizardTextBody));
|
||||||
txtBody.setText(msg);
|
txtBody.setText(msg);
|
||||||
|
|
||||||
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
Button btn1 = ((Button)findViewById(R.id.btnWizard1));
|
||||||
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
Button btn2 = ((Button)findViewById(R.id.btnWizard2));
|
||||||
|
|
||||||
|
|
||||||
btn2.setText(getString(R.string.btn_finish));
|
btn2.setText(getString(R.string.btn_finish));
|
||||||
btn1.setVisibility(Button.VISIBLE);
|
btn1.setVisibility(Button.VISIBLE);
|
||||||
|
|
||||||
btn1.setOnClickListener(new View.OnClickListener() {
|
btn1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(TipsAndTricks.this, Permissions.class));
|
startActivity(new Intent(TipsAndTricks.this, Permissions.class));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
btn2.setOnClickListener(new View.OnClickListener() {
|
btn2.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//Code to override the back button!
|
//Code to override the back button!
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if(keyCode == KeyEvent.KEYCODE_BACK){
|
if(keyCode == KeyEvent.KEYCODE_BACK){
|
||||||
finish();
|
finish();
|
||||||
startActivity(new Intent(getBaseContext(), Permissions.class));
|
startActivity(new Intent(getBaseContext(), Permissions.class));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
private void showWizardFinal ()
|
private void showWizardFinal ()
|
||||||
{
|
{
|
||||||
String title = null;
|
String title = null;
|
||||||
String msg = null;
|
String msg = null;
|
||||||
|
|
||||||
|
|
||||||
title = context.getString(R.string.wizard_final);
|
title = context.getString(R.string.wizard_final);
|
||||||
msg = context.getString(R.string.wizard_final_msg);
|
msg = context.getString(R.string.wizard_final_msg);
|
||||||
|
|
||||||
DialogInterface.OnClickListener ocListener = new DialogInterface.OnClickListener() {
|
DialogInterface.OnClickListener ocListener = new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
context.startActivity(new Intent(context, Orbot.class));
|
context.startActivity(new Intent(context, Orbot.class));
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
new AlertDialog.Builder(context)
|
||||||
.setIcon(R.drawable.icon)
|
.setIcon(R.drawable.icon)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setPositiveButton(R.string.button_close, ocListener)
|
.setPositiveButton(R.string.button_close, ocListener)
|
||||||
.setMessage(msg)
|
.setMessage(msg)
|
||||||
.show();
|
.show();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}*/
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue