Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 007fc7d9 authored by Hermann Czedik-Eysenberg's avatar Hermann Czedik-Eysenberg
Browse files

Make Bluetooth discoverability timeout configurable (also supporting infinite timeout).

This fixes http://code.google.com/p/cyanogenmod/issues/detail?id=2597

Change-Id: I257f17319fd4916031385ac1dcf655fdc83f63e4
parent bd38bafe
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -466,4 +466,20 @@
        <item>Transparent</item>
    </string-array>

    <string-array name="bluetooth_discoverable_duration_entries">
        <item>60 seconds</item>
        <item>120 seconds</item>
        <item>300 seconds</item>
        <item>600 seconds</item>
        <item>Infinite</item>
    </string-array>

    <string-array name="bluetooth_discoverable_duration_values" translatable="false">
        <item>60</item>
        <item>120</item>
        <item>300</item>
        <item>600</item>
        <item>0</item>
    </string-array>

</resources>
+4 −0
Original line number Diff line number Diff line
@@ -174,6 +174,10 @@

    <!-- Used as setting title (for checkbox) on second screen after selecting Bluetooth settings -->
    <string name="bluetooth">Bluetooth</string>
    <!-- Bluetooth settings screen, list label how long the device remains in discoverable mode -->
    <string name="bluetooth_discoverable_duration_title">Discoverable duration</string>
    <!-- Bluetooth settings screen, Discoverable duration list summary -->
    <string name="bluetooth_discoverable_duration_summary">How long the device stays discoverable</string>
    <!-- Bluetooth settings screen, check box label when the Bluetooth device can be seen by others -->
    <string name="bluetooth_visibility">Discoverable</string>
    <!-- Bluetooth settings screen, summary after selecting Discoverable check box -->
+7 −0
Original line number Diff line number Diff line
@@ -32,6 +32,13 @@
        android:persistent="false"
        android:singleLine="true" />

    <ListPreference
            android:key="bt_discoverable_duration"
            android:title="@string/bluetooth_discoverable_duration_title"
            android:summary="@string/bluetooth_discoverable_duration_summary"
            android:entries="@array/bluetooth_discoverable_duration_entries"
            android:entryValues="@array/bluetooth_discoverable_duration_values" />

    <CheckBoxPreference
        android:key="bt_discoverable"
        android:title="@string/bluetooth_visibility"
+7 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.Handler;
import android.os.SystemProperties;
import android.preference.Preference;
import android.preference.CheckBoxPreference;
import android.provider.Settings;

/**
 * BluetoothDiscoverableEnabler is a helper to manage the "Discoverable"
@@ -126,18 +127,21 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
            long endTimestamp = System.currentTimeMillis() + timeout * 1000;
            persistDiscoverableEndTimestamp(endTimestamp);

            manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
            manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, timeout);
        } else {
            manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
        }
    }

    private int getDiscoverableTimeout() {
        int timeout = SystemProperties.getInt(SYSTEM_PROPERTY_DISCOVERABLE_TIMEOUT, -1);
        if (timeout <= 0) {
        int timeout = Settings.System.getInt(
                mContext.getContentResolver(),
                Settings.System.BLUETOOTH_DISCOVERABILITY_TIMEOUT, -1);
        if (timeout < 0) {
            timeout = DEFAULT_DISCOVERABLE_TIMEOUT;
        }


        return timeout;
    }

+32 −1
Original line number Diff line number Diff line
@@ -31,9 +31,11 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.os.ParcelUuid;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
@@ -48,11 +50,13 @@ import java.util.WeakHashMap;
 * connection management.
 */
public class BluetoothSettings extends PreferenceActivity
        implements LocalBluetoothManager.Callback {
        implements LocalBluetoothManager.Callback,
                   Preference.OnPreferenceChangeListener {

    private static final String TAG = "BluetoothSettings";

    private static final String KEY_BT_CHECKBOX = "bt_checkbox";
    private static final String KEY_BT_DISCOVERABLE_DURATION = "bt_discoverable_duration";
    private static final String KEY_BT_DISCOVERABLE = "bt_discoverable";
    private static final String KEY_BT_DEVICE_LIST = "bt_device_list";
    private static final String KEY_BT_NAME = "bt_name";
@@ -74,6 +78,8 @@ public class BluetoothSettings extends PreferenceActivity
    private BluetoothEnabler mEnabler;
    private BluetoothDiscoverableEnabler mDiscoverableEnabler;

    private ListPreference mDiscoverableDurationPreference;

    private BluetoothNamePreference mNamePreference;

    private ProgressCategory mDeviceList;
@@ -141,6 +147,10 @@ public class BluetoothSettings extends PreferenceActivity
                    this,
                    (CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));

            mDiscoverableDurationPreference = (ListPreference)
                    findPreference(KEY_BT_DISCOVERABLE_DURATION);
            mDiscoverableDurationPreference.setOnPreferenceChangeListener(this);

            mDiscoverableEnabler = new BluetoothDiscoverableEnabler(
                    this,
                    (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE));
@@ -169,6 +179,7 @@ public class BluetoothSettings extends PreferenceActivity
            mEnabler.resume();
            mDiscoverableEnabler.resume();
            mNamePreference.resume();
            updateDiscoverableDurationPreferenceState();
        }

        mLocalManager.registerCallback(this);
@@ -363,4 +374,24 @@ public class BluetoothSettings extends PreferenceActivity
        intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
        sendBroadcast(intent);
    }

    public boolean onPreferenceChange(Preference preference, Object objValue) {
        if (preference == mDiscoverableDurationPreference) {
           int value = Integer.parseInt(objValue.toString());
           Settings.System.putInt(getContentResolver(),
                   Settings.System.BLUETOOTH_DISCOVERABILITY_TIMEOUT, value);
            updateDiscoverableDurationPreferenceState();
        }

        return true;
    }

    private void updateDiscoverableDurationPreferenceState() {
        int timeout = Settings.System.getInt(
                getContentResolver(),
                Settings.System.BLUETOOTH_DISCOVERABILITY_TIMEOUT,
                BluetoothDiscoverableEnabler.DEFAULT_DISCOVERABLE_TIMEOUT);
        mDiscoverableDurationPreference.setValue(String.valueOf(timeout));
        mDiscoverableDurationPreference.setSummary(mDiscoverableDurationPreference.getEntry());
    }
}