mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-21 07:51:46 +02:00
Simplify bluetooth preference screen somewhat
This commit is contained in:
@@ -21,19 +21,14 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.CheckBoxPreference;
|
|
||||||
import android.preference.EditTextPreference;
|
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.preference.MultiSelectListPreference;
|
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.preference.PreferenceGroup;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
@@ -42,38 +37,25 @@ import com.health.openscale.core.bluetooth.BluetoothCommunication;
|
|||||||
import com.health.openscale.core.bluetooth.BluetoothFactory;
|
import com.health.openscale.core.bluetooth.BluetoothFactory;
|
||||||
import com.health.openscale.gui.utils.PermissionHelper;
|
import com.health.openscale.gui.utils.PermissionHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
|
|
||||||
public class BluetoothPreferences extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class BluetoothPreferences extends PreferenceFragment {
|
||||||
private static final String PREFERENCE_KEY_BLUETOOTH_SMARTUSERASSIGN = "smartUserAssign";
|
|
||||||
private static final String PREFERENCE_KEY_BLUETOOTH_IGNOREOUTOFRANGE = "ignoreOutOfRange";
|
|
||||||
private static final String PREFERENCE_KEY_BLUETOOTH_SCANNER = "btScanner";
|
private static final String PREFERENCE_KEY_BLUETOOTH_SCANNER = "btScanner";
|
||||||
|
|
||||||
private CheckBoxPreference smartAssignEnable;
|
|
||||||
private CheckBoxPreference ignoreOutOfRangeEnable;
|
|
||||||
private PreferenceScreen btScanner;
|
private PreferenceScreen btScanner;
|
||||||
public boolean isReceiverRegistered;
|
private BluetoothAdapter btAdapter = null;
|
||||||
|
|
||||||
private BluetoothAdapter btAdapter = null;
|
|
||||||
|
|
||||||
private Map<String, String> foundDevices = new HashMap<>();
|
private Map<String, String> foundDevices = new HashMap<>();
|
||||||
|
|
||||||
public void startSearching() {
|
public void startSearching() {
|
||||||
foundDevices.clear();
|
foundDevices.clear();
|
||||||
|
btScanner.removeAll();
|
||||||
|
|
||||||
IntentFilter filter = new IntentFilter();
|
Preference scanning = new Preference(getActivity());
|
||||||
|
scanning.setEnabled(false);
|
||||||
|
btScanner.addPreference(scanning);
|
||||||
|
|
||||||
filter.addAction(BluetoothDevice.ACTION_FOUND);
|
|
||||||
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
|
|
||||||
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
|
|
||||||
|
|
||||||
getActivity().registerReceiver(mReceiver, filter);
|
|
||||||
isReceiverRegistered = true;
|
|
||||||
OpenScale.getInstance(getActivity()).stopSearchingForBluetooth();
|
OpenScale.getInstance(getActivity()).stopSearchingForBluetooth();
|
||||||
btAdapter.startDiscovery();
|
btAdapter.startDiscovery();
|
||||||
}
|
}
|
||||||
@@ -83,143 +65,83 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr
|
|||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
|
|
||||||
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
|
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
|
||||||
//discovery starts, we can show progress dialog or perform other tasks
|
btScanner.getPreference(0).setTitle(R.string.label_bluetooth_searching);
|
||||||
Toast.makeText(getActivity().getApplicationContext(), R.string.label_bluetooth_searching, Toast.LENGTH_SHORT).show();
|
}
|
||||||
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
|
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
|
||||||
//discovery finishes, dismiss progress dialog
|
btScanner.getPreference(0).setTitle(R.string.label_bluetooth_searching_finished);
|
||||||
Toast.makeText(getActivity().getApplicationContext(), R.string.label_bluetooth_searching_finished, Toast.LENGTH_SHORT).show();
|
}
|
||||||
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
|
else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
|
||||||
//bluetooth device found
|
|
||||||
BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
||||||
|
|
||||||
if (device.getName() == null) {
|
if (device.getName() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foundDevices.put(device.getAddress(), device.getName());
|
Preference prefBtDevice = new Preference(getActivity());
|
||||||
btScanner.removeAll();
|
prefBtDevice.setTitle(device.getName() + " [" + device.getAddress() + "]");
|
||||||
|
|
||||||
for (Map.Entry<String, String> entry : foundDevices.entrySet()) {
|
BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(getActivity(), device.getName());
|
||||||
if (getActivity() != null) {
|
if (btDevice != null) {
|
||||||
Preference prefBtDevice = new Preference(getActivity());
|
prefBtDevice.setOnPreferenceClickListener(new onClickListenerDeviceSelect());
|
||||||
prefBtDevice.setSummary(entry.getKey());
|
prefBtDevice.setKey(device.getAddress());
|
||||||
|
prefBtDevice.setIcon(R.drawable.ic_bluetooth_connection_lost);
|
||||||
|
prefBtDevice.setSummary(btDevice.deviceName());
|
||||||
|
|
||||||
BluetoothCommunication btDevice = BluetoothFactory.createDeviceDriver(getActivity(), entry.getValue());
|
int tintColor = new EditText(getActivity()).getCurrentTextColor();
|
||||||
if (btDevice != null) {
|
prefBtDevice.getIcon().setColorFilter(tintColor, PorterDuff.Mode.SRC_IN);
|
||||||
prefBtDevice.setOnPreferenceClickListener(new onClickListenerDeviceSelect());
|
|
||||||
prefBtDevice.setKey(entry.getKey());
|
|
||||||
prefBtDevice.setIcon(R.drawable.ic_bluetooth_connection_lost);
|
|
||||||
prefBtDevice.setTitle(entry.getValue() + " [" + btDevice.deviceName() + "]");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
prefBtDevice.setIcon(R.drawable.ic_bluetooth_disabled);
|
|
||||||
prefBtDevice.setTitle(entry.getValue() + " [" + getResources().getString(R.string.label_bt_device_no_support) + "]");
|
|
||||||
}
|
|
||||||
|
|
||||||
btScanner.addPreference(prefBtDevice);
|
foundDevices.put(device.getAddress(), device.getName());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
prefBtDevice.setIcon(R.drawable.ic_bluetooth_disabled);
|
||||||
|
prefBtDevice.setSummary(R.string.label_bt_device_no_support);
|
||||||
|
prefBtDevice.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
btScanner.addPreference(prefBtDevice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
if (isReceiverRegistered) {
|
|
||||||
getActivity().unregisterReceiver(mReceiver);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
btAdapter = BluetoothAdapter.getDefaultAdapter();
|
// Intent filter for the scanning process
|
||||||
|
IntentFilter filter = new IntentFilter();
|
||||||
|
filter.addAction(BluetoothDevice.ACTION_FOUND);
|
||||||
|
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
|
||||||
|
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
|
||||||
|
getActivity().registerReceiver(mReceiver, filter);
|
||||||
|
|
||||||
|
btAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.bluetooth_preferences);
|
addPreferencesFromResource(R.xml.bluetooth_preferences);
|
||||||
|
|
||||||
smartAssignEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_BLUETOOTH_SMARTUSERASSIGN);
|
|
||||||
ignoreOutOfRangeEnable = (CheckBoxPreference) findPreference(PREFERENCE_KEY_BLUETOOTH_IGNOREOUTOFRANGE);
|
|
||||||
btScanner = (PreferenceScreen) findPreference(PREFERENCE_KEY_BLUETOOTH_SCANNER);
|
btScanner = (PreferenceScreen) findPreference(PREFERENCE_KEY_BLUETOOTH_SCANNER);
|
||||||
|
if (btAdapter == null) {
|
||||||
btScanner.setOnPreferenceClickListener(new onClickListenerScannerSelect());
|
btScanner.setEnabled(false);
|
||||||
isReceiverRegistered = false;
|
btScanner.setSummary("Bluetooth " + getResources().getString(R.string.info_is_not_available));
|
||||||
|
}
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
|
else {
|
||||||
btScanner.setSummary(prefs.getString("btDeviceName", "-"));
|
btScanner.setOnPreferenceClickListener(new onClickListenerScannerSelect());
|
||||||
|
String deviceName = btScanner.getSharedPreferences().getString("btDeviceName", "-");
|
||||||
initSummary(getPreferenceScreen());
|
if (!deviceName.equals("-")) {
|
||||||
}
|
deviceName += " [" +
|
||||||
|
btScanner.getSharedPreferences().getString("btHwAddress", "") +
|
||||||
private void initSummary(Preference p) {
|
"]";
|
||||||
if (p instanceof PreferenceGroup) {
|
|
||||||
PreferenceGroup pGrp = (PreferenceGroup) p;
|
|
||||||
for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
|
|
||||||
initSummary(pGrp.getPreference(i));
|
|
||||||
}
|
}
|
||||||
} else {
|
btScanner.setSummary(deviceName);
|
||||||
updatePrefSummary(p);
|
// Dummy preference to make screen open
|
||||||
|
btScanner.addPreference(new Preference(getActivity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onDestroy() {
|
||||||
super.onResume();
|
getActivity().unregisterReceiver(mReceiver);
|
||||||
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
|
||||||
|
|
||||||
}
|
super.onDestroy();
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
|
||||||
super.onPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
|
||||||
updatePrefSummary(findPreference(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updatePrefSummary(Preference p) {
|
|
||||||
if (smartAssignEnable.isChecked()) {
|
|
||||||
ignoreOutOfRangeEnable.setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ignoreOutOfRangeEnable.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p instanceof ListPreference) {
|
|
||||||
ListPreference listPref = (ListPreference) p;
|
|
||||||
|
|
||||||
p.setSummary(listPref.getTitle());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p instanceof EditTextPreference) {
|
|
||||||
EditTextPreference editTextPref = (EditTextPreference) p;
|
|
||||||
if (p.getTitle().toString().contains("assword"))
|
|
||||||
{
|
|
||||||
p.setSummary("******");
|
|
||||||
} else {
|
|
||||||
p.setSummary(editTextPref.getText());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p instanceof MultiSelectListPreference) {
|
|
||||||
MultiSelectListPreference editMultiListPref = (MultiSelectListPreference) p;
|
|
||||||
|
|
||||||
CharSequence[] entries = editMultiListPref.getEntries();
|
|
||||||
CharSequence[] entryValues = editMultiListPref.getEntryValues();
|
|
||||||
List<String> currentEntries = new ArrayList<>();
|
|
||||||
Set<String> currentEntryValues = editMultiListPref.getValues();
|
|
||||||
|
|
||||||
for (int i = 0; i < entries.length; i++)
|
|
||||||
if (currentEntryValues.contains(entryValues[i]))
|
|
||||||
currentEntries.add(entries[i].toString());
|
|
||||||
|
|
||||||
p.setSummary(currentEntries.toString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class onClickListenerScannerSelect implements Preference.OnPreferenceClickListener {
|
private class onClickListenerScannerSelect implements Preference.OnPreferenceClickListener {
|
||||||
@@ -234,14 +156,17 @@ public class BluetoothPreferences extends PreferenceFragment implements SharedPr
|
|||||||
|
|
||||||
private class onClickListenerDeviceSelect implements Preference.OnPreferenceClickListener {
|
private class onClickListenerDeviceSelect implements Preference.OnPreferenceClickListener {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(final Preference preference) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
|
preference.getSharedPreferences().edit()
|
||||||
|
.putString("btHwAddress", preference.getKey())
|
||||||
|
.putString("btDeviceName", foundDevices.get(preference.getKey()))
|
||||||
|
.apply();
|
||||||
|
|
||||||
prefs.edit().putString("btHwAddress", preference.getKey()).commit();
|
btAdapter.cancelDiscovery();
|
||||||
prefs.edit().putString("btDeviceName", foundDevices.get(preference.getKey())).commit();
|
|
||||||
|
|
||||||
|
// Set summary text and trigger data set changed to make UI update
|
||||||
btScanner.setSummary(preference.getTitle());
|
btScanner.setSummary(preference.getTitle());
|
||||||
((BaseAdapter)getPreferenceScreen().getRootAdapter()).notifyDataSetChanged(); // hack to change the summary text
|
((BaseAdapter)getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();
|
||||||
|
|
||||||
btScanner.getDialog().dismiss();
|
btScanner.getDialog().dismiss();
|
||||||
return true;
|
return true;
|
||||||
|
@@ -1,13 +1,33 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:key="btScanner"
|
android:key="btScanner"
|
||||||
android:title="@string/label_device_type"
|
android:title="@string/label_device_type"
|
||||||
android:persistent="false">
|
android:persistent="false">
|
||||||
<Preference android:key="0" android:title="@string/label_device_type"/>
|
</PreferenceScreen>
|
||||||
</PreferenceScreen>
|
<CheckBoxPreference
|
||||||
<CheckBoxPreference android:title="@string/label_mergeWithLastMeasurement" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="mergeWithLastMeasurement" android:defaultValue="true"/>
|
android:defaultValue="true"
|
||||||
<CheckBoxPreference android:title="@string/label_bluetooth_enable" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="btEnable" android:defaultValue="false"/>
|
android:key="mergeWithLastMeasurement"
|
||||||
<CheckBoxPreference android:title="@string/label_smartUserAssign" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="smartUserAssign" android:defaultValue="false"/>
|
android:summaryOff="@string/info_is_not_enable"
|
||||||
<CheckBoxPreference android:title="@string/label_ignoreOutOfRange" android:summaryOn="@string/info_is_enable" android:summaryOff="@string/info_is_not_enable" android:key="ignoreOutOfRange" android:enabled="false" android:defaultValue="false"/>
|
android:summaryOn="@string/info_is_enable"
|
||||||
|
android:title="@string/label_mergeWithLastMeasurement" />
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="btEnable"
|
||||||
|
android:summaryOff="@string/info_is_not_enable"
|
||||||
|
android:summaryOn="@string/info_is_enable"
|
||||||
|
android:title="@string/label_bluetooth_enable" />
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="smartUserAssign"
|
||||||
|
android:summaryOff="@string/info_is_not_enable"
|
||||||
|
android:summaryOn="@string/info_is_enable"
|
||||||
|
android:title="@string/label_smartUserAssign" />
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:dependency="smartUserAssign"
|
||||||
|
android:key="ignoreOutOfRange"
|
||||||
|
android:summaryOff="@string/info_is_not_enable"
|
||||||
|
android:summaryOn="@string/info_is_enable"
|
||||||
|
android:title="@string/label_ignoreOutOfRange" />
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
Reference in New Issue
Block a user