Build1=Default,b4a.example
File1=sprite.png
FileGroup1=Default Group
Group=Default Group
Library1=audio
Library10=phone
Library11=randomaccessfile
Library12=reflection
Library13=runtimepermissions
Library2=b4xpages
Library3=contentresolver
Library4=core
Library5=fileprovider
Library6=firebaseadmob2
Library7=javaobject
Library8=libgdx
Library9=libgdx_specialfx
ManifestCode=~\n~'This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/> )~\n~~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~ CreateResourceFromFile(Macro, Themes.DarkTheme)~\n~'End of default text.~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~CreateResourceFromFile (Macro, FirebaseAdMob.FirebaseAds)~\n~AddReplacement($ADMOB_APP_ID$, ca-app-pub-3940256099942544~3347511713)
Module1=arfRewardedAd
Module2=|relative|..\B4XMainPage
Module3=Starter
NumberOfFiles=1
NumberOfLibraries=13
NumberOfModules=3
Version=12.2
@EndOfDesignText@
' MODERN MINI BASE, uses panel
' Want to exploire multioortinetaion
' panel for ad (either portrait and landscape or both)
' position screen at mor esensible position knowing ads etc on scren
' maybe one less scale to do above even more sensible
#MultiDex: True
#Region Module Attributes
#FullScreen: True
#IncludeTitle: False
#ApplicationLabel: Demo
#VersionCode: 1
#VersionName:
#SupportedOrientations: Portrait
#CanInstallToExternalStorage: False
#End Region
Sub Process_Globals
End Sub
Sub Globals
Type AdSize (Native As Object, Width As Int, Height As Int)
Dim coins As Int
Dim adwanted As Boolean = True
Dim tm As Timer
Dim lGdx As LibGDX
Dim GL As lgGL
Dim Surface As View
Dim IP As lgInputProcessor
Dim Batch As lgSpriteBatch
Dim Texture As lgTexture
Dim counter As Int
Dim AdView1 As AdView
Dim awidth As Int
Dim aheight As Int
Dim intwidth As Int
Dim intheight As Int
Dim startx As Int
Dim starty As Int
Dim vwidth As Int = 200
Dim vheight As Int = 320
Dim d As Boolean
Dim g0 As lgMathMatrix4
Dim g1 As lgMathMatrix4
Dim tempmatrix As lgMathMatrix4
Dim idmatrix As lgMathMatrix4
Dim tempmatrix2 As lgMathMatrix4
End Sub
#IF THEN
Sub Activity_Create(FirstTime As Boolean)
fullscreen
If FirstTime = True Then
Dim Config As lgConfiguration
Config.useAccelerometer = False
Config.useCompass = False
Config.useWakelock = True
Config.hideStatusBar = True
Config.useImmersiveMode = True
Config.r = 8
Config.g = 8
Config.b = 8
Config.a = 8
Config.numSamples = 0
Config.maxSimultaneousSounds = 8
Surface = lGdx.InitializeView2(Config, "LG")
Activity.AddView(Surface, 0, 0, 100%x, 100%y)
BlockScreenshots
tm.Initialize("timer",4000*4)
tm.Enabled = True
End If
Dim adHeight As Int = 50dip
Dim screenHeight As Int = 100%y
Dim size As AdSize = GetAdaptiveAdSize
AdView1.Initialize2("ad", "ca-app-pub-3940256099942544/6300978111", size.Native)
Dim adHeight As Int = size.height
Activity.AddView(AdView1, 0, 0, size.Width, adHeight)
AdView1.LoadAd
End Sub
#END IF
Sub Activity_Create(FirstTime As Boolean)
fullscreen
If FirstTime = True Then
Dim Config As lgConfiguration
Config.useAccelerometer = False
Config.useCompass = False
Config.useWakelock = True
Config.hideStatusBar = True
Config.useImmersiveMode = True
Config.r = 8
Config.g = 8
Config.b = 8
Config.a = 8
Config.numSamples = 0
Config.maxSimultaneousSounds = 8
Surface = lGdx.InitializeView2(Config, "LG")
Activity.AddView(Surface, 0, 0, 100%x, 100%y)
BlockScreenshots
tm.Initialize("timer",4000*4)
tm.Enabled = True
End If
' Create the panel view and add it to the activity
Dim panel As Panel
panel.Initialize("")
panel.Color = Colors.White
panel.SetLayout(0, 0, 100%x, 90dip)
Activity.AddView(panel, 0, 0, 100%x, 90dip)
' Initialize and load the adaptive ad inside the panel
Dim size As AdSize = GetAdaptiveAdSize
Dim adHeight As Int = size.Height
Dim adView As AdView
adView.Initialize2("ad", "ca-app-pub-3940256099942544/6300978111", size.Native)
panel.Color = Colors.Transparent
panel.AddView(adView, 0, 0, size.Width, adHeight)
adView.LoadAd
End Sub
Sub GetAdaptiveAdSize As AdSize
Dim ctxt As JavaObject
ctxt.InitializeContext
Dim AdSize As JavaObject
Dim width As Int = 100%x / GetDeviceLayoutValues.Scale
' width = Min(width,2560) ' Ad should be in panel
Dim res As AdSize
res.Native = AdSize.InitializeStatic("com.google.android.gms.ads.AdSize").RunMethod("getCurrentOrientationAnchoredAdaptiveBannerAdSize", Array(ctxt, width))
Dim jo As JavaObject = res.Native
res.Width = jo.RunMethod("getWidthInPixels", Array(ctxt))
res.Height = jo.RunMethod("getHeightInPixels", Array(ctxt))
Return res
End Sub
Sub Activity_Resume
Starter.RewardAd.Callback = Me
If AdView1.IsInitialized Then AdView1.resume
If lGdx.IsInitialized Then lGdx.Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If AdView1.IsInitialized Then AdView1.pause
If lGdx.IsInitialized Then lGdx.Pause
End Sub
Sub Activity_Destroy
End Sub
Sub LG_Create
IP.Initialize("IP")
Batch.Initialize
Texture.Initialize("sprite.png")
Texture.SetFilter(Texture.FILTER_Nearest, Texture.FILTER_Nearest)
ResetMatrix
tempmatrix2.setToOrtho2D(0,0,awidth,aheight)
tempmatrix2.scale(1,-1,1)
tempmatrix2.translate(0,-aheight,0)
Batch.ProjectionMatrix = tempmatrix2
End Sub
Sub LG_Render
GL.glClearColor(0, 0, 1, 1)
GL.glClear(GL.GL10_COLOR_BUFFER_BIT)
Batch.Begin
tempmatrix = g1.cpy
Batch.TransformMatrix = tempmatrix
Dim X, Y As Int
For i = 1 To 99
X = Rnd(0,200-8)
Y = Rnd(0,320-8)
Batch.DrawTex2(Texture, X, Y, 8,8)
Next
Batch.End
End Sub
Sub LG_Resume
End Sub
Sub LG_Pause
End Sub
Sub LG_Dispose
If Texture.IsInitialized Then Texture.dispose
If Batch.IsInitialized Then Batch.dispose
End Sub
Sub IP_TouchDown(ScreenX As Int, ScreenY As Int, Pointer As Int) As Boolean
Return True
End Sub
Sub ToastMsg_Show(Text As Object)
ToastMessageShow(Text, True)
End Sub
Sub RewardAd_Rewarded (Item As Object)
Log("GOT REWARD! NOW YOU HAVE COLLECTED THIS MANY COINS:")
End Sub
Sub RewardAd_AdClosed
Log("ad closed")
End Sub
Sub timer_Tick
If adwanted = True Then
If Starter.RewardAd.Ready Then
Starter.RewardAd.Show
adwanted = False
adwanted = True
Else
' No ad is available, handle the error
HandleAdLoadError
End If
End If
Log("TIMER!")
End Sub
Sub HandleAdLoadError
ToastMessageShow("Failed to load rewarded ad. Please check your internet connection.", True)
' Additional actions here e.g. disabling ad-related functionality or providing alternative content
End Sub
Sub fullscreen
Dim p As Phone
If p.SdkVersion >= 28 Then
Dim ctxt As JavaObject
ctxt.InitializeContext
ctxt.RunMethodJO("getWindow", Null).RunMethodJO("getAttributes", Null).SetField("layoutInDisplayCutoutMode", 1)
End If
GetRealSize
Dim lv As LayoutValues = GetRealSize
Dim jo As JavaObject = Activity
jo.RunMethod("setBottom", Array(lv.Height))
jo.RunMethod("setRight", Array(lv.Width))
awidth = lv.Width
aheight = lv.Height
Activity.Height = lv.Height
Activity.Width = lv.Width
SetSystemUIVisibilityFlags
End Sub
Sub SetSystemUIVisibilityFlags
Try
Dim jo As JavaObject
jo.InitializeContext
jo = jo.RunMethod("getWindow", Null)
Dim decorView As JavaObject = jo.RunMethod("getDecorView", Null)
Dim decorView As JavaObject = jo.RunMethod("getDecorView", Null)
Dim SYSTEM_UI_FLAG_LAYOUT_STABLE As Int = 256
Dim SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION As Int = 512
Dim SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN As Int = 1024
Dim SYSTEM_UI_FLAG_HIDE_NAVIGATION As Int = 2
Dim SYSTEM_UI_FLAG_FULLSCREEN As Int = 4
Dim SYSTEM_UI_FLAG_IMMERSIVE As Int = 2048
Dim flags As Int = SYSTEM_UI_FLAG_LAYOUT_STABLE + SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + SYSTEM_UI_FLAG_HIDE_NAVIGATION + SYSTEM_UI_FLAG_FULLSCREEN + SYSTEM_UI_FLAG_IMMERSIVE
Log("FLAGS ARE")
Log(flags)
decorView.RunMethod("setSystemUiVisibility", Array As Object(flags))
Catch
Log("Error setting system UI visibility flags")
End Try
End Sub
Sub GetRealSize As LayoutValues
Dim lv As LayoutValues
Dim ctxt As JavaObject
ctxt.InitializeContext
Dim WindowManager As JavaObject = ctxt.RunMethodJO("getSystemService", Array("window"))
Dim display As JavaObject = WindowManager.RunMethod("getDefaultDisplay", Null)
Dim point As JavaObject
point.InitializeNewInstance("android.graphics.Point", Null)
display.RunMethod("getRealSize", Array(point))
lv.Width = point.GetField("x")
lv.Height = point.GetField("y")
lv.Scale = 100dip / 100
Return lv
End Sub
Sub ResetMatrix
d = False
Dim sx As Int = 0, sy As Int = 0
Dim awidthfloat As Float = awidth ' Native resolution
Dim aheightfloat As Float = aheight
Dim vwidthfloat As Float = vwidth ' Virtual resolution
Dim vheightfloat As Float = vheight
intwidth = Floor(awidthfloat / vwidthfloat)
intheight = Floor(aheightfloat / vheightfloat)
If intwidth > intheight Then intwidth = intheight
If intheight > intwidth Then intheight = intwidth
If intwidth < 1 Then intwidth = 1
If intheight < 1 Then intheight = 1
startx = (awidth - (vwidth * intwidth)) / 2
starty = (aheight - (vheight * intheight)) / 2
g0 = idmatrix.cpy : g1 = idmatrix.cpy ' new matrix
g1.translate(startx+(sx*intwidth),starty+(sy*intheight),0) ' order rev
g1.scale(intwidth,intwidth,1.0) ' order rev
End Sub
' Screenshot protection, run after created the LG surface
Sub BlockScreenshots
Dim jo As JavaObject
jo.InitializeContext
jo.RunMethod("securescreen", Null)
End Sub
Sub AllowScreenshots
Dim jo As JavaObject
jo.InitializeContext
jo.RunMethod("unsecurescreen", Null)
End Sub
#If Java
import android.annotation.TargetApi;
import android.content.Context;
import android.view.WindowManager.*;
public void securescreen() {
this.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
}
public void unsecurescreen() {
this.getWindow().clearFlags(LayoutParams.FLAG_SECURE);
}
#End If