Skip to content

Commit 1c0167f

Browse files
authored
Feature: Moved "open on Windows startup" to advanced settings (#12584)
1 parent fff3fab commit 1c0167f

File tree

4 files changed

+96
-92
lines changed

4 files changed

+96
-92
lines changed

src/Files.App/ViewModels/Settings/AdvancedViewModel.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class AdvancedViewModel : ObservableObject
2929
public ICommand ExportSettingsCommand { get; }
3030
public ICommand ImportSettingsCommand { get; }
3131
public ICommand OpenSettingsJsonCommand { get; }
32+
public AsyncRelayCommand OpenFilesOnWindowsStartupCommand { get; }
33+
3234

3335
public AdvancedViewModel()
3436
{
@@ -40,6 +42,9 @@ public AdvancedViewModel()
4042
ExportSettingsCommand = new AsyncRelayCommand(ExportSettings);
4143
ImportSettingsCommand = new AsyncRelayCommand(ImportSettings);
4244
OpenSettingsJsonCommand = new AsyncRelayCommand(OpenSettingsJson);
45+
OpenFilesOnWindowsStartupCommand = new AsyncRelayCommand(OpenFilesOnWindowsStartup);
46+
47+
_ = DetectOpenFilesAtStartup();
4348
}
4449

4550
private async Task OpenSettingsJson()
@@ -287,5 +292,78 @@ private FileOpenPicker InitializeWithWindow(FileOpenPicker obj)
287292

288293
return obj;
289294
}
295+
296+
private bool openOnWindowsStartup;
297+
public bool OpenOnWindowsStartup
298+
{
299+
get => openOnWindowsStartup;
300+
set => SetProperty(ref openOnWindowsStartup, value);
301+
}
302+
303+
private bool canOpenOnWindowsStartup;
304+
public bool CanOpenOnWindowsStartup
305+
{
306+
get => canOpenOnWindowsStartup;
307+
set => SetProperty(ref canOpenOnWindowsStartup, value);
308+
}
309+
310+
public async Task OpenFilesOnWindowsStartup()
311+
{
312+
var stateMode = await ReadState();
313+
314+
bool state = stateMode switch
315+
{
316+
StartupTaskState.Enabled => true,
317+
StartupTaskState.EnabledByPolicy => true,
318+
StartupTaskState.DisabledByPolicy => false,
319+
StartupTaskState.DisabledByUser => false,
320+
_ => false,
321+
};
322+
323+
if (state != OpenOnWindowsStartup)
324+
{
325+
StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB");
326+
if (OpenOnWindowsStartup)
327+
await startupTask.RequestEnableAsync();
328+
else
329+
startupTask.Disable();
330+
await DetectOpenFilesAtStartup();
331+
}
332+
}
333+
334+
public async Task DetectOpenFilesAtStartup()
335+
{
336+
var stateMode = await ReadState();
337+
338+
switch (stateMode)
339+
{
340+
case StartupTaskState.Disabled:
341+
CanOpenOnWindowsStartup = true;
342+
OpenOnWindowsStartup = false;
343+
break;
344+
case StartupTaskState.Enabled:
345+
CanOpenOnWindowsStartup = true;
346+
OpenOnWindowsStartup = true;
347+
break;
348+
case StartupTaskState.DisabledByPolicy:
349+
CanOpenOnWindowsStartup = false;
350+
OpenOnWindowsStartup = false;
351+
break;
352+
case StartupTaskState.DisabledByUser:
353+
CanOpenOnWindowsStartup = false;
354+
OpenOnWindowsStartup = false;
355+
break;
356+
case StartupTaskState.EnabledByPolicy:
357+
CanOpenOnWindowsStartup = false;
358+
OpenOnWindowsStartup = true;
359+
break;
360+
}
361+
}
362+
363+
public async Task<StartupTaskState> ReadState()
364+
{
365+
var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB");
366+
return state.State;
367+
}
290368
}
291369
}

src/Files.App/ViewModels/Settings/GeneralViewModel.cs

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using Microsoft.Extensions.Logging;
66
using System.Collections.Specialized;
77
using System.Globalization;
8-
using Windows.ApplicationModel;
98
using Windows.Globalization;
109
using Windows.Storage;
1110
using Windows.Storage.Pickers;
@@ -23,7 +22,6 @@ public class GeneralViewModel : ObservableObject, IDisposable
2322

2423
private ReadOnlyCollection<IMenuFlyoutItemViewModel> addFlyoutItemsSource;
2524

26-
public AsyncRelayCommand OpenFilesAtStartupCommand { get; }
2725
public AsyncRelayCommand ChangePageCommand { get; }
2826
public RelayCommand RemovePageCommand { get; }
2927
public RelayCommand<string> AddPageCommand { get; }
@@ -93,7 +91,6 @@ public int SelectedAppLanguageIndex
9391

9492
public GeneralViewModel()
9593
{
96-
OpenFilesAtStartupCommand = new AsyncRelayCommand(OpenFilesAtStartup);
9794
ChangePageCommand = new AsyncRelayCommand(ChangePage);
9895
RemovePageCommand = new RelayCommand(RemovePage);
9996
AddPageCommand = new RelayCommand<string>(async (path) => await AddPage(path));
@@ -115,7 +112,6 @@ public GeneralViewModel()
115112
PagesOnStartupList.CollectionChanged += PagesOnStartupList_CollectionChanged;
116113

117114
_ = InitStartupSettingsRecentFoldersFlyout();
118-
_ = DetectOpenFilesAtStartup();
119115
}
120116

121117
private async void DoRestart()
@@ -391,79 +387,6 @@ public DateTimeFormats DateTimeFormat
391387
}
392388
}
393389

394-
private bool openInLogin;
395-
public bool OpenInLogin
396-
{
397-
get => openInLogin;
398-
set => SetProperty(ref openInLogin, value);
399-
}
400-
401-
private bool canOpenInLogin;
402-
public bool CanOpenInLogin
403-
{
404-
get => canOpenInLogin;
405-
set => SetProperty(ref canOpenInLogin, value);
406-
}
407-
408-
public async Task OpenFilesAtStartup()
409-
{
410-
var stateMode = await ReadState();
411-
412-
bool state = stateMode switch
413-
{
414-
StartupTaskState.Enabled => true,
415-
StartupTaskState.EnabledByPolicy => true,
416-
StartupTaskState.DisabledByPolicy => false,
417-
StartupTaskState.DisabledByUser => false,
418-
_ => false,
419-
};
420-
421-
if (state != OpenInLogin)
422-
{
423-
StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB");
424-
if (OpenInLogin)
425-
await startupTask.RequestEnableAsync();
426-
else
427-
startupTask.Disable();
428-
await DetectOpenFilesAtStartup();
429-
}
430-
}
431-
432-
public async Task DetectOpenFilesAtStartup()
433-
{
434-
var stateMode = await ReadState();
435-
436-
switch (stateMode)
437-
{
438-
case StartupTaskState.Disabled:
439-
CanOpenInLogin = true;
440-
OpenInLogin = false;
441-
break;
442-
case StartupTaskState.Enabled:
443-
CanOpenInLogin = true;
444-
OpenInLogin = true;
445-
break;
446-
case StartupTaskState.DisabledByPolicy:
447-
CanOpenInLogin = false;
448-
OpenInLogin = false;
449-
break;
450-
case StartupTaskState.DisabledByUser:
451-
CanOpenInLogin = false;
452-
OpenInLogin = false;
453-
break;
454-
case StartupTaskState.EnabledByPolicy:
455-
CanOpenInLogin = false;
456-
OpenInLogin = true;
457-
break;
458-
}
459-
}
460-
461-
public async Task<StartupTaskState> ReadState()
462-
{
463-
var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB");
464-
return state.State;
465-
}
466-
467390
public bool SearchUnindexedItems
468391
{
469392
get => UserSettingsService.GeneralSettingsService.SearchUnindexedItems;

src/Files.App/Views/Settings/AdvancedPage.xaml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,25 @@
8080
Glyph="&#xE8A7;" />
8181
</local:SettingsBlockControl>
8282

83+
<!-- Open on Windows startup -->
84+
<local:SettingsBlockControl Title="{helpers:ResourceString Name=SettingsOpenInLogin}" HorizontalAlignment="Stretch">
85+
<local:SettingsBlockControl.Icon>
86+
<FontIcon Glyph="&#xE7E8;" />
87+
</local:SettingsBlockControl.Icon>
88+
<ToggleSwitch
89+
AutomationProperties.Name="{helpers:ResourceString Name=SettingsOpenInLogin}"
90+
IsEnabled="{x:Bind ViewModel.CanOpenOnWindowsStartup, Mode=OneWay}"
91+
IsOn="{x:Bind ViewModel.OpenOnWindowsStartup, Mode=TwoWay}"
92+
Style="{StaticResource RightAlignedToggleSwitchStyle}">
93+
<i:Interaction.Behaviors>
94+
<icore:EventTriggerBehavior EventName="Toggled">
95+
<icore:InvokeCommandAction Command="{x:Bind ViewModel.OpenFilesOnWindowsStartupCommand, Mode=OneWay}" />
96+
</icore:EventTriggerBehavior>
97+
</i:Interaction.Behaviors>
98+
</ToggleSwitch>
99+
</local:SettingsBlockControl>
83100

84-
<!-- Default file manager -->
101+
<!-- Experimental Settings -->
85102
<TextBlock
86103
Padding="0,16,0,4"
87104
FontSize="16"

src/Files.App/Views/Settings/GeneralPage.xaml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,20 +187,6 @@
187187
IsOn="{x:Bind ViewModel.AlwaysOpenANewInstance, Mode=TwoWay}"
188188
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
189189
</local:SettingsBlockControl>
190-
191-
<local:SettingsBlockControl Title="{helpers:ResourceString Name=SettingsOpenInLogin}" HorizontalAlignment="Stretch">
192-
<ToggleSwitch
193-
AutomationProperties.Name="{helpers:ResourceString Name=SettingsOpenInLogin}"
194-
IsEnabled="{x:Bind ViewModel.CanOpenInLogin, Mode=OneWay}"
195-
IsOn="{x:Bind ViewModel.OpenInLogin, Mode=TwoWay}"
196-
Style="{StaticResource RightAlignedToggleSwitchStyle}">
197-
<i:Interaction.Behaviors>
198-
<icore:EventTriggerBehavior EventName="Toggled">
199-
<icore:InvokeCommandAction Command="{x:Bind ViewModel.OpenFilesAtStartupCommand, Mode=OneWay}" />
200-
</icore:EventTriggerBehavior>
201-
</i:Interaction.Behaviors>
202-
</ToggleSwitch>
203-
</local:SettingsBlockControl>
204190
</StackPanel>
205191
</local:SettingsBlockControl.ExpandableContent>
206192
</local:SettingsBlockControl>

0 commit comments

Comments
 (0)