android/sdremote/res/values/strings.xml | 1 android/sdremote/src/org/libreoffice/impressremote/activity/ComputersActivity.java | 14 +++++- android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothServersFinder.java | 12 +++++ android/sdremote/src/org/libreoffice/impressremote/fragment/ComputersFragment.java | 22 +++++----- android/sdremote/src/org/libreoffice/impressremote/util/BluetoothOperator.java | 10 +++- android/sdremote/src/org/libreoffice/impressremote/util/Intents.java | 5 ++ 6 files changed, 50 insertions(+), 14 deletions(-)
New commits: commit 3cc31f89787e435c893b38a0adc0a23f566ab60f Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Dec 10 19:52:33 2013 +0000 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 diff --git a/android/sdremote/res/values/strings.xml b/android/sdremote/res/values/strings.xml index 4ec816a..7dc068a 100644 --- a/android/sdremote/res/values/strings.xml +++ b/android/sdremote/res/values/strings.xml @@ -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_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="message_bluetooth_disabled">Please enable bluetooth to connect to a bluetooth enabled computer.</string> </resources> diff --git a/android/sdremote/src/org/libreoffice/impressremote/activity/ComputersActivity.java b/android/sdremote/src/org/libreoffice/impressremote/activity/ComputersActivity.java index 043965a..7d1336c 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/activity/ComputersActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/activity/ComputersActivity.java @@ -31,6 +31,8 @@ import org.libreoffice.impressremote.util.SavedStates; public class ComputersActivity extends SherlockFragmentActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener { private boolean mBluetoothWasEnabled; + private final static int REQUEST_ENABLE_BT = 1; + @Override protected void onCreate(Bundle aSavedInstanceState) { super.onCreate(aSavedInstanceState); @@ -42,6 +44,16 @@ public class ComputersActivity extends SherlockFragmentActivity implements Actio 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) { // In more ideal world this work should be done at the service. // Unfortunately service cannot save or restore its state. @@ -64,7 +76,7 @@ public class ComputersActivity extends SherlockFragmentActivity implements Actio } private void enableBluetooth() { - BluetoothOperator.enable(); + BluetoothOperator.enable(this, REQUEST_ENABLE_BT); } private void setUpTitle() { diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothServersFinder.java b/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothServersFinder.java index 29e9b9c..e696a1b 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothServersFinder.java +++ b/android/sdremote/src/org/libreoffice/impressremote/communication/BluetoothServersFinder.java @@ -72,9 +72,19 @@ class BluetoothServersFinder extends BroadcastReceiver implements ServersFinder, public void onReceive(Context aContext, Intent aIntent) { if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(aIntent.getAction())) { switch (aIntent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0)) { - case BluetoothAdapter.STATE_ON: + case BluetoothAdapter.STATE_ON: { BluetoothOperator.getAdapter().startDiscovery(); + Intent aNewIntent = Intents.buildBluetoothStateChangedIntent(); + LocalBroadcastManager.getInstance(mContext).sendBroadcast(aNewIntent); return; + } + + case BluetoothAdapter.STATE_OFF: { + mServers.clear(); + Intent aNewIntent = Intents.buildBluetoothStateChangedIntent(); + LocalBroadcastManager.getInstance(mContext).sendBroadcast(aNewIntent); + return; + } default: return; diff --git a/android/sdremote/src/org/libreoffice/impressremote/fragment/ComputersFragment.java b/android/sdremote/src/org/libreoffice/impressremote/fragment/ComputersFragment.java index ea8c702..3e5908d 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/fragment/ComputersFragment.java +++ b/android/sdremote/src/org/libreoffice/impressremote/fragment/ComputersFragment.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import android.app.Activity; +import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -55,6 +56,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo WIFI, BLUETOOTH } + boolean mBluetoothDisabled = false; + private CommunicationService mCommunicationService; private BroadcastReceiver mIntentsReceiver; @@ -148,7 +151,10 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo return getString(R.string.message_search_wifi); 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: return ""; @@ -210,6 +216,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo } } + mBluetoothDisabled = !BluetoothAdapter.getDefaultAdapter().isEnabled(); + return aComputers; } @@ -251,18 +259,10 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo return; } - if (!isShowingProgressMessageRequired()) { - return; - } - showProgressMessage(); showLearnMoreMessage(); } - private boolean isShowingProgressMessageRequired() { - return getProgressMessageView().getVisibility() == View.INVISIBLE; - } - private void tearDownComputersAdapter() { setListAdapter(null); } @@ -330,6 +330,8 @@ public class ComputersFragment extends SherlockListFragment implements ServiceCo public void onReceive(Context aContext, Intent aIntent) { if (Intents.Actions.SERVERS_LIST_CHANGED.equals(aIntent.getAction())) { 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() { IntentFilter aIntentFilter = new IntentFilter(); aIntentFilter.addAction(Intents.Actions.SERVERS_LIST_CHANGED); - + aIntentFilter.addAction(Intents.Actions.BLUETOOTH_STATE_CHANGED); return aIntentFilter; } diff --git a/android/sdremote/src/org/libreoffice/impressremote/util/BluetoothOperator.java b/android/sdremote/src/org/libreoffice/impressremote/util/BluetoothOperator.java index 9522838..c451518 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/util/BluetoothOperator.java +++ b/android/sdremote/src/org/libreoffice/impressremote/util/BluetoothOperator.java @@ -8,7 +8,9 @@ */ package org.libreoffice.impressremote.util; +import android.app.Activity; import android.bluetooth.BluetoothAdapter; +import android.content.Intent; public final class BluetoothOperator { private BluetoothOperator() { @@ -26,12 +28,16 @@ public final class BluetoothOperator { return BluetoothAdapter.getDefaultAdapter(); } - public static void enable() { + public static void enable(Activity aActivity, int nRequestCode) { if (!isAvailable()) { return; } - getAdapter().enable(); + if (getAdapter() != null) { + Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); + aActivity.startActivityForResult(enableBtIntent, nRequestCode); + } + } public static void disable() { diff --git a/android/sdremote/src/org/libreoffice/impressremote/util/Intents.java b/android/sdremote/src/org/libreoffice/impressremote/util/Intents.java index beab7ae..e27f2f1 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/util/Intents.java +++ b/android/sdremote/src/org/libreoffice/impressremote/util/Intents.java @@ -29,6 +29,7 @@ public final class Intents { } 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_VALIDATION = "PAIRING_VALIDATION"; @@ -74,6 +75,10 @@ public final class Intents { return new Intent(Actions.SERVERS_LIST_CHANGED); } + public static Intent buildBluetoothStateChangedIntent() { + return new Intent(Actions.BLUETOOTH_STATE_CHANGED); + } + public static Intent buildPairingSuccessfulIntent() { return new Intent(Actions.PAIRING_SUCCESSFUL); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits