Files
qController/qController.Standard/App.xaml.cs

183 lines
6.2 KiB
C#

using Acr.UserDialogs;
using Xamarin.Forms;
using Xamarin.Essentials;
using qController.Pages;
using System;
using QControlKit;
using Serilog;
namespace qController
{
public partial class App : Application
{
public static INavigation iNav;
public static NavigationPage NavigationPage { get; private set; }
public static RootPage rootPage;
public static DisplayInfo mainDisplayInfo;
public static double Height;
public static double Width;
public static double HeightUnit;
public static double WidthUnit;
public static bool MenuIsPresented
{
get => rootPage.IsPresented;
set => rootPage.IsPresented = value;
}
public App()
{
InitializeComponent();
Current.RequestedThemeChanged += Current_RequestedThemeChanged;
SetAppResources();
mainDisplayInfo = DeviceDisplay.MainDisplayInfo;
Height = mainDisplayInfo.Height / mainDisplayInfo.Density;
Width = mainDisplayInfo.Width / mainDisplayInfo.Density;
HeightUnit = Height / 100.0;
WidthUnit = Width / 100.0;
rootPage = new RootPage();
NavigationPage = new NavigationPage(new QBrowserPage());
rootPage.Detail = NavigationPage;
MainPage = rootPage;
rootPage.Init();
AppActions.OnAppAction += AppActions_OnAppAction;
}
private void AppActions_OnAppAction(object sender, AppActionEventArgs e)
{
// Don't handle events fired for old application instances
// and cleanup the old instance's event handler
if (Current != this && Current is App app)
{
AppActions.OnAppAction -= app.AppActions_OnAppAction;
return;
}
Device.BeginInvokeOnMainThread(async () =>
{
QRecentWorkspaceInfo packagedInfo = QStorage.recentWorkspaceInfo;
if (packagedInfo != null && e.AppAction.Id.Equals("recent_workspace"))
{
await NavigationPage.PopToRootAsync();
QWorkspace recentWorkspace = new QWorkspace(packagedInfo.workspaceInfo, new QServer(packagedInfo.serverInfo.host, packagedInfo.serverInfo.port));
await NavigationPage.PushAsync(new QWorkspacePage(recentWorkspace));
Log.Debug("Pushed WorkspacePage from App Action");
}
});
}
private void Current_RequestedThemeChanged(object sender, AppThemeChangedEventArgs e)
{
SetAppResources();
}
private void SetAppResources()
{
switch (Current.RequestedTheme)
{
case OSAppTheme.Light:
SetLightResources();
break;
case OSAppTheme.Dark:
SetDarkResources();
break;
case OSAppTheme.Unspecified:
//Default to Light
SetLightResources();
break;
default:
SetLightResources();
break;
}
}
private void SetDarkResources()
{
Resources["NavigationBarColor"] = Color.FromHex("#3f6dab");
Resources["PageBackgroundColor"] = Color.FromHex("#525252");
Resources["PrimaryColor"] = Color.WhiteSmoke;
Resources["SecondaryColor"] = Color.White;
Resources["PrimaryTextColor"] = Color.LightGray;
Resources["SecondaryTextColor"] = Color.White;
Resources["TertiaryTextColor"] = Color.Gray;
Resources["TransparentColor"] = Color.Transparent;
Resources["IconTextColor"] = Color.WhiteSmoke;
Resources["ListViewBackgroundColor"] = Color.FromHex("#363636");
Resources["ServerCellBackgroundColor"] = Color.FromHex("#363636");
Resources["WorkspaceCellBackgroundColor"] = Color.FromHex("#737373");
Resources["SelectedCueCellBackgroundColor"] = Color.FromHex("#737373");
}
private void SetLightResources()
{
Resources["NavigationBarColor"] = Color.FromHex("#3089ff");
Resources["PageBackgroundColor"] = Color.LightGray;
Resources["PrimaryColor"] = Color.WhiteSmoke;
Resources["SecondaryColor"] = Color.White;
Resources["PrimaryTextColor"] = Color.Black;
Resources["SecondaryTextColor"] = Color.White;
Resources["TertiaryTextColor"] = Color.Gray;
Resources["TransparentColor"] = Color.Transparent;
Resources["IconTextColor"] = Color.Black;
Resources["ListViewBackgroundColor"] = Color.White;
Resources["ServerCellBackgroundColor"] = Color.White;
Resources["WorkspaceCellBackgroundColor"] = Color.FromHex("#D8D8D8");
Resources["SelectedCueCellBackgroundColor"] = Color.FromHex("#D8D8D8");
}
public static void SetRecentWorkspace(QWorkspace workspace)
{
try
{
QRecentWorkspaceInfo recentWorkspaceInfo = new QRecentWorkspaceInfo {
workspaceInfo = workspace.getWorkspaceInfo(),
serverInfo = workspace.GetServerInfo()
};
QStorage.UpdateRecentWorkspace(recentWorkspaceInfo);
Device.BeginInvokeOnMainThread(async () =>
{
await AppActions.SetAsync(new AppAction("recent_workspace", workspace.name, workspace.version));
});
}
catch (Exception ex)
{
Log.Debug(ex.ToString());
}
}
public static void showToast(string message)
{
ToastConfig toastConfig = new ToastConfig(message);
toastConfig.SetDuration(3000);
toastConfig.SetPosition(ToastPosition.Bottom);
UserDialogs.Instance.Toast(toastConfig);
}
public static void ShowMenu(object sender, EventArgs e)
{
MenuIsPresented = true;
}
}
}