Sub Process_Globals
    'These global variables will be declared once when the application starts.   
    'These variables can be accessed from all modules.
    Dim player_exo As SimpleExoPlayer
    
End Sub
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Private ExoPlayerView As SimpleExoPlayerView
    Dim btnClose As Button
    
End Sub
Sub Activity_Create(FirstTime As Boolean)
    If(FirstTime) Then
        
        player_exo.Initialize("Player")
        '
        '  change next line to point to your movie file
        '
        player_exo.Prepare(player_exo.CreateFileSource("/storage/0403-0201/Android/data/baz.movie.player/files","ShogSubs.mkv"))
        
    End If
    
    Activity.LoadLayout("EXOmain")
    ExoPlayerView.Player=player_exo
        
    
End Sub
Sub Player_TrackChanged
    
End Sub
Sub Player_Ready
    Log("Player is ready")
    Dim jo As JavaObject = player_exo
    Dim TrackGroups As JavaObject = jo.GetFieldJO("player").RunMethod("getCurrentTrackGroups", Null)
    For i = 0 To TrackGroups.GetField("length") - 1
        Dim TrackGroup As JavaObject = TrackGroups.RunMethod("get", Array(i))
        For j = 0 To TrackGroup.GetField("length") - 1
            Dim Format As JavaObject = TrackGroup.RunMethodJO("getFormat", Array(j))
            Log("=======Sample MIME Type: " & Format.GetField("sampleMimeType") & " =========")
            '
            '    following lines show what information is available
            '
            Log("Codecs: " & Format.GetField("codecs"))
            Log("Bitrate: " & Format.GetField("bitrate"))
            Log("Width: " & Format.GetField("width"))
            Log("Height: " & Format.GetField("height"))
            Log("Frame Rate: " & Format.GetField("frameRate"))
            Log("Channel Count: " & Format.GetField("channelCount"))
            Log("Sample Rate: " & Format.GetField("sampleRate"))
            Log("Selection Flags: " & Format.GetField("selectionFlags"))
            Log("Language: " & Format.GetField("language"))
            Log("Label: " & Format.GetField("label"))
            Log("Role Flags: " & Format.GetField("roleFlags"))
            Log("Average Bitrate: " & Format.GetField("averageBitrate"))
            Log("Peak Bitrate: " & Format.GetField("peakBitrate"))
        Next
    Next
    
    SetPreferredAudioLanguage("en")
    
    Subtitles_OFF(False)    '  set to true to get preferred subtitle language
    
    SetPreferredTextLanguage("th")      ' th is for Thai language
    '
    ' set colours as required
    '
    Dim ForegroundColor As Int = 0xFFFFFF00 ' Yellow text
    Dim BackgroundColor As Int = 0x00000000 ' Black background with high transparency
    Dim WindowColor As Int = 0x30000000 ' Semi-transparent window
    SubtitleStyle(12,2,ForegroundColor,BackgroundColor,WindowColor)
    
End Sub
Sub SubtitleStyle(TextSize As Int, Fraction As Int, ForegroundColor As Int, BackgroundColor As Int, WindowColor As Int)
    Try
        Dim SubtitleView As JavaObject = ExoPlayerView
        SubtitleView = SubtitleView.RunMethod("getSubtitleView", Null)
        If SubtitleView <> Null And SubtitleView.IsInitialized Then
            Dim TextSize2 As Float = TextSize
            SubtitleView.RunMethod("setFixedTextSize", Array(2, TextSize2))
            
            Dim fraction2 As Float = 0.01 * Fraction 'input as percentage  0.0 = bottom   0.5 halfway up
            SubtitleView.RunMethod("setBottomPaddingFraction", Array(fraction2))
            Dim CaptionStyleCompat As JavaObject
            CaptionStyleCompat.InitializeNewInstance("androidx.media3.ui.CaptionStyleCompat", Array (ForegroundColor, BackgroundColor, WindowColor, 0,0, Typeface.MONOSPACE))
            SubtitleView.RunMethod("setStyle", Array(CaptionStyleCompat))
            Log("Subtitle customization applied")
        Else
            Log("SubtitleView not found")
        End If
    Catch
        Log(LastException.Message)
    End Try
End Sub
Private Sub SetPreferredTextLanguage(Language As String)
    Dim jo As JavaObject = player_exo
    Dim TrackSelector As JavaObject = jo.GetField("trackSelector")
    TrackSelector.RunMethod("setParameters", Array( _
        TrackSelector.RunMethodJO("buildUponParameters", Null) _
        .RunMethod("setPreferredTextLanguage", Array(Language))))
End Sub
Private Sub Subtitles_OFF(myvalue As Boolean)
    Dim jo As JavaObject = player_exo
    Log("enter disable")
    Dim trackSelector As JavaObject = jo.GetField("trackSelector")
    Dim parametersBuilder As JavaObject = trackSelector.RunMethodJO("buildUponParameters", Null)
    ' Access the track selector internals
    Dim trackGroups As JavaObject = jo.GetFieldJO("player").RunMethod("getCurrentTrackGroups", Null)
    For i = 0 To trackGroups.GetField("length") - 1
        Dim trackGroup As JavaObject = trackGroups.RunMethod("get", Array(i))
        For j = 0 To trackGroup.GetField("length") - 1
            Dim format As JavaObject = trackGroup.RunMethodJO("getFormat", Array(j))
            Dim mime As String = format.GetField("sampleMimeType")
            If mime.contains("x-subrip") Then
                ' Disable or enable this text renderer
                parametersBuilder.RunMethodJO("setRendererDisabled", Array(i, myvalue))
            End If
        Next
    Next
    ' Apply the new parameters to the track selector
    trackSelector.RunMethod("setParameters", Array(parametersBuilder.RunMethod("build", Null)))
End Sub
Sub SelectSubtitleTrack(preferredSubtitleLanguage As String)
    Dim jo As JavaObject = player_exo
    Dim trackSelector As JavaObject = jo.GetField("trackSelector")
    Dim TrackGroups As JavaObject = jo.GetFieldJO("player").RunMethod("getCurrentTrackGroups", Null)
    Dim builder As JavaObject = trackSelector.RunMethodJO("buildUponParameters", Null)
    
    For i = 0 To TrackGroups.GetField("length") - 1
        Dim TrackGroup As JavaObject = TrackGroups.RunMethod("get", Array(i))
        For j = 0 To TrackGroup.GetField("length") - 1
            Dim Format As JavaObject = TrackGroup.RunMethodJO("getFormat", Array(j))
            Dim mime As String = Format.GetField("sampleMimeType")
            Dim language As String = Format.GetField("language")
            Log("Track " & i & "-" & j & " MIME type: " & mime & ", Language: " & language)
            If mime.Contains("x-subrip") And language = preferredSubtitleLanguage Then
                Log("Found preferred subtitle track at " & i & "-" & j)
                
                ' Initialize SelectionOverride with correct parameters
                Dim indices() As Int = Array As Int(j)
                Dim selectionOverride As JavaObject
                selectionOverride.InitializeNewInstance("androidx.media3.exoplayer.trackselection.DefaultTrackSelector$SelectionOverride", Array(i, indices))
                ' Apply the selection override using the parameters builder
                Dim trackSelections As JavaObject = builder.RunMethodJO("setRendererDisabled", Array(2, False)) ' Enable text renderer
                trackSelections.RunMethod("setSelectionOverride", Array(i, TrackGroup, selectionOverride))
                
                trackSelector.RunMethod("setParameters", Array(builder.RunMethod("build", Null)))
                
                Log("Selected subtitle track: " & language)
                Return
            End If
        Next
    Next
    Log("No preferred subtitle track found.")
End Sub
Private Sub SetPreferredAudioLanguage(Language As String)
    Dim jo As JavaObject = player_exo
    Dim TrackSelector As JavaObject = jo.GetField("trackSelector")
    TrackSelector.RunMethod("setParameters", Array( _
        TrackSelector.RunMethodJO("buildUponParameters", Null) _
        .RunMethod("setPreferredAudioLanguage", Array(Language))))
End Sub
Private Sub btnClose_Click
    
    Activity.Finish
    ExitApplication
    
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub