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

Add horizontal commit from flutter/plugins repo #4

Merged
merged 1 commit into from
Aug 22, 2019
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
4 changes: 4 additions & 0 deletions packages/firebase_admob/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.9.0+4

* Add the ability to horizontally adjust the ads banner location by specifying a pixel offset from the centre.

## 0.9.0+3

* Update google-services Android gradle plugin to 4.3.0 in documentation and examples.
Expand Down
19 changes: 18 additions & 1 deletion packages/firebase_admob/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,23 @@ myBanner
..show(
// Positions the banner ad 60 pixels from the bottom of the screen
anchorOffset: 60.0,
// Positions the banner ad 10 pixels from the center of the screen to the right
horizontalCenterOffset: 10.0,
// Banner Position
anchorType: AnchorType.bottom,
);
```

Ads must be loaded before they're shown.
```dart
myBanner
// typically this happens well before the ad is shown
..load()
..show(
// Positions the banner ad 60 pixels from the bottom of the screen
anchorOffset: 60.0,
// Positions the banner ad 10 pixels from the center of the screen to the left
horizontalCenterOffset: -10.0,
// Banner Position
anchorType: AnchorType.bottom,
);
Expand All @@ -133,6 +150,7 @@ myInterstitial
..show(
anchorType: AnchorType.bottom,
anchorOffset: 0.0,
horizontalCenterOffset: 0.0,
);
```

Expand Down Expand Up @@ -186,7 +204,6 @@ method.
This is just an initial version of the plugin. There are still some
limitations:

- Banner ads have limited positioning functionality. They can be positioned at the top or the bottom of the screen and at a logical pixel offset from the edge.
- Banner ads cannot be animated into view.
- It's not possible to specify a banner ad's size.
- There's no support for native ads.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@ private void callShowAd(int id, MethodCall call, Result result) {
if (call.argument("anchorOffset") != null) {
ad.anchorOffset = Double.parseDouble((String) call.argument("anchorOffset"));
}
if (call.argument("horizontalCenterOffset") != null) {
ad.horizontalCenterOffset =
Double.parseDouble((String) call.argument("horizontalCenterOffset"));
}
if (call.argument("anchorType") != null) {
ad.anchorType = call.argument("anchorType").equals("bottom") ? Gravity.BOTTOM : Gravity.TOP;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ abstract class MobileAd extends AdListener {
final int id;
Status status;
double anchorOffset;
double horizontalCenterOffset;
int anchorType;

enum Status {
Expand All @@ -44,6 +45,7 @@ private MobileAd(int id, Activity activity, MethodChannel channel) {
this.channel = channel;
this.status = Status.CREATED;
this.anchorOffset = 0.0;
this.horizontalCenterOffset = 0.0;
this.anchorType = Gravity.BOTTOM;
allAds.put(id, this);
}
Expand Down Expand Up @@ -160,10 +162,13 @@ void show() {
content.addView(adView);
final float scale = activity.getResources().getDisplayMetrics().density;

int left = horizontalCenterOffset > 0 ? (int) (horizontalCenterOffset * scale) : 0;
int right =
horizontalCenterOffset < 0 ? (int) (Math.abs(horizontalCenterOffset) * scale) : 0;
if (anchorType == Gravity.BOTTOM) {
content.setPadding(0, 0, 0, (int) (anchorOffset * scale));
content.setPadding(left, 0, right, (int) (anchorOffset * scale));
} else {
content.setPadding(0, (int) (anchorOffset * scale), 0, 0);
content.setPadding(left, (int) (anchorOffset * scale), right, 0);
}

activity.addContentView(
Expand Down
8 changes: 8 additions & 0 deletions packages/firebase_admob/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,14 @@ class _MyAppState extends State<MyApp> {
..load()
..show();
}),
RaisedButton(
child: const Text('SHOW BANNER WITH OFFSET'),
onPressed: () {
_bannerAd ??= createBannerAd();
_bannerAd
..load()
..show(horizontalCenterOffset: -50, anchorOffset: 100);
}),
RaisedButton(
child: const Text('REMOVE BANNER'),
onPressed: () {
Expand Down
4 changes: 3 additions & 1 deletion packages/firebase_admob/ios/Classes/FLTMobileAd.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ typedef enum : NSUInteger {
- (FLTMobileAdStatus)status;
- (void)loadWithAdUnitId:(NSString *)adUnitId targetingInfo:(NSDictionary *)targetingInfo;
- (void)show;
- (void)showAtOffset:(double)anchorOffset fromAnchor:(int)anchorType;
- (void)showAtOffset:(double)anchorOffset
hCenterOffset:(double)horizontalCenterOffset
fromAnchor:(int)anchorType;
- (void)dispose;
@end

Expand Down
13 changes: 10 additions & 3 deletions packages/firebase_admob/ios/Classes/FLTMobileAd.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ @implementation FLTMobileAd
FlutterMethodChannel *_channel;
FLTMobileAdStatus _status;
double _anchorOffset;
double _horizontalCenterOffset;
int _anchorType;

+ (void)initialize {
Expand All @@ -22,6 +23,7 @@ + (void)initialize {
}
_anchorType = 0;
_anchorOffset = 0;
_horizontalCenterOffset = 0;

if (statusToString == nil) {
statusToString = @{
Expand Down Expand Up @@ -53,6 +55,7 @@ - (instancetype)initWithId:(NSNumber *)mobileAdId channel:(FlutterMethodChannel
_channel = channel;
_status = CREATED;
_anchorOffset = 0;
_horizontalCenterOffset = 0;
_anchorType = 0;
allAds[mobileAdId] = self;
}
Expand All @@ -67,12 +70,15 @@ - (void)loadWithAdUnitId:(NSString *)adUnitId targetingInfo:(NSDictionary *)targ
// Implemented by the Banner and Interstitial subclasses
}

- (void)showAtOffset:(double)anchorOffset fromAnchor:(int)anchorType {
- (void)showAtOffset:(double)anchorOffset
hCenterOffset:(double)horizontalCenterOffset
fromAnchor:(int)anchorType {
_anchorType = anchorType;
_anchorOffset = anchorOffset;
if (_anchorType == 0) {
_anchorOffset = -_anchorOffset;
}
_horizontalCenterOffset = horizontalCenterOffset;
[self show];
}

Expand Down Expand Up @@ -146,7 +152,8 @@ - (void)show {
if (@available(ios 11.0, *)) {
UILayoutGuide *guide = screen.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
[_banner.centerXAnchor constraintEqualToAnchor:guide.centerXAnchor],
[_banner.centerXAnchor constraintEqualToAnchor:guide.centerXAnchor
constant:_horizontalCenterOffset],
[_banner.bottomAnchor
constraintEqualToAnchor:_anchorType == 0 ? guide.bottomAnchor : guide.topAnchor
constant:_anchorOffset]
Expand All @@ -161,7 +168,7 @@ - (void)show {

- (void)placeBannerPreIos11 {
UIView *screen = [FLTMobileAd rootViewController].view;
CGFloat x = screen.frame.size.width / 2 - _banner.frame.size.width / 2;
CGFloat x = screen.frame.size.width / 2 - _banner.frame.size.width / 2 + _horizontalCenterOffset;
CGFloat y;
if (_anchorType == 0) {
y = screen.frame.size.height - _banner.frame.size.height + _anchorOffset;
Expand Down
6 changes: 5 additions & 1 deletion packages/firebase_admob/ios/Classes/FirebaseAdMobPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -187,15 +187,19 @@ - (void)callShowAd:(NSNumber *)mobileAdId
}

double offset = 0.0;
double horizontalCenterOffset = 0.0;
int type = 0;
if (call.arguments[@"anchorOffset"] != nil) {
offset = [call.arguments[@"anchorOffset"] doubleValue];
}
if (call.arguments[@"horizontalCenterOffset"] != nil) {
horizontalCenterOffset = [call.arguments[@"horizontalCenterOffset"] doubleValue];
}
if (call.arguments[@"anchorType"] != nil) {
type = [call.arguments[@"anchorType"] isEqualToString:@"bottom"] ? 0 : 1;
}

[ad showAtOffset:offset fromAnchor:type];
[ad showAtOffset:offset hCenterOffset:horizontalCenterOffset fromAnchor:type];
result([NSNumber numberWithBool:YES]);
}

Expand Down
8 changes: 6 additions & 2 deletions packages/firebase_admob/lib/firebase_admob.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import 'dart:async';
import 'dart:io' show Platform;

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:meta/meta.dart';

Expand Down Expand Up @@ -221,11 +222,14 @@ abstract class MobileAd {
/// anchorOffset is the logical pixel offset from the edge of the screen (default 0.0)
/// anchorType place advert at top or bottom of screen (default bottom)
Future<bool> show(
{double anchorOffset = 0.0, AnchorType anchorType = AnchorType.bottom}) {
{double anchorOffset = 0.0,
double horizontalCenterOffset = 0.0,
AnchorType anchorType = AnchorType.bottom}) {
return _invokeBooleanMethod("showAd", <String, dynamic>{
'id': id,
'anchorOffset': anchorOffset.toString(),
'anchorType': anchorType == AnchorType.top ? "top" : "bottom"
'horizontalCenterOffset': horizontalCenterOffset.toString(),
'anchorType': describeEnum(anchorType)
});
}

Expand Down
2 changes: 1 addition & 1 deletion packages/firebase_admob/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: Flutter plugin for Firebase AdMob, supporting
banner, interstitial (full-screen), and rewarded video ads
author: Flutter Team <flutter-dev@googlegroups.com>
homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_admob
version: 0.9.0+3
version: 0.9.0+4

flutter:
plugin:
Expand Down
6 changes: 5 additions & 1 deletion packages/firebase_admob/test/firebase_admob_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ void main() {
isMethodCall('showAd', arguments: <String, dynamic>{
'id': id,
'anchorOffset': '0.0',
'horizontalCenterOffset': '0.0',
'anchorType': 'bottom',
}),
isMethodCall('disposeAd', arguments: <String, dynamic>{
Expand All @@ -92,7 +93,9 @@ void main() {
expect(await interstitial.load(), true);
expect(
await interstitial.show(
anchorOffset: 60.0, anchorType: AnchorType.top),
anchorOffset: 60.0,
horizontalCenterOffset: 10.0,
anchorType: AnchorType.top),
true);
expect(await interstitial.dispose(), true);

Expand All @@ -105,6 +108,7 @@ void main() {
isMethodCall('showAd', arguments: <String, dynamic>{
'id': id,
'anchorOffset': '60.0',
'horizontalCenterOffset': '10.0',
'anchorType': 'top',
}),
isMethodCall('disposeAd', arguments: <String, dynamic>{
Expand Down