mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-09-07 10:02:01 +00:00
239 lines
10 KiB
Diff
239 lines
10 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Oliver Scott <olivercscott@gmail.com>
|
|
Date: Fri, 2 Oct 2020 12:37:30 -0400
|
|
Subject: [PATCH] add bluetooth auto-turn-off setting
|
|
|
|
---
|
|
res/values/arrays.xml | 44 +++++++
|
|
res/values/strings.xml | 19 +++
|
|
res/xml/connected_devices.xml | 8 ++
|
|
.../BluetoothTimeoutPreferenceController.java | 115 ++++++++++++++++++
|
|
4 files changed, 186 insertions(+)
|
|
create mode 100644 src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
|
|
|
|
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
|
|
index 5813bb18db..40d01907a4 100644
|
|
--- a/res/values/arrays.xml
|
|
+++ b/res/values/arrays.xml
|
|
@@ -39,6 +39,50 @@
|
|
<item>All</item>
|
|
</string-array>
|
|
|
|
+ <!-- Bluetooth settings. The delay in inactivity before bluetooth is turned off. These are shown in a list dialog. -->
|
|
+ <string-array name="bluetooth_timeout_entries">
|
|
+ <item>@string/bluetooth_timeout_summary_never</item>
|
|
+ <item>@string/bluetooth_timeout_summary_15secs</item>
|
|
+ <item>@string/bluetooth_timeout_summary_30secs</item>
|
|
+ <item>@string/bluetooth_timeout_summary_1min</item>
|
|
+ <item>@string/bluetooth_timeout_summary_2mins</item>
|
|
+ <item>@string/bluetooth_timeout_summary_5mins</item>
|
|
+ <item>@string/bluetooth_timeout_summary_10mins</item>
|
|
+ <item>@string/bluetooth_timeout_summary_30mins</item>
|
|
+ <item>@string/bluetooth_timeout_summary_1hour</item>
|
|
+ <item>@string/bluetooth_timeout_summary_2hours</item>
|
|
+ <item>@string/bluetooth_timeout_summary_4hours</item>
|
|
+ <item>@string/bluetooth_timeout_summary_8hours</item>
|
|
+ </string-array>
|
|
+
|
|
+ <!-- Do not translate. -->
|
|
+ <string-array name="bluetooth_timeout_values" translatable="false">
|
|
+ <!-- Do not translate. -->
|
|
+ <item>0</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>15000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>30000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>60000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>120000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>300000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>600000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>1800000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>3600000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>7200000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>14400000</item>
|
|
+ <!-- Do not translate. -->
|
|
+ <item>28800000</item>
|
|
+ </string-array>
|
|
+
|
|
<!-- Display settings. The delay in inactivity before the screen is turned off. These are shown in a list dialog. -->
|
|
<string-array name="screen_timeout_entries">
|
|
<item>15 seconds</item>
|
|
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
|
index eeee1c039f..c5287c4489 100644
|
|
--- a/res/values/strings.xml
|
|
+++ b/res/values/strings.xml
|
|
@@ -25,6 +25,25 @@
|
|
<!-- Strings for Dialog deny button -->
|
|
<string name="deny">Deny</string>
|
|
|
|
+ <!-- Connected devices screen, setting option name to change bluetooth timeout -->
|
|
+ <string name="bluetooth_timeout">Bluetooth timeout</string>
|
|
+
|
|
+ <!-- Connected devices screen, setting option summary to change bluetooth timeout -->
|
|
+ <string name="bluetooth_timeout_summary">Bluetooth will turn off after <xliff:g id="timeout_description">%1$s</xliff:g> if no devices connected</string>
|
|
+ <string name="bluetooth_timeout_summary2">Do not automatically turn off Bluetooth</string>
|
|
+ <string name="bluetooth_timeout_summary_never">Never</string>
|
|
+ <string name="bluetooth_timeout_summary_15secs">15 seconds</string>
|
|
+ <string name="bluetooth_timeout_summary_30secs">30 seconds</string>
|
|
+ <string name="bluetooth_timeout_summary_1min">1 minute</string>
|
|
+ <string name="bluetooth_timeout_summary_2mins">2 minutes</string>
|
|
+ <string name="bluetooth_timeout_summary_5mins">5 minutes</string>
|
|
+ <string name="bluetooth_timeout_summary_10mins">10 minutes</string>
|
|
+ <string name="bluetooth_timeout_summary_30mins">30 minutes</string>
|
|
+ <string name="bluetooth_timeout_summary_1hour">1 hour</string>
|
|
+ <string name="bluetooth_timeout_summary_2hours">2 hours</string>
|
|
+ <string name="bluetooth_timeout_summary_4hours">4 hours</string>
|
|
+ <string name="bluetooth_timeout_summary_8hours">8 hours</string>
|
|
+
|
|
<!-- Device Info screen. Used for a status item's value when the proper value is not known -->
|
|
<string name="device_info_default">Unknown</string>
|
|
<!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
|
|
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
|
|
index da55fe33f4..d0f9dcc507 100644
|
|
--- a/res/xml/connected_devices.xml
|
|
+++ b/res/xml/connected_devices.xml
|
|
@@ -52,6 +52,14 @@
|
|
settings:useAdminDisabledSummary="true"
|
|
settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
|
|
|
|
+ <androidx.preference.ListPreference
|
|
+ android:key="bluetooth_timeout"
|
|
+ android:title="@string/bluetooth_timeout"
|
|
+ android:summary="@string/summary_placeholder"
|
|
+ android:entries="@array/bluetooth_timeout_entries"
|
|
+ android:entryValues="@array/bluetooth_timeout_values"
|
|
+ settings:controller="com.android.settings.bluetooth.BluetoothTimeoutPreferenceController"/>
|
|
+
|
|
<PreferenceCategory
|
|
android:key="previously_connected_devices"
|
|
android:title="@string/connected_device_previously_connected_title"
|
|
diff --git a/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
|
|
new file mode 100644
|
|
index 0000000000..244147948a
|
|
--- /dev/null
|
|
+++ b/src/com/android/settings/bluetooth/BluetoothTimeoutPreferenceController.java
|
|
@@ -0,0 +1,115 @@
|
|
+/*
|
|
+ * Copyright (C) 2020 The Calyx Institute
|
|
+ *
|
|
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
|
+ * you may not use this file except in compliance with the License.
|
|
+ * You may obtain a copy of the License at
|
|
+ *
|
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
|
+ *
|
|
+ * Unless required by applicable law or agreed to in writing, software
|
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
+ * See the License for the specific language governing permissions and
|
|
+ * limitations under the License.
|
|
+ */
|
|
+
|
|
+package com.android.settings.bluetooth;
|
|
+
|
|
+import android.bluetooth.BluetoothAdapter;
|
|
+import android.content.Context;
|
|
+import android.provider.Settings;
|
|
+import android.util.Log;
|
|
+
|
|
+import androidx.preference.ListPreference;
|
|
+import androidx.preference.Preference;
|
|
+
|
|
+import com.android.settings.R;
|
|
+import com.android.settings.core.BasePreferenceController;
|
|
+import com.android.settings.core.PreferenceControllerMixin;
|
|
+
|
|
+public class BluetoothTimeoutPreferenceController extends BasePreferenceController implements
|
|
+ PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
|
|
+ private static final String TAG = "BluetoothTimeoutPrefCtrl";
|
|
+
|
|
+ public static final int FALLBACK_BLUETOOTH_TIMEOUT_VALUE = 0;
|
|
+
|
|
+ private final String mBluetoothTimeoutKey;
|
|
+
|
|
+ protected BluetoothAdapter mBluetoothAdapter;
|
|
+
|
|
+ public BluetoothTimeoutPreferenceController(Context context, String key) {
|
|
+ super(context, key);
|
|
+ mBluetoothTimeoutKey = key;
|
|
+
|
|
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
+ if (mBluetoothAdapter == null) {
|
|
+ Log.e(TAG, "Bluetooth is not supported on this device");
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getAvailabilityStatus() {
|
|
+ return mBluetoothAdapter != null ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public String getPreferenceKey() {
|
|
+ return mBluetoothTimeoutKey;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void updateState(Preference preference) {
|
|
+ final ListPreference timeoutListPreference = (ListPreference) preference;
|
|
+ final long currentTimeout = Settings.Global.getLong(mContext.getContentResolver(),
|
|
+ Settings.Global.BLUETOOTH_OFF_TIMEOUT, FALLBACK_BLUETOOTH_TIMEOUT_VALUE);
|
|
+ timeoutListPreference.setValue(String.valueOf(currentTimeout));
|
|
+ updateTimeoutPreferenceDescription(timeoutListPreference,
|
|
+ Long.parseLong(timeoutListPreference.getValue()));
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
+ try {
|
|
+ long value = Long.parseLong((String) newValue);
|
|
+ Settings.Global.putLong(mContext.getContentResolver(), Settings.Global.BLUETOOTH_OFF_TIMEOUT, value);
|
|
+ updateTimeoutPreferenceDescription((ListPreference) preference, value);
|
|
+ } catch (NumberFormatException e) {
|
|
+ Log.e(TAG, "could not persist bluetooth timeout setting", e);
|
|
+ }
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ public static CharSequence getTimeoutDescription(
|
|
+ long currentTimeout, CharSequence[] entries, CharSequence[] values) {
|
|
+ if (currentTimeout < 0 || entries == null || values == null
|
|
+ || values.length != entries.length) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ for (int i = 0; i < values.length; i++) {
|
|
+ long timeout = Long.parseLong(values[i].toString());
|
|
+ if (currentTimeout == timeout) {
|
|
+ return entries[i];
|
|
+ }
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ private void updateTimeoutPreferenceDescription(ListPreference preference,
|
|
+ long currentTimeout) {
|
|
+ final CharSequence[] entries = preference.getEntries();
|
|
+ final CharSequence[] values = preference.getEntryValues();
|
|
+ final CharSequence timeoutDescription = getTimeoutDescription(
|
|
+ currentTimeout, entries, values);
|
|
+ String summary = "";
|
|
+ if (timeoutDescription != null) {
|
|
+ if (currentTimeout != 0)
|
|
+ summary = mContext.getString(R.string.bluetooth_timeout_summary, timeoutDescription);
|
|
+ else
|
|
+ summary = mContext.getString(R.string.bluetooth_timeout_summary2);
|
|
+ }
|
|
+ preference.setSummary(summary);
|
|
+ }
|
|
+}
|