using System;
using Serilog.Events;
using TINK.Services.BluetoothLock;
using TINK.Services.CopriApi.ServerUris;
using TINK.Services.Geolocation;
using TINK.Settings;
using TINK.ViewModel.Map;
using TINK.ViewModel.Settings;
namespace TINK.Model.Settings
{
/// Holds settings which are persisted.
public class Settings
{
public const LogEventLevel DEFAULTLOGGINLEVEL = LogEventLevel.Error;
public const bool DEFAULTREPOTLEVEL = false;
/// Gets the type of the default geolocation service.
/// Swtiched from GeolocationService (GeolocationAccuracyMediumService) to GeolocationAccuracyHighService in app version 3.0.290.
public static Type DefaultLocationService => typeof(GeolocationAccuracyHighService);
// Default value of the expires after entry. Controls the expiration time of the cache values.
private TimeSpan DEFAULTEXPIRESAFTER = TimeSpan.FromSeconds(1);
/// Constructs settings object.
/// filter which is applied on the map view. Either TINK or Konrad stations are displayed.
///
/// Settings determining the startup behavior of the app.
///
///
/// Minimum logging level to be applied.
/// True if logging level is verbose.
/// Holds the expires after value.
/// Gets the name of the lock service to use.
/// Timeout to apply when connecting to bluetooth lock
/// Full class name of active app theme.
public Settings(
IGroupFilterMapPage groupFilterMapPage = null,
IGroupFilterSettings groupFilterSettings = null,
IStartupSettings startupSettings = null,
Uri activeUri = null,
PollingParameters pollingParameters = null,
LogEventLevel? minimumLogEventLevel = null,
bool? isReportLevelVerbose = null,
TimeSpan? expiresAfter = null,
string activeLockService = null,
TimeSpan? connectTimeout = null,
string activeGeolocationService = null,
bool? centerMapToCurrentLocation = null,
Xamarin.Forms.GoogleMaps.MapSpan mapSpan = null,
bool? logToExternalFolder = null,
bool? isSiteCachingOn = null,
string activeTheme = null)
{
GroupFilterMapPage = groupFilterMapPage ?? new GroupFilterMapPage(); // Default behaviour: No filtering.
GroupFilterSettings = groupFilterSettings ?? new GroupFilterSettings(); // Default behaviour: No filtering.
StartupSettings = startupSettings ?? new StartupSettings();
ActiveUri = GetActiveUri(activeUri);
PollingParameters = pollingParameters ?? PollingParameters.Default;
MinimumLogEventLevel = minimumLogEventLevel ?? DEFAULTLOGGINLEVEL;
IsReportLevelVerbose = isReportLevelVerbose ?? DEFAULTREPOTLEVEL;
ExpiresAfter = expiresAfter ?? DEFAULTEXPIRESAFTER;
ActiveLockService = activeLockService ?? LocksServicesContainerMutable.DefaultLocksservice;
ConnectTimeout = connectTimeout ?? new TimeSpan(0, 0, TimeOutProvider.DEFAULT_BLUETOOTHCONNECT_TIMEOUTSECONDS); // Try one sec. to connect.
ActiveGeolocationService = activeGeolocationService ?? DefaultLocationService.Name;
CenterMapToCurrentLocation = centerMapToCurrentLocation ?? GetCenterMapToCurrentLocation(activeUri);
MapSpan = mapSpan;
LogToExternalFolder = logToExternalFolder ?? false;
IsSiteCachingOn = isSiteCachingOn ?? true;
ActiveTheme = activeTheme ?? typeof(Themes.ShareeBike).Name;
}
/// Holds the filter which is applied on the map view. Either TINK or Konrad stations are displayed.
public IGroupFilterMapPage GroupFilterMapPage { get; }
/// Holds the filters loaded from settings.
public IGroupFilterSettings GroupFilterSettings { get; }
/// Holds the stettings determining app startup behavior.
public IStartupSettings StartupSettings { get; }
/// Holds the uri to connect to.
public Uri ActiveUri { get; }
/// Holds the polling parameters.
public PollingParameters PollingParameters { get; }
/// Gets the minimum logging level.
public LogEventLevel MinimumLogEventLevel { get; }
/// Gets the expires after value.
public TimeSpan ExpiresAfter { get; }
/// Gets the lock service to use.
public string ActiveLockService { get; private set; }
/// Timeout to apply when connecting to bluetooth lock.
public TimeSpan ConnectTimeout { get; }
/// Gets the geolocation service to use.
public string ActiveGeolocationService { get; }
/// True if map is centered to current positon, false if not to center map.
public bool CenterMapToCurrentLocation { get; }
/// Holds the map area to display.
public Xamarin.Forms.GoogleMaps.MapSpan MapSpan { get; }
public bool LogToExternalFolder { get; }
public bool IsSiteCachingOn { get; }
public string ActiveTheme { get; }
/// Gets a value indicating whether reporting level is verbose or not.
public bool IsReportLevelVerbose { get; }
public static Uri GetActiveUri(Uri activeUri) => activeUri ?? Services.CopriApi.ServerUris.CopriServerUriList.DefaultActiveUri;
public static bool GetCenterMapToCurrentLocation(Uri activeUri)
{
// TINK does not require acess to current location. Deactivate center map to current location for this reason.
return !GetActiveUri(activeUri).Host.GetIsCopri();
}
}
}