Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/add-notification-permission' int…
Browse files Browse the repository at this point in the history
…o #583-Release-Middleware1.3.66
  • Loading branch information
forsthug committed Dec 9, 2024
2 parents 087ace1 + b338725 commit 3ba7afc
Show file tree
Hide file tree
Showing 16 changed files with 722 additions and 425 deletions.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using fiskaltrust.AndroidLauncher.Common.Helpers;
using fiskaltrust.AndroidLauncher.Common.Helpers.Logging;
using Xamarin.Essentials;

Expand All @@ -23,6 +24,15 @@ protected override void OnCreate(Bundle savedInstanceState)

SetContentView(Resource.Layout.activity_main);

if (
!PowerManagerHelper.IsIgnoringBatteryOptimizations(this)
||
!NotificationPermissionHelper.IsAllowingNotifications(this)
)
{
StartActivity(typeof(IntroductionActivity));
}

Init();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using fiskaltrust.AndroidLauncher.Common.Constants;
using fiskaltrust.AndroidLauncher.Common.Helpers;
using Java.Interop;
using Microsoft.Extensions.Primitives;
using System.Linq;
using System.Threading;

namespace fiskaltrust.AndroidLauncher.Common.Activitites
{
[Activity(Label = "IntroductionActivity", Name = "eu.fiskaltrust.androidlauncher.common.IntroductionActivity", Exported = true)]
public class IntroductionActivity : Activity
{
private Bundle? _startIntent;
private string? _startIntentName;

protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_introduction);

FindViewById<Button>(Resource.Id.buttonRequestNotification).Enabled = !NotificationPermissionHelper.IsAllowingNotifications(this);

FindViewById<Button>(Resource.Id.buttonRequestBatteryOptimization).Enabled = !PowerManagerHelper.IsIgnoringBatteryOptimizations(this);
if (Intent.HasExtra("StartIntent"))
{
_startIntent = Intent.GetBundleExtra("StartIntent");
_startIntentName = Intent.GetStringExtra("StartIntentName");
}
}

[Export("buttonRequestNotificationOnCLick")]
public void ButtonRequestNotificationOnCLick(View v)
{
NotificationPermissionHelper.AskUserToAllowNotifications(this, 2);

}

[Export("buttonRequestBatteryOptimizationOnCLick")]
public void ButtonRequestBatteryOptimizationOnCLick(View v)
{
PowerManagerHelper.AskUserToDisableBatteryOptimization(this);
FindViewById<Button>(Resource.Id.buttonRequestBatteryOptimization).Enabled = !PowerManagerHelper.IsIgnoringBatteryOptimizations(this);
}

protected override void OnResume()
{
base.OnResume();
FindViewById<Button>(Resource.Id.buttonRequestBatteryOptimization).Enabled = !PowerManagerHelper.IsIgnoringBatteryOptimizations(this);
FindViewById<Button>(Resource.Id.buttonRequestNotification).Enabled = !NotificationPermissionHelper.IsAllowingNotifications(this);

TryContinue();
}

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok)
{
if (requestCode == 2)
{
FindViewById<Button>(Resource.Id.buttonRequestNotification).Enabled = !NotificationPermissionHelper.IsAllowingNotifications(this);
}
TryContinue();
}
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == Android.Content.PM.Permission.Denied)
{
FindViewById<Button>(Resource.Id.buttonRequestNotification).Enabled = !NotificationPermissionHelper.IsAllowingNotifications(this);
TryContinue();
}
}


private void TryContinue()
{
if (
PowerManagerHelper.IsIgnoringBatteryOptimizations(this)
&&
NotificationPermissionHelper.IsAllowingNotifications(this)
)
{
if (_startIntent is not null)
{
var startIntent = new Intent(Intent.ActionSend);
startIntent.SetComponent(new ComponentName(PackageName, _startIntentName));
startIntent.PutExtras(_startIntent);
SendBroadcast(startIntent);
}

SetResult(0);
Finish();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public static void Start<T>(string cashboxId, string accessToken, bool isSandbox
{
bundle.PutString(extra.Key, extra.Value.ToString());
}

Application.Context.StartForegroundServiceCompat<T>(bundle);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Support.V4.Content;
using Android.Support.V7.App;
using System;

namespace fiskaltrust.AndroidLauncher.Common.Helpers
{
public static class NotificationPermissionHelper
{
public static void AskUserToAllowNotifications(Activity activity, int requestCode)
{
if (!IsAllowingNotifications(activity.ApplicationContext))
{
activity.RequestPermissions(new[]{Android.Manifest.Permission.PostNotifications}, requestCode);
}
}

public static bool IsAllowingNotifications(Context context)
{
return context.CheckSelfPermission(Android.Manifest.Permission.PostNotifications) == Permission.Granted;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
using Android.Content;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Support.V4.Content;
using Android.Support.V7.App;
using fiskaltrust.AndroidLauncher.Common.Activitites;
using Org.BouncyCastle.Ocsp;

namespace fiskaltrust.AndroidLauncher.Common.Helpers
{
Expand All @@ -10,7 +16,7 @@ public static void AskUserToDisableBatteryOptimization(Context context)
string packageName = context.PackageName;
var pm = (PowerManager)Android.App.Application.Context.GetSystemService(Context.PowerService);

if (!pm.IsIgnoringBatteryOptimizations(packageName))
if (!IsIgnoringBatteryOptimizations(context))
{
var powerIntent = new Intent();
powerIntent.SetAction(Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations);
Expand All @@ -19,5 +25,13 @@ public static void AskUserToDisableBatteryOptimization(Context context)
context.StartActivity(powerIntent);
}
}

public static bool IsIgnoringBatteryOptimizations(Context context)
{
string packageName = context.PackageName;
var pm = (PowerManager)Android.App.Application.Context.GetSystemService(Context.PowerService);

return pm.IsIgnoringBatteryOptimizations(packageName);
}
}
}
Loading

0 comments on commit 3ba7afc

Please sign in to comment.