mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-09-02 04:01:25 +02:00
## Summary of the Pull Request Adds a new "Show AI paste section" setting to Advanced Paste that allows users to hide the AI paste input box from the Advanced Paste window. This addresses user requests for a cleaner UI when the AI paste feature is not needed or desired. ## PR Checklist - [x] Closes: #32967 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [x] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx ## Detailed Description of the Pull Request / Additional comments This PR implements a new boolean setting `ShowAIPaste` that controls the visibility of the AI paste input box (PromptBox) in the Advanced Paste window. ### Changes Made **Settings UI Library:** - `src/settings-ui/Settings.UI.Library/AdvancedPasteProperties.cs` - Added `ShowAIPaste` property with JSON serialization **Settings UI:** - `src/settings-ui/Settings.UI/ViewModels/AdvancedPasteViewModel.cs` - Added view model property with change notification - `src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml` - Added checkbox setting in the UI Behavior section - `src/settings-ui/Settings.UI/Strings/en-us/Resources.resw` - Added localized strings for header and description **Advanced Paste Module:** - `src/modules/AdvancedPaste/AdvancedPaste/Helpers/IUserSettings.cs` - Added interface property - `src/modules/AdvancedPaste/AdvancedPaste/Helpers/UserSettings.cs` - Implemented setting loading from properties - `src/modules/AdvancedPaste/AdvancedPaste/ViewModels/OptionsViewModel.cs` - Added `ShowAIPasteSection` property combining user setting with GPO policy - `src/modules/AdvancedPaste/AdvancedPaste/AdvancedPasteXAML/Pages/MainPage.xaml` - Bound PromptBox visibility to new property **Tests:** - `src/modules/AdvancedPaste/AdvancedPaste.UnitTests/Mocks/IntegrationTestUserSettings.cs` - Added mock property - `src/modules/AdvancedPaste/UITest-AdvancedPaste/TestFiles/settings.json` - Updated test settings file ### Behavior - Default value is `true` (AI paste section visible) to maintain backward compatibility - The setting respects GPO policy - if AI is disabled by GPO, the section will be hidden regardless of user preference - Setting is persisted in the Advanced Paste settings JSON file ## Validation Steps Performed - [x] Verified setting appears in Settings UI under Advanced Paste → UI Behavior - [x] Verified toggling the setting hides/shows the AI paste input box in the Advanced Paste window - [x] Verified setting persists after closing and reopening Settings - [x] Verified default value is `true` (visible) for new installations - [x] Verified existing unit tests pass with updated mock Fixes #32967 --------- Co-authored-by: Niels Laute <niels.laute@live.nl>
118 lines
4.1 KiB
C#
118 lines
4.1 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
using Settings.UI.Library.Attributes;
|
|
|
|
namespace Microsoft.PowerToys.Settings.UI.Library
|
|
{
|
|
public class AdvancedPasteProperties
|
|
{
|
|
public static readonly HotkeySettings DefaultAdvancedPasteUIShortcut = new HotkeySettings(true, false, false, true, 0x56); // Win+Shift+V
|
|
|
|
public static readonly HotkeySettings DefaultPasteAsPlainTextShortcut = new HotkeySettings(true, true, true, false, 0x56); // Ctrl+Win+Alt+V
|
|
|
|
public AdvancedPasteProperties()
|
|
{
|
|
AdvancedPasteUIShortcut = DefaultAdvancedPasteUIShortcut;
|
|
PasteAsPlainTextShortcut = DefaultPasteAsPlainTextShortcut;
|
|
PasteAsMarkdownShortcut = new();
|
|
PasteAsJsonShortcut = new();
|
|
CustomActions = new();
|
|
AdditionalActions = new();
|
|
IsAIEnabled = false;
|
|
ShowCustomPreview = true;
|
|
ShowAIPaste = true;
|
|
CloseAfterLosingFocus = false;
|
|
EnableClipboardPreview = true;
|
|
AutoCopySelectionForCustomActionHotkey = false;
|
|
PasteAIConfiguration = new();
|
|
}
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool IsAIEnabled { get; set; }
|
|
|
|
private bool? _legacyAdvancedAIEnabled;
|
|
|
|
[JsonPropertyName("IsAdvancedAIEnabled")]
|
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
|
|
public BoolProperty LegacyAdvancedAIEnabledProperty
|
|
{
|
|
get => null;
|
|
set
|
|
{
|
|
if (value is not null)
|
|
{
|
|
LegacyAdvancedAIEnabled = value.Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
[JsonIgnore]
|
|
public bool? LegacyAdvancedAIEnabled
|
|
{
|
|
get => _legacyAdvancedAIEnabled;
|
|
private set => _legacyAdvancedAIEnabled = value;
|
|
}
|
|
|
|
public bool TryConsumeLegacyAdvancedAIEnabled(out bool value)
|
|
{
|
|
if (_legacyAdvancedAIEnabled is bool flag)
|
|
{
|
|
value = flag;
|
|
_legacyAdvancedAIEnabled = null;
|
|
return true;
|
|
}
|
|
|
|
value = default;
|
|
return false;
|
|
}
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool ShowCustomPreview { get; set; }
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool ShowAIPaste { get; set; }
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool CloseAfterLosingFocus { get; set; }
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool EnableClipboardPreview { get; set; }
|
|
|
|
[JsonConverter(typeof(BoolPropertyJsonConverter))]
|
|
public bool AutoCopySelectionForCustomActionHotkey { get; set; }
|
|
|
|
[JsonPropertyName("advanced-paste-ui-hotkey")]
|
|
public HotkeySettings AdvancedPasteUIShortcut { get; set; }
|
|
|
|
[JsonPropertyName("paste-as-plain-hotkey")]
|
|
public HotkeySettings PasteAsPlainTextShortcut { get; set; }
|
|
|
|
[JsonPropertyName("paste-as-markdown-hotkey")]
|
|
public HotkeySettings PasteAsMarkdownShortcut { get; set; }
|
|
|
|
[JsonPropertyName("paste-as-json-hotkey")]
|
|
public HotkeySettings PasteAsJsonShortcut { get; set; }
|
|
|
|
[JsonPropertyName("custom-actions")]
|
|
[CmdConfigureIgnoreAttribute]
|
|
public AdvancedPasteCustomActions CustomActions { get; set; }
|
|
|
|
[JsonPropertyName("additional-actions")]
|
|
[CmdConfigureIgnoreAttribute]
|
|
public AdvancedPasteAdditionalActions AdditionalActions { get; set; }
|
|
|
|
[JsonPropertyName("paste-ai-configuration")]
|
|
[CmdConfigureIgnoreAttribute]
|
|
public PasteAIConfiguration PasteAIConfiguration { get; set; }
|
|
|
|
public override string ToString()
|
|
=> JsonSerializer.Serialize(this, SettingsSerializationContext.Default.AdvancedPasteProperties);
|
|
}
|
|
}
|