Started implementing system controls. Introduced sytem information module...
This commit is contained in:
		
							parent
							
								
									b80863c7aa
								
							
						
					
					
						commit
						a5d44e1ef8
					
				
					 12 changed files with 273 additions and 16 deletions
				
			
		| 
						 | 
					@ -50,7 +50,6 @@
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.Core" />
 | 
					    <Reference Include="System.Core" />
 | 
				
			||||||
    <Reference Include="System.Drawing" />
 | 
					 | 
				
			||||||
    <Reference Include="System.Windows.Forms" />
 | 
					    <Reference Include="System.Windows.Forms" />
 | 
				
			||||||
    <Reference Include="System.Xml.Linq" />
 | 
					    <Reference Include="System.Xml.Linq" />
 | 
				
			||||||
    <Reference Include="System.Data.DataSetExtensions" />
 | 
					    <Reference Include="System.Data.DataSetExtensions" />
 | 
				
			||||||
| 
						 | 
					@ -65,6 +64,7 @@
 | 
				
			||||||
    <Compile Include="MouseSettings.cs" />
 | 
					    <Compile Include="MouseSettings.cs" />
 | 
				
			||||||
    <Compile Include="Settings.cs" />
 | 
					    <Compile Include="Settings.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
					    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="SystemInfo.cs" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <ProjectReference Include="..\SafeExamBrowser.Contracts\SafeExamBrowser.Contracts.csproj">
 | 
					    <ProjectReference Include="..\SafeExamBrowser.Contracts\SafeExamBrowser.Contracts.csproj">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										86
									
								
								SafeExamBrowser.Configuration/SystemInfo.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								SafeExamBrowser.Configuration/SystemInfo.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2017 ETH Zürich, Educational Development and Technology (LET)
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This Source Code Form is subject to the terms of the Mozilla Public
 | 
				
			||||||
 | 
					 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
				
			||||||
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System.Windows.Forms;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Configuration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public class SystemInfo : ISystemInfo
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public bool HasBattery { get; private set; }
 | 
				
			||||||
 | 
							public OperatingSystem OperatingSystem { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public string OperatingSystemInfo
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return $"{OperatingSystemName()}, {System.Environment.OSVersion.VersionString} ({Architecture()})"; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public SystemInfo()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								InitializeBattery();
 | 
				
			||||||
 | 
								InitializeOperatingSystem();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void InitializeBattery()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var status = SystemInformation.PowerStatus.BatteryChargeStatus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								HasBattery = !status.HasFlag(BatteryChargeStatus.NoSystemBattery) && !status.HasFlag(BatteryChargeStatus.Unknown);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void InitializeOperatingSystem()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
 | 
				
			||||||
 | 
								var major = System.Environment.OSVersion.Version.Major;
 | 
				
			||||||
 | 
								var minor = System.Environment.OSVersion.Version.Minor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (major == 6)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (minor == 1)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										OperatingSystem = OperatingSystem.Windows7;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else if (minor == 2)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										OperatingSystem = OperatingSystem.Windows8;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else if (minor == 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										OperatingSystem = OperatingSystem.Windows8_1;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (major == 10)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									OperatingSystem = OperatingSystem.Windows10;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private string OperatingSystemName()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								switch (OperatingSystem)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									case OperatingSystem.Windows7:
 | 
				
			||||||
 | 
										return "Windows 7";
 | 
				
			||||||
 | 
									case OperatingSystem.Windows8:
 | 
				
			||||||
 | 
										return "Windows 8";
 | 
				
			||||||
 | 
									case OperatingSystem.Windows8_1:
 | 
				
			||||||
 | 
										return "Windows 8.1";
 | 
				
			||||||
 | 
									case OperatingSystem.Windows10:
 | 
				
			||||||
 | 
										return "Windows 10";
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										return "Unknown Windows Version";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private string Architecture()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return System.Environment.Is64BitOperatingSystem ? "x64" : "x86";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								SafeExamBrowser.Contracts/Configuration/ISystemInfo.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								SafeExamBrowser.Contracts/Configuration/ISystemInfo.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2017 ETH Zürich, Educational Development and Technology (LET)
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This Source Code Form is subject to the terms of the Mozilla Public
 | 
				
			||||||
 | 
					 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
				
			||||||
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Contracts.Configuration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public interface ISystemInfo
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// Reveals whether the computer system contains a battery.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							bool HasBattery { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// Reveals the version of the currently running operating system.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							OperatingSystem OperatingSystem { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// Provides detailed version information about the currently running operating system.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							string OperatingSystemInfo { get; }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								SafeExamBrowser.Contracts/Configuration/OperatingSystem.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								SafeExamBrowser.Contracts/Configuration/OperatingSystem.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2017 ETH Zürich, Educational Development and Technology (LET)
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * This Source Code Form is subject to the terms of the Mozilla Public
 | 
				
			||||||
 | 
					 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
				
			||||||
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Contracts.Configuration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public enum OperatingSystem
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Unknown = 0,
 | 
				
			||||||
 | 
							Windows7,
 | 
				
			||||||
 | 
							Windows8,
 | 
				
			||||||
 | 
							Windows8_1,
 | 
				
			||||||
 | 
							Windows10
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -66,6 +66,8 @@
 | 
				
			||||||
    <Compile Include="Configuration\IApplicationInfo.cs" />
 | 
					    <Compile Include="Configuration\IApplicationInfo.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\IApplicationInstance.cs" />
 | 
					    <Compile Include="Configuration\IApplicationInstance.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\INotificationInfo.cs" />
 | 
					    <Compile Include="Configuration\INotificationInfo.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Configuration\ISystemInfo.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="Configuration\OperatingSystem.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\Settings\IBrowserSettings.cs" />
 | 
					    <Compile Include="Configuration\Settings\IBrowserSettings.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\Settings\IKeyboardSettings.cs" />
 | 
					    <Compile Include="Configuration\Settings\IKeyboardSettings.cs" />
 | 
				
			||||||
    <Compile Include="Configuration\Settings\IMouseSettings.cs" />
 | 
					    <Compile Include="Configuration\Settings\IMouseSettings.cs" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@ using System.Collections.Generic;
 | 
				
			||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
					using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
				
			||||||
using Moq;
 | 
					using Moq;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Behaviour;
 | 
					using SafeExamBrowser.Contracts.Behaviour;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Configuration;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
					using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
				
			||||||
using SafeExamBrowser.Contracts.I18n;
 | 
					using SafeExamBrowser.Contracts.I18n;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Logging;
 | 
					using SafeExamBrowser.Contracts.Logging;
 | 
				
			||||||
| 
						 | 
					@ -24,6 +25,7 @@ namespace SafeExamBrowser.Core.UnitTests.Behaviour
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		private Mock<ILogger> loggerMock;
 | 
							private Mock<ILogger> loggerMock;
 | 
				
			||||||
		private Mock<ISettings> settingsMock;
 | 
							private Mock<ISettings> settingsMock;
 | 
				
			||||||
 | 
							private Mock<ISystemInfo> systemInfoMock;
 | 
				
			||||||
		private Mock<IText> textMock;
 | 
							private Mock<IText> textMock;
 | 
				
			||||||
		private Mock<IUserInterfaceFactory> uiFactoryMock;
 | 
							private Mock<IUserInterfaceFactory> uiFactoryMock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,12 +36,13 @@ namespace SafeExamBrowser.Core.UnitTests.Behaviour
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			loggerMock = new Mock<ILogger>();
 | 
								loggerMock = new Mock<ILogger>();
 | 
				
			||||||
			settingsMock = new Mock<ISettings>();
 | 
								settingsMock = new Mock<ISettings>();
 | 
				
			||||||
 | 
								systemInfoMock = new Mock<ISystemInfo>();
 | 
				
			||||||
			textMock = new Mock<IText>();
 | 
								textMock = new Mock<IText>();
 | 
				
			||||||
			uiFactoryMock = new Mock<IUserInterfaceFactory>();
 | 
								uiFactoryMock = new Mock<IUserInterfaceFactory>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			uiFactoryMock.Setup(f => f.CreateSplashScreen(settingsMock.Object, textMock.Object)).Returns(new Mock<ISplashScreen>().Object);
 | 
								uiFactoryMock.Setup(f => f.CreateSplashScreen(settingsMock.Object, textMock.Object)).Returns(new Mock<ISplashScreen>().Object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			sut = new StartupController(loggerMock.Object, settingsMock.Object, textMock.Object, uiFactoryMock.Object);
 | 
								sut = new StartupController(loggerMock.Object, settingsMock.Object, systemInfoMock.Object, textMock.Object, uiFactoryMock.Object);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[TestMethod]
 | 
							[TestMethod]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using SafeExamBrowser.Contracts.Behaviour;
 | 
					using SafeExamBrowser.Contracts.Behaviour;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Configuration;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
					using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
				
			||||||
using SafeExamBrowser.Contracts.I18n;
 | 
					using SafeExamBrowser.Contracts.I18n;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Logging;
 | 
					using SafeExamBrowser.Contracts.Logging;
 | 
				
			||||||
| 
						 | 
					@ -19,22 +20,25 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		private ILogger logger;
 | 
							private ILogger logger;
 | 
				
			||||||
		private INotificationController aboutController, logController;
 | 
							private INotificationController aboutController, logController;
 | 
				
			||||||
 | 
							private ISettings settings;
 | 
				
			||||||
 | 
							private ISystemInfo systemInfo;
 | 
				
			||||||
		private ITaskbar taskbar;
 | 
							private ITaskbar taskbar;
 | 
				
			||||||
		private IUserInterfaceFactory uiFactory;
 | 
							private IUserInterfaceFactory uiFactory;
 | 
				
			||||||
		private IText text;
 | 
							private IText text;
 | 
				
			||||||
		private ISettings settings;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public ISplashScreen SplashScreen { private get; set; }
 | 
							public ISplashScreen SplashScreen { private get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public TaskbarOperation(
 | 
							public TaskbarOperation(
 | 
				
			||||||
			ILogger logger,
 | 
								ILogger logger,
 | 
				
			||||||
			ISettings settings,
 | 
								ISettings settings,
 | 
				
			||||||
 | 
								ISystemInfo systemInfo,
 | 
				
			||||||
			ITaskbar taskbar,
 | 
								ITaskbar taskbar,
 | 
				
			||||||
			IText text,
 | 
								IText text,
 | 
				
			||||||
			IUserInterfaceFactory uiFactory)
 | 
								IUserInterfaceFactory uiFactory)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this.logger = logger;
 | 
								this.logger = logger;
 | 
				
			||||||
			this.settings = settings;
 | 
								this.settings = settings;
 | 
				
			||||||
 | 
								this.systemInfo = systemInfo;
 | 
				
			||||||
			this.taskbar = taskbar;
 | 
								this.taskbar = taskbar;
 | 
				
			||||||
			this.text = text;
 | 
								this.text = text;
 | 
				
			||||||
			this.uiFactory = uiFactory;
 | 
								this.uiFactory = uiFactory;
 | 
				
			||||||
| 
						 | 
					@ -51,12 +55,32 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			CreateAboutNotification();
 | 
								CreateAboutNotification();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (systemInfo.HasBattery)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									CreateBatteryNotification();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								CreateNetworkNotification();
 | 
				
			||||||
 | 
								CreateAudioNotification();
 | 
				
			||||||
 | 
								CreateKeyboardNotification();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void Revert()
 | 
							public void Revert()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			logController?.Terminate();
 | 
								logController?.Terminate();
 | 
				
			||||||
			aboutController.Terminate();
 | 
								aboutController?.Terminate();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void CreateLogNotification()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var logInfo = new LogNotificationInfo(text);
 | 
				
			||||||
 | 
								var logNotification = uiFactory.CreateNotification(logInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								logController = new LogNotificationController(logger, text, uiFactory);
 | 
				
			||||||
 | 
								logController.RegisterNotification(logNotification);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								taskbar.AddNotification(logNotification);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private void CreateAboutNotification()
 | 
							private void CreateAboutNotification()
 | 
				
			||||||
| 
						 | 
					@ -70,15 +94,25 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
 | 
				
			||||||
			taskbar.AddNotification(aboutNotification);
 | 
								taskbar.AddNotification(aboutNotification);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private void CreateLogNotification()
 | 
							private void CreateBatteryNotification()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var logInfo = new LogNotificationInfo(text);
 | 
								// TODO: Are these specializations of INotification -> ISystemNotification? If yes, is this the right place, or do they
 | 
				
			||||||
			var logNotification = uiFactory.CreateNotification(logInfo);
 | 
								// need to go to a separate assembly?
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			logController = new LogNotificationController(logger, text, uiFactory);
 | 
							private void CreateNetworkNotification()
 | 
				
			||||||
			logController.RegisterNotification(logNotification);
 | 
							{
 | 
				
			||||||
 | 
								// TODO
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			taskbar.AddNotification(logNotification);
 | 
							private void CreateAudioNotification()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// TODO
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private void CreateKeyboardNotification()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// TODO
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Behaviour;
 | 
					using SafeExamBrowser.Contracts.Behaviour;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Configuration;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
					using SafeExamBrowser.Contracts.Configuration.Settings;
 | 
				
			||||||
using SafeExamBrowser.Contracts.I18n;
 | 
					using SafeExamBrowser.Contracts.I18n;
 | 
				
			||||||
using SafeExamBrowser.Contracts.Logging;
 | 
					using SafeExamBrowser.Contracts.Logging;
 | 
				
			||||||
| 
						 | 
					@ -22,15 +23,17 @@ namespace SafeExamBrowser.Core.Behaviour
 | 
				
			||||||
		private ILogger logger;
 | 
							private ILogger logger;
 | 
				
			||||||
		private ISettings settings;
 | 
							private ISettings settings;
 | 
				
			||||||
		private ISplashScreen splashScreen;
 | 
							private ISplashScreen splashScreen;
 | 
				
			||||||
 | 
							private ISystemInfo systemInfo;
 | 
				
			||||||
		private IText text;
 | 
							private IText text;
 | 
				
			||||||
		private IUserInterfaceFactory uiFactory;
 | 
							private IUserInterfaceFactory uiFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private Stack<IOperation> stack = new Stack<IOperation>();
 | 
							private Stack<IOperation> stack = new Stack<IOperation>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public StartupController(ILogger logger, ISettings settings, IText text, IUserInterfaceFactory uiFactory)
 | 
							public StartupController(ILogger logger, ISettings settings, ISystemInfo systemInfo, IText text, IUserInterfaceFactory uiFactory)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this.logger = logger;
 | 
								this.logger = logger;
 | 
				
			||||||
			this.settings = settings;
 | 
								this.settings = settings;
 | 
				
			||||||
 | 
								this.systemInfo = systemInfo;
 | 
				
			||||||
			this.text = text;
 | 
								this.text = text;
 | 
				
			||||||
			this.uiFactory = uiFactory;
 | 
								this.uiFactory = uiFactory;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -87,7 +90,8 @@ namespace SafeExamBrowser.Core.Behaviour
 | 
				
			||||||
			var githubLine = $"/* Please visit https://github.com/SafeExamBrowser for more information.";
 | 
								var githubLine = $"/* Please visit https://github.com/SafeExamBrowser for more information.";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			logger.Log($"{titleLine}{copyrightLine}{emptyLine}{githubLine}");
 | 
								logger.Log($"{titleLine}{copyrightLine}{emptyLine}{githubLine}");
 | 
				
			||||||
			logger.Log($"{Environment.NewLine}# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}{Environment.NewLine}");
 | 
								logger.Log($"{Environment.NewLine}# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
 | 
				
			||||||
 | 
								logger.Log($"# Operating system: {systemInfo.OperatingSystemInfo}{Environment.NewLine}");
 | 
				
			||||||
			logger.Info("--- Initiating startup procedure ---");
 | 
								logger.Info("--- Initiating startup procedure ---");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			splashScreen = uiFactory.CreateSplashScreen(settings, text);
 | 
								splashScreen = uiFactory.CreateSplashScreen(settings, text);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,7 @@
 | 
				
			||||||
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 | 
					             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 | 
				
			||||||
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
					             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
				
			||||||
             xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
 | 
					             xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
 | 
				
			||||||
             mc:Ignorable="d" 
 | 
					             mc:Ignorable="d" d:DesignHeight="16" d:DesignWidth="16" Margin="5,0">
 | 
				
			||||||
             d:DesignHeight="16" d:DesignWidth="16" Margin="5,0">
 | 
					 | 
				
			||||||
    <Grid>
 | 
					    <Grid>
 | 
				
			||||||
        <Button x:Name="IconButton" Click="Icon_Click" Background="#00000000" BorderThickness="0">
 | 
					        <Button x:Name="IconButton" Click="Icon_Click" Background="#00000000" BorderThickness="0">
 | 
				
			||||||
            <Button.Template>
 | 
					            <Button.Template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +44,7 @@ namespace SafeExamBrowser
 | 
				
			||||||
		private IProcessMonitor processMonitor;
 | 
							private IProcessMonitor processMonitor;
 | 
				
			||||||
		private IRuntimeController runtimeController;
 | 
							private IRuntimeController runtimeController;
 | 
				
			||||||
		private ISettings settings;
 | 
							private ISettings settings;
 | 
				
			||||||
 | 
							private ISystemInfo systemInfo;
 | 
				
			||||||
		private IText text;
 | 
							private IText text;
 | 
				
			||||||
		private ITextResource textResource;
 | 
							private ITextResource textResource;
 | 
				
			||||||
		private IUserInterfaceFactory uiFactory;
 | 
							private IUserInterfaceFactory uiFactory;
 | 
				
			||||||
| 
						 | 
					@ -61,6 +62,7 @@ namespace SafeExamBrowser
 | 
				
			||||||
			logFormatter = new DefaultLogFormatter();
 | 
								logFormatter = new DefaultLogFormatter();
 | 
				
			||||||
			nativeMethods = new NativeMethods();
 | 
								nativeMethods = new NativeMethods();
 | 
				
			||||||
			settings = new Settings();
 | 
								settings = new Settings();
 | 
				
			||||||
 | 
								systemInfo = new SystemInfo();
 | 
				
			||||||
			textResource = new XmlTextResource();
 | 
								textResource = new XmlTextResource();
 | 
				
			||||||
			uiFactory = new UserInterfaceFactory();
 | 
								uiFactory = new UserInterfaceFactory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,14 +79,14 @@ namespace SafeExamBrowser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			runtimeController = new RuntimeController(displayMonitor, new ModuleLogger(logger, typeof(RuntimeController)), processMonitor, Taskbar, windowMonitor);
 | 
								runtimeController = new RuntimeController(displayMonitor, new ModuleLogger(logger, typeof(RuntimeController)), processMonitor, Taskbar, windowMonitor);
 | 
				
			||||||
			ShutdownController = new ShutdownController(logger, settings, text, uiFactory);
 | 
								ShutdownController = new ShutdownController(logger, settings, text, uiFactory);
 | 
				
			||||||
			StartupController = new StartupController(logger, settings, text, uiFactory);
 | 
								StartupController = new StartupController(logger, settings, systemInfo, text, uiFactory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			StartupOperations = new Queue<IOperation>();
 | 
								StartupOperations = new Queue<IOperation>();
 | 
				
			||||||
			StartupOperations.Enqueue(new KeyboardInterceptorOperation(keyboardInterceptor, logger, nativeMethods));
 | 
								StartupOperations.Enqueue(new KeyboardInterceptorOperation(keyboardInterceptor, logger, nativeMethods));
 | 
				
			||||||
			StartupOperations.Enqueue(new WindowMonitorOperation(logger, windowMonitor));
 | 
								StartupOperations.Enqueue(new WindowMonitorOperation(logger, windowMonitor));
 | 
				
			||||||
			StartupOperations.Enqueue(new ProcessMonitorOperation(logger, processMonitor));
 | 
								StartupOperations.Enqueue(new ProcessMonitorOperation(logger, processMonitor));
 | 
				
			||||||
			StartupOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, Taskbar));
 | 
								StartupOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, Taskbar));
 | 
				
			||||||
			StartupOperations.Enqueue(new TaskbarOperation(logger, settings, Taskbar, text, uiFactory));
 | 
								StartupOperations.Enqueue(new TaskbarOperation(logger, settings, systemInfo, Taskbar, text, uiFactory));
 | 
				
			||||||
			StartupOperations.Enqueue(new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory));
 | 
								StartupOperations.Enqueue(new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory));
 | 
				
			||||||
			StartupOperations.Enqueue(new RuntimeControllerOperation(runtimeController, logger));
 | 
								StartupOperations.Enqueue(new RuntimeControllerOperation(runtimeController, logger));
 | 
				
			||||||
			StartupOperations.Enqueue(new ClipboardOperation(logger, nativeMethods));
 | 
								StartupOperations.Enqueue(new ClipboardOperation(logger, nativeMethods));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,6 +74,9 @@
 | 
				
			||||||
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
 | 
					    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
 | 
				
			||||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
					    <Prefer32Bit>true</Prefer32Bit>
 | 
				
			||||||
  </PropertyGroup>
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					  <PropertyGroup>
 | 
				
			||||||
 | 
					    <ApplicationManifest>app.manifest</ApplicationManifest>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <Reference Include="System" />
 | 
					    <Reference Include="System" />
 | 
				
			||||||
    <Reference Include="System.Data" />
 | 
					    <Reference Include="System.Data" />
 | 
				
			||||||
| 
						 | 
					@ -110,6 +113,7 @@
 | 
				
			||||||
      <Generator>ResXFileCodeGenerator</Generator>
 | 
					      <Generator>ResXFileCodeGenerator</Generator>
 | 
				
			||||||
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
 | 
					      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
 | 
				
			||||||
    </EmbeddedResource>
 | 
					    </EmbeddedResource>
 | 
				
			||||||
 | 
					    <None Include="app.manifest" />
 | 
				
			||||||
    <None Include="Properties\Settings.settings">
 | 
					    <None Include="Properties\Settings.settings">
 | 
				
			||||||
      <Generator>SettingsSingleFileGenerator</Generator>
 | 
					      <Generator>SettingsSingleFileGenerator</Generator>
 | 
				
			||||||
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
 | 
					      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										76
									
								
								SafeExamBrowser/app.manifest
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								SafeExamBrowser/app.manifest
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,76 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
 | 
				
			||||||
 | 
					  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
 | 
				
			||||||
 | 
					  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
 | 
				
			||||||
 | 
					    <security>
 | 
				
			||||||
 | 
					      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
 | 
				
			||||||
 | 
					        <!-- UAC Manifest Options
 | 
				
			||||||
 | 
					             If you want to change the Windows User Account Control level replace the 
 | 
				
			||||||
 | 
					             requestedExecutionLevel node with one of the following.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
 | 
				
			||||||
 | 
					        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
 | 
				
			||||||
 | 
					        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Specifying requestedExecutionLevel element will disable file and registry virtualization. 
 | 
				
			||||||
 | 
					            Remove this element if your application requires this virtualization for backwards
 | 
				
			||||||
 | 
					            compatibility.
 | 
				
			||||||
 | 
					        -->
 | 
				
			||||||
 | 
					        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
 | 
				
			||||||
 | 
					      </requestedPrivileges>
 | 
				
			||||||
 | 
					    </security>
 | 
				
			||||||
 | 
					  </trustInfo>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
 | 
				
			||||||
 | 
					    <application>
 | 
				
			||||||
 | 
					      <!-- A list of the Windows versions that this application has been tested on and is
 | 
				
			||||||
 | 
					           is designed to work with. Uncomment the appropriate elements and Windows will 
 | 
				
			||||||
 | 
					           automatically selected the most compatible environment. -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Windows Vista -->
 | 
				
			||||||
 | 
					      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Windows 7 -->
 | 
				
			||||||
 | 
					      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Windows 8 -->
 | 
				
			||||||
 | 
					      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Windows 8.1 -->
 | 
				
			||||||
 | 
					      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <!-- Windows 10 -->
 | 
				
			||||||
 | 
					      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </application>
 | 
				
			||||||
 | 
					  </compatibility>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
 | 
				
			||||||
 | 
					       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need 
 | 
				
			||||||
 | 
					       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should 
 | 
				
			||||||
 | 
					       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
 | 
				
			||||||
 | 
					  <!--
 | 
				
			||||||
 | 
					  <application xmlns="urn:schemas-microsoft-com:asm.v3">
 | 
				
			||||||
 | 
					    <windowsSettings>
 | 
				
			||||||
 | 
					      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
 | 
				
			||||||
 | 
					    </windowsSettings>
 | 
				
			||||||
 | 
					  </application>
 | 
				
			||||||
 | 
					  -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
 | 
				
			||||||
 | 
					  <!--
 | 
				
			||||||
 | 
					  <dependency>
 | 
				
			||||||
 | 
					    <dependentAssembly>
 | 
				
			||||||
 | 
					      <assemblyIdentity
 | 
				
			||||||
 | 
					          type="win32"
 | 
				
			||||||
 | 
					          name="Microsoft.Windows.Common-Controls"
 | 
				
			||||||
 | 
					          version="6.0.0.0"
 | 
				
			||||||
 | 
					          processorArchitecture="*"
 | 
				
			||||||
 | 
					          publicKeyToken="6595b64144ccf1df"
 | 
				
			||||||
 | 
					          language="*"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					    </dependentAssembly>
 | 
				
			||||||
 | 
					  </dependency>
 | 
				
			||||||
 | 
					  -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</assembly>
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue