﻿B4A=true
Group=SharedCode
ModulesStructureVersion=1
Type=Class
Version=9.8
@EndOfDesignText@
Sub Class_Globals
	Public  gSharedFolder 			As String
	Public  gUseFileProvider 		As Boolean
	
	Private rp 						As RuntimePermissions
End Sub

Public 	Sub Initialize
			Dim p As Phone

			If 	p.SdkVersion >= 24 Or File.ExternalWritable = False Then
				gUseFileProvider = True
				gSharedFolder 	 = File.Combine(File.DirInternal, "shared")
		
				If 	Not(File.IsDirectory(File.DirInternal,"shared")) Then
					File.MakeDir("", gSharedFolder)
				End If		
			Else
				gUseFileProvider = False
				gSharedFolder 	 = rp.GetSafeDirDefaultExternal("shared")
			End If
			
			Log($"Using FileProvider? ${gUseFileProvider}"$)
End Sub


Public 	Sub GetFileUri(FileName As String) As Object
	
			Try
				If 	Not(gUseFileProvider) Then
					Dim uri As JavaObject
					
					Log("GetFileUri - NOT Using FileProvider - file://" & File.Combine(gSharedFolder, FileName))
					
					Return uri.InitializeStatic("android.net.Uri").RunMethod("parse", Array("file://" &File.Combine(gSharedFolder, FileName)))
				End If
		
				Dim f As JavaObject
				
				f.InitializeNewInstance("java.io.File", Array(gSharedFolder, FileName))
				
				Dim fp 			As JavaObject
				Dim context 	As JavaObject
				
				context.InitializeContext
				fp.InitializeStatic("android.support.v4.content.FileProvider")

				Log("GetFileUri - USING FileProvider - " &Application.PackageName &".provider" &"  " &File.Combine(gSharedFolder, FileName))
				
				Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))
			Catch
				Log("FileProvider::GetFileUri - error - " & LastException.Message)
				Return ""
			End Try
End Sub

'Replaces the intent Data field with the file uri.
'Resets the type field. Make sure to call Intent.SetType after calling this method
Public 	Sub SetFileUriAsIntentData (Intent As Intent, FileName As String)
			Dim jo As JavaObject = Intent
			
			jo.RunMethod("setData", Array(GetFileUri(FileName)))
			Intent.Flags = Bit.Or(Intent.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION
End Sub

''Returns the file uri.
'Public Sub GetFileUri (FileName As String) As Object
'	
'			If 	UseFileProvider = False Then
'				Dim uri As JavaObject
'				Return uri.InitializeStatic("android.net.Uri").RunMethod("parse", Array("file://" & File.Combine(SharedFolder, FileName)))
'			Else
'				Dim f As JavaObject
'				f.InitializeNewInstance("java.io.File", Array(SharedFolder, FileName))
'				Dim fp As JavaObject
'				Dim context As JavaObject
'				context.InitializeContext
'				fp.InitializeStatic("android.support.v4.content.FileProvider")
'				
'				Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f))
'			End If
'End Sub
'
''Replaces the intent Data field with the file uri.
''Resets the type field. Make sure to call Intent.SetType after calling this method
'Public  Sub SetFileUriAsIntentData (Intent As Intent, FileName As String)
'			Dim jo As JavaObject = Intent
'			jo.RunMethod("setData", Array(GetFileUri(FileName)))
'			Intent.Flags = Bit.Or(Intent.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION
'End Sub