Пример #1
0
        public DownloadManager(IAndroidContext context, IRepository repository)
        {
            this.context    = context;
            this.repository = repository;
            //ar reference = intent.GetLongExtra(Android.App.DownloadManager.ExtraDownloadId, -1);

            //var downloadFile = CrossDownloadManager.Current.Queue.Cast<DownloadFileImplementation>().FirstOrDefault(f => f.Id == reference);
            //if (downloadFile == null) return;

            //var query = new Android.App.DownloadManager.Query();
            //query.SetFilterById(downloadFile.Id);

            //try
            //{
            //    using (var cursor = ((Android.App.DownloadManager)context.GetSystemService(Context.DownloadService)).InvokeQuery(query))
            //    {
            //        while (cursor != null && cursor.MoveToNext())
            //        {
            //            ((DownloadManagerImplementation)CrossDownloadManager.Current).UpdateFileProperties(cursor, downloadFile);
            //        }
            //        cursor?.Close();
            //    }
            //}
            //catch (Android.Database.Sqlite.SQLiteException)
            //{
            //    // I lately got an exception that the database was unaccessible ...
            //}

            //this.GetManager().InvokeQuery()
        }
Пример #2
0
        //static AccessState GetCurrentLocationAccess(this IAndroidContext context, bool background, bool fineAccess, bool gpsRequired, bool networkRequired)
        //{
        //    var status = context.GetLocationManagerStatus(gpsRequired, networkRequired);
        //    if (status != AccessState.Available)
        //        return status;

        //    if (context.IsMinApiLevel(29) && background)
        //    {
        //        status = context.GetCurrentAccessState(P.AccessBackgroundLocation);
        //        if (status != AccessState.Available)
        //            return status;
        //    }
        //    var next = fineAccess ? P.AccessFineLocation : P.AccessCoarseLocation;
        //    status = context.GetCurrentAccessState(next);

        //    return status;
        //}


        public static async Task <AccessState> RequestLocationAccess(this IAndroidContext context, bool background, bool fineAccess, bool gpsRequired, bool networkRequired)
        {
            if (!IsLocationEnabled(context, gpsRequired, networkRequired))
            {
                return(AccessState.Disabled);
            }

            var locationPerm = fineAccess ? P.AccessFineLocation : P.AccessCoarseLocation;

            if (!context.IsMinApiLevel(29) || !background)
            {
                return(await context.RequestAccess(locationPerm).ToTask());
            }

            var access = await context
                         .RequestPermissions
                         (
                P.AccessBackgroundLocation,
                P.ForegroundService,
                locationPerm
                         )
                         .ToTask();

            if (!access.IsGranted(locationPerm))
            {
                return(AccessState.Denied);
            }

            if (!access.IsGranted(P.AccessBackgroundLocation))
            {
                return(AccessState.Restricted);
            }

            return(AccessState.Available);
        }
Пример #3
0
 static void AssertBackgroundInManifest(this IAndroidContext context)
 {
     if (context.IsMinApiLevel(29) && !context.IsInManifest(P.AccessBackgroundLocation))
     {
         throw new ArgumentException($"{P.AccessBackgroundLocation} is not in your manifest but is required");
     }
 }
Пример #4
0
 public JobManager(IAndroidContext context,
                   IServiceProvider container,
                   IRepository repository,
                   ILogger <IJobManager> logger) : base(container, repository, logger)
 {
     this.context = context;
 }
Пример #5
0
 public static int GetResourceIdByName(this IAndroidContext context, string iconName) => context
 .AppContext
 .Resources
 .GetIdentifier(
     iconName,
     "drawable",
     Application.Context.PackageName
     );
Пример #6
0
 // Expects raw resource name like "notify_sound" or "raw/notify_sound"
 internal static int GetRawResourceIdByName(this IAndroidContext context, string rawName) => context
 .AppContext
 .Resources
 .GetIdentifier(
     rawName,
     "raw",
     context.AppContext.PackageName
     );
Пример #7
0
 internal static int GetColorByName(this IAndroidContext context, string colorName) => context
 .AppContext
 .Resources
 .GetIdentifier(
     colorName,
     "color",
     context.AppContext.PackageName
     );
Пример #8
0
 public JobManagerImpl(IAndroidContext context,
                       IServiceProvider container,
                       IRepository repository,
                       IPowerManager powerManager,
                       IConnectivity connectivity) : base(container, repository, powerManager, connectivity)
 {
     this.context = context;
 }
Пример #9
0
 public SecureKeyValueStore(IPlatform platform,
                            IAndroidContext context,
                            ISerializer serializer)
 {
     this.settingsStore = new SettingsKeyValueStore(context, serializer);
     this.keyStore      = new AndroidKeyStore(context, this.settingsStore, $"{platform.AppIdentifier}.secure", false);
     this.serializer    = serializer;
 }
Пример #10
0
 public NativeAdapter(AndroidPushNotificationManager notifications,
                      IAndroidContext context,
                      FirebaseConfig?config = null)
 {
     this.notifications = notifications;
     this.context       = context;
     this.config        = config;
 }
Пример #11
0
 protected AbstractGpsManager(IAndroidContext context)
 {
     this.readingSubj = new Subject <IGpsReading>();
     this.Context     = context;
     this.Callback    = new ShinyLocationCallback
     {
         OnReading = x => this.readingSubj.OnNext(new GpsReading(x))
     };
 }
Пример #12
0
 public GeofenceManagerImpl(IAndroidContext context,
                            IRepository repository,
                            IServiceProvider services,
                            ILogger <GeofenceManagerImpl> logger) : base(repository)
 {
     this.context  = context;
     this.logger   = logger;
     this.services = services;
     this.client   = LocationServices.GetGeofencingClient(this.context.AppContext);
 }
Пример #13
0
 public ShinyCoreServices(IAndroidContext context,
                          IPlatform platform,
                          IKeyValueStoreFactory store,
                          IRepository repository,
                          IServiceProvider services,
                          ISerializer serializer,
                          IMessageBus bus)
     : this(platform, store, repository, services, serializer, bus)
 {
     this.Android = context;
 }
Пример #14
0
 public ShinyCoreServices(IAndroidContext context,
                          IKeyValueStoreFactory store,
                          IRepository repository,
                          IServiceProvider services,
                          ISerializer serializer,
                          IMessageBus bus,
                          IJobManager jobManager)
     : this(store, repository, services, serializer, bus, jobManager)
 {
     this.Android = context;
 }
Пример #15
0
 public NotificationManagerImpl(IAndroidContext context)
 {
     this.context = context;
     if ((int)Build.VERSION.SdkInt >= 26)
     {
         this.newManager = NotificationManager.FromContext(context.AppContext);
     }
     else
     {
         this.compatManager = NotificationManagerCompat.From(context.AppContext);
     }
 }
Пример #16
0
        internal AndroidKeyStore(IAndroidContext context,
                                 IKeyValueStore clearStore,
                                 string keystoreAlias,
                                 bool alwaysUseAsymmetricKeyStorage)
        {
            this.appContext             = context.AppContext;
            this.alwaysUseAsymmetricKey = alwaysUseAsymmetricKeyStorage;
            this.alias = keystoreAlias;

            this.clearStore = clearStore;
            this.keyStore   = KeyStore.GetInstance(androidKeyStore);
            this.keyStore.Load(null);
        }
Пример #17
0
        public static async Task <AccessState> RequestBackgroundLocationAccess(this IAndroidContext context, LocationPermissionType locType)
        {
            if (!context.IsLocationEnabled(false, false))
            {
                return(AccessState.Disabled);
            }

            context.AssertBackgroundInManifest();

            AccessState status;

            if (context.IsMinApiLevel(30))
            {
                // Android 11+ need to request background separately
                // Android 12+ user can decline fine, but allow coarse
                status = await context.RequestLocationAccess(locType);

                if (status == AccessState.Available || status == AccessState.Restricted)
                {
                    var bg = await context.RequestAccess(P.AccessBackgroundLocation).ToTask();

                    status = bg == AccessState.Available ? status : AccessState.Restricted;
                }
            }
            else if (context.IsMinApiLevel(29))
            {
                // Android 10: Request BG permission with other permissions
                var perms = new List <string> {
                    P.AccessBackgroundLocation, P.AccessCoarseLocation
                };
                if (locType != LocationPermissionType.Coarse)
                {
                    perms.Add(P.AccessFineLocation);
                }

                var results = await context
                              .RequestPermissions(perms.ToArray())
                              .ToTask();

                status = FromResult(results, locType);
                if (status == AccessState.Available || status == AccessState.Available)
                {
                    status = results.IsGranted(P.AccessBackgroundLocation) ? status : AccessState.Restricted;
                }
            }
            else
            {
                status = await context.RequestLocationAccess(locType);
            }
            return(status);
        }
Пример #18
0
        public BeaconMonitoringManager(IBleManager bleManager,
#if __ANDROID__
                                       IAndroidContext context,
#endif
                                       IMessageBus messageBus,
                                       IRepository repository)
        {
            this.bleManager = bleManager;
#if __ANDROID__
            this.context = context;
#endif
            this.messageBus = messageBus;
            this.repository = repository;
        }
Пример #19
0
        public BeaconMonitoringManager(IBleManager bleManager,
                                       IRepository repository,
                                       IMessageBus messageBus
#if __ANDROID__
                                       , IAndroidContext context
#endif
                                       )
        {
            this.bleManager = bleManager;
            this.messageBus = messageBus;
            this.repository = repository;
#if __ANDROID__
            this.context = context;
#endif
        }
Пример #20
0
        static bool IsLocationEnabled(IAndroidContext context, bool gpsRequired, bool networkRequired)
        {
            var lm = context.GetSystemService <LocationManager>(Context.LocationService);

            if (context.IsMinApiLevel(28) && !lm.IsLocationEnabled)
            {
                return(false);
            }

            if (networkRequired && !lm.IsProviderEnabled(LocationManager.NetworkProvider))
            {
                return(false);
            }

            if (gpsRequired && !lm.IsProviderEnabled(LocationManager.GpsProvider))
            {
                return(false);
            }

            return(true);
        }
Пример #21
0
        public static AccessState GetLocationManagerStatus(this IAndroidContext context, bool gpsRequired, bool networkRequired)
        {
            var lm = context.GetSystemService <LocationManager>(Context.LocationService);

            if (context.IsMinApiLevel(28) && !lm.IsLocationEnabled)
            {
                return(AccessState.Disabled);
            }

            if (networkRequired && !lm.IsProviderEnabled(LocationManager.NetworkProvider))
            {
                return(AccessState.Disabled);
            }

            if (gpsRequired && !lm.IsProviderEnabled(LocationManager.GpsProvider))
            {
                return(AccessState.Disabled);
            }

            return(AccessState.Available);
        }
Пример #22
0
        public static async Task <AccessState> RequestLocationAccess(this IAndroidContext context, LocationPermissionType locType)
        {
            if (!context.IsLocationEnabled(false, false))
            {
                return(AccessState.Disabled);
            }

            var perms = new List <string> {
                P.AccessCoarseLocation
            };

            if (locType != LocationPermissionType.Coarse)
            {
                perms.Add(P.AccessFineLocation);
            }

            var results = await context.RequestPermissions(perms.ToArray()).ToTask();

            var status = FromResult(results, locType);

            return(status);
        }
Пример #23
0
        public static AccessState GetCurrentLocationAccess(this IAndroidContext context, bool background, bool fineAccess, bool gpsRequired, bool networkRequired)
        {
            var status = context.GetLocationManagerStatus(gpsRequired, networkRequired);

            if (status != AccessState.Available)
            {
                return(status);
            }

            if (context.IsMinApiLevel(29) && background)
            {
                status = context.GetCurrentAccessState(P.AccessBackgroundLocation);
                if (status != AccessState.Available)
                {
                    return(status);
                }
            }
            var next = fineAccess ? P.AccessFineLocation : P.AccessCoarseLocation;

            status = context.GetCurrentAccessState(next);

            return(status);
        }
Пример #24
0
 public PowerManagerImpl(IAndroidContext context) => this.context = context;
Пример #25
0
 public BleHostingManager(IAndroidContext context, IMessageBus messageBus)
 {
     this.context    = new GattServerContext(context);
     this.services   = new Dictionary <string, GattService>();
     this.messageBus = messageBus;
 }
Пример #26
0
 public ConnectivityImpl(IAndroidContext context)
 {
     this.context = context;
 }
Пример #27
0
 public GooglePlayServiceGpsManagerImpl(IAndroidContext context) : base(context)
     => this.client = LocationServices.GetFusedLocationProviderClient(context.AppContext);
Пример #28
0
        //readonly Subject<PushState> publishSubj;
        //Func<NDefRecord>? recordFunc;


        public NfcManager(IAndroidContext context)
        {
            this.context    = context;
            this.recordSubj = new Subject <NDefRecord[]>();
            //this.publishSubj = new Subject<PushState>();
        }
Пример #29
0
 public GpsManagerImpl(IAndroidContext context, ISettings settings)
 {
     this.settings = settings;
     this.context  = context;
     this.client   = LocationServices.GetFusedLocationProviderClient(this.context.AppContext);
 }
Пример #30
0
 public static IObservable <(Result Result, Intent Data)> RequestActivityResult(this IAndroidContext context, Intent intent)
 => context.RequestActivityResult((requestCode, activity) =>