me-web? 0.3.1: sharing offered when the check ends; an Android icon that fits
- The offer to share the findings appeared only after the "test from outside?" question was answered, so scrolling past it meant no offer at all. It now appears as soon as the check ends (hidden only while the outside test runs), and a payload built later still carries the outside test's result. - Android gets an adaptive launcher icon: the drawing as a vector inside the 66-unit safe zone over the background colour, plus a monochrome layer for themed icons. The splash screen uses the same vector, so it is neither cut by the circle nor blurred from a 192-pixel picture. The PNG stays for Android 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
1 parent
37752f9f07
commit
4b4b37ad8e
13 files changed
+57
-7
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