Code Monkey home page Code Monkey logo

plugin.maui.screensecurity's Introduction

Sofware developer header

Hi πŸ‘‹, I'm Fabricio Bertani

Experienced back-end and mobile app developer for 6+ years, specializing in .Net, Android, Xamarin, and Flutter. Adaptable and committed to delivering top-quality software. πŸ‘¨β€πŸ’»

fabribertani

  • πŸ“ I regularly write articles on Medium Badge
  • πŸ˜„ Pronouns: he/him/his.
  • πŸ’¬ Ask me about anything, I am happy to help.
  • ⚑ Fun fact: I can hold my breath for ten minutes πŸ’πŸοΈ

You can reach me at :

fabricio-bertani email 7432494 fabribertani fabribertani

πŸ“ˆ My GitHub Stats:

fabribertani fabribertani

fabribertani

πŸ“– Blogs posts

Or support:

fabribertani

plugin.maui.screensecurity's People

Contributors

fabribertani avatar gogzs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

plugin.maui.screensecurity's Issues

Android Emulator - Take screenshot (ctrl+s) is still capturing the screen.

I've added the following code to an OnAppearing method:

    protected override void OnAppearing()
    {
        base.OnAppearing();

#if ANDROID
ScreenSecurity.Default.ActivateScreenSecurityProtection();
#elif IOS
var screenProtectionOptions = new ScreenProtectionOptions
{
HexColor = "#6C4675",
PreventScreenshot = true,
PreventScreenRecording = true
};

        ScreenSecurity.Default.ActivateScreenSecurityProtection(screenProtectionOptions);

#endif
}

But when I run the code through an Android emulator, a screen shot (ctrl+s) is still being captured!

I'm using:
Windows 11 Home.
Microsoft Visual Studio Professional 2022 (64-bit) - Current Version 17.8.5.
Android 14.0 - API 34.
Android Emulator - Pixel 5.

Thank you in advance for your help.

Kind regards,

Darren

not working after FilePicker.Default.PickAsync

hi, i have an issue

ScreenSecurity.Default.ActivateScreenSecurityProtection();
var result = await FilePicker.Default.PickAsync(options);

this code works for me.

but

var result = await FilePicker.Default.PickAsync(options);
ScreenSecurity.Default.ActivateScreenSecurityProtection();

screen security will not activate after await FilePicker.Default.PickAsync.

can u help me?
everything is ok on windows. my problem is on android

i want to activate screen security on some file types not for all of them.

Add net6.0/net7.0 targets

The architecture of my app looks like this: maui app (android/ios) -> UI library -> Core library

  • maui app project holds the platform specific code (required to start the app)
  • UI library holds the UI code (pages, views)
  • Core library holds the business logic code (view models, services, models...)

Now that this plugin has a unified API, I'd like to call it from my Core library, which is pure net7.0.
However, the current build targets of this plugin only allows it to be called from platform specific code.

So, could you please add net6.0/net7.0 targets?

Thanks

iOS 17 screen blur but screenshots allowed - not fixed after update to 1.1.6

See details:
https://github.com/denhaandrei/iOSDisableScreenshot

        public AppShell()
        {
            InitializeComponent();
            Navigating += Current_Navigating;
            Navigated += AppShell_Navigated;
        }

        private static bool isSecure = false;
        private void Current_Navigating(object sender, ShellNavigatingEventArgs e)
        {
            var str = e.Target.Location.OriginalString;
            if (!isSecure && isSecurityPage(str))
            {
                isSecure = true;
                ScreenSecurity.Default.ActivateScreenSecurityProtection(true, true, true);
            }
        }

        private void AppShell_Navigated(object sender, ShellNavigatedEventArgs e)
        {
            var currentPath = GetCurrentPath();

            if (isSecure && !string.IsNullOrWhiteSpace(currentPath) &&
                !isSecurityPage(currentPath))
            {
                isSecure = false;
                ScreenSecurity.Default.DeactivateScreenSecurityProtection();
            }
        }

        private bool isSecurityPage(string currentPath)
        {
            return currentPath.EndsWith(nameof(DScreenshot));
        }

AppShell:
Current_Navigating - disable screenshots on some pages
AppShell_Navigated - enable screenshots

Blur works as expected but screenshots are always allowed on iOS 17

Details:

Xamarin.PreBuilt.iOS[2423:1841789] Exception Stacktrace:    at Foundation.NSObject.InitializeHandle(NativeHandle handle, String initSelector) in /Users/builder/azdo/_work/1/s/xamarin-macios/src/Foundation/NSObject2.cs:line 661
Xamarin.PreBuilt.iOS[2423:1841789]    at UIKit.UIImage..ctor(String filename) in /Users/builder/azdo/_work/1/s/xamarin-macios/src/build/dotnet/ios/generated-sources/UIKit/UIImage.g.cs:line 106
   at Plugin.Maui.ScreenSecurity.Platforms.iOS.ScreenshotProtectionManager.<>c__DisplayClass4_0.<SetScreenshotProtection>b__0()

Xamarin.PreBuilt.iOS[2423:1841789] SetScreenshotProtection failed with Exception message: Could not initialize an instance of the type 'UIKit.UIImage': the native 'initWithContentsOfFile:' method returned nil.
Xamarin.PreBuilt.iOS[2423:1841789] It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

.Net MAUI Blazor

Hi! I have tried implementing this plugin in my .net MAUI Blazor App, but it doesnt seem to work! Is this plugin enabled for Blazor, or not?

Exception: Only the original thread that created a view hierarchy can touch its views

Here is an exception I get sometimes on android:

EnableScreenSecurityProtection failed with Exception message: Only the original thread that created a view hierarchy can touch its views.
Exception Stacktrace:    at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference , JniMethodInfo , JniArgumentValue* )
   at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String , IJavaPeerable , JniArgumentValue* )
   at Android.Views.Window.SetFlags(WindowManagerFlags , WindowManagerFlags )
   at Plugin.Maui.ScreenSecurity.ScreenSecurityImplementation.EnableScreenSecurityProtection()
  --- End of managed Java.Lang.RuntimeException stack trace ---
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8384)
	at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1476)
	at android.view.View.requestLayout(View.java:24528)
	at android.view.View.setLayoutParams(View.java:17308)
	at android.view.WindowManagerGlobal.updateViewLayout(WindowManagerGlobal.java:452)
	at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:103)
	at android.app.Activity.onWindowAttributesChanged(Activity.java:3869)
	at androidx.appcompat.view.WindowCallbackWrapper.onWindowAttributesChanged(WindowCallbackWrapper.java:115)
	at android.view.Window.dispatchWindowAttributesChanged(Window.java:1172)
	at com.android.internal.policy.PhoneWindow.dispatchWindowAttributesChanged(PhoneWindow.java:3027)
	at android.view.Window.setFlags(Window.java:1148)

Could you please take a look?
Thanks

[iOS] Screenshot

Hello @FabriBertani

Thanks for this handy tool however, it seems like this tool doesn't or cannot protect against the User taking a Screenshot as I have been able to take multiple Screenshots and I also looked at perhaps I missed something in a Code. I saw this tool on @jfversluis video on YouTube.

Screenshot/screen sharing detection

I had a thought that could potentially be applicable to this plugin. Instead of preventing screenshots/recording, could it be possible to detect when a user has taken such actions? On iOS, preventing screenshots/recording is quite difficult, but is detection comparatively easier? What about Android?

Being able to detect screenshots/recording and issue a warning to users (or notify the backend system if it's a very serious application that users should not be screenshotting) may be more effective. If users are blocked from taking screenshots, there are still ways to bypass the restriction (e.g. using another device to capture the screen). However, if users receive a warning about violating the terms of service, it may discourage them more effectively.

I thought I'd start a discussion on this topic :)

Use MAUI events

Hi,
I think it would be nice to be able to call this plugin when configuring MAUI app events (MauiAppBuilder.ConfigureLifecycleEvents).
The problem is that iOS methods are already using events, and private methods are (by definition) not accessible.
Maybe there is something I'm not doing correctly?
Thanks

public static MauiAppBuilder ConfigureMaui(this MauiAppBuilder builder)
{
    builder.ConfigureLifecycleEvents(events =>
    {
        events.AddiOS(iOS => iOS.DidEnterBackground(app =>
        {
            ScreenSecurity.Default.EnableBlurScreen(ThemeStyle.Light); // EnableBlurScreen is private
        }));
        events.AddiOS(iOS => iOS.WillEnterForeground(app =>
        {
            ScreenSecurity.Default.DisableBlurScreen(); // DisableBlurScreen is private
        }));
    });
    return builder;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.