Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b4b37ad8e |
No files matched your search
@@ -111,6 +111,11 @@ The Android release key: alias `meweb`, certificate SHA-256
|
|||||||
properties; one nested property function left it unevaluated (`XA0003`).
|
properties; one nested property function left it unevaluated (`XA0003`).
|
||||||
- **A headless Avalonia session does not end on its own** while the pulse animation runs: the screenshot tool calls
|
- **A headless Avalonia session does not end on its own** while the pulse animation runs: the screenshot tool calls
|
||||||
`Environment.Exit(0)` after dispatching.
|
`Environment.Exit(0)` after dispatching.
|
||||||
|
- **Launchers and the Android 12 splash crop the icon to their own shape.** The launcher icon is the adaptive
|
||||||
|
`mipmap-anydpi-v26/icon.xml` (background colour, `drawable/icon_foreground.xml`, `drawable/icon_monochrome.xml` for
|
||||||
|
themed icons), and the splash uses the same foreground. Both vectors hold `branding/meweb.svg`'s drawing scaled into
|
||||||
|
the central 66 of 108 units around its smallest enclosing circle; a change to the drawing goes into all three files.
|
||||||
|
The plain `mipmap-xxxhdpi/icon.png` is only for Android 7.x.
|
||||||
- **The macOS apphost is ad-hoc signed by the .NET 10 SDK even on Linux** (`LC_CODE_SIGNATURE` present); Apple
|
- **The macOS apphost is ad-hoc signed by the .NET 10 SDK even on Linux** (`LC_CODE_SIGNATURE` present); Apple
|
||||||
Silicon refuses unsigned arm64 code, so never strip it.
|
Silicon refuses unsigned arm64 code, so never strip it.
|
||||||
- **The Windows single-file publish drops native `.pdb` files beside the exe**; only `meweb.exe` ships.
|
- **The Windows single-file publish drops native `.pdb` files beside the exe**; only `meweb.exe` ships.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>0.3.0</Version>
|
<Version>0.3.1</Version>
|
||||||
<Product>me-web?</Product>
|
<Product>me-web?</Product>
|
||||||
<Company>Arasaka di Hvozdikov Yevheniy</Company>
|
<Company>Arasaka di Hvozdikov Yevheniy</Company>
|
||||||
<Copyright>© 2026 Arasaka di Hvozdikov Yevheniy</Copyright>
|
<Copyright>© 2026 Arasaka di Hvozdikov Yevheniy</Copyright>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace MeWeb.Android;
|
|||||||
[Activity(
|
[Activity(
|
||||||
Label = "me-web?",
|
Label = "me-web?",
|
||||||
Theme = "@style/MeWebTheme.NoActionBar",
|
Theme = "@style/MeWebTheme.NoActionBar",
|
||||||
Icon = "@drawable/icon",
|
Icon = "@mipmap/icon",
|
||||||
MainLauncher = true,
|
MainLauncher = true,
|
||||||
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode | ConfigChanges.Locale | ConfigChanges.LayoutDirection)]
|
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode | ConfigChanges.Locale | ConfigChanges.LayoutDirection)]
|
||||||
public class MainActivity : AvaloniaMainActivity
|
public class MainActivity : AvaloniaMainActivity
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
||||||
<application android:label="me-web?" android:icon="@drawable/icon" android:supportsRtl="true" />
|
<application android:label="me-web?" android:icon="@mipmap/icon" android:supportsRtl="true" />
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp" android:height="108dp"
|
||||||
|
android:viewportWidth="108" android:viewportHeight="108">
|
||||||
|
<group android:scaleX="0.15136" android:scaleY="0.15136" android:translateX="14.908" android:translateY="12.875">
|
||||||
|
<path android:pathData="M110,300 L230,196 L350,300 L350,404 L110,404 Z"
|
||||||
|
android:fillColor="#2C222D" android:strokeColor="#F0EAEF" android:strokeWidth="18" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M208,320 L252,320 A8,8 0 0 1 260,328 L260,396 A8,8 0 0 1 252,404 L208,404 A8,8 0 0 1 200,396 L200,328 A8,8 0 0 1 208,320 Z"
|
||||||
|
android:fillColor="#E04A55" />
|
||||||
|
<path android:pathData="M330,170 A70,70 0 0 1 400,240"
|
||||||
|
android:strokeColor="#E04A55" android:strokeWidth="18" android:strokeLineCap="round" />
|
||||||
|
<path android:pathData="M330,116 A124,124 0 0 1 454,240"
|
||||||
|
android:strokeColor="#E04A55" android:strokeWidth="18" android:strokeLineCap="round" android:strokeAlpha="0.7" />
|
||||||
|
<path android:pathData="M312,240 A18,18 0 1 0 348,240 A18,18 0 1 0 312,240 Z"
|
||||||
|
android:fillColor="#E04A55" />
|
||||||
|
</group>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp" android:height="108dp"
|
||||||
|
android:viewportWidth="108" android:viewportHeight="108">
|
||||||
|
<group android:scaleX="0.15136" android:scaleY="0.15136" android:translateX="14.908" android:translateY="12.875">
|
||||||
|
<path android:pathData="M110,300 L230,196 L350,300 L350,404 L110,404 Z"
|
||||||
|
android:strokeColor="#FFFFFF" android:strokeWidth="18" android:strokeLineJoin="round" />
|
||||||
|
<path android:pathData="M208,320 L252,320 A8,8 0 0 1 260,328 L260,396 A8,8 0 0 1 252,404 L208,404 A8,8 0 0 1 200,396 L200,328 A8,8 0 0 1 208,320 Z"
|
||||||
|
android:fillColor="#FFFFFF" />
|
||||||
|
<path android:pathData="M330,170 A70,70 0 0 1 400,240"
|
||||||
|
android:strokeColor="#FFFFFF" android:strokeWidth="18" android:strokeLineCap="round" />
|
||||||
|
<path android:pathData="M330,116 A124,124 0 0 1 454,240"
|
||||||
|
android:strokeColor="#FFFFFF" android:strokeWidth="18" android:strokeLineCap="round" />
|
||||||
|
<path android:pathData="M312,240 A18,18 0 1 0 348,240 A18,18 0 1 0 312,240 Z"
|
||||||
|
android:fillColor="#FFFFFF" />
|
||||||
|
</group>
|
||||||
|
</vector>
|
||||||
@@ -3,5 +3,5 @@
|
|||||||
<item>
|
<item>
|
||||||
<color android:color="@color/splash_background" />
|
<color android:color="@color/splash_background" />
|
||||||
</item>
|
</item>
|
||||||
<item android:drawable="@drawable/icon" android:width="120dp" android:height="120dp" android:gravity="center" />
|
<item android:drawable="@drawable/icon_foreground" android:width="180dp" android:height="180dp" android:gravity="center" />
|
||||||
</layer-list>
|
</layer-list>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/icon_background" />
|
||||||
|
<foreground android:drawable="@drawable/icon_foreground" />
|
||||||
|
<monochrome android:drawable="@drawable/icon_monochrome" />
|
||||||
|
</adaptive-icon>
|
||||||
File renamed without changes.
@@ -6,7 +6,7 @@
|
|||||||
<item name="android:windowBackground">@null</item>
|
<item name="android:windowBackground">@null</item>
|
||||||
<item name="android:windowNoTitle">true</item>
|
<item name="android:windowNoTitle">true</item>
|
||||||
<item name="android:windowSplashScreenBackground">@color/splash_background</item>
|
<item name="android:windowSplashScreenBackground">@color/splash_background</item>
|
||||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/icon</item>
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/icon_foreground</item>
|
||||||
<item name="postSplashScreenTheme">@style/MeWebTheme.Main</item>
|
<item name="postSplashScreenTheme">@style/MeWebTheme.Main</item>
|
||||||
</style>
|
</style>
|
||||||
<style name="MeWebTheme.Main" parent="MeWebTheme.NoActionBar">
|
<style name="MeWebTheme.Main" parent="MeWebTheme.NoActionBar">
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="splash_background">#1B141C</color>
|
<color name="splash_background">#1B141C</color>
|
||||||
|
<color name="icon_background">#1B141C</color>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -77,9 +77,11 @@ public partial class MainViewModel : ObservableObject
|
|||||||
public partial bool AskReach { get; set; }
|
public partial bool AskReach { get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedFor(nameof(ShowShareOffer))]
|
||||||
public partial bool IsReaching { get; set; }
|
public partial bool IsReaching { get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedFor(nameof(ShowShareOffer))]
|
||||||
public partial bool OfferShare { get; set; }
|
public partial bool OfferShare { get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
@@ -100,6 +102,7 @@ public partial class MainViewModel : ObservableObject
|
|||||||
|
|
||||||
public bool CanOpenPorts => lastRun?.Router?.AnyAnswer == true && lastRun.PublicV4 is not null && lastRun.Local?.LocalV4 is not null;
|
public bool CanOpenPorts => lastRun?.Router?.AnyAnswer == true && lastRun.PublicV4 is not null && lastRun.Local?.LocalV4 is not null;
|
||||||
public bool ShowShareResult => ShareResult is not null;
|
public bool ShowShareResult => ShareResult is not null;
|
||||||
|
public bool ShowShareOffer => OfferShare && !IsReaching;
|
||||||
public bool ShowShared => Shared.Count > 0;
|
public bool ShowShared => Shared.Count > 0;
|
||||||
|
|
||||||
public IReadOnlyList<Language> Languages { get; } = Services.Languages.All;
|
public IReadOnlyList<Language> Languages { get; } = Services.Languages.All;
|
||||||
@@ -203,6 +206,7 @@ public partial class MainViewModel : ObservableObject
|
|||||||
{
|
{
|
||||||
lastRun = await runner.Run((finding, run) => Dispatcher.UIThread.Post(() => Apply(finding, run)), ct);
|
lastRun = await runner.Run((finding, run) => Dispatcher.UIThread.Post(() => Apply(finding, run)), ct);
|
||||||
ShowUses(lastRun);
|
ShowUses(lastRun);
|
||||||
|
OfferShare = true;
|
||||||
OnPropertyChanged(nameof(CanOpenPorts));
|
OnPropertyChanged(nameof(CanOpenPorts));
|
||||||
AskReach = lastRun.PublicV4 is not null || lastRun.PublicV6 is not null;
|
AskReach = lastRun.PublicV4 is not null || lastRun.PublicV6 is not null;
|
||||||
if (!AskReach) SettleReach(null);
|
if (!AskReach) SettleReach(null);
|
||||||
@@ -253,7 +257,6 @@ public partial class MainViewModel : ObservableObject
|
|||||||
Cards.First(c => c.Id == CheckId.Reach).Finding = finding;
|
Cards.First(c => c.Id == CheckId.Reach).Finding = finding;
|
||||||
lastRun.Uses = Core.Checks.Uses.Decide(lastRun);
|
lastRun.Uses = Core.Checks.Uses.Decide(lastRun);
|
||||||
ShowUses(lastRun);
|
ShowUses(lastRun);
|
||||||
OfferShare = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowUses(RunReport run)
|
void ShowUses(RunReport run)
|
||||||
@@ -336,6 +339,7 @@ public partial class MainViewModel : ObservableObject
|
|||||||
instant = false;
|
instant = false;
|
||||||
OnPropertyChanged(nameof(CanOpenPorts));
|
OnPropertyChanged(nameof(CanOpenPorts));
|
||||||
AskReach = run.Reach is null;
|
AskReach = run.Reach is null;
|
||||||
|
OfferShare = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
|
|||||||
@@ -250,7 +250,7 @@
|
|||||||
</ItemsControl>
|
</ItemsControl>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<Border Classes="consent" IsVisible="{Binding OfferShare}" MaxWidth="760">
|
<Border Classes="consent" IsVisible="{Binding ShowShareOffer}" MaxWidth="760">
|
||||||
<StackPanel Spacing="12">
|
<StackPanel Spacing="12">
|
||||||
<TextBlock Classes="section" Margin="0" Text="{s:Tr ShareOfferTitle}" />
|
<TextBlock Classes="section" Margin="0" Text="{s:Tr ShareOfferTitle}" />
|
||||||
<TextBlock Classes="body" Text="{s:Tr ShareOfferBody}" />
|
<TextBlock Classes="body" Text="{s:Tr ShareOfferBody}" />
|
||||||
|
|||||||
Reference in new issue
Block a user