intent api: restore key
This commit is contained in:
parent
5d3b171e21
commit
bb7ffd9692
|
@ -3,34 +3,6 @@
|
||||||
|
|
||||||
package org.torproject.android;
|
package org.torproject.android;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.URLDecoder;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.text.NumberFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.torproject.android.service.OrbotConstants;
|
|
||||||
import org.torproject.android.service.util.Prefs;
|
|
||||||
import org.torproject.android.service.TorService;
|
|
||||||
import org.torproject.android.service.TorServiceConstants;
|
|
||||||
import org.torproject.android.service.util.TorServiceUtils;
|
|
||||||
import org.torproject.android.settings.SettingsPreferences;
|
|
||||||
import org.torproject.android.ui.AppManager;
|
|
||||||
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
|
|
||||||
import org.torproject.android.ui.ImageProgressView;
|
|
||||||
import org.torproject.android.ui.PromoAppsActivity;
|
|
||||||
import org.torproject.android.ui.Rotate3dAnimation;
|
|
||||||
import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
|
|
||||||
import org.torproject.android.vpn.VPNEnableActivity;
|
|
||||||
import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.app.ActivityManager.RunningServiceInfo;
|
import android.app.ActivityManager.RunningServiceInfo;
|
||||||
|
@ -86,6 +58,36 @@ import android.widget.Toast;
|
||||||
import com.google.zxing.integration.android.IntentIntegrator;
|
import com.google.zxing.integration.android.IntentIntegrator;
|
||||||
import com.google.zxing.integration.android.IntentResult;
|
import com.google.zxing.integration.android.IntentResult;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.torproject.android.service.OrbotConstants;
|
||||||
|
import org.torproject.android.service.TorService;
|
||||||
|
import org.torproject.android.service.TorServiceConstants;
|
||||||
|
import org.torproject.android.service.util.Prefs;
|
||||||
|
import org.torproject.android.service.util.TorServiceUtils;
|
||||||
|
import org.torproject.android.settings.SettingsPreferences;
|
||||||
|
import org.torproject.android.ui.AppManager;
|
||||||
|
import org.torproject.android.ui.ImageProgressView;
|
||||||
|
import org.torproject.android.ui.PromoAppsActivity;
|
||||||
|
import org.torproject.android.ui.Rotate3dAnimation;
|
||||||
|
import org.torproject.android.ui.hiddenservices.HiddenServicesActivity;
|
||||||
|
import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
|
||||||
|
import org.torproject.android.vpn.VPNEnableActivity;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.text.NumberFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import static android.support.v4.content.FileProvider.getUriForFile;
|
||||||
|
|
||||||
public class OrbotMainActivity extends AppCompatActivity
|
public class OrbotMainActivity extends AppCompatActivity
|
||||||
implements OrbotConstants, OnLongClickListener, OnTouchListener {
|
implements OrbotConstants, OnLongClickListener, OnTouchListener {
|
||||||
|
|
||||||
|
@ -130,25 +132,17 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
|
public final static String INTENT_ACTION_REQUEST_START_TOR = "org.torproject.android.START_TOR";
|
||||||
|
|
||||||
// for bridge loading from the assets default bridges.txt file
|
// for bridge loading from the assets default bridges.txt file
|
||||||
class Bridge
|
class Bridge {
|
||||||
{
|
|
||||||
String type;
|
String type;
|
||||||
String config;
|
String config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<Bridge> alBridges = null;
|
private ArrayList<Bridge> alBridges = null;
|
||||||
|
|
||||||
private String[] mProjection = new String[]{
|
|
||||||
HSContentProvider.HiddenService._ID,
|
|
||||||
HSContentProvider.HiddenService.NAME,
|
|
||||||
HSContentProvider.HiddenService.DOMAIN,
|
|
||||||
HSContentProvider.HiddenService.PORT,
|
|
||||||
HSContentProvider.HiddenService.ONION_PORT};
|
|
||||||
|
|
||||||
//this is needed for backwards compat back to Android 2.3.*
|
//this is needed for backwards compat back to Android 2.3.*
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
|
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
|
||||||
{
|
|
||||||
if (Build.VERSION.SDK_INT >= 11)
|
if (Build.VERSION.SDK_INT >= 11)
|
||||||
return super.onCreateView(parent, name, context, attrs);
|
return super.onCreateView(parent, name, context, attrs);
|
||||||
return null;
|
return null;
|
||||||
|
@ -156,12 +150,10 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
private void migratePreferences() {
|
private void migratePreferences() {
|
||||||
String hsPortString = mPrefs.getString("pref_hs_ports", "");
|
String hsPortString = mPrefs.getString("pref_hs_ports", "");
|
||||||
if(hsPortString.length() > 0)
|
if (hsPortString.length() > 0) {
|
||||||
{
|
|
||||||
StringTokenizer st = new StringTokenizer(hsPortString, ",");
|
StringTokenizer st = new StringTokenizer(hsPortString, ",");
|
||||||
ContentResolver cr = getContentResolver();
|
ContentResolver cr = getContentResolver();
|
||||||
while (st.hasMoreTokens())
|
while (st.hasMoreTokens()) {
|
||||||
{
|
|
||||||
int hsPort = Integer.parseInt(st.nextToken().split(" ")[0]);
|
int hsPort = Integer.parseInt(st.nextToken().split(" ")[0]);
|
||||||
ContentValues fields = new ContentValues();
|
ContentValues fields = new ContentValues();
|
||||||
fields.put("name", hsPort);
|
fields.put("name", hsPort);
|
||||||
|
@ -176,7 +168,9 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/**
|
||||||
|
* Called when the activity is first created.
|
||||||
|
*/
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
@ -263,8 +257,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private void doLayout ()
|
private void doLayout() {
|
||||||
{
|
|
||||||
setContentView(R.layout.layout_main);
|
setContentView(R.layout.layout_main);
|
||||||
|
|
||||||
setTitle(R.string.app_name);
|
setTitle(R.string.app_name);
|
||||||
|
@ -304,8 +297,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
mGestureDetector = new GestureDetector(this, new MyGestureDetector());
|
mGestureDetector = new GestureDetector(this, new MyGestureDetector());
|
||||||
|
|
||||||
mBtnStart = (Button) findViewById(R.id.btnStart);
|
mBtnStart = (Button) findViewById(R.id.btnStart);
|
||||||
mBtnStart.setOnClickListener(new View.OnClickListener()
|
mBtnStart.setOnClickListener(new View.OnClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
@ -321,8 +313,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
});
|
});
|
||||||
|
|
||||||
mBtnBrowser = (Button) findViewById(R.id.btnBrowser);
|
mBtnBrowser = (Button) findViewById(R.id.btnBrowser);
|
||||||
mBtnBrowser.setOnClickListener(new View.OnClickListener ()
|
mBtnBrowser.setOnClickListener(new View.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -338,27 +329,21 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
boolean canDoVPN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
|
boolean canDoVPN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
|
||||||
|
|
||||||
if (!canDoVPN)
|
if (!canDoVPN) {
|
||||||
{
|
|
||||||
//if not SDK 14 or higher, we can't use the VPN feature
|
//if not SDK 14 or higher, we can't use the VPN feature
|
||||||
mBtnVPN.setVisibility(View.GONE);
|
mBtnVPN.setVisibility(View.GONE);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
boolean useVPN = Prefs.useVpn();
|
boolean useVPN = Prefs.useVpn();
|
||||||
mBtnVPN.setChecked(useVPN);
|
mBtnVPN.setChecked(useVPN);
|
||||||
|
|
||||||
//auto start VPN if VPN is enabled
|
//auto start VPN if VPN is enabled
|
||||||
if (useVPN)
|
if (useVPN) {
|
||||||
{
|
|
||||||
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
mBtnVPN.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
|
mBtnVPN.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
{
|
|
||||||
enableVPN(isChecked);
|
enableVPN(isChecked);
|
||||||
|
|
||||||
|
|
||||||
|
@ -371,18 +356,14 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
mBtnBridges = (SwitchCompat) findViewById(R.id.btnBridges);
|
mBtnBridges = (SwitchCompat) findViewById(R.id.btnBridges);
|
||||||
mBtnBridges.setChecked(Prefs.bridgesEnabled());
|
mBtnBridges.setChecked(Prefs.bridgesEnabled());
|
||||||
mBtnBridges.setOnClickListener(new View.OnClickListener ()
|
mBtnBridges.setOnClickListener(new View.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (Build.CPU_ABI.contains("arm"))
|
if (Build.CPU_ABI.contains("arm")) {
|
||||||
{
|
|
||||||
promptSetupBridges(); //if ARM processor, show all bridge options
|
promptSetupBridges(); //if ARM processor, show all bridge options
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
showGetBridgePrompt(""); //if other chip ar, only stock bridges are supported
|
showGetBridgePrompt(""); //if other chip ar, only stock bridges are supported
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,8 +378,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
ArrayList<String> cList = new ArrayList<String>();
|
ArrayList<String> cList = new ArrayList<String>();
|
||||||
cList.add(0, getString(R.string.vpn_default_world));
|
cList.add(0, getString(R.string.vpn_default_world));
|
||||||
|
|
||||||
for (int i = 0; i < TorServiceConstants.COUNTRY_CODES.length; i++)
|
for (int i = 0; i < TorServiceConstants.COUNTRY_CODES.length; i++) {
|
||||||
{
|
|
||||||
Locale locale = new Locale("", TorServiceConstants.COUNTRY_CODES[i]);
|
Locale locale = new Locale("", TorServiceConstants.COUNTRY_CODES[i]);
|
||||||
cList.add(locale.getDisplayCountry());
|
cList.add(locale.getDisplayCountry());
|
||||||
|
|
||||||
|
@ -463,12 +443,10 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
if (item.getItemId() == R.id.menu_settings)
|
if (item.getItemId() == R.id.menu_settings) {
|
||||||
{
|
|
||||||
Intent intent = new Intent(OrbotMainActivity.this, SettingsPreferences.class);
|
Intent intent = new Intent(OrbotMainActivity.this, SettingsPreferences.class);
|
||||||
startActivityForResult(intent, REQUEST_SETTINGS);
|
startActivityForResult(intent, REQUEST_SETTINGS);
|
||||||
}
|
}
|
||||||
|
@ -478,31 +456,23 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
startActivity(new Intent(OrbotMainActivity.this, PromoAppsActivity.class));
|
startActivity(new Intent(OrbotMainActivity.this, PromoAppsActivity.class));
|
||||||
|
|
||||||
}*/
|
}*/
|
||||||
else if (item.getItemId() == R.id.menu_exit)
|
else if (item.getItemId() == R.id.menu_exit) {
|
||||||
{
|
|
||||||
//exit app
|
//exit app
|
||||||
doExit();
|
doExit();
|
||||||
|
|
||||||
|
|
||||||
}
|
} else if (item.getItemId() == R.id.menu_about) {
|
||||||
else if (item.getItemId() == R.id.menu_about)
|
|
||||||
{
|
|
||||||
showAbout();
|
showAbout();
|
||||||
|
|
||||||
|
|
||||||
}
|
} else if (item.getItemId() == R.id.menu_scan) {
|
||||||
else if (item.getItemId() == R.id.menu_scan)
|
|
||||||
{
|
|
||||||
IntentIntegrator integrator = new IntentIntegrator(OrbotMainActivity.this);
|
IntentIntegrator integrator = new IntentIntegrator(OrbotMainActivity.this);
|
||||||
integrator.initiateScan();
|
integrator.initiateScan();
|
||||||
}
|
} else if (item.getItemId() == R.id.menu_share_bridge) {
|
||||||
else if (item.getItemId() == R.id.menu_share_bridge)
|
|
||||||
{
|
|
||||||
|
|
||||||
String bridges = Prefs.getBridgesList();
|
String bridges = Prefs.getBridgesList();
|
||||||
|
|
||||||
if (bridges != null && bridges.length() > 0)
|
if (bridges != null && bridges.length() > 0) {
|
||||||
{
|
|
||||||
try {
|
try {
|
||||||
bridges = "bridge://" + URLEncoder.encode(bridges, "UTF-8");
|
bridges = "bridge://" + URLEncoder.encode(bridges, "UTF-8");
|
||||||
|
|
||||||
|
@ -515,17 +485,14 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} else if (item.getItemId() == R.id.menu_hidden_services) {
|
||||||
else if (item.getItemId() == R.id.menu_hidden_services)
|
|
||||||
{
|
|
||||||
startActivity(new Intent(this, HiddenServicesActivity.class));
|
startActivity(new Intent(this, HiddenServicesActivity.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showAbout ()
|
private void showAbout() {
|
||||||
{
|
|
||||||
|
|
||||||
LayoutInflater li = LayoutInflater.from(this);
|
LayoutInflater li = LayoutInflater.from(this);
|
||||||
View view = li.inflate(R.layout.layout_about, null);
|
View view = li.inflate(R.layout.layout_about, null);
|
||||||
|
@ -563,29 +530,24 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
if (aDialog != null)
|
if (aDialog != null)
|
||||||
aDialog.dismiss();
|
aDialog.dismiss();
|
||||||
}
|
} catch (IllegalStateException ise) {
|
||||||
catch (IllegalStateException ise)
|
|
||||||
{
|
|
||||||
//can happen on exit/shutdown
|
//can happen on exit/shutdown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doTorCheck ()
|
private void doTorCheck() {
|
||||||
{
|
|
||||||
|
|
||||||
openBrowser(URL_TOR_CHECK, false);
|
openBrowser(URL_TOR_CHECK, false);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableVPN (boolean enable)
|
private void enableVPN(boolean enable) {
|
||||||
{
|
|
||||||
Prefs.putUseVpn(enable);
|
Prefs.putUseVpn(enable);
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
|
@ -597,8 +559,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
stopVpnService();
|
stopVpnService();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableHiddenServicePort (String hsName, final int hsPort, int hsRemotePort, final boolean doBackup, final String keyZipPath) throws RemoteException, InterruptedException
|
private void enableHiddenServicePort(String hsName, final int hsPort, int hsRemotePort, final String backupToPackage, final String keyZipPath) throws RemoteException, InterruptedException {
|
||||||
{
|
|
||||||
String onionHostname = null;
|
String onionHostname = null;
|
||||||
|
|
||||||
if (hsName == null)
|
if (hsName == null)
|
||||||
|
@ -608,12 +569,19 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
hsRemotePort = hsPort;
|
hsRemotePort = hsPort;
|
||||||
|
|
||||||
ContentValues fields = new ContentValues();
|
ContentValues fields = new ContentValues();
|
||||||
fields.put("name", hsName);
|
fields.put(HSContentProvider.HiddenService.NAME, hsName);
|
||||||
fields.put("port", hsPort);
|
fields.put(HSContentProvider.HiddenService.PORT, hsPort);
|
||||||
fields.put("onion_port", hsRemotePort);
|
fields.put(HSContentProvider.HiddenService.ONION_PORT, hsRemotePort);
|
||||||
|
|
||||||
ContentResolver cr = getContentResolver();
|
ContentResolver cr = getContentResolver();
|
||||||
Cursor row = cr.query(HSContentProvider.CONTENT_URI, mProjection, "port=" + hsPort, null, null);
|
|
||||||
|
Cursor row = cr.query(
|
||||||
|
HSContentProvider.CONTENT_URI,
|
||||||
|
HSContentProvider.PROJECTION,
|
||||||
|
HSContentProvider.HiddenService.ONION_PORT + "=" + hsPort,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
if (row == null) {
|
if (row == null) {
|
||||||
cr.insert(HSContentProvider.CONTENT_URI, fields);
|
cr.insert(HSContentProvider.CONTENT_URI, fields);
|
||||||
|
@ -628,13 +596,11 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
new Thread() {
|
new Thread() {
|
||||||
|
|
||||||
public void run ()
|
public void run() {
|
||||||
{
|
|
||||||
String hostname = null;
|
String hostname = null;
|
||||||
String backupPath = null;
|
Intent nResult = new Intent();
|
||||||
|
|
||||||
while (hostname == null)
|
while (hostname == null) {
|
||||||
{
|
|
||||||
//we need to stop and start Tor
|
//we need to stop and start Tor
|
||||||
try {
|
try {
|
||||||
Thread.sleep(3000); //wait three seconds
|
Thread.sleep(3000); //wait three seconds
|
||||||
|
@ -643,34 +609,45 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
Cursor onion = getContentResolver().query(HSContentProvider.CONTENT_URI, mProjection, "port=" + hsPort, null, null);
|
Cursor onion = getContentResolver().query(
|
||||||
if(onion != null) {
|
HSContentProvider.CONTENT_URI,
|
||||||
|
HSContentProvider.PROJECTION,
|
||||||
|
HSContentProvider.HiddenService.ONION_PORT + "=" + hsPort,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (onion != null && onion.getCount() > 0) {
|
||||||
hostname = onion.getString(onion.getColumnIndex(HSContentProvider.HiddenService.NAME));
|
hostname = onion.getString(onion.getColumnIndex(HSContentProvider.HiddenService.NAME));
|
||||||
|
nResult.putExtra("hs_host", hostname);
|
||||||
|
/* TODO
|
||||||
BackupUtils hsutils = new BackupUtils(getApplicationContext());
|
BackupUtils hsutils = new BackupUtils(getApplicationContext());
|
||||||
if(keyZipPath != null && keyZipPath.length() > 0)
|
if (keyZipPath != null && keyZipPath.length() > 0) {
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
// hsutils.restoreZipBackup(hsPort, keyZipPath);
|
// hsutils.restoreZipBackup(hsPort, keyZipPath);
|
||||||
requestTorRereadConfig();
|
requestTorRereadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO
|
|
||||||
if(doBackup)
|
|
||||||
{
|
|
||||||
backupPath = hsutils.createZipBackup(hsPort);
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (backupToPackage != null && backupToPackage.length() > 0) {
|
||||||
|
String servicePath = getFilesDir() + "/" + TorServiceConstants.HIDDEN_SERVICES_DIR + "/hs" + hsPort;
|
||||||
|
File hidden_service_key = new File(servicePath, "private_key");
|
||||||
|
Context context = getApplicationContext();
|
||||||
|
|
||||||
|
Uri contentUri = getUriForFile(
|
||||||
|
context,
|
||||||
|
"org.torproject.android.ui.hiddenservices.storage",
|
||||||
|
hidden_service_key
|
||||||
|
);
|
||||||
|
|
||||||
|
context.grantUriPermission(backupToPackage, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
nResult.setData(contentUri);
|
||||||
|
nResult.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
}
|
||||||
|
|
||||||
onion.close();
|
onion.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent nResult = new Intent();
|
|
||||||
nResult.putExtra("hs_host", hostname);
|
|
||||||
/* TODO
|
|
||||||
if(doBackup && backupPath != null) {
|
|
||||||
nResult.putExtra("hs_backup_path", backupPath);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
setResult(RESULT_OK, nResult);
|
setResult(RESULT_OK, nResult);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -685,8 +662,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void handleIntents ()
|
private synchronized void handleIntents() {
|
||||||
{
|
|
||||||
if (getIntent() == null)
|
if (getIntent() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -705,8 +681,8 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
final int hiddenServicePort = intent.getIntExtra("hs_port", -1);
|
final int hiddenServicePort = intent.getIntExtra("hs_port", -1);
|
||||||
final int hiddenServiceRemotePort = intent.getIntExtra("hs_onion_port", -1);
|
final int hiddenServiceRemotePort = intent.getIntExtra("hs_onion_port", -1);
|
||||||
final String hiddenServiceName = intent.getStringExtra("hs_name");
|
final String hiddenServiceName = intent.getStringExtra("hs_name");
|
||||||
final Boolean createBackup = intent.getBooleanExtra("hs_backup", false);
|
final String backupToPackage = intent.getStringExtra("hs_backup_to_package");
|
||||||
final String keyZipPath = intent.getStringExtra("hs_key_zip_path");
|
final String keyZipPath = intent.getStringExtra("hs_key_path");
|
||||||
|
|
||||||
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
@ -716,7 +692,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
try {
|
try {
|
||||||
enableHiddenServicePort(
|
enableHiddenServicePort(
|
||||||
hiddenServiceName, hiddenServicePort,
|
hiddenServiceName, hiddenServicePort,
|
||||||
hiddenServiceRemotePort, createBackup, keyZipPath
|
hiddenServiceRemotePort, backupToPackage, keyZipPath
|
||||||
);
|
);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
|
@ -785,8 +761,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setNewBridges (String newBridgeValue)
|
private void setNewBridges(String newBridgeValue) {
|
||||||
{
|
|
||||||
|
|
||||||
Prefs.setBridgesList(newBridgeValue); //set the string to a preference
|
Prefs.setBridgesList(newBridgeValue); //set the string to a preference
|
||||||
Prefs.putBridgesEnabled(true);
|
Prefs.putBridgesEnabled(true);
|
||||||
|
@ -801,30 +776,21 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
/*
|
/*
|
||||||
* Launch the system activity for Uri viewing with the provided url
|
* Launch the system activity for Uri viewing with the provided url
|
||||||
*/
|
*/
|
||||||
private void openBrowser(final String browserLaunchUrl,boolean forceExternal)
|
private void openBrowser(final String browserLaunchUrl, boolean forceExternal) {
|
||||||
{
|
|
||||||
boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
|
boolean isBrowserInstalled = appInstalledOrNot(TorServiceConstants.BROWSER_APP_USERNAME);
|
||||||
|
|
||||||
if (isBrowserInstalled)
|
if (isBrowserInstalled) {
|
||||||
{
|
|
||||||
startIntent(TorServiceConstants.BROWSER_APP_USERNAME, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
startIntent(TorServiceConstants.BROWSER_APP_USERNAME, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
||||||
}
|
} else if (mBtnVPN.isChecked() || forceExternal) {
|
||||||
else if (mBtnVPN.isChecked()||forceExternal)
|
|
||||||
{
|
|
||||||
//use the system browser since VPN is on
|
//use the system browser since VPN is on
|
||||||
startIntent(null, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
startIntent(null, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
||||||
}
|
} else if (Prefs.useTransparentProxying()) {
|
||||||
else if (Prefs.useTransparentProxying())
|
|
||||||
{
|
|
||||||
startIntent(null, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
startIntent(null, Intent.ACTION_VIEW, Uri.parse(browserLaunchUrl));
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
AlertDialog aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
||||||
.setTitle(R.string.install_apps_)
|
.setTitle(R.string.install_apps_)
|
||||||
.setMessage(R.string.it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_)
|
.setMessage(R.string.it_doesn_t_seem_like_you_have_orweb_installed_want_help_with_that_or_should_we_just_open_the_browser_)
|
||||||
.setPositiveButton(R.string.install_orweb, new Dialog.OnClickListener ()
|
.setPositiveButton(R.string.install_orweb, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
@ -846,8 +812,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
mBtnVPN.setChecked(true);
|
mBtnVPN.setChecked(true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.standard_browser, new Dialog.OnClickListener ()
|
.setNegativeButton(R.string.standard_browser, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
@ -862,8 +827,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startIntent (String pkg, String action, Uri data)
|
private void startIntent(String pkg, String action, Uri data) {
|
||||||
{
|
|
||||||
Intent i;
|
Intent i;
|
||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
|
|
||||||
|
@ -872,9 +836,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
i = pm.getLaunchIntentForPackage(pkg);
|
i = pm.getLaunchIntentForPackage(pkg);
|
||||||
if (i == null)
|
if (i == null)
|
||||||
throw new PackageManager.NameNotFoundException();
|
throw new PackageManager.NameNotFoundException();
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
i = new Intent();
|
i = new Intent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -889,16 +851,12 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean appInstalledOrNot(String uri)
|
private boolean appInstalledOrNot(String uri) {
|
||||||
{
|
|
||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
PackageInfo pi = pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
|
PackageInfo pi = pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
|
||||||
return pi.applicationInfo.enabled;
|
return pi.applicationInfo.enabled;
|
||||||
}
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
catch (PackageManager.NameNotFoundException e)
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -907,48 +865,35 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
protected void onActivityResult(int request, int response, Intent data) {
|
protected void onActivityResult(int request, int response, Intent data) {
|
||||||
super.onActivityResult(request, response, data);
|
super.onActivityResult(request, response, data);
|
||||||
|
|
||||||
if (request == REQUEST_SETTINGS && response == RESULT_OK)
|
if (request == REQUEST_SETTINGS && response == RESULT_OK) {
|
||||||
{
|
|
||||||
OrbotApp.forceChangeLanguage(this);
|
OrbotApp.forceChangeLanguage(this);
|
||||||
if (data != null && data.getBooleanExtra("transproxywipe", false))
|
if (data != null && data.getBooleanExtra("transproxywipe", false)) {
|
||||||
{
|
|
||||||
|
|
||||||
boolean result = flushTransProxy();
|
boolean result = flushTransProxy();
|
||||||
|
|
||||||
if (result)
|
if (result) {
|
||||||
{
|
|
||||||
|
|
||||||
Toast.makeText(this, R.string.transparent_proxy_rules_flushed_, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.transparent_proxy_rules_flushed_, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
Toast.makeText(this, R.string.you_do_not_have_root_access_enabled, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.you_do_not_have_root_access_enabled, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} else if (torStatus == TorServiceConstants.STATUS_ON) {
|
||||||
else if (torStatus == TorServiceConstants.STATUS_ON)
|
|
||||||
{
|
|
||||||
updateTransProxy();
|
updateTransProxy();
|
||||||
// Toast.makeText(this, R.string.you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_, Toast.LENGTH_SHORT).show();
|
// Toast.makeText(this, R.string.you_may_need_to_stop_and_start_orbot_for_settings_change_to_be_enabled_, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} else if (request == REQUEST_VPN) {
|
||||||
else if (request == REQUEST_VPN)
|
|
||||||
{
|
|
||||||
if (response == RESULT_OK) {
|
if (response == RESULT_OK) {
|
||||||
sendIntentToService(TorServiceConstants.CMD_VPN);
|
sendIntentToService(TorServiceConstants.CMD_VPN);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
Prefs.putUseVpn(false);
|
Prefs.putUseVpn(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} else if (request == REQUEST_VPN_APPS_SELECT) {
|
||||||
else if (request == REQUEST_VPN_APPS_SELECT)
|
|
||||||
{
|
|
||||||
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
startActivity(new Intent(OrbotMainActivity.this, VPNEnableActivity.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,28 +903,23 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
String results = scanResult.getContents();
|
String results = scanResult.getContents();
|
||||||
|
|
||||||
if (results != null && results.length() > 0)
|
if (results != null && results.length() > 0) {
|
||||||
{
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
int urlIdx = results.indexOf("://");
|
int urlIdx = results.indexOf("://");
|
||||||
|
|
||||||
if (urlIdx!=-1)
|
if (urlIdx != -1) {
|
||||||
{
|
|
||||||
results = URLDecoder.decode(results, "UTF-8");
|
results = URLDecoder.decode(results, "UTF-8");
|
||||||
results = results.substring(urlIdx + 3);
|
results = results.substring(urlIdx + 3);
|
||||||
|
|
||||||
showAlert(getString(R.string.bridges_updated), getString(R.string.restart_orbot_to_use_this_bridge_) + results, false);
|
showAlert(getString(R.string.bridges_updated), getString(R.string.restart_orbot_to_use_this_bridge_) + results, false);
|
||||||
|
|
||||||
setNewBridges(results);
|
setNewBridges(results);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
JSONArray bridgeJson = new JSONArray(results);
|
JSONArray bridgeJson = new JSONArray(results);
|
||||||
StringBuffer bridgeLines = new StringBuffer();
|
StringBuffer bridgeLines = new StringBuffer();
|
||||||
|
|
||||||
for (int i = 0; i < bridgeJson.length(); i++)
|
for (int i = 0; i < bridgeJson.length(); i++) {
|
||||||
{
|
|
||||||
String bridgeLine = bridgeJson.getString(i);
|
String bridgeLine = bridgeJson.getString(i);
|
||||||
bridgeLines.append(bridgeLine).append("\n");
|
bridgeLines.append(bridgeLine).append("\n");
|
||||||
}
|
}
|
||||||
|
@ -997,8 +937,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void promptSetupBridges ()
|
public void promptSetupBridges() {
|
||||||
{
|
|
||||||
loadBridgeDefaults();
|
loadBridgeDefaults();
|
||||||
|
|
||||||
LayoutInflater li = LayoutInflater.from(this);
|
LayoutInflater li = LayoutInflater.from(this);
|
||||||
|
@ -1007,8 +946,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
TextView versionName = (TextView) view.findViewById(R.id.diaglog);
|
TextView versionName = (TextView) view.findViewById(R.id.diaglog);
|
||||||
versionName.setText(R.string.if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_);
|
versionName.setText(R.string.if_your_mobile_network_actively_blocks_tor_you_can_use_a_tor_bridge_to_access_the_network_another_way_to_get_bridges_is_to_send_an_email_to_bridges_torproject_org_please_note_that_you_must_send_the_email_using_an_address_from_one_of_the_following_email_providers_riseup_gmail_or_yahoo_);
|
||||||
|
|
||||||
if (mBtnBridges.isChecked())
|
if (mBtnBridges.isChecked()) {
|
||||||
{
|
|
||||||
new AlertDialog.Builder(this)
|
new AlertDialog.Builder(this)
|
||||||
.setTitle(R.string.bridge_mode)
|
.setTitle(R.string.bridge_mode)
|
||||||
.setView(view)
|
.setView(view)
|
||||||
|
@ -1017,8 +955,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
// The 'which' argument contains the index position
|
// The 'which' argument contains the index position
|
||||||
// of the selected item
|
// of the selected item
|
||||||
|
|
||||||
switch (which)
|
switch (which) {
|
||||||
{
|
|
||||||
case 0: //obfs 4;
|
case 0: //obfs 4;
|
||||||
setupBridgeType("obfs4");
|
setupBridgeType("obfs4");
|
||||||
enableBridges(true);
|
enableBridges(true);
|
||||||
|
@ -1042,8 +979,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}).setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener()
|
}).setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
@ -1054,16 +990,13 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
.show();
|
.show();
|
||||||
|
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
enableBridges(false);
|
enableBridges(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showGetBridgePrompt (final String type)
|
private void showGetBridgePrompt(final String type) {
|
||||||
{
|
|
||||||
LayoutInflater li = LayoutInflater.from(this);
|
LayoutInflater li = LayoutInflater.from(this);
|
||||||
View view = li.inflate(R.layout.layout_diag, null);
|
View view = li.inflate(R.layout.layout_diag, null);
|
||||||
|
|
||||||
|
@ -1073,15 +1006,13 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
new AlertDialog.Builder(this)
|
new AlertDialog.Builder(this)
|
||||||
.setTitle(R.string.bridge_mode)
|
.setTitle(R.string.bridge_mode)
|
||||||
.setView(view)
|
.setView(view)
|
||||||
.setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener()
|
.setNegativeButton(R.string.btn_cancel, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
//do nothing
|
//do nothing
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNeutralButton(R.string.get_bridges_email, new Dialog.OnClickListener ()
|
.setNeutralButton(R.string.get_bridges_email, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
@ -1093,8 +1024,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.setPositiveButton(R.string.get_bridges_web, new Dialog.OnClickListener ()
|
.setPositiveButton(R.string.get_bridges_web, new Dialog.OnClickListener() {
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
@ -1107,20 +1037,16 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}).show();
|
}).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendGetBridgeEmail (String type)
|
private void sendGetBridgeEmail(String type) {
|
||||||
{
|
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
intent.setType("message/rfc822");
|
intent.setType("message/rfc822");
|
||||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"bridges@torproject.org"});
|
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"bridges@torproject.org"});
|
||||||
|
|
||||||
if (type != null)
|
if (type != null) {
|
||||||
{
|
|
||||||
intent.putExtra(Intent.EXTRA_SUBJECT, "get transport " + type);
|
intent.putExtra(Intent.EXTRA_SUBJECT, "get transport " + type);
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, "get transport " + type);
|
intent.putExtra(Intent.EXTRA_TEXT, "get transport " + type);
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
intent.putExtra(Intent.EXTRA_SUBJECT, "get bridges");
|
intent.putExtra(Intent.EXTRA_SUBJECT, "get bridges");
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, "get bridges");
|
intent.putExtra(Intent.EXTRA_TEXT, "get bridges");
|
||||||
|
|
||||||
|
@ -1129,15 +1055,12 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
startActivity(Intent.createChooser(intent, getString(R.string.send_email)));
|
startActivity(Intent.createChooser(intent, getString(R.string.send_email)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableBridges (boolean enable)
|
private void enableBridges(boolean enable) {
|
||||||
{
|
|
||||||
Prefs.putBridgesEnabled(enable);
|
Prefs.putBridgesEnabled(enable);
|
||||||
|
|
||||||
if (torStatus == TorServiceConstants.STATUS_ON)
|
if (torStatus == TorServiceConstants.STATUS_ON) {
|
||||||
{
|
|
||||||
String bridgeList = Prefs.getBridgesList();
|
String bridgeList = Prefs.getBridgesList();
|
||||||
if (bridgeList != null && bridgeList.length() > 0)
|
if (bridgeList != null && bridgeList.length() > 0) {
|
||||||
{
|
|
||||||
requestTorRereadConfig();
|
requestTorRereadConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1147,19 +1070,16 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
|
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopVpnService ()
|
public void stopVpnService() {
|
||||||
{
|
|
||||||
sendIntentToService(TorServiceConstants.CMD_VPN_CLEAR);
|
sendIntentToService(TorServiceConstants.CMD_VPN_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean flushTransProxy ()
|
private boolean flushTransProxy() {
|
||||||
{
|
|
||||||
sendIntentToService(TorServiceConstants.CMD_FLUSH);
|
sendIntentToService(TorServiceConstants.CMD_FLUSH);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateTransProxy ()
|
private boolean updateTransProxy() {
|
||||||
{
|
|
||||||
sendIntentToService(TorServiceConstants.CMD_UPDATE_TRANS_PROXY);
|
sendIntentToService(TorServiceConstants.CMD_UPDATE_TRANS_PROXY);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1182,26 +1102,21 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
//sometimes this can go haywire or crazy with too many error
|
//sometimes this can go haywire or crazy with too many error
|
||||||
//messages from Tor, and the user cannot stop or exit Orbot
|
//messages from Tor, and the user cannot stop or exit Orbot
|
||||||
//so need to ensure repeated error messages are not spamming this method
|
//so need to ensure repeated error messages are not spamming this method
|
||||||
private void showAlert(String title, String msg, boolean button)
|
private void showAlert(String title, String msg, boolean button) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
if (aDialog != null && aDialog.isShowing())
|
if (aDialog != null && aDialog.isShowing())
|
||||||
aDialog.dismiss();
|
aDialog.dismiss();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e){} //swallow any errors
|
} //swallow any errors
|
||||||
|
|
||||||
if (button)
|
if (button) {
|
||||||
{
|
|
||||||
aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
||||||
.setIcon(R.drawable.onion32)
|
.setIcon(R.drawable.onion32)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setMessage(msg)
|
.setMessage(msg)
|
||||||
.setPositiveButton(R.string.btn_okay, null)
|
.setPositiveButton(R.string.btn_okay, null)
|
||||||
.show();
|
.show();
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
aDialog = new AlertDialog.Builder(OrbotMainActivity.this)
|
||||||
.setIcon(R.drawable.onion32)
|
.setIcon(R.drawable.onion32)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
|
@ -1228,20 +1143,17 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
mBtnBrowser.setEnabled(true);
|
mBtnBrowser.setEnabled(true);
|
||||||
mBtnStart.setText(R.string.menu_stop);
|
mBtnStart.setText(R.string.menu_stop);
|
||||||
|
|
||||||
if (torServiceMsg != null)
|
if (torServiceMsg != null) {
|
||||||
{
|
|
||||||
if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_HEADER)) {
|
if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_HEADER)) {
|
||||||
lblStatus.setText(torServiceMsg);
|
lblStatus.setText(torServiceMsg);
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
lblStatus.setText(getString(R.string.status_activated));
|
lblStatus.setText(getString(R.string.status_activated));
|
||||||
|
|
||||||
|
|
||||||
boolean showFirstTime = mPrefs.getBoolean("connect_first_time", true);
|
boolean showFirstTime = mPrefs.getBoolean("connect_first_time", true);
|
||||||
|
|
||||||
if (showFirstTime)
|
if (showFirstTime) {
|
||||||
{
|
|
||||||
Editor pEdit = mPrefs.edit();
|
Editor pEdit = mPrefs.edit();
|
||||||
pEdit.putBoolean("connect_first_time", false);
|
pEdit.putBoolean("connect_first_time", false);
|
||||||
pEdit.commit();
|
pEdit.commit();
|
||||||
|
@ -1249,8 +1161,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
getString(R.string.connect_first_time), true);
|
getString(R.string.connect_first_time), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoStartFromIntent)
|
if (autoStartFromIntent) {
|
||||||
{
|
|
||||||
autoStartFromIntent = false;
|
autoStartFromIntent = false;
|
||||||
Intent resultIntent = lastStatusIntent;
|
Intent resultIntent = lastStatusIntent;
|
||||||
resultIntent.putExtra(TorServiceConstants.EXTRA_STATUS, torStatus);
|
resultIntent.putExtra(TorServiceConstants.EXTRA_STATUS, torStatus);
|
||||||
|
@ -1260,17 +1171,14 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else if (torStatus == TorServiceConstants.STATUS_STARTING) {
|
} else if (torStatus == TorServiceConstants.STATUS_STARTING) {
|
||||||
|
|
||||||
imgStatus.setImageResource(R.drawable.torstarting);
|
imgStatus.setImageResource(R.drawable.torstarting);
|
||||||
|
|
||||||
if (torServiceMsg != null)
|
if (torServiceMsg != null) {
|
||||||
{
|
|
||||||
if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_BOOTSTRAPPED))
|
if (torServiceMsg.contains(TorServiceConstants.LOG_NOTICE_BOOTSTRAPPED))
|
||||||
lblStatus.setText(torServiceMsg);
|
lblStatus.setText(torServiceMsg);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
lblStatus.setText(getString(R.string.status_starting_up));
|
lblStatus.setText(getString(R.string.status_starting_up));
|
||||||
|
|
||||||
mBtnStart.setText("...");
|
mBtnStart.setText("...");
|
||||||
|
@ -1296,8 +1204,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (torServiceMsg != null && torServiceMsg.length() > 0)
|
if (torServiceMsg != null && torServiceMsg.length() > 0) {
|
||||||
{
|
|
||||||
mTxtOrbotLog.append(torServiceMsg + '\n');
|
mTxtOrbotLog.append(torServiceMsg + '\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1365,13 +1272,11 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
//now you can handle the intents properly
|
//now you can handle the intents properly
|
||||||
handleIntents();
|
handleIntents();
|
||||||
|
|
||||||
}
|
} else if (newTorStatus != null && !torStatus.equals(newTorStatus)) //status changed
|
||||||
else if (newTorStatus != null && !torStatus.equals(newTorStatus)) //status changed
|
|
||||||
{
|
{
|
||||||
torStatus = newTorStatus;
|
torStatus = newTorStatus;
|
||||||
updateStatus(log);
|
updateStatus(log);
|
||||||
}
|
} else if (log != null) //it is just a log
|
||||||
else if (log != null) //it is just a log
|
|
||||||
updateStatus(log);
|
updateStatus(log);
|
||||||
|
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
|
@ -1443,8 +1348,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
private static final float ROTATE_FROM = 0.0f;
|
private static final float ROTATE_FROM = 0.0f;
|
||||||
private static final float ROTATE_TO = 360.0f * 4f;// 3.141592654f * 32.0f;
|
private static final float ROTATE_TO = 360.0f * 4f;// 3.141592654f * 32.0f;
|
||||||
|
|
||||||
public void spinOrbot (float direction)
|
public void spinOrbot(float direction) {
|
||||||
{
|
|
||||||
sendIntentToService(TorServiceConstants.CMD_NEWNYM);
|
sendIntentToService(TorServiceConstants.CMD_NEWNYM);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1465,8 +1369,7 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||||
try {
|
try {
|
||||||
if (torStatus == TorServiceConstants.STATUS_ON)
|
if (torStatus == TorServiceConstants.STATUS_ON) {
|
||||||
{
|
|
||||||
float direction = 1f;
|
float direction = 1f;
|
||||||
if (velocityX < 0)
|
if (velocityX < 0)
|
||||||
direction = -1f;
|
direction = -1f;
|
||||||
|
@ -1479,14 +1382,11 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadBridgeDefaults ()
|
private void loadBridgeDefaults() {
|
||||||
{
|
if (alBridges == null) {
|
||||||
if (alBridges == null)
|
|
||||||
{
|
|
||||||
alBridges = new ArrayList<Bridge>();
|
alBridges = new ArrayList<Bridge>();
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
BufferedReader in =
|
BufferedReader in =
|
||||||
new BufferedReader(new InputStreamReader(getAssets().open("bridges.txt"), "UTF-8"));
|
new BufferedReader(new InputStreamReader(getAssets().open("bridges.txt"), "UTF-8"));
|
||||||
String str;
|
String str;
|
||||||
|
@ -1509,17 +1409,14 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
|
|
||||||
in.close();
|
in.close();
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupBridgeType (String type)
|
private void setupBridgeType(String type) {
|
||||||
{
|
|
||||||
StringBuffer sbConfig = new StringBuffer();
|
StringBuffer sbConfig = new StringBuffer();
|
||||||
|
|
||||||
//we should randomly sort alBridges so we don't have the same bridge order each time
|
//we should randomly sort alBridges so we don't have the same bridge order each time
|
||||||
|
@ -1531,10 +1428,8 @@ public class OrbotMainActivity extends AppCompatActivity
|
||||||
int bridgeCount = 0;
|
int bridgeCount = 0;
|
||||||
|
|
||||||
//now go through the list to find the bridges we want
|
//now go through the list to find the bridges we want
|
||||||
for (Bridge b : alBridges)
|
for (Bridge b : alBridges) {
|
||||||
{
|
if (b.type.equals(type)) {
|
||||||
if (b.type.equals(type))
|
|
||||||
{
|
|
||||||
|
|
||||||
sbConfig.append(b.type);
|
sbConfig.append(b.type);
|
||||||
sbConfig.append(' ');
|
sbConfig.append(' ');
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class BackupUtils {
|
||||||
|
|
||||||
JSONObject config = new JSONObject();
|
JSONObject config = new JSONObject();
|
||||||
try {
|
try {
|
||||||
if (portData.getCount() != 1)
|
if (portData == null || portData.getCount() != 1)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
portData.moveToNext();
|
portData.moveToNext();
|
||||||
|
@ -184,7 +184,7 @@ public class BackupUtils {
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
if (service.getCount() == 0) {
|
if (service == null || service.getCount() == 0) {
|
||||||
mResolver.insert(HSContentProvider.CONTENT_URI, fields);
|
mResolver.insert(HSContentProvider.CONTENT_URI, fields);
|
||||||
} else {
|
} else {
|
||||||
mResolver.update(
|
mResolver.update(
|
||||||
|
@ -193,9 +193,9 @@ public class BackupUtils {
|
||||||
HSContentProvider.HiddenService.PORT + "=" + port,
|
HSContentProvider.HiddenService.PORT + "=" + port,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
service.close();
|
service.close();
|
||||||
|
}
|
||||||
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
Loading…
Reference in New Issue