Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HB- 6580] Fix Resize when ChartboostMediationBannerView API is in use #180

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,9 @@ class BannerAdWrapper(private val ad: HeliumBannerAd) {
// so we don't make any adjustments in container's position
if (usesGravity) {
when (axis) {
0 -> ad.layoutParams = ViewGroup.LayoutParams(newSize.width, ad.layoutParams.height)
1 -> ad.layoutParams = ViewGroup.LayoutParams(ad.layoutParams.width, newSize.height)
else -> ad.layoutParams = ViewGroup.LayoutParams(newSize.width, newSize.height)
0 -> ad.layoutParams = RelativeLayout.LayoutParams(newSize.width, ad.layoutParams.height)
1 -> ad.layoutParams = RelativeLayout.LayoutParams(ad.layoutParams.width, newSize.height)
else -> ad.layoutParams = RelativeLayout.LayoutParams(newSize.width, newSize.height)
}
return@runTaskOnUiThread
}
Expand Down Expand Up @@ -273,6 +273,7 @@ class BannerAdWrapper(private val ad: HeliumBannerAd) {
}
}
}


fun setDraggability(canDrag: Boolean) {
runTaskOnUiThread {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.chartboost.mediation.unity

import android.content.Context
import android.os.Build
import android.util.DisplayMetrics
import android.view.DisplayCutout
import android.view.MotionEvent
import android.widget.RelativeLayout
import com.chartboost.heliumsdk.ad.HeliumBannerAd
import com.unity3d.player.UnityPlayer
import kotlin.math.pow
import kotlin.math.sqrt

Expand All @@ -16,14 +18,14 @@ class BannerLayout
private var dragListener: IBannerDragListener
) : RelativeLayout(context) {

var canDrag: Boolean = false
private var safeAreaTop:Int = 0
private var safeAreaLeft:Int = 0
private var safeAreaRight:Int = 0
private var safeAreaBottom:Int = 0
private var screenWidth = 0;
private var screenHeight = 0;

var canDrag: Boolean = false
private val dragThresholdDistance = 10 // in pixels

private var startX: Int = 0
Expand All @@ -35,9 +37,17 @@ class BannerLayout
// making it clickable here allows onInterceptTouchEvent to intercept touch events on bannerView
bannerView.isClickable = true

screenWidth = context.resources.displayMetrics.widthPixels
screenHeight = context.resources.displayMetrics.heightPixels

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val bounds = UnityPlayer.currentActivity.windowManager.currentWindowMetrics.bounds
screenWidth = bounds.width()
screenHeight = bounds.height()
}
else {
val metrics = DisplayMetrics();
UnityPlayer.currentActivity.windowManager.defaultDisplay.getRealMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels
}

// Get safe area insets
setOnApplyWindowInsetsListener { _, windowInsets -> run {
Expand All @@ -56,7 +66,6 @@ class BannerLayout
}
}


override fun onInterceptTouchEvent(event: MotionEvent?): Boolean {

if (!canDrag)
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,14 @@ - (void) resize:(int)axis pivotX:(float) pivotX pivotY:(float)pivotY {
if(self.usesConstraints){
switch (axis) {
case 0: // Horizontal
frame.size.width = newSize.width;
[NSLayoutConstraint activateConstraints:@[[_bannerView.widthAnchor constraintEqualToConstant:newSize.width]]];
break;
case 1: // Vertical
frame.size.height = newSize.height;
[NSLayoutConstraint activateConstraints:@[[_bannerView.heightAnchor constraintEqualToConstant:newSize.height]]];
break;
default: // both
frame.size = newSize;
[NSLayoutConstraint activateConstraints:@[[_bannerView.widthAnchor constraintEqualToConstant:newSize.width]]];
[NSLayoutConstraint activateConstraints:@[[_bannerView.heightAnchor constraintEqualToConstant:newSize.height]]];
break;
}
}
Expand Down Expand Up @@ -81,15 +82,15 @@ - (void) resize:(int)axis pivotX:(float) pivotX pivotY:(float)pivotY {
break;
}
}
NSLog(@"Final Frame => origin : (%f, %f), size : (%f, %f)", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
_bannerView.frame = frame;
NSLog(@"Final Frame => origin : (%f, %f), size : (%f, %f)", _bannerView.frame.origin.x, _bannerView.frame.origin.y, _bannerView.frame.size.width, _bannerView.frame.size.height);
}

- (void)handlePan:(UIPanGestureRecognizer *)gr{
if(!self.canDrag)
return;

CGPoint translation = [gr translationInView:gr.view.superview];
CGPoint translation = [gr translationInView:gr.view];
CGPoint center = gr.view.center;

float newX = center.x + translation.x;
Expand All @@ -109,7 +110,6 @@ - (void)handlePan:(UIPanGestureRecognizer *)gr{
}

CGRect safeFrame = UIEdgeInsetsInsetRect(gr.view.superview.bounds, safeAreaInsets);
CGRect viewFrame = CGRectMake(newX, newY, gr.view.frame.size.width, gr.view.frame.size.height);

// do not move any part of the banner out of the safe area
if(left < safeFrame.origin.x || right > safeFrame.origin.x + safeFrame.size.width ||
Expand All @@ -123,7 +123,7 @@ - (void)handlePan:(UIPanGestureRecognizer *)gr{
center.y = newY;

gr.view.center = center;
[gr setTranslation:CGPointZero inView:gr.view.superview];
[gr setTranslation:CGPointZero inView:gr.view];

float scale = UIScreen.mainScreen.scale;
float x = gr.view.frame.origin.x * scale;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,9 @@ void _chartboostMediationBannerViewLoadAdWithScreenPos(const void *uniqueId, con
const char *metricsJson = dictionaryToJSON([adLoadResult metrics]);
callback(hashCode, uniqueId, loadId, metricsJson, "", "");
}];

ChartboostMediationBannerAdWrapper *bannerWrapper = (__bridge ChartboostMediationBannerAdWrapper *)uniqueId;
bannerWrapper.usesConstraints = true;
}

void _chartboostMediationBannerViewLoadAdWithXY(const void *uniqueId, const char *placementName, int sizeType, float width, float height, float x, float y, int hashCode, ChartboostMediationBannerAdLoadResultEvent callback) {
Expand Down Expand Up @@ -1005,6 +1008,9 @@ void _chartboostMediationBannerViewLoadAdWithXY(const void *uniqueId, const char
const char *metricsJson = dictionaryToJSON([adLoadResult metrics]);
callback(hashCode, uniqueId, loadId, metricsJson, "", "");
}];

ChartboostMediationBannerAdWrapper *bannerWrapper = (__bridge ChartboostMediationBannerAdWrapper *)uniqueId;
bannerWrapper.usesConstraints = false;
}

void _chartboostMediationBannerViewSetKeywords(const void* uniqueId, const char * keywords){
Expand Down