mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-12-01 14:32:54 +01:00
Upgrade Settings to androidx
- Extend AbstractSettingsActivityV2 - Replace all checkbox preferences with switch preferences - Add app:useSimpleSummaryProvider to all preferences that were in getPreferenceKeysWithSummary - Add null checks on all prefs to fix crashes in nested preference screens - Replace listeners with lambdas to reduce code indentation - Set input type to number where relevant
This commit is contained in:
parent
f4b059f173
commit
12b5ec8415
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2015-2020 0nse, Andreas Shimokawa, Carsten Pfeiffer,
|
||||
/* Copyright (C) 2015-2023 0nse, Andreas Shimokawa, Carsten Pfeiffer,
|
||||
Daniel Dakhno, Daniele Gobbetti, Felix Konstantin Maurer, José Rebelo,
|
||||
Martin, Normano64, Pavel Elagin, Sebastian Kranz, vanous
|
||||
|
||||
@ -33,11 +33,8 @@ import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.text.InputType;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
@ -46,8 +43,12 @@ import android.widget.LinearLayout;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.preference.EditTextPreference;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -74,493 +75,480 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||
|
||||
public class SettingsActivity extends AbstractSettingsActivity {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SettingsActivity.class);
|
||||
|
||||
public class SettingsActivity extends AbstractSettingsActivityV2 {
|
||||
public static final String PREF_MEASUREMENT_SYSTEM = "measurement_system";
|
||||
|
||||
private static final int FILE_REQUEST_CODE = 4711;
|
||||
private EditText fitnessAppEditText = null;
|
||||
private int fitnessAppSelectionListSpinnerFirstRun = 0;
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
protected String fragmentTag() {
|
||||
return SettingsFragment.FRAGMENT_TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
protected PreferenceFragmentCompat newFragment() {
|
||||
return new SettingsFragment();
|
||||
}
|
||||
|
||||
Prefs prefs = GBApplication.getPrefs();
|
||||
Preference pref = findPreference("pref_category_activity_personal");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent enableIntent = new Intent(SettingsActivity.this, AboutUserPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
public static class SettingsFragment extends AbstractPreferenceFragment {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SettingsActivity.class);
|
||||
|
||||
static final String FRAGMENT_TAG = "SETTINGS_FRAGMENT";
|
||||
|
||||
pref = findPreference("pref_charts");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent enableIntent = new Intent(SettingsActivity.this, ChartsPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
private static final int FILE_REQUEST_CODE = 4711;
|
||||
private EditText fitnessAppEditText = null;
|
||||
private int fitnessAppSelectionListSpinnerFirstRun = 0;
|
||||
|
||||
pref = findPreference("pref_key_miband");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent enableIntent = new Intent(SettingsActivity.this, MiBandPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
|
||||
setPreferencesFromResource(R.xml.preferences, rootKey);
|
||||
|
||||
pref = findPreference("pref_key_qhybrid");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
startActivity(new Intent(SettingsActivity.this, ConfigActivity.class));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
setInputTypeFor("rtl_max_line_length", InputType.TYPE_CLASS_NUMBER);
|
||||
setInputTypeFor("location_latitude", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
|
||||
setInputTypeFor("location_longitude", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
|
||||
setInputTypeFor("auto_export_interval", InputType.TYPE_CLASS_NUMBER);
|
||||
setInputTypeFor("auto_fetch_interval_limit", InputType.TYPE_CLASS_NUMBER);
|
||||
|
||||
pref = findPreference("pref_key_zetime");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent enableIntent = new Intent(SettingsActivity.this, ZeTimePreferenceActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
pref = findPreference("pebble_emu_addr");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST);
|
||||
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(refreshIntent);
|
||||
preference.setSummary(newVal.toString());
|
||||
return true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
pref = findPreference("pebble_emu_port");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST);
|
||||
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(refreshIntent);
|
||||
preference.setSummary(newVal.toString());
|
||||
return true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
pref = findPreference("log_to_file");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
boolean doEnable = Boolean.TRUE.equals(newVal);
|
||||
try {
|
||||
if (doEnable) {
|
||||
FileUtils.getExternalFilesDir(); // ensures that it is created
|
||||
}
|
||||
GBApplication.setupLogging(doEnable);
|
||||
} catch (IOException ex) {
|
||||
GB.toast(getApplicationContext(),
|
||||
getString(R.string.error_creating_directory_for_logfiles, ex.getLocalizedMessage()),
|
||||
Toast.LENGTH_LONG,
|
||||
GB.ERROR,
|
||||
ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
pref = findPreference("cache_weather");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
boolean doEnable = Boolean.TRUE.equals(newVal);
|
||||
|
||||
Weather.getInstance().setCacheFile(getCacheDir(), doEnable);
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// If we didn't manage to initialize file logging, disable the preference
|
||||
if (!GBApplication.getLogging().isFileLoggerInitialized()) {
|
||||
pref.setEnabled(false);
|
||||
pref.setSummary(R.string.pref_write_logfiles_not_available);
|
||||
}
|
||||
|
||||
pref = findPreference("language");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
String newLang = newVal.toString();
|
||||
try {
|
||||
GBApplication.setLanguage(newLang);
|
||||
recreate();
|
||||
} catch (Exception ex) {
|
||||
GB.toast(getApplicationContext(),
|
||||
"Error setting language: " + ex.getLocalizedMessage(),
|
||||
Toast.LENGTH_LONG,
|
||||
GB.ERROR,
|
||||
ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
final Preference unit = findPreference(PREF_MEASUREMENT_SYSTEM);
|
||||
unit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM);
|
||||
}
|
||||
Prefs prefs = GBApplication.getPrefs();
|
||||
Preference pref = findPreference("pref_category_activity_personal");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent enableIntent = new Intent(requireContext(), AboutUserPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
});
|
||||
preference.setSummary(newVal.toString());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
pref = findPreference("location_aquire");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(SettingsActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
|
||||
}
|
||||
pref = findPreference("pref_charts");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent enableIntent = new Intent(requireContext(), ChartsPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||
Criteria criteria = new Criteria();
|
||||
String provider = locationManager.getBestProvider(criteria, false);
|
||||
if (provider != null) {
|
||||
Location location = locationManager.getLastKnownLocation(provider);
|
||||
if (location != null) {
|
||||
setLocationPreferences(location);
|
||||
} else {
|
||||
locationManager.requestSingleUpdate(provider, new LocationListener() {
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
setLocationPreferences(location);
|
||||
}
|
||||
pref = findPreference("pref_key_miband");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent enableIntent = new Intent(requireContext(), MiBandPreferencesActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
LOG.info("provider status changed to " + status + " (" + provider + ")");
|
||||
}
|
||||
pref = findPreference("pref_key_qhybrid");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
startActivity(new Intent(requireContext(), ConfigActivity.class));
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
LOG.info("provider enabled (" + provider + ")");
|
||||
}
|
||||
pref = findPreference("pref_key_zetime");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent enableIntent = new Intent(requireContext(), ZeTimePreferenceActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
LOG.info("provider disabled (" + provider + ")");
|
||||
GB.toast(SettingsActivity.this, getString(R.string.toast_enable_networklocationprovider), 3000, 0);
|
||||
}
|
||||
}, null);
|
||||
pref = findPreference("pebble_emu_addr");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST);
|
||||
LocalBroadcastManager.getInstance(requireContext().getApplicationContext()).sendBroadcast(refreshIntent);
|
||||
preference.setSummary(newVal.toString());
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
pref = findPreference("pebble_emu_port");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST);
|
||||
LocalBroadcastManager.getInstance(requireContext().getApplicationContext()).sendBroadcast(refreshIntent);
|
||||
preference.setSummary(newVal.toString());
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
pref = findPreference("log_to_file");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
boolean doEnable = Boolean.TRUE.equals(newVal);
|
||||
try {
|
||||
if (doEnable) {
|
||||
FileUtils.getExternalFilesDir(); // ensures that it is created
|
||||
}
|
||||
GBApplication.setupLogging(doEnable);
|
||||
} catch (IOException ex) {
|
||||
GB.toast(requireContext().getApplicationContext(),
|
||||
getString(R.string.error_creating_directory_for_logfiles, ex.getLocalizedMessage()),
|
||||
Toast.LENGTH_LONG,
|
||||
GB.ERROR,
|
||||
ex);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("No location provider found, did you deny location permission?");
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
pref = findPreference("cache_weather");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
boolean doEnable = Boolean.TRUE.equals(newVal);
|
||||
|
||||
Weather.getInstance().setCacheFile(requireContext().getCacheDir(), doEnable);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
// If we didn't manage to initialize file logging, disable the preference
|
||||
if (!GBApplication.getLogging().isFileLoggerInitialized()) {
|
||||
pref.setEnabled(false);
|
||||
pref.setSummary(R.string.pref_write_logfiles_not_available);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
pref = findPreference("weather_city");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
// reset city id and force a new lookup
|
||||
GBApplication.getPrefs().getPreferences().edit().putString("weather_cityid", null).apply();
|
||||
preference.setSummary(newVal.toString());
|
||||
Intent intent = new Intent("GB_UPDATE_WEATHER");
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
sendBroadcast(intent);
|
||||
return true;
|
||||
pref = findPreference("language");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
String newLang = newVal.toString();
|
||||
try {
|
||||
GBApplication.setLanguage(newLang);
|
||||
requireActivity().recreate();
|
||||
} catch (Exception ex) {
|
||||
GB.toast(requireContext().getApplicationContext(),
|
||||
"Error setting language: " + ex.getLocalizedMessage(),
|
||||
Toast.LENGTH_LONG,
|
||||
GB.ERROR,
|
||||
ex);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
pref = findPreference(GBPrefs.AUTO_EXPORT_LOCATION);
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
i.setType("application/x-sqlite3");
|
||||
i.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
i.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
String title = getApplicationContext().getString(R.string.choose_auto_export_location);
|
||||
startActivityForResult(Intent.createChooser(i, title), FILE_REQUEST_CODE);
|
||||
return true;
|
||||
final Preference unit = findPreference(PREF_MEASUREMENT_SYSTEM);
|
||||
if (unit != null) {
|
||||
unit.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
invokeLater(() -> GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM));
|
||||
return true;
|
||||
});
|
||||
}
|
||||
});
|
||||
pref.setSummary(getAutoExportLocationSummary());
|
||||
|
||||
pref = findPreference(GBPrefs.AUTO_EXPORT_INTERVAL);
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object autoExportInterval) {
|
||||
String summary = String.format(
|
||||
getApplicationContext().getString(R.string.pref_summary_auto_export_interval),
|
||||
Integer.valueOf((String) autoExportInterval));
|
||||
preference.setSummary(summary);
|
||||
boolean auto_export_enabled = GBApplication.getPrefs().getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
|
||||
PeriodicExporter.scheduleAlarm(getApplicationContext(), Integer.valueOf((String) autoExportInterval), auto_export_enabled);
|
||||
return true;
|
||||
pref = findPreference("location_aquire");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
if (ActivityCompat.checkSelfPermission(requireContext().getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
|
||||
}
|
||||
|
||||
LocationManager locationManager = (LocationManager) requireContext().getSystemService(Context.LOCATION_SERVICE);
|
||||
Criteria criteria = new Criteria();
|
||||
String provider = locationManager.getBestProvider(criteria, false);
|
||||
if (provider != null) {
|
||||
Location location = locationManager.getLastKnownLocation(provider);
|
||||
if (location != null) {
|
||||
setLocationPreferences(location);
|
||||
} else {
|
||||
locationManager.requestSingleUpdate(provider, new LocationListener() {
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
setLocationPreferences(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
LOG.info("provider status changed to " + status + " (" + provider + ")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
LOG.info("provider enabled (" + provider + ")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
LOG.info("provider disabled (" + provider + ")");
|
||||
GB.toast(requireContext(), getString(R.string.toast_enable_networklocationprovider), 3000, 0);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("No location provider found, did you deny location permission?");
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
});
|
||||
int autoExportInterval = GBApplication.getPrefs().getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
|
||||
String summary = String.format(
|
||||
getApplicationContext().getString(R.string.pref_summary_auto_export_interval),
|
||||
(int) autoExportInterval);
|
||||
pref.setSummary(summary);
|
||||
|
||||
findPreference(GBPrefs.AUTO_EXPORT_ENABLED).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object autoExportEnabled) {
|
||||
pref = findPreference("weather_city");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, newVal) -> {
|
||||
// reset city id and force a new lookup
|
||||
GBApplication.getPrefs().getPreferences().edit().putString("weather_cityid", null).apply();
|
||||
Intent intent = new Intent("GB_UPDATE_WEATHER");
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
requireContext().sendBroadcast(intent);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pref = findPreference(GBPrefs.AUTO_EXPORT_LOCATION);
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent i = new Intent(Intent.ACTION_CREATE_DOCUMENT);
|
||||
i.setType("application/x-sqlite3");
|
||||
i.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
i.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
String title = requireContext().getApplicationContext().getString(R.string.choose_auto_export_location);
|
||||
startActivityForResult(Intent.createChooser(i, title), FILE_REQUEST_CODE);
|
||||
return true;
|
||||
});
|
||||
pref.setSummary(getAutoExportLocationSummary());
|
||||
}
|
||||
|
||||
pref = findPreference(GBPrefs.AUTO_EXPORT_INTERVAL);
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, autoExportInterval) -> {
|
||||
String summary = String.format(
|
||||
requireContext().getApplicationContext().getString(R.string.pref_summary_auto_export_interval),
|
||||
Integer.valueOf((String) autoExportInterval));
|
||||
preference.setSummary(summary);
|
||||
boolean auto_export_enabled = GBApplication.getPrefs().getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
|
||||
PeriodicExporter.scheduleAlarm(requireContext().getApplicationContext(), Integer.valueOf((String) autoExportInterval), auto_export_enabled);
|
||||
return true;
|
||||
});
|
||||
int autoExportInterval = GBApplication.getPrefs().getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
|
||||
PeriodicExporter.scheduleAlarm(getApplicationContext(), autoExportInterval, (boolean) autoExportEnabled);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
pref = findPreference("auto_fetch_interval_limit");
|
||||
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object autoFetchInterval) {
|
||||
String summary = String.format(
|
||||
getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary),
|
||||
Integer.valueOf((String) autoFetchInterval));
|
||||
preference.setSummary(summary);
|
||||
return true;
|
||||
requireContext().getApplicationContext().getString(R.string.pref_summary_auto_export_interval),
|
||||
autoExportInterval);
|
||||
pref.setSummary(summary);
|
||||
}
|
||||
});
|
||||
|
||||
int autoFetchInterval = GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0);
|
||||
summary = String.format(
|
||||
getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary),
|
||||
autoFetchInterval);
|
||||
pref.setSummary(summary);
|
||||
|
||||
// Get all receivers of Media Buttons
|
||||
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
||||
|
||||
PackageManager pm = getPackageManager();
|
||||
List<ResolveInfo> mediaReceivers = pm.queryBroadcastReceivers(mediaButtonIntent,
|
||||
PackageManager.GET_INTENT_FILTERS | PackageManager.GET_RESOLVED_FILTER);
|
||||
|
||||
|
||||
CharSequence[] newEntries = new CharSequence[mediaReceivers.size() + 1];
|
||||
CharSequence[] newValues = new CharSequence[mediaReceivers.size() + 1];
|
||||
newEntries[0] = getString(R.string.pref_default);
|
||||
newValues[0] = "default";
|
||||
|
||||
int i = 1;
|
||||
Set<String> existingNames = new HashSet<>();
|
||||
for (ResolveInfo resolveInfo : mediaReceivers) {
|
||||
newEntries[i] = resolveInfo.activityInfo.loadLabel(pm) + " (" + resolveInfo.activityInfo.packageName + ")";
|
||||
if (existingNames.contains(newEntries[i].toString().trim())) {
|
||||
newEntries[i] = resolveInfo.activityInfo.loadLabel(pm) + " (" + resolveInfo.activityInfo.name + ")";
|
||||
} else {
|
||||
existingNames.add(newEntries[i].toString().trim());
|
||||
pref = findPreference(GBPrefs.AUTO_EXPORT_ENABLED);
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, autoExportEnabled) -> {
|
||||
int autoExportInterval = GBApplication.getPrefs().getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
|
||||
PeriodicExporter.scheduleAlarm(requireContext().getApplicationContext(), autoExportInterval, (boolean) autoExportEnabled);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
newValues[i] = resolveInfo.activityInfo.packageName;
|
||||
i++;
|
||||
}
|
||||
|
||||
final ListPreference audioPlayer = (ListPreference) findPreference("audio_player");
|
||||
audioPlayer.setEntries(newEntries);
|
||||
audioPlayer.setEntryValues(newValues);
|
||||
audioPlayer.setDefaultValue(newValues[0]);
|
||||
pref = findPreference("auto_fetch_interval_limit");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceChangeListener((preference, autoFetchInterval) -> {
|
||||
String summary = String.format(
|
||||
requireContext().getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary),
|
||||
Integer.valueOf((String) autoFetchInterval));
|
||||
preference.setSummary(summary);
|
||||
return true;
|
||||
});
|
||||
|
||||
final Preference theme = (ListPreference) findPreference("pref_key_theme");
|
||||
final Preference amoled_black = findPreference("pref_key_theme_amoled_black");
|
||||
int autoFetchInterval = GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0);
|
||||
String summary = String.format(
|
||||
requireContext().getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary),
|
||||
autoFetchInterval);
|
||||
pref.setSummary(summary);
|
||||
}
|
||||
|
||||
String selectedTheme = prefs.getString("pref_key_theme", SettingsActivity.this.getString(R.string.pref_theme_value_system));
|
||||
if (selectedTheme.equals("light"))
|
||||
amoled_black.setEnabled(false);
|
||||
else
|
||||
amoled_black.setEnabled(true);
|
||||
final ListPreference audioPlayer = findPreference("audio_player");
|
||||
if (audioPlayer != null) {
|
||||
// Get all receivers of Media Buttons
|
||||
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
||||
|
||||
theme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
final String val = newVal.toString();
|
||||
if (val.equals("light"))
|
||||
PackageManager pm = requireContext().getPackageManager();
|
||||
List<ResolveInfo> mediaReceivers = pm.queryBroadcastReceivers(mediaButtonIntent,
|
||||
PackageManager.GET_INTENT_FILTERS | PackageManager.GET_RESOLVED_FILTER);
|
||||
|
||||
CharSequence[] newEntries = new CharSequence[mediaReceivers.size() + 1];
|
||||
CharSequence[] newValues = new CharSequence[mediaReceivers.size() + 1];
|
||||
newEntries[0] = getString(R.string.pref_default);
|
||||
newValues[0] = "default";
|
||||
|
||||
int i = 1;
|
||||
Set<String> existingNames = new HashSet<>();
|
||||
for (ResolveInfo resolveInfo : mediaReceivers) {
|
||||
newEntries[i] = resolveInfo.activityInfo.loadLabel(pm) + " (" + resolveInfo.activityInfo.packageName + ")";
|
||||
if (existingNames.contains(newEntries[i].toString().trim())) {
|
||||
newEntries[i] = resolveInfo.activityInfo.loadLabel(pm) + " (" + resolveInfo.activityInfo.name + ")";
|
||||
} else {
|
||||
existingNames.add(newEntries[i].toString().trim());
|
||||
}
|
||||
newValues[i] = resolveInfo.activityInfo.packageName;
|
||||
i++;
|
||||
}
|
||||
|
||||
audioPlayer.setEntries(newEntries);
|
||||
audioPlayer.setEntryValues(newValues);
|
||||
audioPlayer.setDefaultValue(newValues[0]);
|
||||
}
|
||||
|
||||
final Preference theme = findPreference("pref_key_theme");
|
||||
final Preference amoled_black = findPreference("pref_key_theme_amoled_black");
|
||||
|
||||
if (amoled_black != null) {
|
||||
String selectedTheme = prefs.getString("pref_key_theme", requireContext().getString(R.string.pref_theme_value_system));
|
||||
if (selectedTheme.equals("light"))
|
||||
amoled_black.setEnabled(false);
|
||||
else
|
||||
amoled_black.setEnabled(true);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
pref = findPreference("pref_discovery_pairing");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent enableIntent = new Intent(SettingsActivity.this, DiscoveryPairingPreferenceActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
|
||||
if (theme != null) {
|
||||
theme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
||||
final String val = newVal.toString();
|
||||
if (amoled_black != null) {
|
||||
if (val.equals("light"))
|
||||
amoled_black.setEnabled(false);
|
||||
else
|
||||
amoled_black.setEnabled(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//fitness app (OpenTracks) package name selection for OpenTracks observer
|
||||
pref = findPreference("pref_key_opentracks_packagename");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
final LinearLayout outerLayout = new LinearLayout(SettingsActivity.this);
|
||||
outerLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
final LinearLayout innerLayout = new LinearLayout(SettingsActivity.this);
|
||||
innerLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||
innerLayout.setPadding(20, 0, 20, 0);
|
||||
final Spinner selectionListSpinner = new Spinner(SettingsActivity.this);
|
||||
String[] appListArray = getResources().getStringArray(R.array.fitness_tracking_apps_package_names);
|
||||
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(SettingsActivity.this,
|
||||
android.R.layout.simple_spinner_dropdown_item, appListArray);
|
||||
selectionListSpinner.setAdapter(spinnerArrayAdapter);
|
||||
fitnessAppSelectionListSpinnerFirstRun = 0;
|
||||
addListenerOnSpinnerDeviceSelection(selectionListSpinner);
|
||||
Prefs prefs = GBApplication.getPrefs();
|
||||
String packageName = prefs.getString("opentracks_packagename", "de.dennisguse.opentracks");
|
||||
fitnessAppEditText = new EditText(SettingsActivity.this);
|
||||
fitnessAppEditText.setText(packageName);
|
||||
innerLayout.addView(fitnessAppEditText);
|
||||
outerLayout.addView(selectionListSpinner);
|
||||
outerLayout.addView(innerLayout);
|
||||
|
||||
new AlertDialog.Builder(SettingsActivity.this)
|
||||
.setCancelable(true)
|
||||
.setTitle(R.string.pref_title_opentracks_packagename)
|
||||
.setView(outerLayout)
|
||||
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
SharedPreferences.Editor editor = GBApplication.getPrefs().getPreferences().edit();
|
||||
editor.putString("opentracks_packagename", fitnessAppEditText.getText().toString());
|
||||
editor.apply();
|
||||
editor.commit();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.Cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
}
|
||||
})
|
||||
.show();
|
||||
return false;
|
||||
pref = findPreference("pref_discovery_pairing");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
Intent enableIntent = new Intent(requireContext(), DiscoveryPairingPreferenceActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void addListenerOnSpinnerDeviceSelection(Spinner spinner) {
|
||||
spinner.setOnItemSelectedListener(new SettingsActivity.CustomOnDeviceSelectedListener());
|
||||
}
|
||||
//fitness app (OpenTracks) package name selection for OpenTracks observer
|
||||
pref = findPreference("pref_key_opentracks_packagename");
|
||||
if (pref != null) {
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
final LinearLayout outerLayout = new LinearLayout(requireContext());
|
||||
outerLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
final LinearLayout innerLayout = new LinearLayout(requireContext());
|
||||
innerLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||
innerLayout.setPadding(20, 0, 20, 0);
|
||||
final Spinner selectionListSpinner = new Spinner(requireContext());
|
||||
String[] appListArray = getResources().getStringArray(R.array.fitness_tracking_apps_package_names);
|
||||
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(requireContext(),
|
||||
android.R.layout.simple_spinner_dropdown_item, appListArray);
|
||||
selectionListSpinner.setAdapter(spinnerArrayAdapter);
|
||||
fitnessAppSelectionListSpinnerFirstRun = 0;
|
||||
addListenerOnSpinnerDeviceSelection(selectionListSpinner);
|
||||
Prefs prefs1 = GBApplication.getPrefs();
|
||||
String packageName = prefs1.getString("opentracks_packagename", "de.dennisguse.opentracks");
|
||||
fitnessAppEditText = new EditText(requireContext());
|
||||
fitnessAppEditText.setText(packageName);
|
||||
innerLayout.addView(fitnessAppEditText);
|
||||
outerLayout.addView(selectionListSpinner);
|
||||
outerLayout.addView(innerLayout);
|
||||
|
||||
public class CustomOnDeviceSelectedListener implements AdapterView.OnItemSelectedListener {
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
|
||||
if (++fitnessAppSelectionListSpinnerFirstRun > 1) { //this prevents the setText to be set when spinner just is being initialized
|
||||
fitnessAppEditText.setText(parent.getItemAtPosition(pos).toString());
|
||||
new AlertDialog.Builder(requireContext())
|
||||
.setCancelable(true)
|
||||
.setTitle(R.string.pref_title_opentracks_packagename)
|
||||
.setView(outerLayout)
|
||||
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
SharedPreferences.Editor editor = GBApplication.getPrefs().getPreferences().edit();
|
||||
editor.putString("opentracks_packagename", fitnessAppEditText.getText().toString());
|
||||
editor.apply();
|
||||
editor.commit();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.Cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
}
|
||||
})
|
||||
.show();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void addListenerOnSpinnerDeviceSelection(Spinner spinner) {
|
||||
spinner.setOnItemSelectedListener(new CustomOnDeviceSelectedListener());
|
||||
}
|
||||
|
||||
public class CustomOnDeviceSelectedListener implements AdapterView.OnItemSelectedListener {
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
|
||||
if (++fitnessAppSelectionListSpinnerFirstRun > 1) { //this prevents the setText to be set when spinner just is being initialized
|
||||
fitnessAppEditText.setText(parent.getItemAtPosition(pos).toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
||||
if (requestCode == FILE_REQUEST_CODE && intent != null) {
|
||||
Uri uri = intent.getData();
|
||||
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
PreferenceManager
|
||||
.getDefaultSharedPreferences(this)
|
||||
.edit()
|
||||
.putString(GBPrefs.AUTO_EXPORT_LOCATION, uri.toString())
|
||||
.apply();
|
||||
String summary = getAutoExportLocationSummary();
|
||||
findPreference(GBPrefs.AUTO_EXPORT_LOCATION).setSummary(summary);
|
||||
boolean autoExportEnabled = GBApplication
|
||||
.getPrefs().getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
|
||||
int autoExportPeriod = GBApplication
|
||||
.getPrefs().getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
|
||||
PeriodicExporter.scheduleAlarm(getApplicationContext(), autoExportPeriod, autoExportEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Either returns the file path of the selected document, or the display name, or an empty string
|
||||
*/
|
||||
public String getAutoExportLocationSummary() {
|
||||
String autoExportLocation = GBApplication.getPrefs().getString(GBPrefs.AUTO_EXPORT_LOCATION, null);
|
||||
if (autoExportLocation == null) {
|
||||
return "";
|
||||
}
|
||||
Uri uri = Uri.parse(autoExportLocation);
|
||||
try {
|
||||
return AndroidUtils.getFilePath(getApplicationContext(), uri);
|
||||
} catch (IllegalArgumentException e) {
|
||||
try {
|
||||
Cursor cursor = getContentResolver().query(
|
||||
uri,
|
||||
new String[]{DocumentsContract.Document.COLUMN_DISPLAY_NAME},
|
||||
null, null, null, null
|
||||
);
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
return cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME));
|
||||
}
|
||||
} catch (Exception fdfsdfds) {
|
||||
LOG.warn("fuck");
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
||||
if (requestCode == FILE_REQUEST_CODE && intent != null) {
|
||||
Uri uri = intent.getData();
|
||||
requireContext().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||
GBApplication.getPrefs().getPreferences()
|
||||
.edit()
|
||||
.putString(GBPrefs.AUTO_EXPORT_LOCATION, uri.toString())
|
||||
.apply();
|
||||
String summary = getAutoExportLocationSummary();
|
||||
findPreference(GBPrefs.AUTO_EXPORT_LOCATION).setSummary(summary);
|
||||
boolean autoExportEnabled = GBApplication
|
||||
.getPrefs().getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
|
||||
int autoExportPeriod = GBApplication
|
||||
.getPrefs().getInt(GBPrefs.AUTO_EXPORT_INTERVAL, 0);
|
||||
PeriodicExporter.scheduleAlarm(requireContext().getApplicationContext(), autoExportPeriod, autoExportEnabled);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/*
|
||||
* delayed execution so that the preferences are applied first
|
||||
*/
|
||||
private void invokeLater(Runnable runnable) {
|
||||
getListView().post(runnable);
|
||||
}
|
||||
/*
|
||||
Either returns the file path of the selected document, or the display name, or an empty string
|
||||
*/
|
||||
public String getAutoExportLocationSummary() {
|
||||
String autoExportLocation = GBApplication.getPrefs().getString(GBPrefs.AUTO_EXPORT_LOCATION, null);
|
||||
if (autoExportLocation == null) {
|
||||
return "";
|
||||
}
|
||||
Uri uri = Uri.parse(autoExportLocation);
|
||||
try {
|
||||
return AndroidUtils.getFilePath(requireContext().getApplicationContext(), uri);
|
||||
} catch (IllegalArgumentException e) {
|
||||
try {
|
||||
Cursor cursor = requireContext().getContentResolver().query(
|
||||
uri,
|
||||
new String[]{DocumentsContract.Document.COLUMN_DISPLAY_NAME},
|
||||
null, null, null, null
|
||||
);
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
return cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME));
|
||||
}
|
||||
} catch (Exception fdfsdfds) {
|
||||
LOG.warn("fuck");
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getPreferenceKeysWithSummary() {
|
||||
return new String[]{
|
||||
"pebble_emu_addr",
|
||||
"pebble_emu_port",
|
||||
"pebble_reconnect_attempts",
|
||||
"location_latitude",
|
||||
"location_longitude",
|
||||
"weather_city",
|
||||
};
|
||||
}
|
||||
/*
|
||||
* delayed execution so that the preferences are applied first
|
||||
*/
|
||||
private void invokeLater(Runnable runnable) {
|
||||
getListView().post(runnable);
|
||||
}
|
||||
|
||||
private void setLocationPreferences(Location location) {
|
||||
String latitude = String.format(Locale.US, "%.6g", location.getLatitude());
|
||||
String longitude = String.format(Locale.US, "%.6g", location.getLongitude());
|
||||
LOG.info("got location. Lat: " + latitude + " Lng: " + longitude);
|
||||
GB.toast(SettingsActivity.this, getString(R.string.toast_aqurired_networklocation), 2000, 0);
|
||||
EditTextPreference pref_latitude = (EditTextPreference) findPreference("location_latitude");
|
||||
EditTextPreference pref_longitude = (EditTextPreference) findPreference("location_longitude");
|
||||
pref_latitude.setText(latitude);
|
||||
pref_longitude.setText(longitude);
|
||||
pref_latitude.setSummary(latitude);
|
||||
pref_longitude.setSummary(longitude);
|
||||
private void setLocationPreferences(Location location) {
|
||||
String latitude = String.format(Locale.US, "%.6g", location.getLatitude());
|
||||
String longitude = String.format(Locale.US, "%.6g", location.getLongitude());
|
||||
LOG.info("got location. Lat: " + latitude + " Lng: " + longitude);
|
||||
GB.toast(requireContext(), getString(R.string.toast_aqurired_networklocation), 2000, 0);
|
||||
EditTextPreference pref_latitude = findPreference("location_latitude");
|
||||
EditTextPreference pref_longitude = findPreference("location_longitude");
|
||||
pref_latitude.setText(latitude);
|
||||
pref_longitude.setText(longitude);
|
||||
pref_latitude.setSummary(latitude);
|
||||
pref_longitude.setSummary(longitude);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,26 +1,27 @@
|
||||
<?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"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory
|
||||
android:key="pref_key_general"
|
||||
android:title="@string/pref_header_general">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="general_autostartonboot"
|
||||
android:title="@string/pref_title_general_autostartonboot" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="general_autoconnectonbluetooth"
|
||||
android:title="@string/pref_title_general_autoconnectonbluetooth" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="general_autocreconnect"
|
||||
android:title="@string/pref_title_general_autoreconnect"
|
||||
android:enabled="false"
|
||||
android:summary="setting has been moved to device specific settings"/>
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="display_add_device_fab"
|
||||
@ -28,7 +29,7 @@
|
||||
android:summaryOn="@string/pref_display_add_device_fab_on"
|
||||
android:title="@string/pref_display_add_device_fab" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="mb_intents"
|
||||
@ -42,7 +43,7 @@
|
||||
android:summary="%s"
|
||||
android:dependency="mb_intents" />
|
||||
|
||||
<PreferenceScreen android:title="@string/pref_title_theme">
|
||||
<PreferenceScreen android:key="pref_screen_theme" android:title="@string/pref_title_theme">
|
||||
<ListPreference
|
||||
android:defaultValue="@string/pref_theme_value_light"
|
||||
android:entries="@array/pref_theme_options"
|
||||
@ -50,7 +51,7 @@
|
||||
android:key="pref_key_theme"
|
||||
android:summary="%s"
|
||||
android:title="@string/pref_title_theme" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pref_key_theme_amoled_black"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
@ -75,14 +76,15 @@
|
||||
android:summary="%s"
|
||||
android:title="@string/pref_title_unit_system" />
|
||||
<PreferenceScreen
|
||||
android:key="pref_screen_rtl"
|
||||
android:title="@string/preferences_rtl_settings">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="rtl"
|
||||
android:summary="@string/pref_summary_rtl"
|
||||
android:title="@string/pref_title_rtl" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="contextualArabic"
|
||||
@ -99,13 +101,15 @@
|
||||
</PreferenceScreen>
|
||||
|
||||
<PreferenceScreen
|
||||
android:key="pref_screen_weather"
|
||||
android:title="@string/pref_title_weather"
|
||||
android:summary="@string/pref_title_weather_summary">
|
||||
|
||||
<EditTextPreference
|
||||
android:inputType="text"
|
||||
android:key="weather_city"
|
||||
android:title="@string/pref_title_weather_location" />
|
||||
android:title="@string/pref_title_weather_location"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
</PreferenceScreen>
|
||||
|
||||
</PreferenceCategory>
|
||||
@ -121,7 +125,7 @@
|
||||
<PreferenceCategory
|
||||
android:key="pref_key_datetime"
|
||||
android:title="@string/pref_header_datetime">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="datetime_synconconnect"
|
||||
@ -137,14 +141,16 @@
|
||||
android:inputType="numberDecimal|numberSigned"
|
||||
android:key="location_latitude"
|
||||
android:maxLength="7"
|
||||
android:title="@string/pref_title_location_latitude" />
|
||||
android:title="@string/pref_title_location_latitude"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="0"
|
||||
android:inputType="numberDecimal|numberSigned"
|
||||
android:key="location_longitude"
|
||||
android:maxLength="7"
|
||||
android:title="@string/pref_title_location_longitude" />
|
||||
<CheckBoxPreference
|
||||
android:title="@string/pref_title_location_longitude"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:dependency="location_aquire"
|
||||
android:key="use_updated_location_if_available"
|
||||
@ -157,13 +163,13 @@
|
||||
android:title="@string/pref_title_opentracks_packagename" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_header_navigation">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="navigation_forward"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_navigation_forward"
|
||||
android:title="@string/pref_title_navigation_forward" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:dependency="navigation_forward"
|
||||
android:key="nagivation_screen_on"
|
||||
@ -188,13 +194,13 @@
|
||||
android:title="@string/pref_title_pebble_settings">
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_header_general">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="pebble_enable_outgoing_call"
|
||||
android:summary="@string/pref_summary_enable_outgoing_call"
|
||||
android:title="@string/pref_title_enable_outgoing_call" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_enable_pebblekit"
|
||||
@ -205,7 +211,8 @@
|
||||
android:inputType="number"
|
||||
android:key="pebble_reconnect_attempts"
|
||||
android:maxLength="4"
|
||||
android:title="@string/pref_title_pebble_reconnect_attempts" />
|
||||
android:title="@string/pref_title_pebble_reconnect_attempts"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<ListPreference
|
||||
android:key="pebble_pref_privacy_mode"
|
||||
android:title="@string/pref_title_pebble_privacy_mode"
|
||||
@ -215,7 +222,7 @@
|
||||
android:summary="%s" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_header_pebble_timeline">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:key="send_sunrise_sunset"
|
||||
android:summary="@string/pref_summary_sunrise_sunset"
|
||||
@ -229,24 +236,24 @@
|
||||
android:key="pebble_activitytracker"
|
||||
android:summary="%s"
|
||||
android:title="@string/pref_title_pebble_activitytracker" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="pebble_sync_health"
|
||||
android:title="@string/pref_title_pebble_sync_health" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="pebble_health_store_raw"
|
||||
android:dependency="pebble_sync_health"
|
||||
android:title="@string/pref_title_pebble_health_store_raw"
|
||||
android:summary="@string/pref_summary_pebble_health_store_raw" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="pebble_sync_misfit"
|
||||
android:title="@string/pref_title_pebble_sync_misfit" />>
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="pebble_sync_morpheuz"
|
||||
@ -254,19 +261,19 @@
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_header_development">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_force_protocol"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_pebble_forceprotocol"
|
||||
android:title="@string/pref_title_pebble_forceprotocol" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_force_untested"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_pebble_forceuntested"
|
||||
android:title="@string/pref_title_pebble_forceuntested" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_force_le"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
@ -279,25 +286,25 @@
|
||||
android:defaultValue="512"
|
||||
android:title="@string/pref_title_pebble_mtu_limit"
|
||||
android:summary="@string/pref_summary_pebble_mtu_limit" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_gatt_clientonly"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_pebble_gatt_clientonly"
|
||||
android:title="@string/pref_title_pebble_gatt_clientonly" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_enable_applogs"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_pebble_enable_applogs"
|
||||
android:title="@string/pref_title_pebble_enable_applogs" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="pebble_always_ack_pebblekit"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_summary_pebble_always_ack_pebblekit"
|
||||
android:title="@string/pref_title_pebble_always_ack_pebblekit" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:dependency="pebble_force_untested"
|
||||
android:key="pebble_enable_background_javascript"
|
||||
@ -308,12 +315,14 @@
|
||||
android:digits="0123456789."
|
||||
android:key="pebble_emu_addr"
|
||||
android:maxLength="15"
|
||||
android:title="Emulator IP" />
|
||||
android:title="Emulator IP"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<EditTextPreference
|
||||
android:inputType="number"
|
||||
android:key="pebble_emu_port"
|
||||
android:maxLength="5"
|
||||
android:title="Emulator Port" />
|
||||
android:title="Emulator Port"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen
|
||||
@ -329,7 +338,7 @@
|
||||
android:key="hplus_screentime"
|
||||
android:title="@string/pref_title_screentime"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="hplus_alldayhr"
|
||||
@ -350,7 +359,7 @@
|
||||
android:key="auto_export_location"
|
||||
android:title="@string/pref_title_auto_export_location"
|
||||
android:summary="%s" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="auto_export_enabled"
|
||||
@ -367,7 +376,7 @@
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_header_auto_fetch">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="auto_fetch_enabled"
|
||||
@ -386,18 +395,18 @@
|
||||
<PreferenceCategory
|
||||
android:key="pref_key_development"
|
||||
android:title="@string/pref_header_development">
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="false"
|
||||
android:key="log_to_file"
|
||||
android:title="@string/pref_write_logfiles" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="permission_pestering"
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:summary="@string/pref_check_permission_status_summary"
|
||||
android:title="@string/pref_check_permission_status" />
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:layout="@layout/preference_checkbox"
|
||||
android:defaultValue="true"
|
||||
android:key="cache_weather"
|
||||
@ -416,27 +425,27 @@
|
||||
android:key="pref_key_intent_api"
|
||||
android:title="@string/pref_header_intent_api">
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:key="prefs_key_allow_bluetooth_intent_api"
|
||||
android:title="@string/activity_prefs_allow_bluetooth_intent_api"
|
||||
android:summary="@string/activity_prefs_summary_allow_bluetooth_intent_api" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:key="intent_api_allow_activity_sync"
|
||||
android:title="@string/intent_api_allow_activity_sync_title"
|
||||
android:summary="@string/intent_api_allow_activity_sync_summary" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:key="intent_api_allow_trigger_export"
|
||||
android:title="@string/intent_api_allow_trigger_export_title"
|
||||
android:summary="@string/intent_api_allow_trigger_export_summary" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:key="intent_api_broadcast_export"
|
||||
android:title="@string/intent_api_broadcast_export_title"
|
||||
android:summary="@string/intent_api_broadcast_export_summary" />
|
||||
|
||||
<CheckBoxPreference
|
||||
<SwitchPreference
|
||||
android:key="intent_api_allow_debug_commands"
|
||||
android:title="@string/intent_api_allow_debug_commands_title"
|
||||
android:summary="@string/intent_api_allow_debug_commands_summary" />
|
||||
|
Loading…
Reference in New Issue
Block a user