admob.monkey2 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. Namespace admob
  2. #Import "<std>"
  3. #If __MOBILE_TARGET__
  4. #Import "<mojo>"
  5. #If __TARGET__="android"
  6. #Import "admob_android"
  7. #Else If __TARGET__="ios"
  8. #Import "admob_ios"
  9. #Endif
  10. Using mojo..
  11. Enum AdState
  12. Initial=0
  13. Loading=1
  14. Ready=2
  15. Error=3
  16. End
  17. Class AdView Extends BBAdView
  18. Field Loading:Void()
  19. Field Ready:Void()
  20. Field Error:Void( error:Int )
  21. Field Rewarded:Void( type:String,amount:Int )
  22. Method New( size:String,layout:String,adUnitId:String,visible:Bool=True )
  23. Super.New( size,layout,adUnitId,visible )
  24. _rewardedVideo=(size="rewardedvideo")
  25. _interstitial=(size="interstitial")
  26. _state=AdState.Initial
  27. _callback=std.async.CreateAsyncCallback( StateChanged,False )
  28. Super.start( _callback )
  29. 'BeginPolling()
  30. End
  31. Property Visible:Bool()
  32. Return Super.getVisible()
  33. Setter( visible:Bool )
  34. If _rewardedVideo Or _interstitial
  35. If Not visible Or _state<>AdState.Ready Return
  36. Super.setVisible( visible )
  37. _playing=True
  38. ' BeginPolling()
  39. Endif
  40. Super.setVisible( visible )
  41. End
  42. Property State:AdState()
  43. Return _state
  44. End
  45. Method Reload()
  46. If _state<>AdState.Error Return
  47. _state=AdState.Initial
  48. ' BeginPolling()
  49. Super.reload()
  50. End
  51. Private
  52. Field _rewardedVideo:Bool
  53. Field _interstitial:Bool
  54. Field _state:AdState
  55. Field _playing:Bool
  56. Field _callback:Int
  57. Method StateChanged()
  58. Local newstate:=Cast<AdState>( Super.getState() )
  59. ' Print "StateChanged: state="+Int( _state )+", newstate="+Int( newstate )
  60. If _playing
  61. Select newstate
  62. Case AdState.Initial
  63. _state=newstate
  64. _playing=False
  65. Super.reload()
  66. If _rewardedVideo And Super.getRewardType()
  67. Local rewardType:=Super.getRewardType()
  68. Local rewardAmount:=Super.getRewardAmount()
  69. Super.consumeReward()
  70. Rewarded( rewardType,rewardAmount )
  71. Endif
  72. End
  73. Else If newstate<>_state
  74. Select newstate
  75. Case AdState.Loading
  76. Assert( _state=AdState.Initial )
  77. _state=newstate
  78. Loading()
  79. Case AdState.Ready
  80. Assert( _state=AdState.Initial Or _state=AdState.Loading )
  81. _state=newstate
  82. Ready()
  83. Case AdState.Error
  84. Assert( _state=AdState.Initial Or _state=AdState.Loading )
  85. _state=newstate
  86. Error( Super.getError() )
  87. End
  88. Endif
  89. End
  90. #rem
  91. Field _polling:Bool
  92. Method BeginPolling()
  93. If Not _polling And (_state=AdState.Initial Or _state=AdState.Loading Or _playing)
  94. App.Idle+=Poll
  95. _polling=True
  96. Endif
  97. End
  98. Method Poll()
  99. _polling=False
  100. StateChanged()
  101. BeginPolling()
  102. End
  103. #end
  104. End