mirror of
https://github.com/gsantner/dandelion
synced 2024-11-24 13:22:08 +01:00
Avoid passing MainActivity to OrbotStatusReceiver and handle Orbot foreground starts in onActivityResult
This commit is contained in:
parent
8bbd7b996e
commit
da80c11b66
2 changed files with 42 additions and 17 deletions
|
@ -40,6 +40,7 @@ import android.support.annotation.NonNull;
|
|||
import android.support.design.widget.CollapsingToolbarLayout;
|
||||
import android.support.design.widget.NavigationView;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
|
@ -51,6 +52,7 @@ import android.text.Html;
|
|||
import android.text.SpannableString;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -179,7 +181,7 @@ public class MainActivity extends AppCompatActivity
|
|||
podUserProfile.setListener(this);
|
||||
|
||||
//Orbot integration
|
||||
OrbotStatusReceiver.setMainActivity(this);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(brRequestShowOrbot, new IntentFilter(OrbotStatusReceiver.REQUEST_SHOW_ORBOT));
|
||||
OrbotHelper.requestStartTor(getApplicationContext());
|
||||
if(appSettings.isProxyOrbot()) {
|
||||
if(!OrbotHelper.isOrbotInstalled(getApplicationContext())) {
|
||||
|
@ -332,6 +334,7 @@ public class MainActivity extends AppCompatActivity
|
|||
Snackbar.make(swipeRefreshLayout, R.string.no_internet, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(brRequestShowOrbot);
|
||||
}
|
||||
|
||||
private void setupNavigationSlider() {
|
||||
|
@ -384,6 +387,10 @@ public class MainActivity extends AppCompatActivity
|
|||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if(requestCode == OrbotHelper.START_TOR_RESULT) {
|
||||
OrbotStatusReceiver.setProxy(this, data);
|
||||
return;
|
||||
}
|
||||
if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
return;
|
||||
|
@ -422,6 +429,7 @@ public class MainActivity extends AppCompatActivity
|
|||
protected void onResume() {
|
||||
super.onResume();
|
||||
registerReceiver(brLoadUrl, new IntentFilter(URL_MESSAGE));
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(brRequestShowOrbot, new IntentFilter(OrbotStatusReceiver.REQUEST_SHOW_ORBOT));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -455,9 +463,17 @@ public class MainActivity extends AppCompatActivity
|
|||
}
|
||||
};
|
||||
|
||||
private final BroadcastReceiver brRequestShowOrbot = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
requestOrbotStart(intent.getBooleanExtra(OrbotStatusReceiver.EXTRA_BACKGROUND_STARTS_DISABLED, false));
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
unregisterReceiver(brLoadUrl);
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(brRequestShowOrbot);
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
@ -1105,7 +1121,7 @@ public class MainActivity extends AppCompatActivity
|
|||
startDialog.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
startActivityForResult(OrbotHelper.getShowOrbotStartIntent(), 1);
|
||||
startActivityForResult(OrbotHelper.getShowOrbotStartIntent(), OrbotHelper.START_TOR_RESULT);
|
||||
}
|
||||
}).setNegativeButton(android.R.string.no, null).show();
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.app.PendingIntent;
|
|||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.github.dfa.diaspora_android.App;
|
||||
|
@ -42,14 +43,14 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
|
|||
|
||||
public static final String EXTRA_HTTP_HOST = "org.torproject.android.intent.extra.HTTP_PROXY_HOST";
|
||||
public static final String EXTRA_HTTP_PORT = "org.torproject.android.intent.extra.HTTP_PROXY_PORT";
|
||||
public static final String REQUEST_SHOW_ORBOT = "com.github.dfa.diaspora.request_show_orbot";
|
||||
public static final String EXTRA_BACKGROUND_STARTS_DISABLED = "com.github.dfa.diaspora.request_show_orbot.BG_START_DISABLED";
|
||||
public static final String DEFAULT_HOST = "127.0.0.1";
|
||||
public static final int DEFAULT_PORT = 8118;
|
||||
|
||||
private static String host = "";
|
||||
private static int port = 0;
|
||||
private Intent lastStatus;
|
||||
private Context lastContext;
|
||||
private static MainActivity mainActivity;
|
||||
private static boolean promptOnBackgroundStart = true;
|
||||
private AppSettings appSettings;
|
||||
private static boolean proxySet = false;
|
||||
|
||||
|
@ -59,19 +60,29 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
|
|||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if(OrbotHelper.ACTION_STATUS.equals(intent.getAction())) {
|
||||
lastStatus = intent;
|
||||
lastContext = context;
|
||||
if(appSettings == null) appSettings = new AppSettings(context.getApplicationContext());
|
||||
String orbotStatus = intent.getExtras().getString(OrbotHelper.EXTRA_STATUS);
|
||||
if(appSettings.isProxyOrbot()) {
|
||||
if(appSettings.isProxyOrbot() && orbotStatus != null) {
|
||||
//Status on
|
||||
if (orbotStatus.equals(OrbotHelper.STATUS_ON)) {
|
||||
setProxy(lastContext, lastStatus);
|
||||
} else if(orbotStatus.equals(OrbotHelper.STATUS_OFF)) {
|
||||
setProxy(context, intent);
|
||||
return;
|
||||
}
|
||||
//Status off
|
||||
if(orbotStatus.equals(OrbotHelper.STATUS_OFF)) {
|
||||
Log.d(App.TAG, "Warning: Orbot reports status off.");
|
||||
OrbotHelper.requestStartTor(context.getApplicationContext());
|
||||
} else if(orbotStatus.equals(OrbotHelper.STATUS_STARTS_DISABLED)) {
|
||||
Intent orbotOffIntent = new Intent(REQUEST_SHOW_ORBOT);
|
||||
orbotOffIntent.putExtra(EXTRA_BACKGROUND_STARTS_DISABLED, false);
|
||||
LocalBroadcastManager.getInstance(context).sendBroadcast(orbotOffIntent);
|
||||
return;
|
||||
}
|
||||
//Background starts disabled
|
||||
if(orbotStatus.equals(OrbotHelper.STATUS_STARTS_DISABLED ) && promptOnBackgroundStart) {
|
||||
promptOnBackgroundStart = false;
|
||||
Log.d(App.TAG, "Warning: Orbot has background starts disabled.");
|
||||
if(mainActivity != null) mainActivity.requestOrbotStart(true);
|
||||
Intent backgroundStartsDisabledIntent = new Intent(REQUEST_SHOW_ORBOT);
|
||||
backgroundStartsDisabledIntent.putExtra(EXTRA_BACKGROUND_STARTS_DISABLED, true);
|
||||
LocalBroadcastManager.getInstance(context).sendBroadcast(backgroundStartsDisabledIntent);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -95,7 +106,7 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
Log.e(App.TAG, "OrbotStatusReceiver: lastStatus intent is null. Cannot set Proxy.");
|
||||
setProxy(context, DEFAULT_HOST, DEFAULT_PORT);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -114,6 +125,7 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
|
|||
}
|
||||
|
||||
public static void resetProxy(Context context) {
|
||||
promptOnBackgroundStart = true;
|
||||
try {
|
||||
OrbotStatusReceiver.host = "";
|
||||
OrbotStatusReceiver.port = 0;
|
||||
|
@ -135,7 +147,4 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
|
|||
return proxySet;
|
||||
}
|
||||
|
||||
public static void setMainActivity(MainActivity main) {
|
||||
mainActivity = main;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue