strictly target local broadcasts
This sets an action for each kind of local broadcast, and uses the action to choose how to handle it. Before, it was a mix of the action and which extras the Intent included.
This commit is contained in:
parent
65d8801005
commit
90b731cc8d
|
@ -107,10 +107,12 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
|
|||
/* receive the internal status broadcasts, which are separate from the public
|
||||
* status broadcasts to prevent other apps from sending fake/wrong status
|
||||
* info to this app */
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mLocalBroadcastReceiver,
|
||||
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
|
||||
lbm.registerReceiver(mLocalBroadcastReceiver,
|
||||
new IntentFilter(TorServiceConstants.LOCAL_ACTION_STATUS));
|
||||
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mLocalBroadcastReceiver,
|
||||
lbm.registerReceiver(mLocalBroadcastReceiver,
|
||||
new IntentFilter(TorServiceConstants.LOCAL_ACTION_BANDWIDTH));
|
||||
lbm.registerReceiver(mLocalBroadcastReceiver,
|
||||
new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
|
||||
}
|
||||
|
||||
|
@ -127,44 +129,45 @@ public class OrbotMainActivity extends Activity implements OrbotConstants, OnLon
|
|||
stopService(torService);
|
||||
}
|
||||
|
||||
// Our handler for received Intents. This will be called whenever an Intent
|
||||
// with an action named "custom-event-name" is broadcasted.
|
||||
/**
|
||||
* The state and log info from {@link TorService} are sent to the UI here in
|
||||
* the form of a local broadcast. Regular broadcasts can be sent by any app,
|
||||
* so local ones are used here so other apps cannot interfere with Orbot's
|
||||
* operation.
|
||||
*/
|
||||
private BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// Get extra data included in the Intent
|
||||
String action = intent.getAction();
|
||||
if (action == null)
|
||||
return;
|
||||
|
||||
if (intent.hasExtra(TorServiceConstants.LOCAL_EXTRA_LOG))
|
||||
{
|
||||
if (action.equals(TorServiceConstants.LOCAL_ACTION_LOG)) {
|
||||
String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
|
||||
updateStatus(log);
|
||||
}
|
||||
else if (intent.hasExtra("up"))
|
||||
{
|
||||
long upload = intent.getLongExtra("up",0);
|
||||
long download = intent.getLongExtra("down",0);
|
||||
long written = intent.getLongExtra("written",0);
|
||||
long read = intent.getLongExtra("read",0);
|
||||
|
||||
Message msg = mStatusUpdateHandler.obtainMessage(TorServiceConstants.MESSAGE_TRAFFIC_COUNT);
|
||||
} else if (action.equals(TorServiceConstants.LOCAL_ACTION_BANDWIDTH)) {
|
||||
long upload = intent.getLongExtra("up", 0);
|
||||
long download = intent.getLongExtra("down", 0);
|
||||
long written = intent.getLongExtra("written", 0);
|
||||
long read = intent.getLongExtra("read", 0);
|
||||
|
||||
Message msg = mStatusUpdateHandler
|
||||
.obtainMessage(TorServiceConstants.MESSAGE_TRAFFIC_COUNT);
|
||||
msg.getData().putLong("download", download);
|
||||
msg.getData().putLong("upload", upload);
|
||||
msg.getData().putLong("readTotal", read);
|
||||
msg.getData().putLong("writeTotal", written);
|
||||
mStatusUpdateHandler.sendMessage(msg);
|
||||
|
||||
}
|
||||
else if (intent.hasExtra(TorServiceConstants.EXTRA_STATUS))
|
||||
{
|
||||
} else if (action.equals(TorServiceConstants.LOCAL_ACTION_STATUS)) {
|
||||
torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
|
||||
updateStatus("");
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private void doLayout ()
|
||||
{
|
||||
setContentView(R.layout.layout_main);
|
||||
|
|
|
@ -1441,7 +1441,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
lastWritten = written;
|
||||
lastRead = read;
|
||||
|
||||
sendCallbackStatusMessage(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead);
|
||||
sendCallbackBandwidth(lastWritten, lastRead, mTotalTrafficWritten, mTotalTrafficRead);
|
||||
}
|
||||
|
||||
private String formatCount(long count) {
|
||||
|
@ -1841,40 +1841,26 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
|
|||
}
|
||||
catch (Exception ioe)
|
||||
{
|
||||
|
||||
logException("Unable to update Tor configuration: " + ioe.getMessage(),ioe);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private void sendCallbackBandwidth(long upload, long download, long written, long read) {
|
||||
Intent intent = new Intent(LOCAL_ACTION_BANDWIDTH);
|
||||
|
||||
|
||||
|
||||
|
||||
private void sendCallbackStatusMessage (long upload, long download, long written, long read)
|
||||
{
|
||||
|
||||
|
||||
Intent intent = new Intent(LOCAL_ACTION_LOG);
|
||||
// You can also include some extra data.
|
||||
intent.putExtra("up",upload);
|
||||
intent.putExtra("down",download);
|
||||
intent.putExtra("written",written);
|
||||
intent.putExtra("read",read);
|
||||
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
|
||||
|
||||
}
|
||||
|
||||
// private ArrayList<String> mLogBuffer = new ArrayList<String>();
|
||||
|
||||
private void sendCallbackLogMessage (String logMessage)
|
||||
{
|
||||
|
||||
|
||||
Intent intent = new Intent(LOCAL_ACTION_LOG);
|
||||
// You can also include some extra data.
|
||||
intent.putExtra(LOCAL_EXTRA_LOG, logMessage);
|
||||
|
|
|
@ -71,6 +71,7 @@ public interface TorServiceConstants {
|
|||
public final static String EXTRA_STATUS = "org.torproject.android.intent.extra.STATUS";
|
||||
public final static String LOCAL_ACTION_STATUS = "status";
|
||||
public final static String LOCAL_ACTION_LOG = "log";
|
||||
public final static String LOCAL_ACTION_BANDWIDTH = "bandwidth";
|
||||
public final static String LOCAL_EXTRA_LOG = "log";
|
||||
|
||||
public final static String STATUS_OFF = "OFF";
|
||||
|
|
Loading…
Reference in New Issue