summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/arrays.xml18
-rwxr-xr-xres/values/strings.xml15
-rw-r--r--res/xml/bluetooth_settings.xml8
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java91
-rw-r--r--src/com/android/settings/bluetooth/BluetoothSettings.java11
-rw-r--r--src/com/android/settings/bluetooth/RequestPermissionActivity.java21
-rw-r--r--src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java6
7 files changed, 139 insertions, 31 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 560e6e3..1b3abbf 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -255,6 +255,24 @@
<item>TTLS</item>
</string-array>
+ <!-- Bluetooth Settings -->
+
+ <!-- Discoverable mode timeout options -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item>2 Minutes</item>
+ <item>5 Minutes</item>
+ <item>1 Hour</item>
+ <item>Never</item>
+ </string-array>
+
+ <!-- Values for visibility_duration_entries matching constants in BluetoothSettings. Do not translate. -->
+ <string-array name="bluetooth_visibility_timeout_values" translatable="false">
+ <item>twomin</item>
+ <item>fivemin</item>
+ <item>onehour</item>
+ <item>never</item>
+ </string-array>
+
<!-- Match this with drawable.wifi_signal. --> <skip />
<!-- Wi-Fi settings. The signal strength a Wi-Fi network has. -->
<string-array name="wifi_signal">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 571e02a..a2b9f90 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -184,9 +184,14 @@
<string name="bluetooth_visibility">Discoverable</string>
<!-- Bluetooth settings screen, summary after selecting Discoverable check box -->
<string name="bluetooth_is_discoverable">Discoverable for <xliff:g id="discoverable_time_period">%1$s</xliff:g> seconds\u2026</string>
+ <!-- Bluetooth settings screen, Discoverable checkbox summary text when Discoverable duration is set to "forever" -->
+ <string name="bluetooth_is_discoverable_always">Discoverable</string>
<!-- Bluetooth settings screen, Discoverable checkbox summary text -->
<string name="bluetooth_not_discoverable">Make device discoverable</string>
- <!-- Bluetooth settings screen, heading above the list of nearby bluetooth devices -->
+ <!-- Bluetooth settings screen, option name to pick discoverability timeout duration (a list dialog comes up) -->
+ <string name="bluetooth_visibility_timeout">Discoverable timeout</string>
+ <!-- Bluetooth settings screen, Discoverable timout list dialog summary text -->
+ <string name="bluetooth_visibility_timeout_summary">Set how long device will be discoverable</string>
<!-- Bluetooth settings screen, check box label whether or not to allow
bluetooth voice dialing when lock screen is up-->
<string name="bluetooth_lock_voice_dialing">Lock voice dialing</string>
@@ -194,7 +199,7 @@
<string name="bluetooth_lock_voice_dialing_summary">
Prevent use of the bluetooth dialer when the screen is locked
</string>
-
+ <!-- Bluetooth settings screen, heading above the list of nearby bluetooth devices -->
<string name="bluetooth_devices">Bluetooth devices</string>
<!-- Bluetooth settings screen, title for the current bluetooth name setting -->
<string name="bluetooth_device_name">Device name</string>
@@ -243,9 +248,15 @@
<!-- Strings for asking to the user whether to allow an app to enable discovery mode -->
<string name="bluetooth_ask_discovery">"An application on your phone is requesting permission to make your phone discoverable by other Bluetooth devices for <xliff:g id="timeout">%1$d</xliff:g> seconds. Do you want to do this?"</string>
+ <!-- Strings for asking to the user whether to allow an app to enable lasting discovery mode -->
+ <string name="bluetooth_ask_lasting_discovery">"An application on your phone is requesting permission to make your phone always discoverable by other Bluetooth devices. Do you want to do this?"</string>
+
<!-- Strings for asking to the user whether to allow an app to enable bluetooth and discovery mode -->
<string name="bluetooth_ask_enablement_and_discovery">"An application on your phone is requesting permission to turn on Bluetooth and to make your phone discoverable by other devices for <xliff:g id="timeout">%1$d</xliff:g> seconds. Do you want to do this?"</string>
+ <!-- Strings for asking to the user whether to allow an app to enable bluetooth and discovery mode -->
+ <string name="bluetooth_ask_enablement_and_lasting_discovery">"An application on your phone is requesting permission to turn on Bluetooth and to make your phone discoverable by other devices. Do you want to do this?"</string>
+
<!-- Strings for msg to display to user while bluetooth is turning on -->
<string name="bluetooth_turning_on">"Turning on Bluetooth\u2026"</string>
diff --git a/res/xml/bluetooth_settings.xml b/res/xml/bluetooth_settings.xml
index 131f7a0..0c16880 100644
--- a/res/xml/bluetooth_settings.xml
+++ b/res/xml/bluetooth_settings.xml
@@ -40,6 +40,14 @@
android:summaryOff="@string/bluetooth_not_discoverable"
android:persistent="false" />
+ <ListPreference
+ android:key="bt_discoverable_timeout"
+ android:title="@string/bluetooth_visibility_timeout"
+ android:dependency="bt_discoverable"
+ android:summary="@string/bluetooth_visibility_timeout_summary"
+ android:entries="@array/bluetooth_visibility_timeout_entries"
+ android:entryValues="@array/bluetooth_visibility_timeout_values" />
+
<Preference
android:key="bt_scan"
android:dependency="bt_checkbox"
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
index 37e48ff..7a4a1ff 100644
--- a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
@@ -26,8 +26,11 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.SystemProperties;
+import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.Log;
/**
* BluetoothDiscoverableEnabler is a helper to manage the "Discoverable"
@@ -39,14 +42,28 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
private static final String SYSTEM_PROPERTY_DISCOVERABLE_TIMEOUT =
"debug.bt.discoverable_time";
- /* package */ static final int DEFAULT_DISCOVERABLE_TIMEOUT = 120;
- /* package */ static final String SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP =
- "discoverable_end_timestamp";
+ static final int DISCOVERABLE_TIMEOUT_TWO_MINUTES = 120;
+ static final int DISCOVERABLE_TIMEOUT_FIVE_MINUTES = 300;
+ static final int DISCOVERABLE_TIMEOUT_ONE_HOUR = 3600;
+ static final int DISCOVERABLE_TIMEOUT_NEVER = 0;
+
+ static final String SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP =
+ "discoverable_end_timestamp";
+
+ private static final String VALUE_DISCOVERABLE_TIMEOUT_TWO_MINUTES = "twomin";
+ private static final String VALUE_DISCOVERABLE_TIMEOUT_FIVE_MINUTES = "fivemin";
+ private static final String VALUE_DISCOVERABLE_TIMEOUT_ONE_HOUR = "onehour";
+ private static final String VALUE_DISCOVERABLE_TIMEOUT_NEVER = "never";
+
+ // no need for this timeout anymore since we have the listPreference default value
+ // leaving now temporary until requestpermissionactivity is modified..
+ static final int DEFAULT_DISCOVERABLE_TIMEOUT = DISCOVERABLE_TIMEOUT_TWO_MINUTES;
private final Context mContext;
private final Handler mUiHandler;
private final CheckBoxPreference mCheckBoxPreference;
+ private final ListPreference mTimeoutListPreference;
private final LocalBluetoothManager mLocalManager;
@@ -69,12 +86,16 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
}
};
- public BluetoothDiscoverableEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+ public BluetoothDiscoverableEnabler(Context context,
+ CheckBoxPreference checkBoxPreference, ListPreference timeoutListPreference) {
mContext = context;
mUiHandler = new Handler();
mCheckBoxPreference = checkBoxPreference;
+ mTimeoutListPreference = timeoutListPreference;
checkBoxPreference.setPersistent(false);
+ // we actually want to persist this since can't infer from BT device state
+ mTimeoutListPreference.setPersistent(true);
mLocalManager = LocalBluetoothManager.getInstance(context);
if (mLocalManager == null) {
@@ -91,7 +112,7 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
mContext.registerReceiver(mReceiver, filter);
mCheckBoxPreference.setOnPreferenceChangeListener(this);
-
+ mTimeoutListPreference.setOnPreferenceChangeListener(this);
handleModeChanged(mLocalManager.getBluetoothAdapter().getScanMode());
}
@@ -102,12 +123,18 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
mUiHandler.removeCallbacks(mUpdateCountdownSummaryRunnable);
mCheckBoxPreference.setOnPreferenceChangeListener(null);
+ mTimeoutListPreference.setOnPreferenceChangeListener(null);
mContext.unregisterReceiver(mReceiver);
}
public boolean onPreferenceChange(Preference preference, Object value) {
- // Turn on/off BT discoverability
- setEnabled((Boolean) value);
+ if (preference == mCheckBoxPreference) {
+ // Turn on/off BT discoverability
+ setEnabled((Boolean) value);
+ } else if (preference == mTimeoutListPreference) {
+ mTimeoutListPreference.setValue((String) value);
+ setEnabled(true);
+ }
return true;
}
@@ -116,26 +143,52 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
BluetoothAdapter manager = mLocalManager.getBluetoothAdapter();
if (enable) {
-
int timeout = getDiscoverableTimeout();
manager.setDiscoverableTimeout(timeout);
- mCheckBoxPreference.setSummaryOn(
- mContext.getResources().getString(R.string.bluetooth_is_discoverable, timeout));
-
- long endTimestamp = System.currentTimeMillis() + timeout * 1000;
+ long endTimestamp = System.currentTimeMillis() + timeout * 1000L;
persistDiscoverableEndTimestamp(endTimestamp);
- manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
+ updateCountdownSummary();
+
+ manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, timeout);
} else {
manager.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
}
}
+ private void updateTimerDisplay(int timeout) {
+ if (getDiscoverableTimeout() == DISCOVERABLE_TIMEOUT_NEVER) {
+ mCheckBoxPreference.setSummaryOn(
+ mContext.getResources()
+ .getString(R.string.bluetooth_is_discoverable_always));
+ } else {
+ mCheckBoxPreference.setSummaryOn(
+ mContext.getResources()
+ .getString(R.string.bluetooth_is_discoverable, timeout));
+ }
+ }
+
private int getDiscoverableTimeout() {
int timeout = SystemProperties.getInt(SYSTEM_PROPERTY_DISCOVERABLE_TIMEOUT, -1);
- if (timeout <= 0) {
- timeout = DEFAULT_DISCOVERABLE_TIMEOUT;
+ if (timeout < 0) {
+ String timeoutValue = null;
+ if (mTimeoutListPreference != null && mTimeoutListPreference.getValue() != null) {
+ timeoutValue = mTimeoutListPreference.getValue().toString();
+ } else {
+ mTimeoutListPreference.setValue(VALUE_DISCOVERABLE_TIMEOUT_TWO_MINUTES);
+ return DISCOVERABLE_TIMEOUT_TWO_MINUTES;
+ }
+
+ if (timeoutValue.equals(VALUE_DISCOVERABLE_TIMEOUT_NEVER)) {
+ timeout = DISCOVERABLE_TIMEOUT_NEVER;
+ } else if (timeoutValue.equals(VALUE_DISCOVERABLE_TIMEOUT_ONE_HOUR)) {
+ timeout = DISCOVERABLE_TIMEOUT_ONE_HOUR;
+ } else if (timeoutValue.equals(VALUE_DISCOVERABLE_TIMEOUT_FIVE_MINUTES)) {
+ timeout = DISCOVERABLE_TIMEOUT_FIVE_MINUTES;
+ } else {
+ timeout = DISCOVERABLE_TIMEOUT_TWO_MINUTES;
+ }
}
return timeout;
@@ -151,7 +204,6 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
if (mode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
mCheckBoxPreference.setChecked(true);
updateCountdownSummary();
-
} else {
mCheckBoxPreference.setChecked(false);
}
@@ -173,11 +225,8 @@ public class BluetoothDiscoverableEnabler implements Preference.OnPreferenceChan
return;
}
- String formattedTimeLeft = String.valueOf((endTimestamp - currentTimestamp) / 1000);
-
- mCheckBoxPreference.setSummaryOn(
- mContext.getResources().getString(R.string.bluetooth_is_discoverable,
- formattedTimeLeft));
+ int timeLeft = (int) ((endTimestamp - currentTimestamp) / 1000L);
+ updateTimerDisplay(timeLeft);
synchronized (this) {
mUiHandler.removeCallbacks(mUpdateCountdownSummaryRunnable);
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 1e73b2d..e897673 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -31,9 +31,13 @@ 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.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
@@ -55,6 +59,7 @@ public class BluetoothSettings extends PreferenceActivity
private static final String KEY_BT_CHECKBOX = "bt_checkbox";
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_DISCOVERABLE_TIMEOUT = "bt_discoverable_timeout";
private static final String KEY_BT_NAME = "bt_name";
private static final String KEY_BT_SCAN = "bt_scan";
@@ -141,9 +146,9 @@ public class BluetoothSettings extends PreferenceActivity
this,
(CheckBoxPreference) findPreference(KEY_BT_CHECKBOX));
- mDiscoverableEnabler = new BluetoothDiscoverableEnabler(
- this,
- (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE));
+ mDiscoverableEnabler = new BluetoothDiscoverableEnabler(this,
+ (CheckBoxPreference) findPreference(KEY_BT_DISCOVERABLE),
+ (ListPreference) findPreference(KEY_BT_DISCOVERABLE_TIMEOUT));
mNamePreference = (BluetoothNamePreference) findPreference(KEY_BT_NAME);
diff --git a/src/com/android/settings/bluetooth/RequestPermissionActivity.java b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
index dd802f3..52cd439 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
@@ -157,7 +157,15 @@ public class RequestPermissionActivity extends Activity implements
builder.setCancelable(false);
} else {
// Ask the user whether to turn on discovery mode or not
- builder.setMessage(getString(R.string.bluetooth_ask_enablement_and_discovery, mTimeout));
+ // For lasting discoverable mode there is a different message
+ // TODO(): Revisit this when public APIs for discoverable timeout are introduced.
+ if (mTimeout == BluetoothDiscoverableEnabler.DISCOVERABLE_TIMEOUT_NEVER) {
+ builder.setMessage(
+ getString(R.string.bluetooth_ask_enablement_and_lasting_discovery));
+ } else {
+ builder.setMessage(
+ getString(R.string.bluetooth_ask_enablement_and_discovery, mTimeout));
+ }
builder.setPositiveButton(getString(R.string.yes), this);
builder.setNegativeButton(getString(R.string.no), this);
}
@@ -243,9 +251,14 @@ public class RequestPermissionActivity extends Activity implements
Log.e(TAG, "Timeout = " + mTimeout);
- if (mTimeout > MAX_DISCOVERABLE_TIMEOUT) {
- mTimeout = MAX_DISCOVERABLE_TIMEOUT;
- } else if (mTimeout <= 0) {
+ // Right now assuming for simplicity that an app can pick any int value,
+ // and if equal to BluetoothDiscoverableEnabler.DISCOVERABLE_TIMEOUT_NEVER
+ // it will be treated as a request for lasting discoverability.
+ // Alternatively, a check can be added here for enforcing the specific allowed values
+ // as listed in BluetoothDiscoverableEnabler.
+ // We need to make all these value public.
+
+ if (mTimeout <= 0) {
mTimeout = BluetoothDiscoverableEnabler.DEFAULT_DISCOVERABLE_TIMEOUT;
}
} else {
diff --git a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
index c869868..2657d91 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
@@ -75,7 +75,11 @@ public class RequestPermissionHelperActivity extends AlertActivity implements
if (mEnableOnly) {
tv.setText(getString(R.string.bluetooth_ask_enablement));
} else {
- tv.setText(getString(R.string.bluetooth_ask_enablement_and_discovery, mTimeout));
+ if (mTimeout == BluetoothDiscoverableEnabler.DISCOVERABLE_TIMEOUT_NEVER) {
+ tv.setText(getString(R.string.bluetooth_ask_enablement_and_lasting_discovery));
+ } else {
+ tv.setText(getString(R.string.bluetooth_ask_enablement_and_discovery, mTimeout));
+ }
}
p.mPositiveButtonText = getString(R.string.yes);