Implementing platform functionality in a static class - Xamarin.Forms

Viewed 43

I am not sure of the terminology for what I'm looking to do, so sorry in advance!

I've found a FilePicker plugin for Xamarin.Forms (https://github.com/Studyxnet/FilePicker-Plugin-for-Xamarin-and-Windows) that implements device-specific functionality for selecting files via the CrossFilePicker class. The way to use leverage this functionality would be something like CrossFilePicker.Current.OpenFile("Filename.txt");

The most important part of this for me is that CrossFilePicker.Current is static and can be accessible from anywhere in the shared layer of my Xamarin.Forms app.

I need to implement a class with the same characteristics. I want to leverage device Accessibility functionality (i.e. determining if a screen reader is enabled) and I need to be able to do so with a static class. My eventual plan is to then wrap this static class so that I can use it for unit tests too.

I don't want to import device libraries into my shared project.

TLDR: I need a static class that implements device-specific functionality.

Any help would be greatly appreciated! Thank you :)

EDIT:

Here are the files I have currently implemented in my project

IAccessibilityService Located in the shared .NET project

namespace Bitspace.Services
{
    public interface IAccessibilityService
    {
        public bool IsScreenReaderEnabled();

        public void Announcement(string message);

        public void NavigationAnnouncement(string message);
    }
}

DeviceAccessibility.cs Located in the shared .NET project

using System;

namespace Bitspace.Services
{
    public class DeviceAccessibility
    {
        private static Lazy<IAccessibilityService> Implementation = new Lazy<IAccessibilityService>(() => CreateAccessibilityService(), System.Threading.LazyThreadSafetyMode.PublicationOnly);

        public static IAccessibilityService Current
        {
            get
            {
                var curr = Implementation.Value;
                if (curr == null)
                {
                    throw new Exception();
                }

                return curr;
            }
        }

        private static IAccessibilityService CreateAccessibilityService()
        {
            return new DeviceAccessibilityImplementation();
        }
    }
}

DeviceAccessibilityImplementation.cs Located in the Android project

using Android.Runtime;

namespace Bitspace.Services
{

    [Preserve (AllMembers = true)]
    public class DeviceAccessibilityImplementation : IAccessibilityService
    {
        public bool IsScreenReaderEnabled()
        {
            return true;
        }

        public void Announcement(string message)
        {
        }

        public void NavigationAnnouncement(string message)
        {
        }
    }
}

If I try to build the project, I get an error on the return new DeviceAccessibilityImplementation(); line in DeviceAccessibility.cs that says DeviceAccessibility.cs(25, 24): [CS0246] The type or namespace name 'DeviceAccessibilityImplementation' could not be found (are you missing a using directive or an assembly reference?)

However, CTRL Clicking on that line takes me to the DeviceAccessibilityImplementation.cs

0 Answers
Related