add:Dlass遥测
This commit is contained in:
@@ -3898,7 +3898,20 @@
|
|||||||
<Line X1="0" Y1="0" X2="460" Y2="0" Stroke="#3f3f46"
|
<Line X1="0" Y1="0" X2="460" Y2="0" Stroke="#3f3f46"
|
||||||
StrokeThickness="1" Margin="0,6,0,6" />
|
StrokeThickness="1" Margin="0,6,0,6" />
|
||||||
|
|
||||||
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
<CheckBox x:Name="CheckBoxTelemetryPrivacyAccepted"
|
||||||
|
Margin="0,0,0,2"
|
||||||
|
Foreground="#a1a1aa"
|
||||||
|
FontSize="12"
|
||||||
|
Checked="CheckBoxTelemetryPrivacyAccepted_Checked"
|
||||||
|
Unchecked="CheckBoxTelemetryPrivacyAccepted_Checked">
|
||||||
|
<TextBlock>
|
||||||
|
<Run Text="我已阅读并同意 " />
|
||||||
|
<Run Text="privacy" FontWeight="Bold" />
|
||||||
|
<Run Text=" 中的隐私说明" />
|
||||||
|
</TextBlock>
|
||||||
|
</CheckBox>
|
||||||
|
|
||||||
|
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,2,0,0">
|
||||||
<TextBlock Text="匿名使用数据上传:" Foreground="#a1a1aa" FontSize="12"
|
<TextBlock Text="匿名使用数据上传:" Foreground="#a1a1aa" FontSize="12"
|
||||||
VerticalAlignment="Center" />
|
VerticalAlignment="Center" />
|
||||||
<ComboBox x:Name="ComboBoxTelemetryUploadLevel"
|
<ComboBox x:Name="ComboBoxTelemetryUploadLevel"
|
||||||
|
|||||||
@@ -31,31 +31,218 @@ namespace Ink_Canvas
|
|||||||
#region Behavior
|
#region Behavior
|
||||||
|
|
||||||
private bool _isChangingUpdateChannelInternally;
|
private bool _isChangingUpdateChannelInternally;
|
||||||
|
private bool _isChangingTelemetryInternally;
|
||||||
|
private bool _isChangingTelemetryPrivacyInternally;
|
||||||
|
|
||||||
private void ComboBoxTelemetryUploadLevel_SelectionChanged(object sender, RoutedEventArgs e)
|
private void ComboBoxTelemetryUploadLevel_SelectionChanged(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!isLoaded) return;
|
if (!isLoaded) return;
|
||||||
|
if (_isChangingTelemetryInternally) return;
|
||||||
|
var oldLevel = Settings.Startup.TelemetryUploadLevel;
|
||||||
var item = ComboBoxTelemetryUploadLevel?.SelectedItem as ComboBoxItem;
|
var item = ComboBoxTelemetryUploadLevel?.SelectedItem as ComboBoxItem;
|
||||||
if (item == null) return;
|
if (item == null) return;
|
||||||
|
|
||||||
var tag = item.Tag?.ToString() ?? "0";
|
var tag = item.Tag?.ToString() ?? "0";
|
||||||
|
var newLevel = TelemetryUploadLevel.None;
|
||||||
switch (tag)
|
switch (tag)
|
||||||
{
|
{
|
||||||
case "1":
|
case "1":
|
||||||
Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.Basic;
|
newLevel = TelemetryUploadLevel.Basic;
|
||||||
break;
|
break;
|
||||||
case "2":
|
case "2":
|
||||||
Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.Extended;
|
newLevel = TelemetryUploadLevel.Extended;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
|
newLevel = TelemetryUploadLevel.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 关闭遥测时:若当前处于 Preview/Beta 通道,则提示用户将切回正式通道
|
||||||
|
if (newLevel == TelemetryUploadLevel.None &&
|
||||||
|
oldLevel != TelemetryUploadLevel.None &&
|
||||||
|
Settings.Startup.UpdateChannel != UpdateChannel.Release)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show(
|
||||||
|
"关闭匿名使用数据上传后,将无法继续使用预览/测试通道,系统会自动切换回正式通道(Release)。\n\n是否确认关闭?",
|
||||||
|
"确认关闭遥测",
|
||||||
|
MessageBoxButton.YesNo,
|
||||||
|
MessageBoxImage.Warning);
|
||||||
|
|
||||||
|
if (result != MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
// 回滚下拉框选择
|
||||||
|
_isChangingTelemetryInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int idx = 0;
|
||||||
|
switch (oldLevel)
|
||||||
|
{
|
||||||
|
case TelemetryUploadLevel.Basic:
|
||||||
|
idx = 1;
|
||||||
|
break;
|
||||||
|
case TelemetryUploadLevel.Extended:
|
||||||
|
idx = 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
idx = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingTelemetryInternally = false;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户确认关闭:切回正式通道
|
||||||
|
_isChangingUpdateChannelInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Settings.Startup.UpdateChannel = UpdateChannel.Release;
|
||||||
|
DeviceIdentifier.UpdateUsageChannel(UpdateChannel.Release);
|
||||||
|
|
||||||
|
if (UpdateChannelSelector != null)
|
||||||
|
{
|
||||||
|
foreach (var u in UpdateChannelSelector.Items)
|
||||||
|
{
|
||||||
|
var rb = u as RadioButton;
|
||||||
|
if (rb != null && rb.Tag != null && rb.Tag.ToString() == "Release")
|
||||||
|
{
|
||||||
|
rb.IsChecked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingUpdateChannelInternally = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newLevel != TelemetryUploadLevel.None && !Settings.Startup.HasAcceptedTelemetryPrivacy)
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"在开启匿名使用数据上传前,请先阅读并勾选上方的隐私说明。",
|
||||||
|
"需要同意隐私说明",
|
||||||
|
MessageBoxButton.OK,
|
||||||
|
MessageBoxImage.Warning);
|
||||||
|
|
||||||
|
_isChangingTelemetryInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Settings.Startup.TelemetryUploadLevel = TelemetryUploadLevel.None;
|
||||||
|
if (ComboBoxTelemetryUploadLevel != null)
|
||||||
|
{
|
||||||
|
ComboBoxTelemetryUploadLevel.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingTelemetryInternally = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Startup.TelemetryUploadLevel = newLevel;
|
||||||
|
|
||||||
SaveSettingsToFile();
|
SaveSettingsToFile();
|
||||||
ShowNotification("匿名使用数据上传设置已保存");
|
ShowNotification("匿名使用数据上传设置已保存");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CheckBoxTelemetryPrivacyAccepted_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!isLoaded) return;
|
||||||
|
if (_isChangingTelemetryPrivacyInternally) return;
|
||||||
|
|
||||||
|
bool isChecked = CheckBoxTelemetryPrivacyAccepted.IsChecked == true;
|
||||||
|
|
||||||
|
if (isChecked)
|
||||||
|
{
|
||||||
|
// 读取 privacy 文本并展示给用户二次确认
|
||||||
|
string privacyText = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string pathTxt = System.IO.Path.Combine(App.RootPath, "privacy.txt");
|
||||||
|
string pathNoExt = System.IO.Path.Combine(App.RootPath, "privacy");
|
||||||
|
|
||||||
|
if (System.IO.File.Exists(pathTxt))
|
||||||
|
{
|
||||||
|
privacyText = System.IO.File.ReadAllText(pathTxt);
|
||||||
|
}
|
||||||
|
else if (System.IO.File.Exists(pathNoExt))
|
||||||
|
{
|
||||||
|
privacyText = System.IO.File.ReadAllText(pathNoExt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"Settings | 读取隐私说明失败: {ex.Message}", LogHelper.LogType.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(privacyText))
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"未找到隐私说明文件(privacy / privacy.txt),暂时无法启用匿名使用数据上传。",
|
||||||
|
"隐私说明缺失",
|
||||||
|
MessageBoxButton.OK,
|
||||||
|
MessageBoxImage.Warning);
|
||||||
|
|
||||||
|
_isChangingTelemetryPrivacyInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingTelemetryPrivacyInternally = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Startup.HasAcceptedTelemetryPrivacy = false;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = MessageBox.Show(
|
||||||
|
privacyText + "\n\n是否同意以上隐私说明并启用匿名使用数据上传?",
|
||||||
|
"隐私说明确认",
|
||||||
|
MessageBoxButton.YesNo,
|
||||||
|
MessageBoxImage.Information,
|
||||||
|
MessageBoxResult.No);
|
||||||
|
|
||||||
|
if (result != MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
// 用户不同意,取消勾选
|
||||||
|
_isChangingTelemetryPrivacyInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CheckBoxTelemetryPrivacyAccepted.IsChecked = false;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingTelemetryPrivacyInternally = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Startup.HasAcceptedTelemetryPrivacy = false;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同意隐私说明
|
||||||
|
Settings.Startup.HasAcceptedTelemetryPrivacy = true;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 用户主动取消勾选,关闭隐私同意
|
||||||
|
Settings.Startup.HasAcceptedTelemetryPrivacy = false;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ToggleSwitchIsAutoUpdate_Toggled(object sender, RoutedEventArgs e)
|
private void ToggleSwitchIsAutoUpdate_Toggled(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!isLoaded) return;
|
if (!isLoaded) return;
|
||||||
@@ -3960,6 +4147,40 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isTestChannel = newChannel == UpdateChannel.Preview || newChannel == UpdateChannel.Beta;
|
bool isTestChannel = newChannel == UpdateChannel.Preview || newChannel == UpdateChannel.Beta;
|
||||||
|
if (isTestChannel && !Settings.Startup.HasAcceptedTelemetryPrivacy)
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"加入预览 / 测试通道前,请先在关于页面勾选“我已阅读并同意 privacy 中的隐私说明”。",
|
||||||
|
"需要同意隐私说明",
|
||||||
|
MessageBoxButton.OK,
|
||||||
|
MessageBoxImage.Warning);
|
||||||
|
|
||||||
|
_isChangingUpdateChannelInternally = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Settings.Startup.UpdateChannel = oldChannel;
|
||||||
|
if (UpdateChannelSelector != null)
|
||||||
|
{
|
||||||
|
foreach (var item in UpdateChannelSelector.Items)
|
||||||
|
{
|
||||||
|
if (item is RadioButton rb && rb.Tag != null &&
|
||||||
|
string.Equals(rb.Tag.ToString(), oldChannel.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
rb.IsChecked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_isChangingUpdateChannelInternally = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogHelper.WriteLogToFile("Settings | User not accepted privacy, reverted update channel");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (isTestChannel && Settings.Startup.TelemetryUploadLevel == TelemetryUploadLevel.None)
|
if (isTestChannel && Settings.Startup.TelemetryUploadLevel == TelemetryUploadLevel.None)
|
||||||
{
|
{
|
||||||
var result = MessageBox.Show(
|
var result = MessageBox.Show(
|
||||||
|
|||||||
@@ -144,26 +144,34 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (ComboBoxTelemetryUploadLevel != null && Settings?.Startup != null)
|
if (Settings?.Startup != null)
|
||||||
{
|
{
|
||||||
int idx = 0;
|
if (ComboBoxTelemetryUploadLevel != null)
|
||||||
switch (Settings.Startup.TelemetryUploadLevel)
|
|
||||||
{
|
{
|
||||||
case TelemetryUploadLevel.None:
|
int idx = 0;
|
||||||
idx = 0;
|
switch (Settings.Startup.TelemetryUploadLevel)
|
||||||
break;
|
{
|
||||||
case TelemetryUploadLevel.Basic:
|
case TelemetryUploadLevel.None:
|
||||||
idx = 1;
|
idx = 0;
|
||||||
break;
|
break;
|
||||||
case TelemetryUploadLevel.Extended:
|
case TelemetryUploadLevel.Basic:
|
||||||
idx = 2;
|
idx = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
case TelemetryUploadLevel.Extended:
|
||||||
idx = 0;
|
idx = 2;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
idx = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
ComboBoxTelemetryUploadLevel.SelectedIndex = idx;
|
if (CheckBoxTelemetryPrivacyAccepted != null)
|
||||||
|
{
|
||||||
|
CheckBoxTelemetryPrivacyAccepted.IsChecked = Settings.Startup.HasAcceptedTelemetryPrivacy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|||||||
@@ -189,6 +189,8 @@ namespace Ink_Canvas
|
|||||||
public int CrashAction { get; set; }
|
public int CrashAction { get; set; }
|
||||||
[JsonProperty("telemetryUploadLevel")]
|
[JsonProperty("telemetryUploadLevel")]
|
||||||
public TelemetryUploadLevel TelemetryUploadLevel { get; set; } = TelemetryUploadLevel.None;
|
public TelemetryUploadLevel TelemetryUploadLevel { get; set; } = TelemetryUploadLevel.None;
|
||||||
|
[JsonProperty("hasAcceptedTelemetryPrivacy")]
|
||||||
|
public bool HasAcceptedTelemetryPrivacy { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Appearance
|
public class Appearance
|
||||||
|
|||||||
Reference in New Issue
Block a user