generated from Grigo/AndroidTemplate
Created ship vectors (not added yet)
Created menu Created udp support Created DockWidgets for compass and SOG/COG
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
package com.grigowashere.aismap.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Менеджер настроек приложения
|
||||
* Управляет сохранением и загрузкой настроек в SharedPreferences
|
||||
*/
|
||||
public class SettingsManager {
|
||||
|
||||
private static final String TAG = "SettingsManager";
|
||||
private static final String PREFS_NAME = "AISMapSettings";
|
||||
|
||||
// Ключи для настроек
|
||||
private static final String KEY_UDP_PORT = "udp_port";
|
||||
private static final String KEY_UDP_ENABLED = "udp_enabled";
|
||||
private static final String KEY_ANDROID_NMEA_ENABLED = "android_nmea_enabled";
|
||||
private static final String KEY_UDP_NMEA_ENABLED = "udp_nmea_enabled";
|
||||
private static final String KEY_DATA_MODE = "data_mode";
|
||||
|
||||
// Значения по умолчанию
|
||||
private static final int DEFAULT_UDP_PORT = 10110;
|
||||
private static final boolean DEFAULT_UDP_ENABLED = true;
|
||||
private static final boolean DEFAULT_ANDROID_NMEA_ENABLED = true;
|
||||
private static final boolean DEFAULT_UDP_NMEA_ENABLED = true;
|
||||
private static final String DEFAULT_DATA_MODE = "hybrid";
|
||||
|
||||
// Режимы работы с данными
|
||||
public static final String DATA_MODE_HYBRID = "hybrid";
|
||||
public static final String DATA_MODE_NMEA_ONLY = "nmea_only";
|
||||
public static final String DATA_MODE_ANDROID_ONLY = "android_only";
|
||||
|
||||
private Context context;
|
||||
private SharedPreferences prefs;
|
||||
|
||||
public SettingsManager(Context context) {
|
||||
this.context = context;
|
||||
this.prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает UDP порт
|
||||
*/
|
||||
public int getUDPPort() {
|
||||
return prefs.getInt(KEY_UDP_PORT, DEFAULT_UDP_PORT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает UDP порт
|
||||
*/
|
||||
public void setUDPPort(int port) {
|
||||
if (port < 1 || port > 65535) {
|
||||
Log.w(TAG, "Некорректный порт: " + port + ", используем значение по умолчанию");
|
||||
port = DEFAULT_UDP_PORT;
|
||||
}
|
||||
prefs.edit().putInt(KEY_UDP_PORT, port).apply();
|
||||
Log.i(TAG, "UDP порт установлен: " + port);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли UDP слушатель
|
||||
*/
|
||||
public boolean isUDPEnabled() {
|
||||
return prefs.getBoolean(KEY_UDP_ENABLED, DEFAULT_UDP_ENABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Включает/выключает UDP слушатель
|
||||
*/
|
||||
public void setUDPEnabled(boolean enabled) {
|
||||
prefs.edit().putBoolean(KEY_UDP_ENABLED, enabled).apply();
|
||||
Log.i(TAG, "UDP слушатель: " + (enabled ? "включен" : "выключен"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли Android NMEA
|
||||
*/
|
||||
public boolean isAndroidNMEAEnabled() {
|
||||
return prefs.getBoolean(KEY_ANDROID_NMEA_ENABLED, DEFAULT_ANDROID_NMEA_ENABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Включает/выключает Android NMEA
|
||||
*/
|
||||
public void setAndroidNMEAEnabled(boolean enabled) {
|
||||
prefs.edit().putBoolean(KEY_ANDROID_NMEA_ENABLED, enabled).apply();
|
||||
Log.i(TAG, "Android NMEA: " + (enabled ? "включен" : "выключен"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли UDP NMEA
|
||||
*/
|
||||
public boolean isUDPNMEAEnabled() {
|
||||
return prefs.getBoolean(KEY_UDP_NMEA_ENABLED, DEFAULT_UDP_NMEA_ENABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Включает/выключает UDP NMEA
|
||||
*/
|
||||
public void setUDPNMEAEnabled(boolean enabled) {
|
||||
prefs.edit().putBoolean(KEY_UDP_NMEA_ENABLED, enabled).apply();
|
||||
Log.i(TAG, "UDP NMEA: " + (enabled ? "включен" : "выключен"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает режим работы с данными
|
||||
*/
|
||||
public String getDataMode() {
|
||||
return prefs.getString(KEY_DATA_MODE, DEFAULT_DATA_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает режим работы с данными
|
||||
*/
|
||||
public void setDataMode(String mode) {
|
||||
if (!isValidDataMode(mode)) {
|
||||
Log.w(TAG, "Некорректный режим данных: " + mode + ", используем значение по умолчанию");
|
||||
mode = DEFAULT_DATA_MODE;
|
||||
}
|
||||
prefs.edit().putString(KEY_DATA_MODE, mode).apply();
|
||||
Log.i(TAG, "Режим данных установлен: " + mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет корректность режима данных
|
||||
*/
|
||||
private boolean isValidDataMode(String mode) {
|
||||
return DATA_MODE_HYBRID.equals(mode) ||
|
||||
DATA_MODE_NMEA_ONLY.equals(mode) ||
|
||||
DATA_MODE_ANDROID_ONLY.equals(mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли гибридный режим
|
||||
*/
|
||||
public boolean isHybridMode() {
|
||||
return DATA_MODE_HYBRID.equals(getDataMode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли режим только NMEA
|
||||
*/
|
||||
public boolean isNMEAOnlyMode() {
|
||||
return DATA_MODE_NMEA_ONLY.equals(getDataMode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, включен ли режим только Android GPS
|
||||
*/
|
||||
public boolean isAndroidOnlyMode() {
|
||||
return DATA_MODE_ANDROID_ONLY.equals(getDataMode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Сбрасывает все настройки к значениям по умолчанию
|
||||
*/
|
||||
public void resetToDefaults() {
|
||||
prefs.edit()
|
||||
.putInt(KEY_UDP_PORT, DEFAULT_UDP_PORT)
|
||||
.putBoolean(KEY_UDP_ENABLED, DEFAULT_UDP_ENABLED)
|
||||
.putBoolean(KEY_ANDROID_NMEA_ENABLED, DEFAULT_ANDROID_NMEA_ENABLED)
|
||||
.putBoolean(KEY_UDP_NMEA_ENABLED, DEFAULT_UDP_NMEA_ENABLED)
|
||||
.putString(KEY_DATA_MODE, DEFAULT_DATA_MODE)
|
||||
.apply();
|
||||
Log.i(TAG, "Настройки сброшены к значениям по умолчанию");
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает все настройки в виде строки для отладки
|
||||
*/
|
||||
public String getSettingsSummary() {
|
||||
return String.format(
|
||||
"UDP: порт=%d, включен=%s\n" +
|
||||
"Android NMEA: %s\n" +
|
||||
"UDP NMEA: %s\n" +
|
||||
"Режим данных: %s",
|
||||
getUDPPort(),
|
||||
isUDPEnabled() ? "да" : "нет",
|
||||
isAndroidNMEAEnabled() ? "включен" : "выключен",
|
||||
isUDPNMEAEnabled() ? "включен" : "выключен",
|
||||
getDataMode()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, нужно ли перезапустить UDP слушатель
|
||||
*/
|
||||
public boolean shouldRestartUDP(int currentPort, boolean currentEnabled) {
|
||||
return getUDPPort() != currentPort || isUDPEnabled() != currentEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, нужно ли перезапустить NMEA парсер
|
||||
*/
|
||||
public boolean shouldRestartNMEA(boolean currentAndroidNMEA, boolean currentUDPNMEA, String currentDataMode) {
|
||||
return isAndroidNMEAEnabled() != currentAndroidNMEA ||
|
||||
isUDPNMEAEnabled() != currentUDPNMEA ||
|
||||
!getDataMode().equals(currentDataMode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user