Skip to content

Commit

Permalink
General Maintence
Browse files Browse the repository at this point in the history
- Fix Google Drive
- Remove Zippyshare 👼
- Fix URL validator bug
- Fix a certain message
- Fix Multi Package Menu Item List
- Fix Decompressor Issues
- Fix Android Bugs
- Show Single Welcome message in Android
- Upgrade HtmlAgilityPack
- Upgrade SimpleHttpServer
- Upgrade Javascript Engine
- Upgrade Decompressor
- Upgrade Avalonia
  • Loading branch information
marcussacana committed Feb 20, 2024
1 parent ce01c3d commit e490c4c
Show file tree
Hide file tree
Showing 36 changed files with 490 additions and 490 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
<DebugSymbols>True</DebugSymbols>
<DebugType>portable</DebugType>
<AndroidLinkMode>none</AndroidLinkMode>
<DebugType>pdbonly</DebugType>
<RunAOTCompilation>False</RunAOTCompilation>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
</PropertyGroup>
Expand All @@ -39,9 +38,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.5.1.1" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="2.5.1.1" />
<PackageReference Include="Avalonia.Android" Version="11.0.0-preview4" />
<PackageReference Include="Avalonia.Android" Version="11.0.9" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.9" />
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.5" />
</ItemGroup>

<ItemGroup>
Expand Down
103 changes: 86 additions & 17 deletions DirectPackageInstaller/DirectPackageInstaller.Android/MainActivity.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using Android;
using Android.App;
Expand All @@ -9,40 +8,55 @@
using Android.Net;
using Android.Net.Wifi;
using Android.OS;
using Android.Views;
using AndroidX.Core.App;
using AndroidX.Core.Content;
using Avalonia.Android;
using Avalonia;
using Avalonia.ReactiveUI;
using Java.Lang;
using Application = Android.App.Application;
using File = Java.IO.File;
using System.Linq;
using Android.Runtime;

[assembly: Application(UsesCleartextTraffic = true)]

namespace DirectPackageInstaller.Android
{
[Activity(Label = "DirectPackageInstaller.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon",
LaunchMode = LaunchMode.SingleTop,
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)]
public class MainActivity : AvaloniaMainActivity
[Activity(Label = "DirectPackageInstaller.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
public class MainActivity : AvaloniaMainActivity<App>
{
public static int Instances = 0;
public ClipboardManager? ClipboardManager;

protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
{
return base.CustomizeAppBuilder(builder)
.WithInterFont()
.UseReactiveUI();
}

protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);

if (Instances == 0)
if (Instances++ == 0)
{
ActivityCompat.RequestPermissions(this, new []{
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.WriteExternalStorage,
Manifest.Permission.ManageExternalStorage
},
1
);

SetupEnv();

var Permissions = new[] {
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.WriteExternalStorage,
Manifest.Permission.ManageExternalStorage
};

var MissingPermissions = Permissions.Where(x => CheckSelfPermission(x) != Permission.Granted);

if (MissingPermissions.Any())
RequestPermissions(MissingPermissions.ToArray(), 1);

await IgnoreBatteryOptimizations();

App.InstallApk = (Path) =>
{
var Install = new Intent(Intent.ActionView);
Expand All @@ -53,10 +67,65 @@ protected override async void OnCreate(Bundle savedInstanceState)
};

ForegroundService.StartService(this, null);
}
}

await IgnoreBatteryOptimizations();
private void SetupEnv()
{
ClipboardManager = (ClipboardManager)GetSystemService(ClipboardService);

App.GetClipboardText = () =>
{
var PrimaryClip = ClipboardManager.PrimaryClip;
if (PrimaryClip.ItemCount != 1)
return null;
var ClipItem = PrimaryClip.GetItemAt(0);
return ClipItem.CoerceToText(null);
};

var CacheDirs = Application.GetExternalCacheDirs();

var ExtCacheDir = CacheDirs?.First() ?? Application.CacheDir;
var SDCardDir = CacheDirs?.Length > 1 ? CacheDirs.Skip(1).MaxBy(x => x.FreeSpace) : null;

var BaseDir = Application.GetExternalFilesDir(null);

App._IsAndroid = true;
App._WorkingDir = BaseDir?.AbsolutePath;
App.AndroidCacheDir = ExtCacheDir?.AbsolutePath;
App.AndroidSDCacheDir = SDCardDir?.AbsolutePath;
App.GetRootDirPermission = () => GetStorageAccess();
App.AndroidRootInternalDir = Environment.ExternalStorageDirectory?.AbsolutePath;
//App.GetFreeStorageSpace = () => BaseDir.UsableSpace;

if (string.IsNullOrWhiteSpace(App.AndroidCacheDir))
throw new FileNotFoundException("Failed to find the cache directory");

TempHelper.Clear();
}

public async Task GetStorageAccess()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
{
if (!Environment.IsExternalStorageManager)
{
try
{

Uri? uri = Uri.Parse("package:" + PackageName);
Intent intent = new Intent(global::Android.Provider.Settings.ActionManageAppAllFilesAccessPermission, uri);
await StartActivityAndWait(intent);
}
catch (Exception ex)
{
Intent intent = new Intent();
intent.SetAction(global::Android.Provider.Settings.ActionManageAppAllFilesAccessPermission);
await StartActivityAndWait(intent);
}
}
}
Instances++;
}

private Dictionary<int, TaskCompletionSource> Tasks = new();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.marcussacana.DirectPackageInstaller">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Expand All @@ -10,10 +10,10 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application android:label="DirectPackageInstaller" android:icon="@drawable/Icon" android:requestLegacyExternalStorage="true">
<application android:label="DirectPackageInstaller" android:icon="@drawable/icon" android:requestLegacyExternalStorage="true">
<provider android:name="androidx.core.content.FileProvider" android:authorities="com.marcussacana.DirectPackageInstaller.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_path" />
</provider>
</application>
<uses-sdk android:minSdkVersion="23" />
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="31" />
</manifest>

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview4" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.9" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview4" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.9" />
<PackageReference Condition="'$(Configuration)' != 'Debug'" Include="Costura.Fody" Version="5.7.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
9 changes: 5 additions & 4 deletions DirectPackageInstaller/DirectPackageInstaller/App.axaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:DirectPackageInstaller"
x:Class="DirectPackageInstaller.App">
x:Class="DirectPackageInstaller.App"
RequestedThemeVariant="Dark">

<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>

<Application.Styles>
<FluentTheme Mode="Dark"/>
<Application.Styles>
<FluentTheme/>
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
</Application.Styles>
</Application.Styles>
</Application>
31 changes: 4 additions & 27 deletions DirectPackageInstaller/DirectPackageInstaller/App.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ public static string WorkingDirectory
return new DriveInfo(CacheBaseDirectory ?? WorkingDirectory).AvailableFreeSpace;
};

public static Action GetRootDirPermission;
public static Func<Task>? GetRootDirPermission;
public static string RootDir
{
get
Expand All @@ -286,7 +286,7 @@ public static string RootDir

if (IsAndroid)
return (UseSDCard ? AndroidRootSDDir : AndroidRootInternalDir) ?? throw new Exception();

return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
}
}
Expand All @@ -296,9 +296,7 @@ public static string? AndroidRootSDDir
get
{
if (IsAndroid)
{
GetRootDirPermission?.Invoke();

{
var Parent = Path.GetDirectoryName(AndroidSDCacheDir);
Parent = Path.GetDirectoryName(Parent);
Parent = Path.GetDirectoryName(Parent);
Expand All @@ -313,28 +311,7 @@ public static string? AndroidRootSDDir
return null;
}
}
public static string? AndroidRootInternalDir
{
get
{
if (IsAndroid)
{
GetRootDirPermission?.Invoke();

var Parent = Path.GetDirectoryName(AndroidCacheDir);
Parent = Path.GetDirectoryName(Parent);
Parent = Path.GetDirectoryName(Parent);
Parent = Path.GetDirectoryName(Parent);

if (Parent != null && !Parent.EndsWith("/") && !Parent.EndsWith("\\"))
Parent += Path.DirectorySeparatorChar;

return Parent;
}

return null;
}
}
public static string? AndroidRootInternalDir { get; set; }

internal static string SettingsPath => Path.Combine(WorkingDirectory, "Settings.ini");

Expand Down
Loading

0 comments on commit e490c4c

Please sign in to comment.