mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Compare commits
9 Commits
misc-code-
...
299-blueto
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e9153bd81 | ||
|
|
15fa44c1b1 | ||
|
|
7ffe1b8bae | ||
|
|
bb8713ddcb | ||
|
|
1e9afd14db | ||
|
|
86ea6eae63 | ||
|
|
56ba639084 | ||
|
|
8c16c2107f | ||
|
|
cefe2b09e0 |
@@ -8,6 +8,7 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.FormatException;
|
import org.briarproject.bramble.api.FormatException;
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
@@ -19,6 +20,7 @@ import org.briarproject.bramble.api.keyagreement.KeyAgreementListener;
|
|||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.plugin.Backoff;
|
import org.briarproject.bramble.api.plugin.Backoff;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
import org.briarproject.bramble.api.plugin.PluginException;
|
import org.briarproject.bramble.api.plugin.PluginException;
|
||||||
import org.briarproject.bramble.api.plugin.TransportId;
|
import org.briarproject.bramble.api.plugin.TransportId;
|
||||||
import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
|
import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin;
|
||||||
@@ -34,6 +36,7 @@ import org.briarproject.bramble.util.StringUtils;
|
|||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
@@ -83,6 +86,8 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
|
|||||||
|
|
||||||
private volatile boolean running = false;
|
private volatile boolean running = false;
|
||||||
private volatile boolean wasEnabledByUs = false;
|
private volatile boolean wasEnabledByUs = false;
|
||||||
|
private volatile ArrayList<BluetoothEnableDisableReason>
|
||||||
|
enableDisableReasons = new ArrayList<>();
|
||||||
private volatile BluetoothStateReceiver receiver = null;
|
private volatile BluetoothStateReceiver receiver = null;
|
||||||
private volatile BluetoothServerSocket socket = null;
|
private volatile BluetoothServerSocket socket = null;
|
||||||
|
|
||||||
@@ -153,8 +158,8 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
|
|||||||
bind();
|
bind();
|
||||||
} else {
|
} else {
|
||||||
// Enable Bluetooth if settings allow
|
// Enable Bluetooth if settings allow
|
||||||
if (callback.getSettings().getBoolean(PREF_BT_ENABLE, false)) {
|
if (callback.getSettings().getBoolean(PREF_BT_ENABLE, true)) {
|
||||||
enableAdapter();
|
enableAdapter(BluetoothEnableDisableReason.COMMUNICATION);
|
||||||
} else {
|
} else {
|
||||||
LOG.info("Not enabling Bluetooth");
|
LOG.info("Not enabling Bluetooth");
|
||||||
}
|
}
|
||||||
@@ -245,11 +250,15 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
|
|||||||
return new DroidtoothTransportConnection(this, s);
|
return new DroidtoothTransportConnection(this, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableAdapter() {
|
private void enableAdapter(BluetoothEnableDisableReason reason) {
|
||||||
if (adapter != null && !adapter.isEnabled()) {
|
if (adapter != null && !adapter.isEnabled()) {
|
||||||
if (adapter.enable()) {
|
if (adapter.enable()) {
|
||||||
LOG.info("Enabling Bluetooth");
|
LOG.info("Enabling Bluetooth");
|
||||||
wasEnabledByUs = true;
|
wasEnabledByUs = true;
|
||||||
|
|
||||||
|
if(!enableDisableReasons.contains(reason)) {
|
||||||
|
enableDisableReasons.add(reason);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG.info("Could not enable Bluetooth");
|
LOG.info("Could not enable Bluetooth");
|
||||||
}
|
}
|
||||||
@@ -261,11 +270,22 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
|
|||||||
running = false;
|
running = false;
|
||||||
if (receiver != null) appContext.unregisterReceiver(receiver);
|
if (receiver != null) appContext.unregisterReceiver(receiver);
|
||||||
tryToClose(socket);
|
tryToClose(socket);
|
||||||
disableAdapter();
|
disableAdapter(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableAdapter() {
|
private void disableAdapter(boolean force){
|
||||||
if (adapter != null && adapter.isEnabled() && wasEnabledByUs) {
|
disableAdapter(null, force);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableAdapter(BluetoothEnableDisableReason reason,
|
||||||
|
boolean force) {
|
||||||
|
if (adapter != null && adapter.isEnabled() && wasEnabledByUs
|
||||||
|
&& (enableDisableReasons.contains(reason) || force)) {
|
||||||
|
|
||||||
|
if(enableDisableReasons.contains(reason)){
|
||||||
|
enableDisableReasons.remove(reason);
|
||||||
|
}
|
||||||
|
|
||||||
if (adapter.disable()) LOG.info("Disabling Bluetooth");
|
if (adapter.disable()) LOG.info("Disabling Bluetooth");
|
||||||
else LOG.info("Could not disable Bluetooth");
|
else LOG.info("Could not disable Bluetooth");
|
||||||
}
|
}
|
||||||
@@ -431,26 +451,28 @@ class DroidtoothPlugin implements DuplexPlugin, EventListener {
|
|||||||
@Override
|
@Override
|
||||||
public void eventOccurred(Event e) {
|
public void eventOccurred(Event e) {
|
||||||
if (e instanceof EnableBluetoothEvent) {
|
if (e instanceof EnableBluetoothEvent) {
|
||||||
enableAdapterAsync();
|
EnableBluetoothEvent enable = (EnableBluetoothEvent) e;
|
||||||
|
enableAdapterAsync(enable.getReason());
|
||||||
} else if (e instanceof DisableBluetoothEvent) {
|
} else if (e instanceof DisableBluetoothEvent) {
|
||||||
disableAdapterAsync();
|
DisableBluetoothEvent disable = (DisableBluetoothEvent) e;
|
||||||
|
disableAdapterAsync(disable.getReason());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableAdapterAsync() {
|
private void enableAdapterAsync(final BluetoothEnableDisableReason reason) {
|
||||||
ioExecutor.execute(new Runnable() {
|
ioExecutor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
enableAdapter();
|
enableAdapter(reason);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableAdapterAsync() {
|
private void disableAdapterAsync(final BluetoothEnableDisableReason reason) {
|
||||||
ioExecutor.execute(new Runnable() {
|
ioExecutor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
disableAdapter();
|
disableAdapter(reason, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package org.briarproject.bramble.api.plugin;
|
||||||
|
|
||||||
|
public enum BluetoothEnableDisableReason {
|
||||||
|
COMMUNICATION,
|
||||||
|
ADD_CONTACT
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package org.briarproject.bramble.api.plugin.event;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.event.Event;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
|
|
||||||
|
abstract class BluetoothEvent extends Event {
|
||||||
|
private BluetoothEnableDisableReason selectedReason;
|
||||||
|
|
||||||
|
BluetoothEvent(BluetoothEnableDisableReason reason){
|
||||||
|
selectedReason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BluetoothEnableDisableReason getReason(){
|
||||||
|
return selectedReason;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package org.briarproject.bramble.api.plugin.event;
|
package org.briarproject.bramble.api.plugin.event;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.event.Event;
|
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
|
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
@@ -11,5 +11,8 @@ import javax.annotation.concurrent.Immutable;
|
|||||||
*/
|
*/
|
||||||
@Immutable
|
@Immutable
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
public class DisableBluetoothEvent extends Event {
|
public class DisableBluetoothEvent extends BluetoothEvent {
|
||||||
|
public DisableBluetoothEvent(BluetoothEnableDisableReason reason) {
|
||||||
|
super(reason);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.briarproject.bramble.api.plugin.event;
|
|||||||
|
|
||||||
import org.briarproject.bramble.api.event.Event;
|
import org.briarproject.bramble.api.event.Event;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
|
|
||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
@@ -10,5 +11,8 @@ import javax.annotation.concurrent.Immutable;
|
|||||||
*/
|
*/
|
||||||
@Immutable
|
@Immutable
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
public class EnableBluetoothEvent extends Event {
|
public class EnableBluetoothEvent extends BluetoothEvent {
|
||||||
|
public EnableBluetoothEvent(BluetoothEnableDisableReason reason){
|
||||||
|
super(reason);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ import org.briarproject.bramble.api.keyagreement.event.KeyAgreementWaitingEvent;
|
|||||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
|
import org.briarproject.bramble.api.plugin.event.DisableBluetoothEvent;
|
||||||
import org.briarproject.bramble.api.plugin.event.EnableBluetoothEvent;
|
import org.briarproject.bramble.api.plugin.event.EnableBluetoothEvent;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
@@ -161,7 +163,8 @@ public class ShowQrCodeFragment extends BaseEventFragment
|
|||||||
BluetoothAdapter.getDefaultAdapter();
|
BluetoothAdapter.getDefaultAdapter();
|
||||||
if (adapter != null && !adapter.isEnabled()) {
|
if (adapter != null && !adapter.isEnabled()) {
|
||||||
waitingForBluetooth = true;
|
waitingForBluetooth = true;
|
||||||
eventBus.broadcast(new EnableBluetoothEvent());
|
eventBus.broadcast(new EnableBluetoothEvent(
|
||||||
|
BluetoothEnableDisableReason.ADD_CONTACT));
|
||||||
} else {
|
} else {
|
||||||
startListening();
|
startListening();
|
||||||
}
|
}
|
||||||
@@ -170,6 +173,14 @@ public class ShowQrCodeFragment extends BaseEventFragment
|
|||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
|
|
||||||
|
//Disable BT adapter if we enabled it
|
||||||
|
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
if(adapter != null && adapter.isEnabled()){
|
||||||
|
eventBus.broadcast(new DisableBluetoothEvent(
|
||||||
|
BluetoothEnableDisableReason.ADD_CONTACT));
|
||||||
|
}
|
||||||
|
|
||||||
stopListening();
|
stopListening();
|
||||||
if (receiver != null) getActivity().unregisterReceiver(receiver);
|
if (receiver != null) getActivity().unregisterReceiver(receiver);
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.briarproject.bramble.api.event.EventListener;
|
|||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
||||||
|
import org.briarproject.bramble.api.plugin.BluetoothEnableDisableReason;
|
||||||
import org.briarproject.bramble.api.plugin.TorConstants;
|
import org.briarproject.bramble.api.plugin.TorConstants;
|
||||||
import org.briarproject.bramble.api.plugin.event.DisableBluetoothEvent;
|
import org.briarproject.bramble.api.plugin.event.DisableBluetoothEvent;
|
||||||
import org.briarproject.bramble.api.plugin.event.EnableBluetoothEvent;
|
import org.briarproject.bramble.api.plugin.event.EnableBluetoothEvent;
|
||||||
@@ -223,7 +224,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info("Loading settings took " + duration + " ms");
|
LOG.info("Loading settings took " + duration + " ms");
|
||||||
boolean btSetting =
|
boolean btSetting =
|
||||||
btSettings.getBoolean(PREF_BT_ENABLE, false);
|
btSettings.getBoolean(PREF_BT_ENABLE, true);
|
||||||
int torSetting = torSettings.getInt(PREF_TOR_NETWORK,
|
int torSetting = torSettings.getInt(PREF_TOR_NETWORK,
|
||||||
PREF_TOR_NETWORK_ALWAYS);
|
PREF_TOR_NETWORK_ALWAYS);
|
||||||
displaySettings(btSetting, torSetting);
|
displaySettings(btSetting, torSetting);
|
||||||
@@ -326,8 +327,10 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void enableOrDisableBluetooth(boolean enable) {
|
private void enableOrDisableBluetooth(boolean enable) {
|
||||||
if (enable) eventBus.broadcast(new EnableBluetoothEvent());
|
if (enable) eventBus.broadcast(new EnableBluetoothEvent(
|
||||||
else eventBus.broadcast(new DisableBluetoothEvent());
|
BluetoothEnableDisableReason.COMMUNICATION));
|
||||||
|
else eventBus.broadcast(new DisableBluetoothEvent(
|
||||||
|
BluetoothEnableDisableReason.COMMUNICATION));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeTorSettings(final int torSetting) {
|
private void storeTorSettings(final int torSetting) {
|
||||||
|
|||||||
Reference in New Issue
Block a user