force all UI status updates through mStatusUpdateHandler

The Handler is a message queue for the main thread, so it should help keep
the UI working while status updates are coming in.

* This removes the constants in TorServiceConstants because the Handler
  messages are only for OrbotMainActivity

* this uses the handy shortcut msg.obj for the status message
This commit is contained in:
Hans-Christoph Steiner 2015-06-09 17:02:21 -04:00
parent 5c2d4501fa
commit 25a6bb63b2
3 changed files with 24 additions and 57 deletions

View File

@ -16,11 +16,7 @@ public interface OrbotConstants {
public final static String URL_TOR_CHECK = "https://check.torproject.org";
public final static String URL_TOR_BRIDGES = "https://bridges.torproject.org/bridges?transport=";
public final static String NEWLINE = "\n";
public final static String HANDLER_TOR_MSG = "torServiceMsg";
public final static String PREF_BRIDGES_UPDATED = "pref_bridges_enabled";
//public final static String PREF_BRIDGES_OBFUSCATED = "pref_bridges_obfuscated";
public final static String PREF_OR = "pref_or";

View File

@ -92,7 +92,11 @@ public class OrbotMainActivity extends Activity
private final static int REQUEST_VPN = 8888;
private final static int REQUEST_SETTINGS = 0x9874;
// message types for mStatusUpdateHandler
private final static int STATUS_UPDATE = 1;
private static final int MESSAGE_TRAFFIC_COUNT = 2;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -141,8 +145,9 @@ public class OrbotMainActivity extends Activity
return;
if (action.equals(TorServiceConstants.LOCAL_ACTION_LOG)) {
String log = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
updateStatus(log);
Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
msg.obj = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
mStatusUpdateHandler.sendMessage(msg);
} else if (action.equals(TorServiceConstants.LOCAL_ACTION_BANDWIDTH)) {
long upload = intent.getLongExtra("up", 0);
@ -150,8 +155,7 @@ public class OrbotMainActivity extends Activity
long written = intent.getLongExtra("written", 0);
long read = intent.getLongExtra("read", 0);
Message msg = mStatusUpdateHandler
.obtainMessage(TorServiceConstants.MESSAGE_TRAFFIC_COUNT);
Message msg = mStatusUpdateHandler.obtainMessage(MESSAGE_TRAFFIC_COUNT);
msg.getData().putLong("download", download);
msg.getData().putLong("upload", upload);
msg.getData().putLong("readTotal", read);
@ -160,7 +164,9 @@ public class OrbotMainActivity extends Activity
} else if (action.equals(TorServiceConstants.ACTION_STATUS)) {
torStatus = intent.getStringExtra(TorServiceConstants.EXTRA_STATUS);
updateStatus("");
Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
msg.obj = "";
mStatusUpdateHandler.sendMessage(msg);
}
}
};
@ -1122,8 +1128,8 @@ public class OrbotMainActivity extends Activity
lblStatus.setText(getString(R.string.status_starting_up));
//we send a message here to the progressDialog i believe, but we can clarify that shortly
Message msg = mStatusUpdateHandler.obtainMessage(TorServiceConstants.ENABLE_TOR_MSG);
msg.getData().putString(HANDLER_TOR_MSG, getString(R.string.status_starting_up));
Message msg = mStatusUpdateHandler.obtainMessage(STATUS_UPDATE);
msg.obj = getString(R.string.status_starting_up);
mStatusUpdateHandler.sendMessage(msg);
}
@ -1144,38 +1150,16 @@ public class OrbotMainActivity extends Activity
// this is what takes messages or values from the callback threads or other non-mainUI threads
//and passes them back into the main UI thread for display to the user
private Handler mStatusUpdateHandler = new Handler() {
private String lastServiceMsg = null;
public void handleMessage(Message msg) {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case TorServiceConstants.STATUS_MSG:
case TorServiceConstants.LOG_MSG:
String torServiceMsg = (String)msg.getData().getString(HANDLER_TOR_MSG);
if (lastServiceMsg == null || !lastServiceMsg.equals(torServiceMsg))
{
updateStatus(torServiceMsg);
lastServiceMsg = torServiceMsg;
}
case STATUS_UPDATE:
updateStatus((String) msg.obj);
break;
case TorServiceConstants.ENABLE_TOR_MSG:
updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
break;
case TorServiceConstants.DISABLE_TOR_MSG:
updateStatus((String)msg.getData().getString(HANDLER_TOR_MSG));
break;
case TorServiceConstants.MESSAGE_TRAFFIC_COUNT :
case MESSAGE_TRAFFIC_COUNT:
Bundle data = msg.getData();
DataCount datacount = new DataCount(data.getLong("upload"),data.getLong("download"));
@ -1190,12 +1174,9 @@ public class OrbotMainActivity extends Activity
super.handleMessage(msg);
}
}
};
@Override
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalBroadcastReceiver);

View File

@ -78,12 +78,7 @@ public interface TorServiceConstants {
public final static String STATUS_ON = "ON";
public final static String STATUS_STARTING = "STARTING";
public final static String STATUS_STOPPING = "STOPPING";
public static final int STATUS_MSG = 1;
public static final int ENABLE_TOR_MSG = 2;
public static final int DISABLE_TOR_MSG = 3;
public static final int LOG_MSG = 4;
public static final String CMD_START = "start";
public static final String CMD_SIGNAL_HUP = "signal_hup";
public static final String CMD_FLUSH = "flush";
@ -100,11 +95,6 @@ public interface TorServiceConstants {
public static final String OBFSCLIENT_ASSET_KEY = "obfs4proxy";
public static final String MEEK_ASSET_KEY = "meek-client";
public static final int MESSAGE_TRAFFIC_COUNT = 5;
//name of the iptables binary
public final static String IPTABLES_ASSET_KEY = "xtables";