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`).
|
||||
- **A headless Avalonia session does not end on its own** while the pulse animation runs: the screenshot tool calls
|
||||
`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
|
||||
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.
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>0.3.0</Version>
|
||||
<Version>0.3.1</Version>
|
||||
<Product>me-web?</Product>
|
||||
<Company>Arasaka di Hvozdikov Yevheniy</Company>
|
||||
<Copyright>© 2026 Arasaka di Hvozdikov Yevheniy</Copyright>
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace MeWeb.Android;
|
||||
[Activity(
|
||||
Label = "me-web?",
|
||||
Theme = "@style/MeWebTheme.NoActionBar",
|
||||
Icon = "@drawable/icon",
|
||||
Icon = "@mipmap/icon",
|
||||
MainLauncher = true,
|
||||
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode | ConfigChanges.Locale | ConfigChanges.LayoutDirection)]
|
||||
public class MainActivity : AvaloniaMainActivity
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_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>
|
||||
@@ -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>
|
||||
<color android:color="@color/splash_background" />
|
||||
</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>
|
||||
@@ -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:windowNoTitle">true</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>
|
||||
</style>
|
||||
<style name="MeWebTheme.Main" parent="MeWebTheme.NoActionBar">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="splash_background">#1B141C</color>
|
||||
<color name="icon_background">#1B141C</color>
|
||||
</resources>
|
||||
@@ -77,9 +77,11 @@ public partial class MainViewModel : ObservableObject
|
||||
public partial bool AskReach { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowShareOffer))]
|
||||
public partial bool IsReaching { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(ShowShareOffer))]
|
||||
public partial bool OfferShare { get; set; }
|
||||
|
||||
[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 ShowShareResult => ShareResult is not null;
|
||||
public bool ShowShareOffer => OfferShare && !IsReaching;
|
||||
public bool ShowShared => Shared.Count > 0;
|
||||
|
||||
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);
|
||||
ShowUses(lastRun);
|
||||
OfferShare = true;
|
||||
OnPropertyChanged(nameof(CanOpenPorts));
|
||||
AskReach = lastRun.PublicV4 is not null || lastRun.PublicV6 is not null;
|
||||
if (!AskReach) SettleReach(null);
|
||||
@@ -253,7 +257,6 @@ public partial class MainViewModel : ObservableObject
|
||||
Cards.First(c => c.Id == CheckId.Reach).Finding = finding;
|
||||
lastRun.Uses = Core.Checks.Uses.Decide(lastRun);
|
||||
ShowUses(lastRun);
|
||||
OfferShare = true;
|
||||
}
|
||||
|
||||
void ShowUses(RunReport run)
|
||||
@@ -336,6 +339,7 @@ public partial class MainViewModel : ObservableObject
|
||||
instant = false;
|
||||
OnPropertyChanged(nameof(CanOpenPorts));
|
||||
AskReach = run.Reach is null;
|
||||
OfferShare = true;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
|
||||
<Border Classes="consent" IsVisible="{Binding OfferShare}" MaxWidth="760">
|
||||
<Border Classes="consent" IsVisible="{Binding ShowShareOffer}" MaxWidth="760">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="section" Margin="0" Text="{s:Tr ShareOfferTitle}" />
|
||||
<TextBlock Classes="body" Text="{s:Tr ShareOfferBody}" />
|
||||
|
||||
Reference in new issue
Block a user