Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion InvisibleMan-XRay/Factories/WindowFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ public MainWindow CreateMainWindow()
UpdateHandler updateHandler = handlersManager.GetHandler<UpdateHandler>();
BroadcastHandler broadcastHandler = handlersManager.GetHandler<BroadcastHandler>();
SettingsHandler settingsHandler = handlersManager.GetHandler<SettingsHandler>();
NotifyHandler notifyHandler = handlersManager.GetHandler<NotifyHandler>();
LinkHandler linkHandler = handlersManager.GetHandler<LinkHandler>();

MainWindow mainWindow = new MainWindow();
mainWindow.Setup(
isNeedToShowPolicyWindow: IsNeedToShowPolicyWindow,
shouldStartHidden: ShouldStartHidden,
isNeedToAutoConnect: IsNeedToAutoConnect,
getMode: settingsHandler.UserSettings.GetMode,
getConfig: configHandler.GetCurrentConfig,
loadConfig: core.LoadConfig,
enableMode: core.EnableMode,
Expand All @@ -54,7 +56,8 @@ public MainWindow CreateMainWindow()
onGenerateClientId: settingsHandler.GenerateClientId,
onGitHubClick: linkHandler.OpenGitHubRepositoryLink,
onBugReportingClick: linkHandler.OpenBugReportingLink,
onCustomLinkClick: linkHandler.OpenCustomLink
onCustomLinkClick: linkHandler.OpenCustomLink,
setIndicator: notifyHandler.SetIndicator
);

return mainWindow;
Expand Down
42 changes: 42 additions & 0 deletions InvisibleMan-XRay/Handlers/NotifyHandler.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Collections.Generic;

Expand All @@ -14,6 +15,7 @@ namespace InvisibleManXRay.Handlers
public class NotifyHandler : Handler, IDisposable
{
private NotifyIcon notifyIcon;
private Icon baseIcon;

private Func<Mode> getMode;
private Action onOpenClick;
Expand Down Expand Up @@ -61,6 +63,7 @@ public void InitializeNotifyIcon()

notifyIcon = new NotifyIcon();
notifyIcon.Icon = GetNotifyIcon();
baseIcon = notifyIcon.Icon;
notifyIcon.Visible = true;

HandleNotifyIconClick();
Expand Down Expand Up @@ -183,6 +186,45 @@ private void CheckItem(ToolStripMenuItem item)
item.Checked = true;
}

public void SetIndicator(Mode? mode)
{
if (notifyIcon == null || baseIcon == null)
return;

if (mode == null)
{
notifyIcon.Icon = baseIcon;
return;
}

Color color = mode == Mode.TUN ? Color.Red : Color.Blue;
notifyIcon.Icon = CreateIndicatorIcon(color);
}
private Icon CreateIndicatorIcon(Color color)
{
using (Bitmap bmp = baseIcon.ToBitmap())
using (Graphics g = Graphics.FromImage(bmp))
using (Brush brush = new SolidBrush(color))
using (Pen outline = new Pen(Color.White, 1))
{
int size = bmp.Width / 3 + 2;
int x = bmp.Width - size - 1;
int y = bmp.Height - size - 1;

g.SmoothingMode = SmoothingMode.AntiAlias;
g.FillEllipse(brush, x, y, size, size);
g.DrawEllipse(outline, x, y, size, size);

IntPtr hIcon = bmp.GetHicon();
Icon icon = (Icon)Icon.FromHandle(hIcon).Clone();
DestroyIcon(hIcon);
return icon;

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool DestroyIcon(IntPtr handle);
}
}

public void Dispose()
{
notifyIcon?.Dispose();
Expand Down
14 changes: 13 additions & 1 deletion InvisibleMan-XRay/Windows/MainWindow/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public partial class MainWindow : Window
private Func<UpdateWindow> openUpdateWindow;
private Func<AboutWindow> openAboutWindow;
private Func<PolicyWindow> openPolicyWindow;
private Func<Mode> getMode;
private Action<string> onRunServer;
private Action onCancelServer;
private Action onStopServer;
Expand All @@ -35,6 +36,7 @@ public partial class MainWindow : Window
private Action onGitHubClick;
private Action onBugReportingClick;
private Action<string> onCustomLinkClick;
private Action<Mode?> setIndicator;

private BackgroundWorker runWorker;
private BackgroundWorker updateWorker;
Expand Down Expand Up @@ -216,6 +218,7 @@ public void Setup(
Func<bool> isNeedToShowPolicyWindow,
Func<bool> shouldStartHidden,
Func<bool> isNeedToAutoConnect,
Func<Mode> getMode,
Func<Config> getConfig,
Func<Status> loadConfig,
Func<Status> enableMode,
Expand All @@ -233,11 +236,13 @@ public void Setup(
Action onGenerateClientId,
Action onGitHubClick,
Action onBugReportingClick,
Action<string> onCustomLinkClick)
Action<string> onCustomLinkClick,
Action<Mode?> setIndicator)
{
this.isNeedToShowPolicyWindow = isNeedToShowPolicyWindow;
this.shouldStartHidden = shouldStartHidden;
this.isNeedToAutoConnect = isNeedToAutoConnect;
this.getMode = getMode;
this.getConfig = getConfig;
this.loadConfig = loadConfig;
this.checkForUpdate = checkForUpdate;
Expand All @@ -256,6 +261,7 @@ public void Setup(
this.onGitHubClick = onGitHubClick;
this.onBugReportingClick = onBugReportingClick;
this.onCustomLinkClick = onCustomLinkClick;
this.setIndicator = setIndicator;

UpdateUI();
}
Expand Down Expand Up @@ -430,6 +436,8 @@ private void ShowRunStatus()
statusStop.Visibility = Visibility.Hidden;
statusWaitForRun.Visibility = Visibility.Hidden;

setIndicator?.Invoke(getMode?.Invoke());

buttonStop.Visibility = Visibility.Visible;
buttonCancel.Visibility = Visibility.Hidden;
buttonRun.Visibility = Visibility.Hidden;
Expand All @@ -441,6 +449,8 @@ private void ShowStopStatus()
statusRun.Visibility = Visibility.Hidden;
statusWaitForRun.Visibility = Visibility.Hidden;

setIndicator?.Invoke(null);

buttonRun.Visibility = Visibility.Visible;
buttonCancel.Visibility = Visibility.Hidden;
buttonStop.Visibility = Visibility.Hidden;
Expand All @@ -452,6 +462,8 @@ private void ShowWaitForRunStatus()
statusStop.Visibility = Visibility.Hidden;
statusRun.Visibility = Visibility.Hidden;

setIndicator?.Invoke(null);

buttonCancel.Visibility = Visibility.Visible;
buttonRun.Visibility = Visibility.Hidden;
buttonStop.Visibility = Visibility.Hidden;
Expand Down