fdo#60486 Fix auto-enabling bluetooth and improve bluetooth handling.
We should only enable bluetooth with explicit approval of the user, see: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#enable%28%29 We now also display an appropriate message if bluetooth is disabled. Change-Id: Ic3a07c9ad0806a60ac7c7e609a30add7af18916f
This commit is contained in:
@@ -90,5 +90,6 @@
|
|||||||
<string name="requirements_network_connection">The Android device and a computer connected to the same network.</string>
|
<string name="requirements_network_connection">The Android device and a computer connected to the same network.</string>
|
||||||
<string name="requirements_network_ports">If you have a firewall make sure ports 1598 and 1599 are opened.</string>
|
<string name="requirements_network_ports">If you have a firewall make sure ports 1598 and 1599 are opened.</string>
|
||||||
<string name="requirements_bluetooth_connection">A computer with enabled Bluetooth.</string>
|
<string name="requirements_bluetooth_connection">A computer with enabled Bluetooth.</string>
|
||||||
|
<string name="message_bluetooth_disabled">Please enable bluetooth to connect to a bluetooth enabled computer.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -31,6 +31,8 @@ import org.libreoffice.impressremote.util.SavedStates;
|
|||||||
public class ComputersActivity extends SherlockFragmentActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
|
public class ComputersActivity extends SherlockFragmentActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
|
||||||
private boolean mBluetoothWasEnabled;
|
private boolean mBluetoothWasEnabled;
|
||||||
|
|
||||||
|
private final static int REQUEST_ENABLE_BT = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle aSavedInstanceState) {
|
protected void onCreate(Bundle aSavedInstanceState) {
|
||||||
super.onCreate(aSavedInstanceState);
|
super.onCreate(aSavedInstanceState);
|
||||||
@@ -42,6 +44,16 @@ public class ComputersActivity extends SherlockFragmentActivity implements Actio
|
|||||||
setUpContent();
|
setUpContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
|
||||||
|
super.onActivityResult(arg0, arg1, arg2);
|
||||||
|
|
||||||
|
if (arg0 == REQUEST_ENABLE_BT) {
|
||||||
|
// Ideally we should do all detection based on listening to the bluetooth state
|
||||||
|
// as the user can still enable BT separately (see BluetoothServersFinder.java:onReceive)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void saveBluetoothState(Bundle aSavedInstanceState) {
|
private void saveBluetoothState(Bundle aSavedInstanceState) {
|
||||||
// In more ideal world this work should be done at the service.
|
// In more ideal world this work should be done at the service.
|
||||||
// Unfortunately service cannot save or restore its state.
|
// Unfortunately service cannot save or restore its state.
|
||||||
@@ -64,7 +76,7 @@ public class ComputersActivity extends SherlockFragmentActivity implements Actio
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void enableBluetooth() {
|
private void enableBluetooth() {
|
||||||
BluetoothOperator.enable();
|
BluetoothOperator.enable(this, REQUEST_ENABLE_BT);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpTitle() {
|
private void setUpTitle() {
|
||||||
|
@@ -72,9 +72,19 @@ class BluetoothServersFinder extends BroadcastReceiver implements ServersFinder,
|
|||||||
public void onReceive(Context aContext, Intent aIntent) {
|
public void onReceive(Context aContext, Intent aIntent) {
|
||||||
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(aIntent.getAction())) {
|
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(aIntent.getAction())) {
|
||||||
switch (aIntent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0)) {
|
switch (aIntent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0)) {
|
||||||
case BluetoothAdapter.STATE_ON:
|
case BluetoothAdapter.STATE_ON: {
|
||||||
BluetoothOperator.getAdapter().startDiscovery();
|
BluetoothOperator.getAdapter().startDiscovery();
|
||||||
|
Intent aNewIntent = Intents.buildBluetoothStateChangedIntent();
|
||||||
|
LocalBroadcastManager.getInstance(mContext).sendBroadcast(aNewIntent);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BluetoothAdapter.STATE_OFF: {
|
||||||
|
mServers.clear();
|
||||||
|
Intent aNewIntent = Intents.buildBluetoothStateChangedIntent();
|
||||||
|
LocalBroadcastManager.getInstance(mContext).sendBroadcast(aNewIntent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
@@ -13,6 +13,7 @@ import java.util.List;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -55,6 +56,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
WIFI, BLUETOOTH
|
WIFI, BLUETOOTH
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean mBluetoothDisabled = false;
|
||||||
|
|
||||||
private CommunicationService mCommunicationService;
|
private CommunicationService mCommunicationService;
|
||||||
private BroadcastReceiver mIntentsReceiver;
|
private BroadcastReceiver mIntentsReceiver;
|
||||||
|
|
||||||
@@ -148,7 +151,10 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
return getString(R.string.message_search_wifi);
|
return getString(R.string.message_search_wifi);
|
||||||
|
|
||||||
case BLUETOOTH:
|
case BLUETOOTH:
|
||||||
return getString(R.string.message_search_bluetooth);
|
if (mBluetoothDisabled != true)
|
||||||
|
return getString(R.string.message_search_bluetooth);
|
||||||
|
else
|
||||||
|
return getString(R.string.message_bluetooth_disabled);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
@@ -210,6 +216,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mBluetoothDisabled = !BluetoothAdapter.getDefaultAdapter().isEnabled();
|
||||||
|
|
||||||
return aComputers;
|
return aComputers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,18 +259,10 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isShowingProgressMessageRequired()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
showProgressMessage();
|
showProgressMessage();
|
||||||
showLearnMoreMessage();
|
showLearnMoreMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isShowingProgressMessageRequired() {
|
|
||||||
return getProgressMessageView().getVisibility() == View.INVISIBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tearDownComputersAdapter() {
|
private void tearDownComputersAdapter() {
|
||||||
setListAdapter(null);
|
setListAdapter(null);
|
||||||
}
|
}
|
||||||
@@ -330,6 +330,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
public void onReceive(Context aContext, Intent aIntent) {
|
public void onReceive(Context aContext, Intent aIntent) {
|
||||||
if (Intents.Actions.SERVERS_LIST_CHANGED.equals(aIntent.getAction())) {
|
if (Intents.Actions.SERVERS_LIST_CHANGED.equals(aIntent.getAction())) {
|
||||||
mComputersFragment.loadComputers();
|
mComputersFragment.loadComputers();
|
||||||
|
} else if (Intents.Actions.BLUETOOTH_STATE_CHANGED.equals(aIntent.getAction())) {
|
||||||
|
mComputersFragment.loadComputers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -337,7 +339,7 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo
|
|||||||
private IntentFilter buildIntentsReceiverFilter() {
|
private IntentFilter buildIntentsReceiverFilter() {
|
||||||
IntentFilter aIntentFilter = new IntentFilter();
|
IntentFilter aIntentFilter = new IntentFilter();
|
||||||
aIntentFilter.addAction(Intents.Actions.SERVERS_LIST_CHANGED);
|
aIntentFilter.addAction(Intents.Actions.SERVERS_LIST_CHANGED);
|
||||||
|
aIntentFilter.addAction(Intents.Actions.BLUETOOTH_STATE_CHANGED);
|
||||||
return aIntentFilter;
|
return aIntentFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,7 +8,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.libreoffice.impressremote.util;
|
package org.libreoffice.impressremote.util;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
public final class BluetoothOperator {
|
public final class BluetoothOperator {
|
||||||
private BluetoothOperator() {
|
private BluetoothOperator() {
|
||||||
@@ -26,12 +28,16 @@ public final class BluetoothOperator {
|
|||||||
return BluetoothAdapter.getDefaultAdapter();
|
return BluetoothAdapter.getDefaultAdapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void enable() {
|
public static void enable(Activity aActivity, int nRequestCode) {
|
||||||
if (!isAvailable()) {
|
if (!isAvailable()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
getAdapter().enable();
|
if (getAdapter() != null) {
|
||||||
|
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
|
||||||
|
aActivity.startActivityForResult(enableBtIntent, nRequestCode);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void disable() {
|
public static void disable() {
|
||||||
|
@@ -29,6 +29,7 @@ public final class Intents {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String SERVERS_LIST_CHANGED = "SERVERS_LIST_CHANGED";
|
public static final String SERVERS_LIST_CHANGED = "SERVERS_LIST_CHANGED";
|
||||||
|
public static final String BLUETOOTH_STATE_CHANGED = "BLUETOOTH_STATE_CHANGED";
|
||||||
|
|
||||||
public static final String PAIRING_SUCCESSFUL = "PAIRING_SUCCESSFUL";
|
public static final String PAIRING_SUCCESSFUL = "PAIRING_SUCCESSFUL";
|
||||||
public static final String PAIRING_VALIDATION = "PAIRING_VALIDATION";
|
public static final String PAIRING_VALIDATION = "PAIRING_VALIDATION";
|
||||||
@@ -74,6 +75,10 @@ public final class Intents {
|
|||||||
return new Intent(Actions.SERVERS_LIST_CHANGED);
|
return new Intent(Actions.SERVERS_LIST_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Intent buildBluetoothStateChangedIntent() {
|
||||||
|
return new Intent(Actions.BLUETOOTH_STATE_CHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
public static Intent buildPairingSuccessfulIntent() {
|
public static Intent buildPairingSuccessfulIntent() {
|
||||||
return new Intent(Actions.PAIRING_SUCCESSFUL);
|
return new Intent(Actions.PAIRING_SUCCESSFUL);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user