From c9669dba15af635f2389816effc4f4572bedfd1d Mon Sep 17 00:00:00 2001 From: Tristan Roux Date: Tue, 16 Apr 2019 21:48:46 +0200 Subject: [PATCH] Adding permission request support in the preference screen. --- Opus/MainActivity.cs | 4 +- Opus/Resources/Portable Class/Preferences.cs | 53 ++++++++++++++++++-- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/Opus/MainActivity.cs b/Opus/MainActivity.cs index 38261bd..a8b36bf 100644 --- a/Opus/MainActivity.cs +++ b/Opus/MainActivity.cs @@ -67,7 +67,7 @@ namespace Opus public bool SkipStop = false; public PlayerBehavior SheetBehavior; - private const int RequestCode = 8539; + public const int RequestCode = 8539; private const int WriteRequestCode = 2659; public const int NotifUpdateID = 4626; private const string versionURI = "https://raw.githubusercontent.com/AnonymusRaccoon/Opus/master/Opus/Assets/Version.txt"; @@ -794,7 +794,7 @@ namespace Opus public async Task GetWritePermission() { const string permission = Manifest.Permission.WriteExternalStorage; - if (Android.Support.V4.Content.ContextCompat.CheckSelfPermission(this, permission) == (int)Permission.Granted) + if (ContextCompat.CheckSelfPermission(this, permission) == (int)Permission.Granted) { return true; } diff --git a/Opus/Resources/Portable Class/Preferences.cs b/Opus/Resources/Portable Class/Preferences.cs index f6bc044..53e6859 100644 --- a/Opus/Resources/Portable Class/Preferences.cs +++ b/Opus/Resources/Portable Class/Preferences.cs @@ -1,11 +1,15 @@ -using Android.App; +using Android; +using Android.App; using Android.Content; +using Android.Content.PM; using Android.Content.Res; using Android.Gms.Auth.Api; using Android.Gms.Auth.Api.SignIn; +using Android.Graphics; using Android.OS; using Android.Preferences; using Android.Runtime; +using Android.Support.Design.Widget; using Android.Support.V7.App; using Android.Support.V7.Preferences; using Android.Views; @@ -13,6 +17,7 @@ using Android.Widget; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; using AlertDialog = Android.Support.V7.App.AlertDialog; using Preference = Android.Support.V7.Preferences.Preference; using PreferenceManager = Android.Support.V7.Preferences.PreferenceManager; @@ -25,6 +30,7 @@ namespace Opus.Resources.Portable_Class { public static Preferences instance; public Toolbar toolbar; + private bool? PermissionGot; protected override void OnCreate(Bundle savedInstanceState) { @@ -78,9 +84,42 @@ namespace Opus.Resources.Portable_Class instance = null; } + public async Task GetReadPermission() + { + if (MainActivity.instance.HasReadPermission()) + return true; + + PermissionGot = null; + string[] permissions = new string[] { Manifest.Permission.ReadExternalStorage }; + RequestPermissions(permissions, MainActivity.RequestCode); + + while (PermissionGot == null) + await Task.Delay(10); + + return (bool)PermissionGot; + } + + public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) + { + if (requestCode == MainActivity.RequestCode) + { + if (grantResults.Length > 0) + { + if (grantResults[0] == Permission.Granted) + PermissionGot = true; + else + { + PermissionGot = false; + Snackbar snackBar = Snackbar.Make(FindViewById(Resource.Id.PreferenceFragment), Resource.String.no_permission, Snackbar.LengthLong); + snackBar.View.FindViewById(Resource.Id.snackbar_text).SetTextColor(Color.White); + snackBar.Show(); + } + } + } + } + protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { - base.OnActivityResult(requestCode, resultCode, data); if (requestCode == 5981) { GoogleSignInResult result = Auth.GoogleSignInApi.GetSignInResultFromIntent(data); @@ -95,6 +134,7 @@ namespace Opus.Resources.Portable_Class MainActivity.instance.waitingForYoutube = false; } } + base.OnActivityResult(requestCode, resultCode, data); } protected override void OnResume() @@ -202,10 +242,13 @@ namespace Opus.Resources.Portable_Class } #region Download location - private void DownloadClick(object sender, Preference.PreferenceClickEventArgs e) + private async void DownloadClick(object sender, Preference.PreferenceClickEventArgs e) { - Preferences.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.PreferenceFragment, DownloadFragment.NewInstance(path)).AddToBackStack(null).Commit(); - Preferences.instance.toolbar.Title = "Download Location"; + if(await Preferences.instance.GetReadPermission()) + { + Preferences.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.PreferenceFragment, DownloadFragment.NewInstance(path)).AddToBackStack(null).Commit(); + Preferences.instance.toolbar.Title = "Download Location"; + } } #endregion