diff --git a/.travis.yml b/.travis.yml index 8151cebdb2f0..508754a4f5df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,15 +70,15 @@ matrix: # suppressing output of sdkmanager to keep log under 4MB (travis limit) - echo y | sdkmanager "tools" >/dev/null - echo y | sdkmanager "platform-tools" >/dev/null - - echo y | sdkmanager "build-tools;25.0.3" >/dev/null - - echo y | sdkmanager "platforms;android-25" >/dev/null + - echo y | sdkmanager "build-tools;26.0.3" >/dev/null + - echo y | sdkmanager "platforms;android-26" >/dev/null - echo y | sdkmanager "extras;android;m2repository" >/dev/null - echo y | sdkmanager "extras;google;m2repository" >/dev/null - echo y | sdkmanager "patcher;v4" >/dev/null - sdkmanager --list - - wget http://services.gradle.org/distributions/gradle-3.5-bin.zip - - unzip -qq gradle-3.5-bin.zip - - export GRADLE_HOME=$PWD/gradle-3.5 + - wget http://services.gradle.org/distributions/gradle-4.1-bin.zip + - unzip -qq gradle-4.1-bin.zip + - export GRADLE_HOME=$PWD/gradle-4.1 - export PATH=$GRADLE_HOME/bin:$PATH - gradle -v - git clone https://github.com/flutter/flutter.git --depth 1 @@ -92,7 +92,7 @@ matrix: env: - SHARD=Build-example-IPAs language: generic - osx_image: xcode8.3 + osx_image: xcode9.2 before_script: - brew update - brew install --HEAD libimobiledevice diff --git a/FlutterFire.md b/FlutterFire.md index e8588c3e2d73..cf6b37574b0d 100644 --- a/FlutterFire.md +++ b/FlutterFire.md @@ -17,6 +17,7 @@ The plugins are still under development, and some APIs might not be available ye | [firebase_admob][admob_pub] | [Firebase AdMob][admob_product] | [`packages/firebase_admob`][admob_code] | | [firebase_analytics][analytics_pub] | [Firebase Analytics][analytics_product] | [`packages/firebase_analytics`][analytics_code] | | [firebase_auth][auth_pub] | [Firebase Authentication][auth_product] | [`packages/firebase_auth`][auth_code] | +| [firebase_core][core_pub] | [Firebase Core][core_product] | [`packages/firebase_core`][core_code] | | [firebase_database][database_pub] | [Firebase Realtime Database][database_product] | [`packages/firebase_database`][database_code] | | [cloud_firestore][firestore_pub] | [Cloud Firestore][firestore_product] | [`packages/cloud_firestore`][firestore_code] | | [firebase_messaging][messaging_pub] | [Firebase Cloud Messaging][messaging_product] | [`packages/firebase_messaging`][messaging_code] | @@ -38,6 +39,10 @@ The plugins are still under development, and some APIs might not be available ye [firestore_product]: https://firebase.google.com/products/firestore/ [firestore_code]: https://github.com/flutter/plugins/tree/master/packages/cloud_firestore +[core_pub]: https://pub.dartlang.org/packages/firebase_core +[core_product]: https://firebase.google.com/ +[core_code]: https://github.com/flutter/plugins/tree/master/packages/firebase_core + [database_pub]: https://pub.dartlang.org/packages/firebase_database [database_product]: https://firebase.google.com/products/database/ [database_code]: https://github.com/flutter/plugins/tree/master/packages/firebase_database diff --git a/README.md b/README.md index bf2fc5667f7b..abd9c8bbbf86 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ These are the available plugins in this repository. | [firebase_analytics](./packages/firebase_analytics/) | [![pub package](https://img.shields.io/pub/v/firebase_analytics.svg)](https://pub.dartlang.org/packages/firebase_analytics) | | [firebase_auth](./packages/firebase_auth/) | [![pub package](https://img.shields.io/pub/v/firebase_auth.svg)](https://pub.dartlang.org/packages/firebase_auth) | | [cloud_firestore](./packages/cloud_firestore/) | [![pub package](https://img.shields.io/pub/v/cloud_firestore.svg)](https://pub.dartlang.org/packages/cloud_firestore) +| [firebase_core](./packages/firebase_core/) | [![pub package](https://img.shields.io/pub/v/firebase_core.svg)](https://pub.dartlang.org/packages/firebase_core) | | [firebase_database](./packages/firebase_database/) | [![pub package](https://img.shields.io/pub/v/firebase_database.svg)](https://pub.dartlang.org/packages/firebase_database) | | [firebase_messaging](./packages/firebase_messaging/) | [![pub package](https://img.shields.io/pub/v/firebase_messaging.svg)](https://pub.dartlang.org/packages/firebase_messaging) | | [firebase_storage](./packages/firebase_storage/) | [![pub package](https://img.shields.io/pub/v/firebase_storage.svg)](https://pub.dartlang.org/packages/firebase_storage) | diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md index 08f3ef124310..96421302b789 100644 --- a/packages/android_alarm_manager/CHANGELOG.md +++ b/packages/android_alarm_manager/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.0.4] - 12/20/2017 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## [0.0.3] - 12/4/2017 * Adds use of a Firebase plugin to the example. The example also now diff --git a/packages/android_alarm_manager/android/build.gradle b/packages/android_alarm_manager/android/build.gradle index fa902d5fffff..bfb6a16661ed 100644 --- a/packages/android_alarm_manager/android/build.gradle +++ b/packages/android_alarm_manager/android/build.gradle @@ -3,35 +3,31 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/android_alarm_manager/example/android/.gitignore b/packages/android_alarm_manager/example/android/.gitignore index 1658458c9245..16e843edcb73 100644 --- a/packages/android_alarm_manager/example/android/.gitignore +++ b/packages/android_alarm_manager/example/android/.gitignore @@ -7,3 +7,7 @@ /build /captures GeneratedPluginRegistrant.java + +/gradle/wrapper/gradle-wrapper.jar +/gradlew +/gradlew.bat diff --git a/packages/android_alarm_manager/example/android/app/build.gradle b/packages/android_alarm_manager/example/android/app/build.gradle index 16fb85d8e638..bdfb5776d609 100644 --- a/packages/android_alarm_manager/example/android/app/build.gradle +++ b/packages/android_alarm_manager/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -26,7 +26,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "io.flutter.androidalarmmanagerexample" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -46,9 +46,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.4.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/android_alarm_manager/example/android/build.gradle b/packages/android_alarm_manager/example/android/build.gradle index ffe048a6c254..f9162d656761 100644 --- a/packages/android_alarm_manager/example/android/build.gradle +++ b/packages/android_alarm_manager/example/android/build.gradle @@ -1,30 +1,27 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - // Add the google services classpath - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/android_alarm_manager/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/android_alarm_manager/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..aa901e1e0db2 100644 --- a/packages/android_alarm_manager/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/android_alarm_manager/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/android_alarm_manager/pubspec.yaml b/packages/android_alarm_manager/pubspec.yaml index 3efcb4376610..34d86a92789f 100644 --- a/packages/android_alarm_manager/pubspec.yaml +++ b/packages/android_alarm_manager/pubspec.yaml @@ -1,6 +1,6 @@ name: android_alarm_manager description: A plugin for using the AlarmManager on Android. -version: 0.0.2 +version: 0.0.4 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager @@ -8,10 +8,6 @@ dependencies: flutter: sdk: flutter -# For information on the generic Dart part of this file, see the -# following page: https://www.dartlang.org/tools/pub/pubspec - -# The following section is specific to Flutter. flutter: plugin: androidPackage: io.flutter.androidalarmmanager diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md index d14e55e0e6d9..284ed27d963b 100644 --- a/packages/android_intent/CHANGELOG.md +++ b/packages/android_intent/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.0.3 * Add FLT prefix to iOS types. diff --git a/packages/android_intent/android/.gitignore b/packages/android_intent/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/android_intent/android/.gitignore +++ b/packages/android_intent/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/android_intent/android/build.gradle b/packages/android_intent/android/build.gradle index 72a12fa6526e..a44aeb9d0c11 100644 --- a/packages/android_intent/android/build.gradle +++ b/packages/android_intent/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/android_intent/example/android/.gitignore b/packages/android_intent/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/android_intent/example/android/.gitignore +++ b/packages/android_intent/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/android_intent/example/android/app/build.gradle b/packages/android_intent/example/android/app/build.gradle index 860c8b5c123d..2a066b7f3c69 100644 --- a/packages/android_intent/example/android/app/build.gradle +++ b/packages/android_intent/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -24,7 +24,7 @@ android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "io.flutter.plugins.androidintentexample" } @@ -43,7 +43,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/android_intent/example/android/build.gradle b/packages/android_intent/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/android_intent/example/android/build.gradle +++ b/packages/android_intent/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/video_player/android/gradle/wrapper/gradle-wrapper.properties b/packages/android_intent/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 80% rename from packages/video_player/android/gradle/wrapper/gradle-wrapper.properties rename to packages/android_intent/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..bf1b63c3462c 100644 --- a/packages/video_player/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/android_intent/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/android_intent/pubspec.yaml b/packages/android_intent/pubspec.yaml index 39c3a09e12de..b0062504a9b4 100644 --- a/packages/android_intent/pubspec.yaml +++ b/packages/android_intent/pubspec.yaml @@ -2,7 +2,7 @@ name: android_intent description: A plugin for launching Intents on Android. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/android_intent -version: 0.0.3 +version: 0.1.0 flutter: plugin: diff --git a/packages/battery/CHANGELOG.md b/packages/battery/CHANGELOG.md index 2c43be578473..39322d954f44 100644 --- a/packages/battery/CHANGELOG.md +++ b/packages/battery/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.0.2 * Add FLT prefix to iOS types. diff --git a/packages/battery/android/.gitignore b/packages/battery/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/battery/android/.gitignore +++ b/packages/battery/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/battery/android/build.gradle b/packages/battery/android/build.gradle index 05f23f35ec47..80d1879959d3 100644 --- a/packages/battery/android/build.gradle +++ b/packages/battery/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java b/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java index 5a83e5262682..b6d3e799e5c7 100644 --- a/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java +++ b/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java @@ -30,16 +30,16 @@ public static void registerWith(PluginRegistry.Registrar registrar) { new MethodChannel(registrar.messenger(), "plugins.flutter.io/battery"); final EventChannel eventChannel = new EventChannel(registrar.messenger(), "plugins.flutter.io/charging"); - final BatteryPlugin instance = new BatteryPlugin(registrar.context()); + final BatteryPlugin instance = new BatteryPlugin(registrar); eventChannel.setStreamHandler(instance); methodChannel.setMethodCallHandler(instance); } - BatteryPlugin(Context context) { - this.context = context; + BatteryPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; } - private final Context context; + private final PluginRegistry.Registrar registrar; private BroadcastReceiver chargingStateChangeReceiver; @Override @@ -60,18 +60,21 @@ public void onMethodCall(MethodCall call, Result result) { @Override public void onListen(Object arguments, EventSink events) { chargingStateChangeReceiver = createChargingStateChangeReceiver(events); - context.registerReceiver( - chargingStateChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + registrar + .context() + .registerReceiver( + chargingStateChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } @Override public void onCancel(Object arguments) { - context.unregisterReceiver(chargingStateChangeReceiver); + registrar.context().unregisterReceiver(chargingStateChangeReceiver); chargingStateChangeReceiver = null; } private int getBatteryLevel() { int batteryLevel = -1; + Context context = registrar.context(); if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { BatteryManager batteryManager = (BatteryManager) context.getSystemService(context.BATTERY_SERVICE); diff --git a/packages/battery/example/android/.gitignore b/packages/battery/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/battery/example/android/.gitignore +++ b/packages/battery/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/battery/example/android/app/build.gradle b/packages/battery/example/android/app/build.gradle index ae0fe93aa0ee..7bcbcdd6d8fd 100644 --- a/packages/battery/example/android/app/build.gradle +++ b/packages/battery/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,7 +41,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/battery/example/android/build.gradle b/packages/battery/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/battery/example/android/build.gradle +++ b/packages/battery/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/device_info/android/gradle/wrapper/gradle-wrapper.properties b/packages/battery/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 80% rename from packages/device_info/android/gradle/wrapper/gradle-wrapper.properties rename to packages/battery/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..bf1b63c3462c 100644 --- a/packages/device_info/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/battery/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/battery/pubspec.yaml b/packages/battery/pubspec.yaml index eddb4eb5aee4..10a9a0353a23 100644 --- a/packages/battery/pubspec.yaml +++ b/packages/battery/pubspec.yaml @@ -3,7 +3,7 @@ name: battery description: Flutter plugin for accessing information about the battery. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/battery -version: 0.0.2 +version: 0.1.0 flutter: plugin: diff --git a/packages/cloud_firestore/CHANGELOG.md b/packages/cloud_firestore/CHANGELOG.md index 257a89739fdf..a7ddf3a29152 100644 --- a/packages/cloud_firestore/CHANGELOG.md +++ b/packages/cloud_firestore/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.2.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 0.1.2 * Support for `DocumentReference` update and merge writes diff --git a/packages/cloud_firestore/android/.gitignore b/packages/cloud_firestore/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/cloud_firestore/android/.gitignore +++ b/packages/cloud_firestore/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/cloud_firestore/android/build.gradle b/packages/cloud_firestore/android/build.gradle index ee2413015d61..53f05039bc85 100755 --- a/packages/cloud_firestore/android/build.gradle +++ b/packages/cloud_firestore/android/build.gradle @@ -3,17 +3,19 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() mavenLocal() } @@ -22,8 +24,8 @@ allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -32,7 +34,7 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-firestore:11.4.+' - compile 'com.google.firebase:firebase-core:11.4.+' + api 'com.google.firebase:firebase-firestore:[11.4.0,12.0[' + api 'com.google.firebase:firebase-core:[11.4.0,12.0[' } } diff --git a/packages/cloud_firestore/example/android/.gitignore b/packages/cloud_firestore/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100755 --- a/packages/cloud_firestore/example/android/.gitignore +++ b/packages/cloud_firestore/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/cloud_firestore/example/android/app/build.gradle b/packages/cloud_firestore/example/android/app/build.gradle index b1f6e7f46a6b..143c54c1d70e 100755 --- a/packages/cloud_firestore/example/android/app/build.gradle +++ b/packages/cloud_firestore/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,9 +41,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/cloud_firestore/example/android/build.gradle b/packages/cloud_firestore/example/android/build.gradle index d8116ba7cfc5..6d31bc088bf0 100755 --- a/packages/cloud_firestore/example/android/build.gradle +++ b/packages/cloud_firestore/example/android/build.gradle @@ -1,24 +1,20 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } } @@ -26,13 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/cloud_firestore/pubspec.yaml b/packages/cloud_firestore/pubspec.yaml index f2b08953a474..ef17d0a2f31d 100755 --- a/packages/cloud_firestore/pubspec.yaml +++ b/packages/cloud_firestore/pubspec.yaml @@ -3,7 +3,7 @@ name: cloud_firestore description: Cloud Firestore plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/cloud_firestore -version: 0.1.2 +version: 0.2.0 flutter: plugin: diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 1693a44a5c3e..0ab163b8a080 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.2.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.1.1 * Add FLT prefix to iOS types. diff --git a/packages/connectivity/android/.gitignore b/packages/connectivity/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/connectivity/android/.gitignore +++ b/packages/connectivity/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/connectivity/android/build.gradle b/packages/connectivity/android/build.gradle index 757f33dd78dd..d0df4bb79b76 100644 --- a/packages/connectivity/android/build.gradle +++ b/packages/connectivity/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index f4b36639fcaa..dbfbddff81d9 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -21,7 +21,7 @@ /** ConnectivityPlugin */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Context context; + private final Registrar registrar; private final ConnectivityManager manager; private BroadcastReceiver receiver; @@ -31,25 +31,28 @@ public static void registerWith(Registrar registrar) { new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); final EventChannel eventChannel = new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityPlugin instance = new ConnectivityPlugin(registrar.context()); + ConnectivityPlugin instance = new ConnectivityPlugin(registrar); channel.setMethodCallHandler(instance); eventChannel.setStreamHandler(instance); } - private ConnectivityPlugin(Context context) { - this.context = context; - this.manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + private ConnectivityPlugin(Registrar registrar) { + this.registrar = registrar; + this.manager = + (ConnectivityManager) registrar.context().getSystemService(Context.CONNECTIVITY_SERVICE); } @Override public void onListen(Object arguments, EventSink events) { receiver = createReceiver(events); - context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + registrar + .context() + .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } @Override public void onCancel(Object arguments) { - context.unregisterReceiver(receiver); + registrar.context().unregisterReceiver(receiver); receiver = null; } diff --git a/packages/connectivity/example/android/.gitignore b/packages/connectivity/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/connectivity/example/android/.gitignore +++ b/packages/connectivity/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/connectivity/example/android/app/build.gradle b/packages/connectivity/example/android/app/build.gradle index 9a49abc9e639..ef2d5ad79f4c 100644 --- a/packages/connectivity/example/android/app/build.gradle +++ b/packages/connectivity/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -39,7 +39,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/connectivity/example/android/build.gradle b/packages/connectivity/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/connectivity/example/android/build.gradle +++ b/packages/connectivity/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index 2044a1e97bee..daaee365fb4d 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -1,6 +1,6 @@ name: connectivity description: Allows developers to discover the state of the network connectivity. -version: 0.1.1 +version: 0.2.0 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity diff --git a/packages/device_info/CHANGELOG.md b/packages/device_info/CHANGELOG.md index 0f54dbd70339..63dc2e88bba1 100644 --- a/packages/device_info/CHANGELOG.md +++ b/packages/device_info/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.0.5 - December 3, 2017 * Added FLT prefix to iOS types diff --git a/packages/device_info/android/build.gradle b/packages/device_info/android/build.gradle index f848b6b73d80..d1bab3167c9e 100644 --- a/packages/device_info/android/build.gradle +++ b/packages/device_info/android/build.gradle @@ -3,28 +3,27 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/device_info/android/gradle/wrapper/gradle-wrapper.jar b/packages/device_info/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13372aef5e24..000000000000 Binary files a/packages/device_info/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/packages/device_info/android/gradlew b/packages/device_info/android/gradlew deleted file mode 100755 index 9d82f7891513..000000000000 --- a/packages/device_info/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/packages/device_info/android/gradlew.bat b/packages/device_info/android/gradlew.bat deleted file mode 100644 index 8a0b282aa688..000000000000 --- a/packages/device_info/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/packages/device_info/example/android/.gitignore b/packages/device_info/example/android/.gitignore index 1658458c9245..16e843edcb73 100644 --- a/packages/device_info/example/android/.gitignore +++ b/packages/device_info/example/android/.gitignore @@ -7,3 +7,7 @@ /build /captures GeneratedPluginRegistrant.java + +/gradle/wrapper/gradle-wrapper.jar +/gradlew +/gradlew.bat diff --git a/packages/device_info/example/android/app/build.gradle b/packages/device_info/example/android/app/build.gradle index 106620b64f5b..f013215fe31e 100644 --- a/packages/device_info/example/android/app/build.gradle +++ b/packages/device_info/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -42,7 +42,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.4.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/device_info/example/android/build.gradle b/packages/device_info/example/android/build.gradle index 879b8cabd7e4..447688755cf4 100644 --- a/packages/device_info/example/android/build.gradle +++ b/packages/device_info/example/android/build.gradle @@ -1,25 +1,26 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..aa901e1e0db2 100644 --- a/packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/device_info/pubspec.yaml b/packages/device_info/pubspec.yaml index a6f2c4e26739..aabb0fb1dc5c 100644 --- a/packages/device_info/pubspec.yaml +++ b/packages/device_info/pubspec.yaml @@ -1,6 +1,6 @@ name: device_info description: Provides detailed information about the device the Flutter app is running on. -version: 0.0.5 +version: 0.1.0 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/device_info diff --git a/packages/firebase_admob/CHANGELOG.md b/packages/firebase_admob/CHANGELOG.md index e09d05ae4346..7a6f3f853670 100644 --- a/packages/firebase_admob/CHANGELOG.md +++ b/packages/firebase_admob/CHANGELOG.md @@ -1,12 +1,26 @@ -## [0.0.3] +## 0.1.1 + +* Separated Load and Show for interstitials in example app +* Added platform-specific App ID and ad unit ID values +* Updated for gradle 4.x and API 26 + +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + +## 0.0.3 * Add FLT prefix to iOS types * Change GMS dependency to 11.4.+ -## [0.0.2] +## 0.0.2 * Change GMS dependency to 11.+ -## [0.0.1] +## 0.0.1 * Initial Release: not ready for production use diff --git a/packages/firebase_admob/android/.gitignore b/packages/firebase_admob/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/firebase_admob/android/.gitignore +++ b/packages/firebase_admob/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_admob/android/build.gradle b/packages/firebase_admob/android/build.gradle index 2cac169d2c5d..3c61319890b5 100644 --- a/packages/firebase_admob/android/build.gradle +++ b/packages/firebase_admob/android/build.gradle @@ -3,6 +3,7 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } @@ -13,6 +14,7 @@ buildscript { rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,7 +32,7 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-ads:11.4.+' + api 'com.google.firebase:firebase-core:[11.4.0,12.0[' + api 'com.google.firebase:firebase-ads:[11.4.0,12.0[' } } diff --git a/packages/firebase_admob/android/src/main/AndroidManifest.xml b/packages/firebase_admob/android/src/main/AndroidManifest.xml index 331c1c617d45..14f9c08a2327 100644 --- a/packages/firebase_admob/android/src/main/AndroidManifest.xml +++ b/packages/firebase_admob/android/src/main/AndroidManifest.xml @@ -3,7 +3,5 @@ android:versionCode="1" android:versionName="0.0.1"> - - - + diff --git a/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java b/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java index 18816c3622a1..6d787c3a06dc 100644 --- a/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java +++ b/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java @@ -19,7 +19,7 @@ public class FirebaseAdMobPlugin implements MethodCallHandler { private static final String TAG = "flutter"; - private final Activity activity; + private final Registrar registrar; private final MethodChannel channel; private LinearLayout banner; @@ -28,13 +28,13 @@ public class FirebaseAdMobPlugin implements MethodCallHandler { public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_admob"); - channel.setMethodCallHandler(new FirebaseAdMobPlugin(registrar.activity(), channel)); + channel.setMethodCallHandler(new FirebaseAdMobPlugin(registrar, channel)); } - private FirebaseAdMobPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseAdMobPlugin(Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); } private void callInitialize(MethodCall call, Result result) { @@ -43,7 +43,7 @@ private void callInitialize(MethodCall call, Result result) { result.error("no_app_id", "a non-empty AdMob appId was not provided", null); return; } - MobileAds.initialize(activity, appId); + MobileAds.initialize(registrar.context(), appId); result.success(Boolean.TRUE); } @@ -93,6 +93,12 @@ public void onMethodCall(MethodCall call, Result result) { return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "firebase_admob plugin requires a foreground activity", null); + return; + } + Integer id = call.argument("id"); if (id == null) { result.error( diff --git a/packages/firebase_admob/example/android/.gitignore b/packages/firebase_admob/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/firebase_admob/example/android/.gitignore +++ b/packages/firebase_admob/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_admob/example/android/app/build.gradle b/packages/firebase_admob/example/android/app/build.gradle index 0403a2fd6096..0af8e0815339 100644 --- a/packages/firebase_admob/example/android/app/build.gradle +++ b/packages/firebase_admob/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -40,10 +40,14 @@ flutter { source '../..' } +repositories { + google() +} + dependencies { - androidTestCompile 'com.android.support:support-annotations:25.2.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_admob/example/android/build.gradle b/packages/firebase_admob/example/android/build.gradle index a3af914a2567..6d31bc088bf0 100644 --- a/packages/firebase_admob/example/android/build.gradle +++ b/packages/firebase_admob/example/android/build.gradle @@ -1,24 +1,20 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.0.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } } @@ -26,13 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_admob/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_admob/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_admob/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_admob/example/lib/main.dart b/packages/firebase_admob/example/lib/main.dart index 5d17e66e7e2c..dbd92dfa18d2 100644 --- a/packages/firebase_admob/example/lib/main.dart +++ b/packages/firebase_admob/example/lib/main.dart @@ -2,20 +2,27 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io' show Platform; import 'package:flutter/material.dart'; import 'package:firebase_admob/firebase_admob.dart'; -// A placeholder AdMob App Id for testing. -const String appId = 'ca-app-pub-3940256099942544~3347511713'; +// A placeholder AdMob App Id for testing. AdMob App IDs and ad unit IDs are +// specific to a single operating system, so apps building for both Android and +// iOS will need a set for each platform. +const String androidAppId = 'ca-app-pub-3940256099942544~3347511713'; +const String iOSAppId = 'ca-app-pub-3940256099942544~1458002511'; -// Specify this to quiet Android log messages that say: -// Use AdRequest.Builder.addTestDevice("...") to get test ads on this device. -//const String testDevice = null; -const String testDevice = '33B6FA56617D7688A3A466295DED82BE'; +// These are AdMob's test ad unit IDs, which always return test ads. You're +// encouraged to use them for testing in your own apps. +const String androidBannerAdUnitId = 'ca-app-pub-3940256099942544/6300978111'; +const String androidInterstitialAdUnitId = + 'ca-app-pub-3940256099942544/1033173712'; +const String iOSBannerAdUnitId = 'ca-app-pub-3940256099942544/2934735716'; +const String iOSInterstitialAdUnitId = 'ca-app-pub-3940256099942544/4411468910'; -// See https://developers.google.com/admob/ios/test-ads -const String bannerAdUnitId = 'ca-app-pub-3940256099942544/6300978111'; -const String interstitialAdUnitId = 'ca-app-pub-3940256099942544/1033173712'; +// You can also test with your own ad unit IDs by registering your device as a +// test device. Check the logs for your device's ID value. +const String testDevice = 'YOUR_DEVICE_ID'; class MyApp extends StatefulWidget { @override @@ -37,7 +44,7 @@ class _MyAppState extends State { BannerAd createBannerAd() { return new BannerAd( - unitId: bannerAdUnitId, + unitId: Platform.isAndroid ? androidBannerAdUnitId : iOSBannerAdUnitId, targetingInfo: targetingInfo, listener: (MobileAdEvent event) { print("BannerAd event $event"); @@ -47,7 +54,9 @@ class _MyAppState extends State { InterstitialAd createInterstitialAd() { return new InterstitialAd( - unitId: interstitialAdUnitId, + unitId: Platform.isAndroid + ? androidInterstitialAdUnitId + : iOSInterstitialAdUnitId, targetingInfo: targetingInfo, listener: (MobileAdEvent event) { print("InterstitialAd event $event"); @@ -58,7 +67,8 @@ class _MyAppState extends State { @override void initState() { super.initState(); - FirebaseAdMob.instance.initialize(appId: appId); + FirebaseAdMob.instance + .initialize(appId: Platform.isAndroid ? androidAppId : iOSAppId); _bannerAd = createBannerAd()..load(); } @@ -96,12 +106,16 @@ class _MyAppState extends State { _bannerAd = null; }), new RaisedButton( - child: const Text('SHOW INTERSTITIAL'), + child: const Text('LOAD INTERSTITIAL'), onPressed: () { _interstitialAd?.dispose(); - _interstitialAd = createInterstitialAd() - ..load() - ..show(); + _interstitialAd = createInterstitialAd()..load(); + }, + ), + new RaisedButton( + child: const Text('SHOW INTERSTITIAL'), + onPressed: () { + _interstitialAd?.show(); }, ), ].map((Widget button) { diff --git a/packages/firebase_admob/pubspec.yaml b/packages/firebase_admob/pubspec.yaml index 6069e285eddb..4a1dbe556cc9 100644 --- a/packages/firebase_admob/pubspec.yaml +++ b/packages/firebase_admob/pubspec.yaml @@ -1,6 +1,6 @@ name: firebase_admob description: Firebase AdMob plugin for Flutter applications. -version: 0.0.3 +version: 0.1.1 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_admob diff --git a/packages/firebase_analytics/CHANGELOG.md b/packages/firebase_analytics/CHANGELOG.md index ed4d4fa4cff1..20740a16d325 100644 --- a/packages/firebase_analytics/CHANGELOG.md +++ b/packages/firebase_analytics/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.2.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 0.1.2 * Added FLT prefix to iOS types diff --git a/packages/firebase_analytics/android/.gitignore b/packages/firebase_analytics/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/firebase_analytics/android/.gitignore +++ b/packages/firebase_analytics/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_analytics/android/build.gradle b/packages/firebase_analytics/android/build.gradle index d79066d99e10..05cee432e9cc 100755 --- a/packages/firebase_analytics/android/build.gradle +++ b/packages/firebase_analytics/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,7 +32,7 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-auth:11.4.+' - compile 'com.google.firebase:firebase-analytics:11.4.+' + api 'com.google.firebase:firebase-auth:[11.4.0,12.0[' + api 'com.google.firebase:firebase-analytics:[11.4.0,12.0[' } } diff --git a/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java b/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java index 7123ab434b25..ea146e3e0f2d 100755 --- a/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java +++ b/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java @@ -17,18 +17,18 @@ /** Flutter plugin for Firebase Analytics. */ public class FirebaseAnalyticsPlugin implements MethodCallHandler { - private final Activity activity; + private final PluginRegistry.Registrar registrar; private final FirebaseAnalytics firebaseAnalytics; public static void registerWith(PluginRegistry.Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_analytics"); - channel.setMethodCallHandler(new FirebaseAnalyticsPlugin(registrar.activity())); + channel.setMethodCallHandler(new FirebaseAnalyticsPlugin(registrar)); } - private FirebaseAnalyticsPlugin(Activity activity) { - this.activity = activity; - FirebaseApp.initializeApp(activity); - this.firebaseAnalytics = FirebaseAnalytics.getInstance(activity); + private FirebaseAnalyticsPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; + FirebaseApp.initializeApp(registrar.context()); + this.firebaseAnalytics = FirebaseAnalytics.getInstance(registrar.context()); } @Override @@ -81,6 +81,11 @@ private void handleSetUserId(MethodCall call, Result result) { private void handleSetCurrentScreen(MethodCall call, Result result) { @SuppressWarnings("unchecked") + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "handleSetCurrentScreen requires a foreground activity", null); + return; + } Map arguments = (Map) call.arguments; final String screenName = (String) arguments.get("screenName"); final String screenClassOverride = (String) arguments.get("screenClassOverride"); diff --git a/packages/firebase_analytics/example/android/.gitignore b/packages/firebase_analytics/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100755 --- a/packages/firebase_analytics/example/android/.gitignore +++ b/packages/firebase_analytics/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_analytics/example/android/app/build.gradle b/packages/firebase_analytics/example/android/app/build.gradle index fa62e1fd0118..06d1368ad72a 100755 --- a/packages/firebase_analytics/example/android/app/build.gradle +++ b/packages/firebase_analytics/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' diff --git a/packages/firebase_analytics/example/android/build.gradle b/packages/firebase_analytics/example/android/build.gradle index d8116ba7cfc5..6d31bc088bf0 100755 --- a/packages/firebase_analytics/example/android/build.gradle +++ b/packages/firebase_analytics/example/android/build.gradle @@ -1,24 +1,20 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } } @@ -26,13 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_analytics/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_analytics/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_analytics/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_analytics/pubspec.yaml b/packages/firebase_analytics/pubspec.yaml index b29060631930..6784d52b2c8c 100755 --- a/packages/firebase_analytics/pubspec.yaml +++ b/packages/firebase_analytics/pubspec.yaml @@ -3,7 +3,7 @@ name: firebase_analytics description: Firebase Analytics plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_analytics -version: 0.1.2 +version: 0.2.0 flutter: plugin: diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index 5062b9333719..1d9baa5b49b0 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.4.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 0.3.2 * Added FLT prefix to iOS types diff --git a/packages/firebase_auth/README.md b/packages/firebase_auth/README.md index a8a534ea93f5..87cf7b8795e3 100755 --- a/packages/firebase_auth/README.md +++ b/packages/firebase_auth/README.md @@ -23,9 +23,9 @@ Enable the Google services by configuring the Gradle scripts as such. ``` dependencies { // Example existing classpath - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' // Add the google services classpath - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.google.gms:google-services:3.1.2' } ``` @@ -71,8 +71,8 @@ Future _handleSignIn() async { } ``` -Then from the sign in button onPress, -call the `_handleSignIn` method using a future callback for both the `FirebaseUser` and possible exception. +Then from the sign in button onPress, call the `_handleSignIn` method using a future +callback for both the `FirebaseUser` and possible exception. ``` _handleSignIn() .then((FirebaseUser user) => print(user)) diff --git a/packages/firebase_auth/android/.gitignore b/packages/firebase_auth/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/firebase_auth/android/.gitignore +++ b/packages/firebase_auth/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_auth/android/build.gradle b/packages/firebase_auth/android/build.gradle index 5305b3c85186..058e0f7342cf 100755 --- a/packages/firebase_auth/android/build.gradle +++ b/packages/firebase_auth/android/build.gradle @@ -3,28 +3,27 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -33,8 +32,8 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.guava:guava:20.0' - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-auth:11.4.+' + implementation 'com.google.guava:guava:20.0' + api 'com.google.firebase:firebase-core:[11.4.0,12.0[' + api 'com.google.firebase:firebase-auth:[11.4.0,12.0[' } } diff --git a/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java b/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java index f86e868afed3..9b073d9c2dd1 100755 --- a/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java +++ b/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java @@ -4,7 +4,6 @@ package io.flutter.firebaseauth; -import android.app.Activity; import android.support.annotation.NonNull; import android.util.SparseArray; import com.google.android.gms.tasks.OnCompleteListener; @@ -30,7 +29,7 @@ /** Flutter plugin for Firebase Auth. */ public class FirebaseAuthPlugin implements MethodCallHandler { - private final Activity activity; + private final PluginRegistry.Registrar registrar; private final FirebaseAuth firebaseAuth; private final SparseArray authStateListeners = new SparseArray<>(); @@ -44,13 +43,13 @@ public class FirebaseAuthPlugin implements MethodCallHandler { public static void registerWith(PluginRegistry.Registrar registrar) { MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_auth"); - channel.setMethodCallHandler(new FirebaseAuthPlugin(registrar.activity(), channel)); + channel.setMethodCallHandler(new FirebaseAuthPlugin(registrar, channel)); } - private FirebaseAuthPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseAuthPlugin(PluginRegistry.Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); this.firebaseAuth = FirebaseAuth.getInstance(); } @@ -112,7 +111,7 @@ private void handleLinkWithEmailAndPassword(MethodCall call, Result result) { firebaseAuth .getCurrentUser() .linkWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleCurrentUser(MethodCall call, final Result result) { @@ -131,9 +130,7 @@ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { } private void handleSignInAnonymously(MethodCall call, final Result result) { - firebaseAuth - .signInAnonymously() - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + firebaseAuth.signInAnonymously().addOnCompleteListener(new SignInCompleteListener(result)); } private void handleCreateUserWithEmailAndPassword(MethodCall call, final Result result) { @@ -144,7 +141,7 @@ private void handleCreateUserWithEmailAndPassword(MethodCall call, final Result firebaseAuth .createUserWithEmailAndPassword(email, password) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithEmailAndPassword(MethodCall call, final Result result) { @@ -155,7 +152,7 @@ private void handleSignInWithEmailAndPassword(MethodCall call, final Result resu firebaseAuth .signInWithEmailAndPassword(email, password) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithGoogle(MethodCall call, final Result result) { @@ -166,7 +163,7 @@ private void handleSignInWithGoogle(MethodCall call, final Result result) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, accessToken); firebaseAuth .signInWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleLinkWithGoogleCredential(MethodCall call, final Result result) { @@ -178,7 +175,7 @@ private void handleLinkWithGoogleCredential(MethodCall call, final Result result firebaseAuth .getCurrentUser() .linkWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithFacebook(MethodCall call, final Result result) { @@ -188,7 +185,7 @@ private void handleSignInWithFacebook(MethodCall call, final Result result) { AuthCredential credential = FacebookAuthProvider.getCredential(accessToken); firebaseAuth .signInWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithCustomToken(MethodCall call, final Result result) { @@ -196,7 +193,7 @@ private void handleSignInWithCustomToken(MethodCall call, final Result result) { String token = arguments.get("token"); firebaseAuth .signInWithCustomToken(token) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignOut(MethodCall call, final Result result) { diff --git a/packages/firebase_auth/example/android/.gitignore b/packages/firebase_auth/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100755 --- a/packages/firebase_auth/example/android/.gitignore +++ b/packages/firebase_auth/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_auth/example/android/app/build.gradle b/packages/firebase_auth/example/android/app/build.gradle index 49842337a752..370cd2a13dba 100755 --- a/packages/firebase_auth/example/android/app/build.gradle +++ b/packages/firebase_auth/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,9 +41,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_auth/example/android/build.gradle b/packages/firebase_auth/example/android/build.gradle index 0456830f8897..f9162d656761 100755 --- a/packages/firebase_auth/example/android/build.gradle +++ b/packages/firebase_auth/example/android/build.gradle @@ -1,33 +1,30 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_auth/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_auth/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_auth/pubspec.yaml b/packages/firebase_auth/pubspec.yaml index 0547b9ca2f7c..63ef5ee2fa1b 100755 --- a/packages/firebase_auth/pubspec.yaml +++ b/packages/firebase_auth/pubspec.yaml @@ -3,7 +3,7 @@ name: firebase_auth description: Firebase Auth plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_auth -version: 0.3.2 +version: 0.4.0 flutter: plugin: diff --git a/packages/firebase_core/.gitignore b/packages/firebase_core/.gitignore new file mode 100644 index 000000000000..14c7d4c3f73e --- /dev/null +++ b/packages/firebase_core/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +.atom/ +.idea +.packages +.pub/ +build/ +ios/.generated/ +packages +pubspec.lock diff --git a/packages/firebase_core/CHANGELOG.md b/packages/firebase_core/CHANGELOG.md new file mode 100644 index 000000000000..969be12982c0 --- /dev/null +++ b/packages/firebase_core/CHANGELOG.md @@ -0,0 +1,16 @@ +# 0.0.3 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + +## 0.0.2 + +* Fixes for database URL on Android +* Make GCM sender id optional on Android +* Relax GMS dependency to 11.+ + +## 0.0.1 + +* Initial Release diff --git a/packages/firebase_core/LICENSE b/packages/firebase_core/LICENSE new file mode 100644 index 000000000000..000b4618d2bd --- /dev/null +++ b/packages/firebase_core/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/packages/firebase_core/README.md b/packages/firebase_core/README.md new file mode 100644 index 000000000000..bc72824024d7 --- /dev/null +++ b/packages/firebase_core/README.md @@ -0,0 +1,16 @@ +# Firebase Core for Flutter + +[![pub package](https://img.shields.io/pub/v/firebase_core.svg)](https://pub.dartlang.org/packages/firebase_core) + +A Flutter plugin to use the Firebase Core API, which enables connecting to multiple Firebase apps. + +For Flutter plugins for other Firebase products, see [FlutterFire.md](https://github.com/flutter/plugins/blob/master/FlutterFire.md). + +*Note*: This plugin is still under development, and some APIs might not be available yet. [Feedback](https://github.com/flutter/flutter/issues) and [Pull Requests](https://github.com/flutter/plugins/pulls) are most welcome! + +## Usage +To use this plugin, add `firebase_core` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/). + +## Getting Started + +See the `example` directory for a complete sample app using Firebase Core. diff --git a/packages/firebase_core/android/.gitignore b/packages/firebase_core/android/.gitignore new file mode 100644 index 000000000000..c6cbe562a427 --- /dev/null +++ b/packages/firebase_core/android/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/packages/firebase_core/android/build.gradle b/packages/firebase_core/android/build.gradle new file mode 100644 index 000000000000..7461ade480e9 --- /dev/null +++ b/packages/firebase_core/android/build.gradle @@ -0,0 +1,41 @@ +group 'io.flutter.plugins.firebase.core' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.0.1' + } +} + +rootProject.allprojects { + repositories { + google() + jcenter() + } +} + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 26 + buildToolsVersion '26.0.3' + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + lintOptions { + disable 'InvalidPackage' + } + dependencies { + api 'com.google.firebase:firebase-core:11.+' + } +} diff --git a/packages/firebase_core/android/gradle.properties b/packages/firebase_core/android/gradle.properties new file mode 100644 index 000000000000..8bd86f680510 --- /dev/null +++ b/packages/firebase_core/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/packages/firebase_core/android/settings.gradle b/packages/firebase_core/android/settings.gradle new file mode 100644 index 000000000000..6b9f7039d668 --- /dev/null +++ b/packages/firebase_core/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'firebase_core' diff --git a/packages/firebase_core/android/src/main/AndroidManifest.xml b/packages/firebase_core/android/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..57d219221427 --- /dev/null +++ b/packages/firebase_core/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/packages/firebase_core/android/src/main/java/com/yourcompany/firebasecore/FirebaseCorePlugin.java b/packages/firebase_core/android/src/main/java/com/yourcompany/firebasecore/FirebaseCorePlugin.java new file mode 100644 index 000000000000..06df16a11ba4 --- /dev/null +++ b/packages/firebase_core/android/src/main/java/com/yourcompany/firebasecore/FirebaseCorePlugin.java @@ -0,0 +1,88 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.core; + +import android.content.Context; +import com.google.firebase.FirebaseApp; +import com.google.firebase.FirebaseOptions; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.MethodCallHandler; +import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.PluginRegistry; +import java.lang.String; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FirebaseCorePlugin implements MethodCallHandler { + + private final Context context; + + public static void registerWith(PluginRegistry.Registrar registrar) { + final MethodChannel channel = + new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_core"); + channel.setMethodCallHandler(new FirebaseCorePlugin(registrar.activity())); + } + + private FirebaseCorePlugin(Context context) { + this.context = context; + } + + @Override + public void onMethodCall(MethodCall call, final Result result) { + switch (call.method) { + case "FirebaseApp#configure": + { + Map arguments = call.arguments(); + String name = (String) arguments.get("name"); + @SuppressWarnings("unchecked") + Map optionsMap = (Map) arguments.get("options"); + FirebaseOptions options = + new FirebaseOptions.Builder() + .setApiKey(optionsMap.get("APIKey")) + .setApplicationId(optionsMap.get("googleAppID")) + .setDatabaseUrl(optionsMap.get("databaseURL")) + .setGcmSenderId(optionsMap.get("GCMSenderID")) + .setProjectId(optionsMap.get("projectId")) + .setStorageBucket(optionsMap.get("storageBucket")) + .build(); + if (name != null) { + FirebaseApp.initializeApp(context, options, name); + } else { + FirebaseApp.initializeApp(context, options); + } + result.success(null); + break; + } + case "FirebaseApp#allApps": + { + List> apps = new ArrayList<>(); + Map appMap = new HashMap<>(); + for (FirebaseApp app : FirebaseApp.getApps(context)) { + appMap.put("name", app.getName()); + FirebaseOptions options = app.getOptions(); + Map optionsMap = new HashMap<>(); + optionsMap.put("googleAppID", options.getApplicationId()); + optionsMap.put("GCMSenderID", options.getGcmSenderId()); + optionsMap.put("APIKey", options.getApiKey()); + optionsMap.put("databaseURL", options.getDatabaseUrl()); + optionsMap.put("storageBucket", options.getStorageBucket()); + optionsMap.put("projectID", options.getProjectId()); + appMap.put("options", optionsMap); + apps.add(appMap); + } + result.success(apps); + break; + } + default: + { + result.notImplemented(); + break; + } + } + } +} diff --git a/packages/firebase_core/example/.gitignore b/packages/firebase_core/example/.gitignore new file mode 100644 index 000000000000..eb15c3d27cab --- /dev/null +++ b/packages/firebase_core/example/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.atom/ +.idea +.packages +.pub/ +build/ +ios/.generated/ +packages +pubspec.lock +.flutter-plugins diff --git a/packages/firebase_core/example/.metadata b/packages/firebase_core/example/.metadata new file mode 100644 index 000000000000..28ce4e53c4dd --- /dev/null +++ b/packages/firebase_core/example/.metadata @@ -0,0 +1,8 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: f993cc36dd4fdb8e3c741cbf66fd0cdeea975e37 + channel: unknown diff --git a/packages/firebase_core/example/README.md b/packages/firebase_core/example/README.md new file mode 100644 index 000000000000..ea0fa78cf4f5 --- /dev/null +++ b/packages/firebase_core/example/README.md @@ -0,0 +1,8 @@ +# firebase_core_example + +Demonstrates how to use the firebase_core plugin. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](http://flutter.io/). diff --git a/packages/firebase_core/example/android.iml b/packages/firebase_core/example/android.iml new file mode 100644 index 000000000000..462b903e05b6 --- /dev/null +++ b/packages/firebase_core/example/android.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/firebase_core/example/android/.gitignore b/packages/firebase_core/example/android/.gitignore new file mode 100644 index 000000000000..16e843edcb73 --- /dev/null +++ b/packages/firebase_core/example/android/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +GeneratedPluginRegistrant.java + +/gradle/wrapper/gradle-wrapper.jar +/gradlew +/gradlew.bat diff --git a/packages/firebase_core/example/android/app/build.gradle b/packages/firebase_core/example/android/app/build.gradle new file mode 100644 index 000000000000..23223e1b387a --- /dev/null +++ b/packages/firebase_core/example/android/app/build.gradle @@ -0,0 +1,52 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withInputStream { stream -> + localProperties.load(stream) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 26 + buildToolsVersion '26.0.3' + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.yourcompany.firebasecoreexample" + minSdkVersion 16 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' +} diff --git a/packages/firebase_core/example/android/app/src/main/AndroidManifest.xml b/packages/firebase_core/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..f371f93112d0 --- /dev/null +++ b/packages/firebase_core/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/example/android/app/src/main/java/com/yourcompany/firebasecoreexample/MainActivity.java b/packages/firebase_core/example/android/app/src/main/java/com/yourcompany/firebasecoreexample/MainActivity.java new file mode 100644 index 000000000000..74dff321aa5f --- /dev/null +++ b/packages/firebase_core/example/android/app/src/main/java/com/yourcompany/firebasecoreexample/MainActivity.java @@ -0,0 +1,13 @@ +package com.yourcompany.firebasecoreexample; + +import android.os.Bundle; +import io.flutter.app.FlutterActivity; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class MainActivity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } +} diff --git a/packages/firebase_core/example/android/app/src/main/res/drawable/launch_background.xml b/packages/firebase_core/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000000..304732f88420 --- /dev/null +++ b/packages/firebase_core/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/firebase_core/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/firebase_core/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000000..db77bb4b7b09 Binary files /dev/null and b/packages/firebase_core/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/packages/firebase_core/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/firebase_core/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000000..17987b79bb8a Binary files /dev/null and b/packages/firebase_core/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/packages/firebase_core/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/firebase_core/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000000..09d4391482be Binary files /dev/null and b/packages/firebase_core/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/packages/firebase_core/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/firebase_core/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000000..d5f1c8d34e7a Binary files /dev/null and b/packages/firebase_core/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/packages/firebase_core/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/firebase_core/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000000..4d6372eebdb2 Binary files /dev/null and b/packages/firebase_core/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/packages/firebase_core/example/android/app/src/main/res/values/styles.xml b/packages/firebase_core/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000000..00fa4417cfbe --- /dev/null +++ b/packages/firebase_core/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/packages/firebase_core/example/android/build.gradle b/packages/firebase_core/example/android/build.gradle new file mode 100644 index 000000000000..447688755cf4 --- /dev/null +++ b/packages/firebase_core/example/android/build.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.0.1' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/packages/firebase_core/example/android/gradle.properties b/packages/firebase_core/example/android/gradle.properties new file mode 100644 index 000000000000..8bd86f680510 --- /dev/null +++ b/packages/firebase_core/example/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/packages/android_alarm_manager/android/gradle/wrapper/gradle-wrapper.jar b/packages/firebase_core/example/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from packages/android_alarm_manager/android/gradle/wrapper/gradle-wrapper.jar rename to packages/firebase_core/example/android/gradle/wrapper/gradle-wrapper.jar diff --git a/packages/android_alarm_manager/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_core/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 93% rename from packages/android_alarm_manager/android/gradle/wrapper/gradle-wrapper.properties rename to packages/firebase_core/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..aa901e1e0db2 100644 --- a/packages/android_alarm_manager/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/firebase_core/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/android_alarm_manager/android/gradlew b/packages/firebase_core/example/android/gradlew similarity index 100% rename from packages/android_alarm_manager/android/gradlew rename to packages/firebase_core/example/android/gradlew diff --git a/packages/android_alarm_manager/android/gradlew.bat b/packages/firebase_core/example/android/gradlew.bat similarity index 100% rename from packages/android_alarm_manager/android/gradlew.bat rename to packages/firebase_core/example/android/gradlew.bat diff --git a/packages/firebase_core/example/android/settings.gradle b/packages/firebase_core/example/android/settings.gradle new file mode 100644 index 000000000000..115da6cb4f4d --- /dev/null +++ b/packages/firebase_core/example/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withInputStream { stream -> plugins.load(stream) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/packages/firebase_core/example/firebase_core_example.iml b/packages/firebase_core/example/firebase_core_example.iml new file mode 100644 index 000000000000..4881df8aeff2 --- /dev/null +++ b/packages/firebase_core/example/firebase_core_example.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/firebase_core/example/firebase_core_example_android.iml b/packages/firebase_core/example/firebase_core_example_android.iml new file mode 100644 index 000000000000..0ca70ed93eaf --- /dev/null +++ b/packages/firebase_core/example/firebase_core_example_android.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/example/ios/.gitignore b/packages/firebase_core/example/ios/.gitignore new file mode 100644 index 000000000000..38864eed23ef --- /dev/null +++ b/packages/firebase_core/example/ios/.gitignore @@ -0,0 +1,41 @@ +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +.DS_Store +*.swp +profile + +DerivedData/ +build/ +GeneratedPluginRegistrant.h +GeneratedPluginRegistrant.m + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +/Flutter/app.flx +/Flutter/app.zip +/Flutter/App.framework +/Flutter/Flutter.framework +/Flutter/Generated.xcconfig +/ServiceDefinitions.json + +Pods/ diff --git a/packages/firebase_core/example/ios/Flutter/AppFrameworkInfo.plist b/packages/firebase_core/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000000..6c2de8086bcd --- /dev/null +++ b/packages/firebase_core/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + UIRequiredDeviceCapabilities + + arm64 + + MinimumOSVersion + 8.0 + + diff --git a/packages/firebase_core/example/ios/Flutter/Debug.xcconfig b/packages/firebase_core/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000000..592ceee85b89 --- /dev/null +++ b/packages/firebase_core/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/firebase_core/example/ios/Flutter/Release.xcconfig b/packages/firebase_core/example/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000000..592ceee85b89 --- /dev/null +++ b/packages/firebase_core/example/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/firebase_core/example/ios/Podfile b/packages/firebase_core/example/ios/Podfile new file mode 100644 index 000000000000..90b5f651fb63 --- /dev/null +++ b/packages/firebase_core/example/ios/Podfile @@ -0,0 +1,36 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +if ENV['FLUTTER_FRAMEWORK_DIR'] == nil + abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework') +end + +target 'Runner' do + # Pods for Runner + + # Flutter Pods + pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR'] + + if File.exists? '../.flutter-plugins' + flutter_root = File.expand_path('..') + File.foreach('../.flutter-plugins') { |line| + plugin = line.split(pattern='=') + if plugin.length == 2 + name = plugin[0].strip() + path = plugin[1].strip() + resolved_path = File.expand_path("#{path}/ios", flutter_root) + pod name, :path => resolved_path + else + puts "Invalid plugin specification: #{line}" + end + } + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end diff --git a/packages/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj b/packages/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000000..10d3943ed35a --- /dev/null +++ b/packages/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,497 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 2AE3C69805AB6FB8C037C7BA /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39D23D0C629B8A857DE66538 /* libPods-Runner.a */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; + 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; }; + 9740EEBB1CF902C7004384FC /* app.flx in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB71CF902C7004384FC /* app.flx */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 39D23D0C629B8A857DE66538 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9740EEB71CF902C7004384FC /* app.flx */ = {isa = PBXFileReference; lastKnownFileType = file; name = app.flx; path = Flutter/app.flx; sourceTree = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + 2AE3C69805AB6FB8C037C7BA /* libPods-Runner.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 39F1FF2B4D76A033C08A8FD9 /* Pods */ = { + isa = PBXGroup; + children = ( + ); + name = Pods; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 9740EEB71CF902C7004384FC /* app.flx */, + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 39F1FF2B4D76A033C08A8FD9 /* Pods */, + C5757EE16C6DD6ADC639F4D9 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + C5757EE16C6DD6ADC639F4D9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 39D23D0C629B8A857DE66538 /* libPods-Runner.a */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 4A37569BEFBE2FD279304116 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 531483E699D87EBBC063AF7F /* [CP] Embed Pods Frameworks */, + 177D2DB1F56033C34D20320F /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9740EEBB1CF902C7004384FC /* app.flx in Resources */, + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 177D2DB1F56033C34D20320F /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + }; + 4A37569BEFBE2FD279304116 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 531483E699D87EBBC063AF7F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${PODS_ROOT}/../../../../../../flutter/bin/cache/artifacts/engine/ios/Flutter.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ARCHS = arm64; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.firebaseCoreExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ARCHS = arm64; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.firebaseCoreExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/packages/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..1d526a16ed0f --- /dev/null +++ b/packages/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000000..1c9580788197 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/firebase_core/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..21a3cc14c74e --- /dev/null +++ b/packages/firebase_core/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/firebase_core/example/ios/Runner/AppDelegate.h b/packages/firebase_core/example/ios/Runner/AppDelegate.h new file mode 100644 index 000000000000..36e21bbf9cf4 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/packages/firebase_core/example/ios/Runner/AppDelegate.m b/packages/firebase_core/example/ios/Runner/AppDelegate.m new file mode 100644 index 000000000000..59a72e90be12 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/AppDelegate.m @@ -0,0 +1,13 @@ +#include "AppDelegate.h" +#include "GeneratedPluginRegistrant.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [GeneratedPluginRegistrant registerWithRegistry:self]; + // Override point for customization after application launch. + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +@end diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000000..d22f10b2ab63 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,116 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000000..28c6bf03016f Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000000..2ccbfd967d96 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000000..f091b6b0bca8 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000000..4cde12118dda Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000000..d0ef06e7edb8 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000000..dcdc2306c285 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000000..2ccbfd967d96 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000000..c8f9ed8f5cee Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000000..a6d6b8609df0 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000000..a6d6b8609df0 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000000..75b2d164a5a9 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000000..c4df70d39da7 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000000..6a84f41e14e2 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000000..d0e1f5853602 Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000000..0bedcf2fd467 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000000..9da19eacad3b Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000000..9da19eacad3b Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000000..9da19eacad3b Binary files /dev/null and b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000000..89c2725b70f1 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/firebase_core/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/firebase_core/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000000..f2e259c7c939 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/example/ios/Runner/Base.lproj/Main.storyboard b/packages/firebase_core/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000000..f3c28516fb38 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/example/ios/Runner/Info.plist b/packages/firebase_core/example/ios/Runner/Info.plist new file mode 100644 index 000000000000..02b271480b86 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + firebase_core_example + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/packages/firebase_core/example/ios/Runner/main.m b/packages/firebase_core/example/ios/Runner/main.m new file mode 100644 index 000000000000..dff6597e4513 --- /dev/null +++ b/packages/firebase_core/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/packages/firebase_core/example/lib/main.dart b/packages/firebase_core/example/lib/main.dart new file mode 100644 index 000000000000..50cc654772b5 --- /dev/null +++ b/packages/firebase_core/example/lib/main.dart @@ -0,0 +1,52 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:firebase_core/firebase_core.dart'; + +void main() => runApp(new MyApp()); + +class MyApp extends StatelessWidget { + final String name = 'foo'; + final FirebaseOptions options = const FirebaseOptions( + googleAppID: '1:297855924061:ios:c6de2b69b03a5be8', + gcmSenderID: '297855924061', + apiKey: 'AIzaSyBq6mcufFXfyqr79uELCiqM_O_1-G72PVU', + ); + + Future _configure() async { + final FirebaseApp app = await FirebaseApp.configure( + name: name, + options: options, + ); + assert(app != null); + print('Configured $app'); + } + + Future _allApps() async { + final List apps = await FirebaseApp.allApps(); + print('Currently configured apps: $apps'); + } + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: const Text('Firebase Core example app'), + ), + body: new Padding( + padding: const EdgeInsets.all(20.0), + child: new Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + new RaisedButton( + onPressed: _configure, child: const Text('initialize')), + new RaisedButton( + onPressed: _allApps, child: const Text('allApps')), + ], + ), + ), + ), + ); + } +} diff --git a/packages/firebase_core/example/pubspec.yaml b/packages/firebase_core/example/pubspec.yaml new file mode 100644 index 000000000000..a020d145fcc2 --- /dev/null +++ b/packages/firebase_core/example/pubspec.yaml @@ -0,0 +1,24 @@ +name: firebase_core_example +description: Demonstrates how to use the firebase_core plugin. + +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + firebase_core: + path: ../ + +# For information on the generic Dart part of this file, see the +# following page: https://www.dartlang.org/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + uses-material-design: true diff --git a/packages/firebase_core/firebase_core.iml b/packages/firebase_core/firebase_core.iml new file mode 100644 index 000000000000..a6a44fee50b4 --- /dev/null +++ b/packages/firebase_core/firebase_core.iml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/firebase_core/firebase_core_android.iml b/packages/firebase_core/firebase_core_android.iml new file mode 100644 index 000000000000..0ebb6c9fe763 --- /dev/null +++ b/packages/firebase_core/firebase_core_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/firebase_core/ios/.gitignore b/packages/firebase_core/ios/.gitignore new file mode 100644 index 000000000000..956c87f3aa28 --- /dev/null +++ b/packages/firebase_core/ios/.gitignore @@ -0,0 +1,31 @@ +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +.DS_Store +*.swp +profile + +DerivedData/ +build/ + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + diff --git a/packages/firebase_core/ios/Assets/.gitkeep b/packages/firebase_core/ios/Assets/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/firebase_core/ios/Classes/FirebaseCorePlugin.h b/packages/firebase_core/ios/Classes/FirebaseCorePlugin.h new file mode 100644 index 000000000000..010f772be7f3 --- /dev/null +++ b/packages/firebase_core/ios/Classes/FirebaseCorePlugin.h @@ -0,0 +1,4 @@ +#import + +@interface FLTFirebaseCorePlugin : NSObject +@end diff --git a/packages/firebase_core/ios/Classes/FirebaseCorePlugin.m b/packages/firebase_core/ios/Classes/FirebaseCorePlugin.m new file mode 100644 index 000000000000..1e6e87b00c8a --- /dev/null +++ b/packages/firebase_core/ios/Classes/FirebaseCorePlugin.m @@ -0,0 +1,80 @@ +#import "FirebaseCorePlugin.h" + +#import + +@interface FIROptions (FLTFirebaseCorePlugin) +@property(readonly, nonatomic) NSDictionary *dictionary; +@end + +@implementation FIROptions (FLTFirebaseCorePlugin) +- (NSDictionary *)dictionary { + return @{ + @"googleAppID" : self.googleAppID ?: [NSNull null], + @"bundleID" : self.bundleID ?: [NSNull null], + @"GCMSenderID" : self.GCMSenderID ?: [NSNull null], + @"APIKey" : self.APIKey ?: [NSNull null], + @"clientID" : self.clientID ?: [NSNull null], + @"trackingID" : self.trackingID ?: [NSNull null], + @"projectID" : self.projectID ?: [NSNull null], + @"androidClientID" : self.androidClientID ?: [NSNull null], + @"databaseUrl" : self.databaseURL ?: [NSNull null], + @"storageBucket" : self.storageBucket ?: [NSNull null], + @"deepLinkURLScheme" : self.deepLinkURLScheme ?: [NSNull null], + }; +} +@end + +@implementation FLTFirebaseCorePlugin ++ (void)registerWithRegistrar:(NSObject *)registrar { + FlutterMethodChannel *channel = + [FlutterMethodChannel methodChannelWithName:@"plugins.flutter.io/firebase_core" + binaryMessenger:[registrar messenger]]; + FLTFirebaseCorePlugin *instance = [[FLTFirebaseCorePlugin alloc] init]; + [registrar addMethodCallDelegate:instance channel:channel]; +} + +- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { + if ([@"FirebaseApp#configure" isEqualToString:call.method]) { + NSString *name = call.arguments[@"name"]; + NSDictionary *optionsDictionary = call.arguments[@"options"]; + FIROptions *options = + [[FIROptions alloc] initWithGoogleAppID:optionsDictionary[@"googleAppID"] + GCMSenderID:optionsDictionary[@"GCMSenderID"]]; + if (![optionsDictionary[@"bundleID"] isEqual:[NSNull null]]) + options.bundleID = optionsDictionary[@"bundleID"]; + if (![optionsDictionary[@"APIKey"] isEqual:[NSNull null]]) + options.APIKey = optionsDictionary[@"APIKey"]; + if (![optionsDictionary[@"clientID"] isEqual:[NSNull null]]) + options.clientID = optionsDictionary[@"clientID"]; + if (![optionsDictionary[@"trackingID"] isEqual:[NSNull null]]) + options.trackingID = optionsDictionary[@"trackingID"]; + if (![optionsDictionary[@"projectID"] isEqual:[NSNull null]]) + options.androidClientID = optionsDictionary[@"projectID"]; + if (![optionsDictionary[@"androidClientID"] isEqual:[NSNull null]]) + options.androidClientID = optionsDictionary[@"androidClientID"]; + if (![optionsDictionary[@"databaseURL"] isEqual:[NSNull null]]) + options.databaseURL = optionsDictionary[@"databaseURL"]; + if (![optionsDictionary[@"storageBucket"] isEqual:[NSNull null]]) + options.storageBucket = optionsDictionary[@"storageBucket"]; + if (![optionsDictionary[@"deepLinkURLScheme"] isEqual:[NSNull null]]) + options.deepLinkURLScheme = optionsDictionary[@"deepLinkURLScheme"]; + if (![name isEqual:[NSNull null]]) { + [FIRApp configureWithName:name options:options]; + } else { + [FIRApp configureWithOptions:options]; + } + result(nil); + } else if ([@"FirebaseApp#allApps" isEqualToString:call.method]) { + NSDictionary *allApps = [FIRApp allApps]; + NSMutableArray *appsList = [NSMutableArray array]; + for (NSString *name in allApps) { + FIRApp *app = allApps[name]; + [appsList addObject:@{@"name" : app.name, @"options" : app.options.dictionary}]; + } + result(appsList.count > 0 ? appsList : nil); + } else { + result(FlutterMethodNotImplemented); + } +} + +@end diff --git a/packages/firebase_core/ios/firebase_core.podspec b/packages/firebase_core/ios/firebase_core.podspec new file mode 100644 index 000000000000..048eb8bb0844 --- /dev/null +++ b/packages/firebase_core/ios/firebase_core.podspec @@ -0,0 +1,21 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'firebase_core' + s.version = '0.0.1' + s.summary = 'A new flutter plugin project.' + s.description = <<-DESC +A new flutter plugin project. + DESC + s.homepage = 'http://example.com' + s.license = { :file => '../LICENSE' } + s.author = { 'Your Company' => 'email@example.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.public_header_files = 'Classes/**/*.h' + s.dependency 'Flutter' + s.dependency 'Firebase/Core' + s.ios.deployment_target = '8.0' +end + diff --git a/packages/firebase_core/lib/firebase_core.dart b/packages/firebase_core/lib/firebase_core.dart new file mode 100644 index 000000000000..164f6a2cdc3e --- /dev/null +++ b/packages/firebase_core/lib/firebase_core.dart @@ -0,0 +1,14 @@ +// Copyright 2017, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +library firebase_core; + +import 'dart:async'; +import 'dart:ui' show hashValues; + +import 'package:flutter/services.dart'; +import 'package:meta/meta.dart'; + +part 'src/firebase_app.dart'; +part 'src/firebase_options.dart'; diff --git a/packages/firebase_core/lib/src/firebase_app.dart b/packages/firebase_core/lib/src/firebase_app.dart new file mode 100644 index 000000000000..7a1bf30146b3 --- /dev/null +++ b/packages/firebase_core/lib/src/firebase_app.dart @@ -0,0 +1,75 @@ +// Copyright 2017, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of firebase_core; + +class FirebaseApp { + @visibleForTesting + const FirebaseApp({this.name, @required this.options}); + + /// Gets the name of this app. + /// + /// If null, the default name is used. + final String name; + + /// Gets a copy of the options for this app. These are non-modifiable. + final FirebaseOptions options; + + @visibleForTesting + static const MethodChannel channel = const MethodChannel( + 'plugins.flutter.io/firebase_core', + ); + + static Map _namedApps = {}; + + /// Returns a previously created FirebaseApp instance with the given name, + /// or null if no such app exists. + factory FirebaseApp.named(String name) => _namedApps['name']; + + /// Configures an app with the given name. + /// + /// If an app with that name has already been configured, asserts that the + /// [options] haven't changed. + static Future configure( + {String name, @required FirebaseOptions options}) { + final FirebaseApp existingApp = _namedApps[name]; + if (existingApp != null) { + assert(existingApp.options == options); + return new Future.sync(() => existingApp); + } + assert(options.googleAppID != null); + _namedApps[name] = new FirebaseApp(name: name, options: options); + return channel.invokeMethod('FirebaseApp#configure', { + 'name': name, + 'options': options.asMap, + }).then((Null _) => _namedApps[name]); + } + + /// Returns a list of all extant FirebaseApp instances, or null if there are + /// no FirebaseApp instances. + static Future> allApps() async { + final List> result = await channel.invokeMethod( + 'FirebaseApp#allApps', + ); + return result?.map((Map app) { + return new FirebaseApp( + name: app['name'], + options: new FirebaseOptions.from(app['options']), + ); + })?.toList(); + } + + @override + bool operator ==(dynamic other) { + if (identical(this, other)) return true; + if (other is! FirebaseApp) return false; + return other.name == name && other.options == options; + } + + @override + int get hashCode => hashValues(name, options); + + @override + String toString() => '$FirebaseApp($name, $options)'; +} diff --git a/packages/firebase_core/lib/src/firebase_options.dart b/packages/firebase_core/lib/src/firebase_options.dart new file mode 100644 index 000000000000..681b63f39e3f --- /dev/null +++ b/packages/firebase_core/lib/src/firebase_options.dart @@ -0,0 +1,151 @@ +// Copyright 2017, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of firebase_core; + +class FirebaseOptions { + const FirebaseOptions({ + this.apiKey, + this.bundleID, + this.clientID, + this.trackingID, + this.gcmSenderID, + this.projectID, + this.androidClientID, + @required this.googleAppID, + this.databaseURL, + this.deepLinkURLScheme, + this.storageBucket, + }) + : assert(googleAppID != null); + + @visibleForTesting + FirebaseOptions.from(Map map) + : apiKey = map['APIKey'], + bundleID = map['bundleID'], + clientID = map['clientID'], + trackingID = map['trackingID'], + gcmSenderID = map['GCMSenderID'], + projectID = map['projectID'], + androidClientID = map['androidClientID'], + googleAppID = map['googleAppID'], + databaseURL = map['databaseURL'], + deepLinkURLScheme = map['deepLinkURLScheme'], + storageBucket = map['storageBucket'] { + assert(googleAppID != null); + } + + /// An API key used for authenticating requests from your app, e.g. + /// "AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to + /// Google servers. + /// + /// This property is required on Android. + final String apiKey; + + /// The iOS bundle ID for the application. Defaults to + /// `[[NSBundle mainBundle] bundleID]` when not set manually or in a plist. + /// + /// This property is used on iOS only. + final String bundleID; + + /// The OAuth2 client ID for iOS application used to authenticate Google + /// users, for example "12345.apps.googleusercontent.com", used for signing in + /// with Google. + /// + /// This property is used on iOS only. + final String clientID; + + /// The tracking ID for Google Analytics, e.g. "UA-12345678-1", used to + /// configure Google Analytics. + /// + /// This property is used on iOS only. + final String trackingID; + + /// The Project Number from the Google Developer’s console, for example + /// "012345678901", used to configure Google Cloud Messaging. + /// + /// This property is required on iOS. + final String gcmSenderID; + + /// The Project ID from the Firebase console, for example "abc-xyz-123." + final String projectID; + + /// The Android client ID, for example "12345.apps.googleusercontent.com." + /// + /// This property is used on iOS only. + final String androidClientID; + + /// The Google App ID that is used to uniquely identify an instance of an app. + /// + /// This property cannot be `null`. + final String googleAppID; + + /// The database root URL, e.g. "http://abc-xyz-123.firebaseio.com." + /// + /// This property should be set for apps that use Firebase Database. + final String databaseURL; + + /// The URL scheme used to set up Durable Deep Link service. + /// + /// This property is used on iOS only. + final String deepLinkURLScheme; + + /// The Google Cloud Storage bucket name, e.g. + /// "abc-xyz-123.storage.firebase.com." + final String storageBucket; + + @visibleForTesting + Map get asMap { + return { + 'APIKey': apiKey, + 'bundleID': bundleID, + 'clientID': clientID, + 'trackingID': trackingID, + 'gcmSenderID': gcmSenderID, + 'projectID': projectID, + 'androidClientID': androidClientID, + 'googleAppID': googleAppID, + 'databaseURL': databaseURL, + 'deepLinkURLScheme': deepLinkURLScheme, + 'storageBucket': storageBucket, + }; + } + + @override + bool operator ==(dynamic other) { + if (identical(this, other)) return true; + if (other is! FirebaseOptions) return false; + return other.apiKey == apiKey && + other.bundleID == bundleID && + other.clientID == clientID && + other.trackingID == trackingID && + other.gcmSenderID == gcmSenderID && + other.projectID == projectID && + other.androidClientID == androidClientID && + other.googleAppID == googleAppID && + other.databaseURL == databaseURL && + other.deepLinkURLScheme == deepLinkURLScheme && + other.storageBucket == storageBucket; + } + + @override + int get hashCode { + return hashValues( + apiKey, + bundleID, + clientID, + trackingID, + gcmSenderID, + projectID, + androidClientID, + googleAppID, + databaseURL, + deepLinkURLScheme, + storageBucket, + ); + } + + @override + String toString() => asMap.toString(); +} diff --git a/packages/firebase_core/pubspec.yaml b/packages/firebase_core/pubspec.yaml new file mode 100644 index 000000000000..fe30cbadc277 --- /dev/null +++ b/packages/firebase_core/pubspec.yaml @@ -0,0 +1,23 @@ +name: firebase_core +description: Firebase Core plugin for Flutter. +author: Flutter Team +homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_core +version: 0.0.3 + +flutter: + plugin: + androidPackage: io.flutter.plugins.firebase.core + iosPrefix: FLT + pluginClass: FirebaseCorePlugin + +dependencies: + flutter: + sdk: flutter + meta: "^1.0.5" + +dev_dependencies: + flutter_test: + sdk: flutter + +environment: + sdk: ">=1.8.0 <2.0.0" diff --git a/packages/firebase_core/test/firebase_core_test.dart b/packages/firebase_core/test/firebase_core_test.dart new file mode 100755 index 000000000000..7835628013c1 --- /dev/null +++ b/packages/firebase_core/test/firebase_core_test.dart @@ -0,0 +1,85 @@ +// Copyright 2017, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('$FirebaseApp', () { + final List log = []; + const FirebaseApp testApp = const FirebaseApp( + name: 'foo', + options: const FirebaseOptions(googleAppID: '12345'), + ); + + setUp(() async { + FirebaseApp.channel + .setMockMethodCallHandler((MethodCall methodCall) async { + log.add(methodCall); + switch (methodCall.method) { + case 'FirebaseApp#allApps': + return >[ + { + 'name': testApp.name, + 'options': testApp.options.asMap, + }, + ]; + default: + break; + } + }); + log.clear(); + }); + + test('configure', () async { + final String name = 'foo'; + const FirebaseOptions options = const FirebaseOptions( + apiKey: 'testAPIKey', + bundleID: 'testBundleID', + clientID: 'testClientID', + trackingID: 'testTrackingID', + gcmSenderID: 'testGCMSenderID', + projectID: 'testProjectID', + androidClientID: 'testAndroidClientID', + googleAppID: 'testGoogleAppID', + databaseURL: 'testDatabaseURL', + deepLinkURLScheme: 'testDeepLinkURLScheme', + storageBucket: 'testStorageBucket', + ); + final FirebaseApp app = await FirebaseApp.configure( + name: name, + options: options, + ); + expect(app.name, equals(name)); + expect(app.options, equals(options)); + expect( + log, + [ + isMethodCall( + 'FirebaseApp#configure', + arguments: { + 'name': name, + 'options': options.asMap, + }, + ), + ], + ); + }); + + test('allApps', () async { + final List allApps = await FirebaseApp.allApps(); + expect(allApps, equals([testApp])); + expect( + log, + [ + isMethodCall( + 'FirebaseApp#allApps', + arguments: null, + ), + ], + ); + }); + }); +} diff --git a/packages/firebase_database/CHANGELOG.md b/packages/firebase_database/CHANGELOG.md index 17b170842e3d..98fe6b08b366 100644 --- a/packages/firebase_database/CHANGELOG.md +++ b/packages/firebase_database/CHANGELOG.md @@ -1,3 +1,15 @@ +## 0.3.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + +## 0.2.0 + +* Support for multiple databases, new dependency on firebase_core +* Relax GMS dependency to 11.+ + ## 0.1.4 * Add FLT prefix to iOS types diff --git a/packages/firebase_database/android/.gitignore b/packages/firebase_database/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/firebase_database/android/.gitignore +++ b/packages/firebase_database/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_database/android/build.gradle b/packages/firebase_database/android/build.gradle index fc5d85c40879..3e9bb0827cec 100755 --- a/packages/firebase_database/android/build.gradle +++ b/packages/firebase_database/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,8 +32,8 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-auth:11.4.+' - compile 'com.google.firebase:firebase-database:11.4.+' + api 'com.google.firebase:firebase-core:11.+' + api 'com.google.firebase:firebase-auth:11.+' + api 'com.google.firebase:firebase-database:11.+' } } diff --git a/packages/firebase_database/android/src/main/java/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.java b/packages/firebase_database/android/src/main/java/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.java index a8ac10ce2bab..ce90c3c62afd 100644 --- a/packages/firebase_database/android/src/main/java/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.java +++ b/packages/firebase_database/android/src/main/java/io/flutter/plugins/firebase/database/FirebaseDatabasePlugin.java @@ -9,6 +9,7 @@ import com.google.android.gms.tasks.Task; import com.google.android.gms.tasks.TaskCompletionSource; import com.google.android.gms.tasks.Tasks; +import com.google.firebase.FirebaseApp; import com.google.firebase.database.ChildEventListener; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; @@ -56,15 +57,15 @@ private FirebaseDatabasePlugin(MethodChannel channel) { this.channel = channel; } - private DatabaseReference getReference(Map arguments) { + private DatabaseReference getReference(FirebaseDatabase database, Map arguments) { String path = (String) arguments.get("path"); - DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); + DatabaseReference reference = database.getReference(); if (path != null) reference = reference.child(path); return reference; } - private Query getQuery(Map arguments) { - Query query = getReference(arguments); + private Query getQuery(FirebaseDatabase database, Map arguments) { + Query query = getReference(database, arguments); @SuppressWarnings("unchecked") Map parameters = (Map) arguments.get("parameters"); if (parameters == null) return query; @@ -179,7 +180,12 @@ private void sendEvent(String eventType, DataSnapshot snapshot, String previousC } @Override - public void onCancelled(DatabaseError error) {} + public void onCancelled(DatabaseError error) { + Map arguments = new HashMap<>(); + arguments.put("handle", handle); + arguments.put("error", asMap(error)); + channel.invokeMethod("Error", arguments); + } @Override public void onChildAdded(DataSnapshot snapshot, String previousChildName) { @@ -209,33 +215,41 @@ public void onDataChange(DataSnapshot snapshot) { @Override public void onMethodCall(final MethodCall call, final Result result) { + final Map arguments = call.arguments(); + FirebaseDatabase database; + String appName = (String) arguments.get("app"); + if (appName != null) { + database = FirebaseDatabase.getInstance(FirebaseApp.getInstance(appName)); + } else { + database = FirebaseDatabase.getInstance(); + } switch (call.method) { case "FirebaseDatabase#goOnline": { - FirebaseDatabase.getInstance().goOnline(); + database.goOnline(); result.success(null); break; } case "FirebaseDatabase#goOffline": { - FirebaseDatabase.getInstance().goOffline(); + database.goOffline(); result.success(null); break; } case "FirebaseDatabase#purgeOutstandingWrites": { - FirebaseDatabase.getInstance().purgeOutstandingWrites(); + database.purgeOutstandingWrites(); result.success(null); break; } case "FirebaseDatabase#setPersistenceEnabled": { - Boolean isEnabled = (Boolean) call.arguments; + Boolean isEnabled = (Boolean) arguments.get("enabled"); try { - FirebaseDatabase.getInstance().setPersistenceEnabled(isEnabled); + database.setPersistenceEnabled(isEnabled); result.success(true); } catch (DatabaseException e) { // Database is already in use, e.g. after hot reload/restart. @@ -246,9 +260,9 @@ public void onMethodCall(final MethodCall call, final Result result) { case "FirebaseDatabase#setPersistenceCacheSizeBytes": { - long cacheSize = (Integer) call.arguments; + long cacheSize = (Integer) arguments.get("cacheSize"); try { - FirebaseDatabase.getInstance().setPersistenceCacheSizeBytes(cacheSize); + database.setPersistenceCacheSizeBytes(cacheSize); result.success(true); } catch (DatabaseException e) { // Database is already in use, e.g. after hot reload/restart. @@ -259,10 +273,9 @@ public void onMethodCall(final MethodCall call, final Result result) { case "DatabaseReference#set": { - Map arguments = call.arguments(); Object value = arguments.get("value"); Object priority = arguments.get("priority"); - DatabaseReference reference = getReference(arguments); + DatabaseReference reference = getReference(database, arguments); if (priority != null) { reference.setValue(value, priority, new DefaultCompletionListener(result)); } else { @@ -273,27 +286,24 @@ public void onMethodCall(final MethodCall call, final Result result) { case "DatabaseReference#update": { - Map arguments = call.arguments(); @SuppressWarnings("unchecked") Map value = (Map) arguments.get("value"); - DatabaseReference reference = getReference(arguments); + DatabaseReference reference = getReference(database, arguments); reference.updateChildren(value, new DefaultCompletionListener(result)); break; } case "DatabaseReference#setPriority": { - Map arguments = call.arguments(); Object priority = arguments.get("priority"); - DatabaseReference reference = getReference(arguments); + DatabaseReference reference = getReference(database, arguments); reference.setPriority(priority, new DefaultCompletionListener(result)); break; } case "DatabaseReference#runTransaction": { - final Map arguments = call.arguments(); - final DatabaseReference reference = getReference(arguments); + final DatabaseReference reference = getReference(database, arguments); // Initiate native transaction. reference.runTransaction( @@ -371,11 +381,7 @@ public void onComplete( Map completionMap = new HashMap<>(); completionMap.put("transactionKey", arguments.get("transactionKey")); if (databaseError != null) { - Map errorMap = new HashMap<>(); - errorMap.put("code", databaseError.getCode()); - errorMap.put("message", databaseError.getMessage()); - errorMap.put("details", databaseError.getDetails()); - completionMap.put("error", errorMap); + completionMap.put("error", asMap(databaseError)); } completionMap.put("committed", committed); if (dataSnapshot != null) { @@ -394,24 +400,22 @@ public void onComplete( case "Query#keepSynced": { - Map arguments = call.arguments(); boolean value = (Boolean) arguments.get("value"); - getQuery(arguments).keepSynced(value); + getQuery(database, arguments).keepSynced(value); result.success(null); break; } case "Query#observe": { - Map arguments = call.arguments(); String eventType = (String) arguments.get("eventType"); int handle = nextHandle++; EventObserver observer = new EventObserver(eventType, handle); observers.put(handle, observer); if (eventType.equals(EVENT_TYPE_VALUE)) { - getQuery(arguments).addValueEventListener(observer); + getQuery(database, arguments).addValueEventListener(observer); } else { - getQuery(arguments).addChildEventListener(observer); + getQuery(database, arguments).addChildEventListener(observer); } result.success(handle); break; @@ -419,8 +423,7 @@ public void onComplete( case "Query#removeObserver": { - Map arguments = call.arguments(); - Query query = getQuery(arguments); + Query query = getQuery(database, arguments); int handle = (Integer) arguments.get("handle"); EventObserver observer = observers.get(handle); if (observer != null) { @@ -445,4 +448,12 @@ public void onComplete( } } } + + private static Map asMap(DatabaseError error) { + Map map = new HashMap<>(); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + map.put("details", error.getDetails()); + return map; + } } diff --git a/packages/firebase_database/example/android/.gitignore b/packages/firebase_database/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100755 --- a/packages/firebase_database/example/android/.gitignore +++ b/packages/firebase_database/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_database/example/android/app/build.gradle b/packages/firebase_database/example/android/app/build.gradle index 38823f190e8e..ca47be386ceb 100755 --- a/packages/firebase_database/example/android/app/build.gradle +++ b/packages/firebase_database/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,9 +41,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_database/example/android/build.gradle b/packages/firebase_database/example/android/build.gradle index 1d93be63048b..f9162d656761 100755 --- a/packages/firebase_database/example/android/build.gradle +++ b/packages/firebase_database/example/android/build.gradle @@ -1,36 +1,30 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_database/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_database/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_database/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_database/example/ios/Runner.xcodeproj/project.pbxproj b/packages/firebase_database/example/ios/Runner.xcodeproj/project.pbxproj index 808c82285f88..5a7884565369 100755 --- a/packages/firebase_database/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/firebase_database/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5C6F5A711EC3CCCC008D64B5 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C6F5A701EC3CCCC008D64B5 /* GeneratedPluginRegistrant.m */; }; @@ -43,7 +42,6 @@ /* Begin PBXFileReference section */ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 5C6F5A6F1EC3CCCC008D64B5 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 5C6F5A701EC3CCCC008D64B5 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; @@ -91,7 +89,6 @@ 9740EEB71CF902C7004384FC /* app.flx */, 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -221,7 +218,6 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, @@ -266,9 +262,12 @@ files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${PODS_ROOT}/../../../../../../flutter/bin/cache/artifacts/engine/ios-release/Flutter.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -295,13 +294,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/packages/firebase_database/example/lib/main.dart b/packages/firebase_database/example/lib/main.dart index 3ba755c86f8e..2cffa4191696 100755 --- a/packages/firebase_database/example/lib/main.dart +++ b/packages/firebase_database/example/lib/main.dart @@ -3,12 +3,29 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; +import 'dart:io' show Platform; import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_database/firebase_database.dart'; import 'package:firebase_database/ui/firebase_animated_list.dart'; +final FirebaseApp app = new FirebaseApp( + name: 'db2', + options: Platform.isIOS + ? const FirebaseOptions( + googleAppID: '1:297855924061:ios:c6de2b69b03a5be8', + gcmSenderID: '297855924061', + databaseURL: 'https://flutterfire-cd2f7.firebaseio.com', + ) + : const FirebaseOptions( + googleAppID: '1:297855924061:android:669871c998cc21bd', + apiKey: 'AIzaSyD_shO5mfO9lhy2TVWhfo1VUmARKlG4suk', + databaseURL: 'https://flutterfire-cd2f7.firebaseio.com', + ), +); + void main() { runApp(new MyApp()); } @@ -30,31 +47,46 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { int _counter; - final DatabaseReference _counterRef = - FirebaseDatabase.instance.reference().child('counter'); - final DatabaseReference _messagesRef = - FirebaseDatabase.instance.reference().child('messages'); + DatabaseReference _counterRef; + DatabaseReference _messagesRef; StreamSubscription _counterSubscription; StreamSubscription _messagesSubscription; bool _anchorToBottom = false; String _kTestKey = 'Hello'; String _kTestValue = 'world!'; + DatabaseError _error; @override void initState() { super.initState(); - FirebaseDatabase.instance.setPersistenceEnabled(true); - FirebaseDatabase.instance.setPersistenceCacheSizeBytes(10000000); + FirebaseApp.configure(name: app.name, options: app.options); + // Demonstrates configuring to the database using a file + _counterRef = FirebaseDatabase.instance.reference().child('counter'); + // Demonstrates configuring the database directly + final FirebaseDatabase database = new FirebaseDatabase(app: app); + _messagesRef = database.reference().child('messages'); + database.reference().child('counter').once().then((DataSnapshot snapshot) { + print('Connected to second database and read ${snapshot.value}'); + }); + database.setPersistenceEnabled(true); + database.setPersistenceCacheSizeBytes(10000000); _counterRef.keepSynced(true); _counterSubscription = _counterRef.onValue.listen((Event event) { setState(() { + _error = null; _counter = event.snapshot.value ?? 0; }); + }, onError: (DatabaseError error) { + setState(() { + _error = error; + }); }); _messagesSubscription = _messagesRef.limitToLast(10).onChildAdded.listen((Event event) { print('Child added: ${event.snapshot.value}'); + }, onError: (DatabaseError error) { + print('Error: ${error.code} ${error.message}'); }); } @@ -96,11 +128,14 @@ class _MyHomePageState extends State { children: [ new Flexible( child: new Center( - // ignore: prefer_const_constructors - child: new Text( - 'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.\n\n' - 'This includes all devices, ever.', - ), + child: _error == null + ? new Text( + 'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.\n\n' + 'This includes all devices, ever.', + ) + : new Text( + 'Error retrieving button tap count:\n${_error.message}', + ), ), ), new ListTile( diff --git a/packages/firebase_database/example/pubspec.yaml b/packages/firebase_database/example/pubspec.yaml index 00a45609b6be..e4b948f3bd2d 100755 --- a/packages/firebase_database/example/pubspec.yaml +++ b/packages/firebase_database/example/pubspec.yaml @@ -8,6 +8,7 @@ dependencies: path: ../../firebase_auth firebase_database: path: ../ + firebase_core: ^0.0.1 flutter: uses-material-design: true diff --git a/packages/firebase_database/ios/Classes/FirebaseDatabasePlugin.m b/packages/firebase_database/ios/Classes/FirebaseDatabasePlugin.m index aa35794c4bcd..78ee4be5083a 100644 --- a/packages/firebase_database/ios/Classes/FirebaseDatabasePlugin.m +++ b/packages/firebase_database/ios/Classes/FirebaseDatabasePlugin.m @@ -11,6 +11,7 @@ @interface FLTFirebaseDatabasePlugin () @interface NSError (FlutterError) @property(readonly, nonatomic) FlutterError *flutterError; +@property(readonly, nonatomic) NSDictionary *dictionary; @end @implementation NSError (FlutterError) @@ -19,17 +20,25 @@ - (FlutterError *)flutterError { message:self.domain details:self.localizedDescription]; } + +- (NSDictionary *)dictionary { + return @{ + @"code" : @(self.code), + @"message" : self.domain ?: [NSNull null], + @"details" : self.localizedDescription ?: [NSNull null], + }; +} @end -FIRDatabaseReference *getReference(NSDictionary *arguments) { +FIRDatabaseReference *getReference(FIRDatabase *database, NSDictionary *arguments) { NSString *path = arguments[@"path"]; - FIRDatabaseReference *ref = [FIRDatabase database].reference; + FIRDatabaseReference *ref = database.reference; if ([path length] > 0) ref = [ref child:path]; return ref; } -FIRDatabaseQuery *getQuery(NSDictionary *arguments) { - FIRDatabaseQuery *query = getReference(arguments); +FIRDatabaseQuery *getQuery(FIRDatabase *database, NSDictionary *arguments) { + FIRDatabaseQuery *query = getReference(database, arguments); NSDictionary *parameters = arguments[@"parameters"]; NSString *orderBy = parameters[@"orderBy"]; if ([orderBy isEqualToString:@"child"]) { @@ -145,23 +154,30 @@ - (instancetype)init { } - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result { + FIRDatabase *database; + NSString *appName = call.arguments[@"app"]; + if (![appName isEqual:[NSNull null]]) { + database = [FIRDatabase databaseForApp:[FIRApp appNamed:appName]]; + } else { + database = [FIRDatabase database]; + } void (^defaultCompletionBlock)(NSError *, FIRDatabaseReference *) = ^(NSError *error, FIRDatabaseReference *ref) { result(error.flutterError); }; if ([@"FirebaseDatabase#goOnline" isEqualToString:call.method]) { - [[FIRDatabase database] goOnline]; + [database goOnline]; result(nil); } else if ([@"FirebaseDatabase#goOffline" isEqualToString:call.method]) { - [[FIRDatabase database] goOffline]; + [database goOffline]; result(nil); } else if ([@"FirebaseDatabase#purgeOutstandingWrites" isEqualToString:call.method]) { - [[FIRDatabase database] purgeOutstandingWrites]; + [database purgeOutstandingWrites]; result(nil); } else if ([@"FirebaseDatabase#setPersistenceEnabled" isEqualToString:call.method]) { - NSNumber *value = call.arguments; + NSNumber *value = call.arguments[@"enabled"]; @try { - [FIRDatabase database].persistenceEnabled = value.boolValue; + database.persistenceEnabled = value.boolValue; result([NSNumber numberWithBool:YES]); } @catch (NSException *exception) { if ([@"FIRDatabaseAlreadyInUse" isEqualToString:exception.name]) { @@ -172,9 +188,9 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result } } } else if ([@"FirebaseDatabase#setPersistenceCacheSizeBytes" isEqualToString:call.method]) { - NSNumber *value = call.arguments; + NSNumber *value = call.arguments[@"cacheSize"]; @try { - [FIRDatabase database].persistenceCacheSizeBytes = value.unsignedIntegerValue; + database.persistenceCacheSizeBytes = value.unsignedIntegerValue; result([NSNumber numberWithBool:YES]); } @catch (NSException *exception) { if ([@"FIRDatabaseAlreadyInUse" isEqualToString:exception.name]) { @@ -185,18 +201,18 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result } } } else if ([@"DatabaseReference#set" isEqualToString:call.method]) { - [getReference(call.arguments) setValue:call.arguments[@"value"] - andPriority:call.arguments[@"priority"] - withCompletionBlock:defaultCompletionBlock]; + [getReference(database, call.arguments) setValue:call.arguments[@"value"] + andPriority:call.arguments[@"priority"] + withCompletionBlock:defaultCompletionBlock]; } else if ([@"DatabaseReference#update" isEqualToString:call.method]) { - [getReference(call.arguments) updateChildValues:call.arguments[@"value"] - withCompletionBlock:defaultCompletionBlock]; + [getReference(database, call.arguments) updateChildValues:call.arguments[@"value"] + withCompletionBlock:defaultCompletionBlock]; } else if ([@"DatabaseReference#setPriority" isEqualToString:call.method]) { - [getReference(call.arguments) setPriority:call.arguments[@"priority"] - withCompletionBlock:defaultCompletionBlock]; + [getReference(database, call.arguments) setPriority:call.arguments[@"priority"] + withCompletionBlock:defaultCompletionBlock]; } else if ([@"DatabaseReference#runTransaction" isEqualToString:call.method]) { - [getReference(call.arguments) runTransactionBlock:^FIRTransactionResult *_Nonnull( - FIRMutableData *_Nonnull currentData) { + [getReference(database, call.arguments) runTransactionBlock:^FIRTransactionResult *_Nonnull( + FIRMutableData *_Nonnull currentData) { // Create semaphore to allow native side to wait while snapshot // updates occur on the Dart side. dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); @@ -240,7 +256,7 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [self.updatedSnapshots objectForKey:call.arguments[@"transactionKey"]][@"value"]; } else { if (result != 0) { - NSLog(@"Transaction at %@ timed out.", [getReference(call.arguments) URL]); + NSLog(@"Transaction at %@ timed out.", [getReference(database, call.arguments) URL]); } return [FIRTransactionResult abort]; } @@ -252,15 +268,15 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result // Invoke transaction completion on the Dart side. result(@{ @"transactionKey" : call.arguments[@"transactionKey"], - @"error" : error.flutterError ?: [NSNull null], + @"error" : error.dictionary ?: [NSNull null], @"committed" : [NSNumber numberWithBool:committed], @"snapshot" : @{@"key" : snapshot.key ?: [NSNull null], @"value" : snapshot.value} }); }]; } else if ([@"Query#observe" isEqualToString:call.method]) { FIRDataEventType eventType = parseEventType(call.arguments[@"eventType"]); - __block FIRDatabaseHandle handle = [getQuery(call.arguments) - observeEventType:eventType + __block FIRDatabaseHandle handle = [getQuery(database, call.arguments) + observeEventType:eventType andPreviousSiblingKeyWithBlock:^(FIRDataSnapshot *snapshot, NSString *previousSiblingKey) { [self.channel invokeMethod:@"Event" arguments:@{ @@ -271,15 +287,22 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result }, @"previousSiblingKey" : previousSiblingKey ?: [NSNull null], }]; + } + withCancelBlock:^(NSError *error) { + [self.channel invokeMethod:@"Error" + arguments:@{ + @"handle" : [NSNumber numberWithUnsignedInteger:handle], + @"error" : error.dictionary, + }]; }]; result([NSNumber numberWithUnsignedInteger:handle]); } else if ([@"Query#removeObserver" isEqualToString:call.method]) { FIRDatabaseHandle handle = [call.arguments[@"handle"] unsignedIntegerValue]; - [getQuery(call.arguments) removeObserverWithHandle:handle]; + [getQuery(database, call.arguments) removeObserverWithHandle:handle]; result(nil); } else if ([@"Query#keepSynced" isEqualToString:call.method]) { NSNumber *value = call.arguments[@"value"]; - [getQuery(call.arguments) keepSynced:value.boolValue]; + [getQuery(database, call.arguments) keepSynced:value.boolValue]; result(nil); } else { result(FlutterMethodNotImplemented); diff --git a/packages/firebase_database/lib/firebase_database.dart b/packages/firebase_database/lib/firebase_database.dart index 19a0267e9057..bafa098e6d42 100755 --- a/packages/firebase_database/lib/firebase_database.dart +++ b/packages/firebase_database/lib/firebase_database.dart @@ -6,6 +6,7 @@ library firebase_database; import 'dart:async'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; diff --git a/packages/firebase_database/lib/src/database_reference.dart b/packages/firebase_database/lib/src/database_reference.dart index ff584cc90118..aad5968352f4 100644 --- a/packages/firebase_database/lib/src/database_reference.dart +++ b/packages/firebase_database/lib/src/database_reference.dart @@ -73,7 +73,12 @@ class DatabaseReference extends Query { Future set(dynamic value, {dynamic priority}) { return _database._channel.invokeMethod( 'DatabaseReference#set', - {'path': path, 'value': value, 'priority': priority}, + { + 'app': _database.app?.name, + 'path': path, + 'value': value, + 'priority': priority, + }, ); } @@ -81,7 +86,11 @@ class DatabaseReference extends Query { Future update(Map value) { return _database._channel.invokeMethod( 'DatabaseReference#update', - {'path': path, 'value': value}, + { + 'app': _database.app?.name, + 'path': path, + 'value': value, + }, ); } @@ -112,7 +121,11 @@ class DatabaseReference extends Query { Future setPriority(dynamic priority) async { return _database._channel.invokeMethod( 'DatabaseReference#setPriority', - {'path': path, 'priority': priority}, + { + 'app': _database.app?.name, + 'path': path, + 'priority': priority, + }, ); } @@ -145,6 +158,7 @@ class DatabaseReference extends Query { _database._channel .invokeMethod('DatabaseReference#runTransaction', { + 'app': _database.app?.name, 'path': path, 'transactionKey': transactionKey, 'transactionTimeout': timeout.inMilliseconds diff --git a/packages/firebase_database/lib/src/firebase_database.dart b/packages/firebase_database/lib/src/firebase_database.dart index 4ab151e94420..cc55d14b86e6 100644 --- a/packages/firebase_database/lib/src/firebase_database.dart +++ b/packages/firebase_database/lib/src/firebase_database.dart @@ -18,26 +18,46 @@ class FirebaseDatabase { static final Map _transactions = {}; - FirebaseDatabase._() { + static bool _initialized = false; + + /// Gets an instance of [FirebaseDatabase]. + /// + /// If [app] is specified, its options should include a [databaseURL]. + FirebaseDatabase({this.app}) { + assert(app == null || app.options.databaseURL != null); + if (_initialized) return; _channel.setMethodCallHandler((MethodCall call) async { - if (call.method == 'Event') { - final Event event = new Event._(call.arguments); - _observers[call.arguments['handle']].add(event); - } else if (call.method == 'DoTransaction') { - final MutableData mutableData = - new MutableData.private(call.arguments['snapshot']); - final MutableData updated = - await _transactions[call.arguments['transactionKey']](mutableData); - return {'value': updated.value}; - } else { - throw new MissingPluginException( - '${call.method} method not implemented on the Dart side.', - ); + switch (call.method) { + case 'Event': + final Event event = new Event._(call.arguments); + _observers[call.arguments['handle']].add(event); + return null; + case 'Error': + final DatabaseError error = + new DatabaseError._(call.arguments['error']); + _observers[call.arguments['handle']].addError(error); + return null; + case 'DoTransaction': + final MutableData mutableData = + new MutableData.private(call.arguments['snapshot']); + final MutableData updated = await _transactions[ + call.arguments['transactionKey']](mutableData); + return {'value': updated.value}; + default: + throw new MissingPluginException( + '${call.method} method not implemented on the Dart side.', + ); } }); + _initialized = true; } - static FirebaseDatabase _instance = new FirebaseDatabase._(); + static FirebaseDatabase _instance = new FirebaseDatabase(); + + /// The [FirebaseApp] instance to which this [FirebaseDatabase] belongs. + /// + /// If null, the default [FirebaseApp] is used. + final FirebaseApp app; /// Gets the instance of FirebaseDatabase for the default Firebase app. static FirebaseDatabase get instance => _instance; @@ -65,9 +85,10 @@ class FirebaseDatabase { /// network connectivity at that time). Future setPersistenceEnabled(bool enabled) { return _channel.invokeMethod( - 'FirebaseDatabase#setPersistenceEnabled', - enabled, - ); + 'FirebaseDatabase#setPersistenceEnabled', { + 'app': app?.name, + 'enabled': enabled, + }); } /// Attempts to set the size of the persistence cache. @@ -89,21 +110,28 @@ class FirebaseDatabase { /// or greater than 100 MB are not supported. Future setPersistenceCacheSizeBytes(int cacheSize) { return _channel.invokeMethod( - 'FirebaseDatabase#setPersistenceCacheSizeBytes', - cacheSize, - ); + 'FirebaseDatabase#setPersistenceCacheSizeBytes', { + 'app': app?.name, + 'cacheSize': cacheSize, + }); } /// Resumes our connection to the Firebase Database backend after a previous /// [goOffline] call. Future goOnline() { - return _channel.invokeMethod('FirebaseDatabase#goOnline'); + return _channel.invokeMethod( + 'FirebaseDatabase#goOnline', + {'app': app?.name}, + ); } /// Shuts down our connection to the Firebase Database backend until /// [goOnline] is called. Future goOffline() { - return _channel.invokeMethod('FirebaseDatabase#goOffline'); + return _channel.invokeMethod( + 'FirebaseDatabase#goOffline', + {'app': app?.name}, + ); } /// The Firebase Database client automatically queues writes and sends them to @@ -117,6 +145,9 @@ class FirebaseDatabase { /// affected event listeners, and the client will not (re-)send them to the /// Firebase Database backend. Future purgeOutstandingWrites() { - return _channel.invokeMethod('FirebaseDatabase#purgeOutstandingWrites'); + return _channel.invokeMethod( + 'FirebaseDatabase#purgeOutstandingWrites', + {'app': app?.name}, + ); } } diff --git a/packages/firebase_database/lib/src/query.dart b/packages/firebase_database/lib/src/query.dart index ca1bed0722d3..5107ecda4877 100644 --- a/packages/firebase_database/lib/src/query.dart +++ b/packages/firebase_database/lib/src/query.dart @@ -50,6 +50,7 @@ class Query { _handle = _database._channel.invokeMethod( 'Query#observe', { + 'app': _database.app?.name, 'path': path, 'parameters': _parameters, 'eventType': eventType.toString(), @@ -64,6 +65,7 @@ class Query { await _database._channel.invokeMethod( 'Query#removeObserver', { + 'app': _database.app?.name, 'path': path, 'parameters': _parameters, 'handle': handle, @@ -193,6 +195,7 @@ class Query { return _database._channel.invokeMethod( 'Query#keepSynced', { + 'app': _database.app?.name, 'path': path, 'parameters': _parameters, 'value': value diff --git a/packages/firebase_database/lib/ui/firebase_list.dart b/packages/firebase_database/lib/ui/firebase_list.dart index f68c2b0f48cf..d67bf52bad68 100644 --- a/packages/firebase_database/lib/ui/firebase_list.dart +++ b/packages/firebase_database/lib/ui/firebase_list.dart @@ -6,13 +6,15 @@ import 'dart:collection'; import 'package:meta/meta.dart'; -import '../firebase_database.dart' show DataSnapshot, Event, Query; +import '../firebase_database.dart' + show DatabaseError, DataSnapshot, Event, Query; import 'utils/stream_subscriber_mixin.dart'; typedef void ChildCallback(int index, DataSnapshot snapshot); typedef void ChildMovedCallback( int fromIndex, int toIndex, DataSnapshot snapshot); typedef void ValueCallback(DataSnapshot snapshot); +typedef void ErrorCallback(DatabaseError error); /// Sorts the results of `query` on the client side using `DataSnapshot.key`. class FirebaseList extends ListBase @@ -24,13 +26,14 @@ class FirebaseList extends ListBase this.onChildChanged, this.onChildMoved, this.onValue, + this.onError, }) { assert(query != null); - listen(query.onChildAdded, _onChildAdded); - listen(query.onChildRemoved, _onChildRemoved); - listen(query.onChildChanged, _onChildChanged); - listen(query.onChildMoved, _onChildMoved); - listen(query.onValue, _onValue); + listen(query.onChildAdded, _onChildAdded, onError: _onError); + listen(query.onChildRemoved, _onChildRemoved, onError: _onError); + listen(query.onChildChanged, _onChildChanged, onError: _onError); + listen(query.onChildMoved, _onChildMoved, onError: _onError); + listen(query.onValue, _onValue, onError: _onError); } /// Database query used to populate the list @@ -51,6 +54,9 @@ class FirebaseList extends ListBase /// Called when the data of the list has finished loading final ValueCallback onValue; + /// Called when an error is reported (e.g. permission denied) + final ErrorCallback onError; + // ListBase implementation final List _snapshots = []; @@ -127,4 +133,8 @@ class FirebaseList extends ListBase void _onValue(Event event) { onValue(event.snapshot); } + + void _onError(DatabaseError error) { + onError?.call(error); + } } diff --git a/packages/firebase_database/lib/ui/firebase_sorted_list.dart b/packages/firebase_database/lib/ui/firebase_sorted_list.dart index bd6c96b44705..4ee02cfa7010 100644 --- a/packages/firebase_database/lib/ui/firebase_sorted_list.dart +++ b/packages/firebase_database/lib/ui/firebase_sorted_list.dart @@ -6,8 +6,9 @@ import 'dart:collection'; import 'package:meta/meta.dart'; -import '../firebase_database.dart' show DataSnapshot, Event, Query; -import 'firebase_list.dart' show ChildCallback, ValueCallback; +import '../firebase_database.dart' + show DatabaseError, DataSnapshot, Event, Query; +import 'firebase_list.dart' show ChildCallback, ErrorCallback, ValueCallback; import 'utils/stream_subscriber_mixin.dart'; /// Sorts the results of `query` on the client side using to the `comparator`. @@ -26,13 +27,14 @@ class FirebaseSortedList extends ListBase this.onChildRemoved, this.onChildChanged, this.onValue, + this.onError, }) { assert(query != null); assert(comparator != null); - listen(query.onChildAdded, _onChildAdded); - listen(query.onChildRemoved, _onChildRemoved); - listen(query.onChildChanged, _onChildChanged); - listen(query.onValue, _onValue); + listen(query.onChildAdded, _onChildAdded, onError: _onError); + listen(query.onChildRemoved, _onChildRemoved, onError: _onError); + listen(query.onChildChanged, _onChildChanged, onError: _onError); + listen(query.onValue, _onValue, onError: _onError); } /// Database query used to populate the list @@ -53,6 +55,9 @@ class FirebaseSortedList extends ListBase /// Called when the data of the list has finished loading final ValueCallback onValue; + /// Called when an error is reported (e.g. permission denied) + final ErrorCallback onError; + // ListBase implementation final List _snapshots = []; @@ -108,4 +113,8 @@ class FirebaseSortedList extends ListBase void _onValue(Event event) { onValue(event.snapshot); } + + void _onError(DatabaseError error) { + onError?.call(error); + } } diff --git a/packages/firebase_database/lib/ui/utils/stream_subscriber_mixin.dart b/packages/firebase_database/lib/ui/utils/stream_subscriber_mixin.dart index 1e890fe278a1..5bba816d30f6 100644 --- a/packages/firebase_database/lib/ui/utils/stream_subscriber_mixin.dart +++ b/packages/firebase_database/lib/ui/utils/stream_subscriber_mixin.dart @@ -10,9 +10,9 @@ abstract class StreamSubscriberMixin { List> _subscriptions = >[]; /// Listens to a stream and saves it to the list of subscriptions. - void listen(Stream stream, void onData(T data)) { + void listen(Stream stream, void onData(T data), {Function onError}) { if (stream != null) { - _subscriptions.add(stream.listen(onData)); + _subscriptions.add(stream.listen(onData, onError: onError)); } } diff --git a/packages/firebase_database/pubspec.yaml b/packages/firebase_database/pubspec.yaml index 0388f97ef38e..ca1f6a2da85d 100755 --- a/packages/firebase_database/pubspec.yaml +++ b/packages/firebase_database/pubspec.yaml @@ -3,7 +3,7 @@ name: firebase_database description: Firebase Database plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_database -version: 0.1.4 +version: 0.3.0 flutter: plugin: @@ -14,6 +14,7 @@ flutter: dependencies: flutter: sdk: flutter + firebase_core: ^0.0.1 meta: "^1.0.5" dev_dependencies: diff --git a/packages/firebase_database/test/firebase_database_test.dart b/packages/firebase_database/test/firebase_database_test.dart index 45feb850fb91..adb79c77f90d 100755 --- a/packages/firebase_database/test/firebase_database_test.dart +++ b/packages/firebase_database/test/firebase_database_test.dart @@ -4,6 +4,7 @@ import 'dart:async'; +import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_database/firebase_database.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -16,7 +17,15 @@ void main() { int mockHandleId = 0; final List log = []; - final FirebaseDatabase database = FirebaseDatabase.instance; + final FirebaseApp app = const FirebaseApp( + name: 'testApp', + options: const FirebaseOptions( + googleAppID: '1:1234567890:ios:42424242424242', + gcmSenderID: '1234567890', + databaseURL: 'https://fake-database-url.firebaseio.com', + ), + ); + final FirebaseDatabase database = new FirebaseDatabase(app: app); setUp(() async { channel.setMockMethodCallHandler((MethodCall methodCall) async { @@ -82,11 +91,17 @@ void main() { [ isMethodCall( 'FirebaseDatabase#setPersistenceEnabled', - arguments: false, + arguments: { + 'app': app.name, + 'enabled': false, + }, ), isMethodCall( 'FirebaseDatabase#setPersistenceEnabled', - arguments: true, + arguments: { + 'app': app.name, + 'enabled': true, + }, ), ], ); @@ -99,7 +114,10 @@ void main() { [ isMethodCall( 'FirebaseDatabase#setPersistenceCacheSizeBytes', - arguments: 42, + arguments: { + 'app': app.name, + 'cacheSize': 42, + }, ), ], ); @@ -110,7 +128,12 @@ void main() { expect( log, [ - isMethodCall('FirebaseDatabase#goOnline', arguments: null), + isMethodCall( + 'FirebaseDatabase#goOnline', + arguments: { + 'app': app.name, + }, + ), ], ); }); @@ -120,7 +143,12 @@ void main() { expect( log, [ - isMethodCall('FirebaseDatabase#goOffline', arguments: null), + isMethodCall( + 'FirebaseDatabase#goOffline', + arguments: { + 'app': app.name, + }, + ), ], ); }); @@ -132,7 +160,9 @@ void main() { [ isMethodCall( 'FirebaseDatabase#purgeOutstandingWrites', - arguments: null, + arguments: { + 'app': app.name, + }, ), ], ); @@ -150,6 +180,7 @@ void main() { isMethodCall( 'DatabaseReference#set', arguments: { + 'app': app.name, 'path': 'foo', 'value': value, 'priority': null, @@ -158,6 +189,7 @@ void main() { isMethodCall( 'DatabaseReference#set', arguments: { + 'app': app.name, 'path': 'bar', 'value': value, 'priority': priority, @@ -174,7 +206,11 @@ void main() { [ isMethodCall( 'DatabaseReference#update', - arguments: {'path': 'foo', 'value': value}, + arguments: { + 'app': app.name, + 'path': 'foo', + 'value': value, + }, ), ], ); @@ -188,7 +224,11 @@ void main() { [ isMethodCall( 'DatabaseReference#setPriority', - arguments: {'path': 'foo', 'priority': priority}, + arguments: { + 'app': app.name, + 'path': 'foo', + 'priority': priority, + }, ), ], ); @@ -211,6 +251,7 @@ void main() { isMethodCall( 'DatabaseReference#runTransaction', arguments: { + 'app': app.name, 'path': 'foo', 'transactionKey': 0, 'transactionTimeout': 5000, @@ -243,6 +284,7 @@ void main() { isMethodCall( 'Query#keepSynced', arguments: { + 'app': app.name, 'path': path, 'parameters': {}, 'value': true, @@ -277,6 +319,7 @@ void main() { isMethodCall( 'Query#keepSynced', arguments: { + 'app': app.name, 'path': path, 'parameters': expectedParameters, 'value': false @@ -285,6 +328,48 @@ void main() { ], ); }); + test('observing error events', () async { + mockHandleId = 99; + const int errorCode = 12; + const String errorDetails = 'Some details'; + final Query query = database.reference().child('some path'); + Future simulateError(String errorMessage) async { + await BinaryMessages.handlePlatformMessage( + channel.name, + channel.codec.encodeMethodCall( + new MethodCall('Error', { + 'handle': 99, + 'error': { + 'code': errorCode, + 'message': errorMessage, + 'details': errorDetails, + }, + }), + ), + (_) {}, + ); + } + + final AsyncQueue errors = + new AsyncQueue(); + + // Subscribe and allow subscription to complete. + final StreamSubscription subscription = + query.onValue.listen((_) {}, onError: errors.add); + await new Future.delayed(const Duration(seconds: 0)); + + await simulateError('Bad foo'); + await simulateError('Bad bar'); + final DatabaseError error1 = await errors.remove(); + final DatabaseError error2 = await errors.remove(); + subscription.cancel(); + expect(error1.code, errorCode); + expect(error1.message, 'Bad foo'); + expect(error1.details, errorDetails); + expect(error2.code, errorCode); + expect(error2.message, 'Bad bar'); + expect(error2.details, errorDetails); + }); test('observing value events', () async { mockHandleId = 87; final String path = 'foo'; @@ -331,6 +416,7 @@ void main() { isMethodCall( 'Query#observe', arguments: { + 'app': app.name, 'path': path, 'parameters': {}, 'eventType': '_EventType.value', @@ -339,6 +425,7 @@ void main() { isMethodCall( 'Query#removeObserver', arguments: { + 'app': app.name, 'path': path, 'parameters': {}, 'handle': 87, diff --git a/packages/firebase_messaging/CHANGELOG.md b/packages/firebase_messaging/CHANGELOG.md index 7527628a718c..446c533b821e 100644 --- a/packages/firebase_messaging/CHANGELOG.md +++ b/packages/firebase_messaging/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 0.0.8 * Added FLT prefix to iOS types diff --git a/packages/firebase_messaging/android/.gitignore b/packages/firebase_messaging/android/.gitignore index 3214739ce3a1..9c4de5825b19 100644 --- a/packages/firebase_messaging/android/.gitignore +++ b/packages/firebase_messaging/android/.gitignore @@ -5,7 +5,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_messaging/android/build.gradle b/packages/firebase_messaging/android/build.gradle index 531d3f57c9f1..6925193f97f0 100644 --- a/packages/firebase_messaging/android/build.gradle +++ b/packages/firebase_messaging/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -30,7 +32,7 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-messaging:11.4.+' + api 'com.google.firebase:firebase-core:[11.4.0,12.0[' + api 'com.google.firebase:firebase-messaging:[11.4.0,12.0[' } } diff --git a/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java b/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java index 3a8fc8ed08ff..374b2db36ba6 100644 --- a/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java +++ b/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java @@ -4,7 +4,6 @@ package io.flutter.plugins.firebasemessaging; -import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -26,28 +25,27 @@ /** FirebaseMessagingPlugin */ public class FirebaseMessagingPlugin extends BroadcastReceiver implements MethodCallHandler, NewIntentListener { - private final Activity activity; + private final Registrar registrar; private final MethodChannel channel; private static final String CLICK_ACTION_VALUE = "FLUTTER_NOTIFICATION_CLICK"; public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_messaging"); - final FirebaseMessagingPlugin plugin = - new FirebaseMessagingPlugin(registrar.activity(), channel); + final FirebaseMessagingPlugin plugin = new FirebaseMessagingPlugin(registrar, channel); registrar.addNewIntentListener(plugin); channel.setMethodCallHandler(plugin); } - private FirebaseMessagingPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseMessagingPlugin(Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(FlutterFirebaseInstanceIDService.ACTION_TOKEN); intentFilter.addAction(FlutterFirebaseMessagingService.ACTION_REMOTE_MESSAGE); - LocalBroadcastManager manager = LocalBroadcastManager.getInstance(activity); + LocalBroadcastManager manager = LocalBroadcastManager.getInstance(registrar.context()); manager.registerReceiver(this, intentFilter); } @@ -68,8 +66,10 @@ public void onReceive(Context context, Intent intent) { @Override public void onMethodCall(MethodCall call, Result result) { if ("configure".equals(call.method)) { - FlutterFirebaseInstanceIDService.broadcastToken(activity); - sendMessageFromIntent("onLaunch", activity.getIntent()); + FlutterFirebaseInstanceIDService.broadcastToken(registrar.context()); + if (registrar.activity() != null) { + sendMessageFromIntent("onLaunch", registrar.activity().getIntent()); + } result.success(null); } else if ("subscribeToTopic".equals(call.method)) { String topic = call.arguments(); diff --git a/packages/firebase_messaging/example/android/.gitignore b/packages/firebase_messaging/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100644 --- a/packages/firebase_messaging/example/android/.gitignore +++ b/packages/firebase_messaging/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_messaging/example/android/app/build.gradle b/packages/firebase_messaging/example/android/app/build.gradle index 546b96b8a710..c878c7018648 100644 --- a/packages/firebase_messaging/example/android/app/build.gradle +++ b/packages/firebase_messaging/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,9 +41,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_messaging/example/android/build.gradle b/packages/firebase_messaging/example/android/build.gradle index d8116ba7cfc5..6d31bc088bf0 100644 --- a/packages/firebase_messaging/example/android/build.gradle +++ b/packages/firebase_messaging/example/android/build.gradle @@ -1,24 +1,20 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } } @@ -26,13 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_messaging/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_messaging/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_messaging/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_messaging/pubspec.yaml b/packages/firebase_messaging/pubspec.yaml index 53376674597f..a15ee4a61d36 100644 --- a/packages/firebase_messaging/pubspec.yaml +++ b/packages/firebase_messaging/pubspec.yaml @@ -3,7 +3,7 @@ name: firebase_messaging description: Firebase Cloud Messaging plugin for Flutter applications. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_messaging -version: 0.0.8 +version: 0.1.0 flutter: plugin: diff --git a/packages/firebase_storage/CHANGELOG.md b/packages/firebase_storage/CHANGELOG.md index e8ef7ae0769b..42e3e06c5023 100644 --- a/packages/firebase_storage/CHANGELOG.md +++ b/packages/firebase_storage/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 0.0.8 * Added FLT prefix to iOS types diff --git a/packages/firebase_storage/android/.gitignore b/packages/firebase_storage/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/firebase_storage/android/.gitignore +++ b/packages/firebase_storage/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/firebase_storage/android/build.gradle b/packages/firebase_storage/android/build.gradle index 7c4f9924b02e..3a94d955dd32 100755 --- a/packages/firebase_storage/android/build.gradle +++ b/packages/firebase_storage/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -28,8 +30,8 @@ allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -38,7 +40,7 @@ android { disable 'InvalidPackage' } dependencies { - compile 'com.google.firebase:firebase-core:11.4.+' - compile 'com.google.firebase:firebase-storage:11.4.+' + api 'com.google.firebase:firebase-core:[11.4.0,12.0[' + api 'com.google.firebase:firebase-storage:[11.4.0,12.0[' } } diff --git a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java index b9c7aefe52e1..013fb97cd309 100755 --- a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java +++ b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java @@ -4,7 +4,6 @@ package io.flutter.plugins.firebase.storage; -import android.app.Activity; import android.net.Uri; import android.support.annotation.NonNull; import com.google.android.gms.tasks.OnFailureListener; @@ -29,11 +28,11 @@ public class FirebaseStoragePlugin implements MethodCallHandler { public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_storage"); - channel.setMethodCallHandler(new FirebaseStoragePlugin(registrar.activity())); + channel.setMethodCallHandler(new FirebaseStoragePlugin(registrar)); } - private FirebaseStoragePlugin(Activity activity) { - FirebaseApp.initializeApp(activity); + private FirebaseStoragePlugin(Registrar registrar) { + FirebaseApp.initializeApp(registrar.context()); this.firebaseStorage = FirebaseStorage.getInstance(); } diff --git a/packages/firebase_storage/example/android/.gitignore b/packages/firebase_storage/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100755 --- a/packages/firebase_storage/example/android/.gitignore +++ b/packages/firebase_storage/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/firebase_storage/example/android/app/build.gradle b/packages/firebase_storage/example/android/app/build.gradle index a71b59734eaf..c0df26fc626a 100755 --- a/packages/firebase_storage/example/android/app/build.gradle +++ b/packages/firebase_storage/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,9 +41,9 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services' diff --git a/packages/firebase_storage/example/android/build.gradle b/packages/firebase_storage/example/android/build.gradle index d8116ba7cfc5..6d31bc088bf0 100755 --- a/packages/firebase_storage/example/android/build.gradle +++ b/packages/firebase_storage/example/android/build.gradle @@ -1,24 +1,20 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.google.gms:google-services:3.1.0' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.1.2' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } mavenLocal() } } @@ -26,13 +22,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/firebase_storage/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/firebase_storage/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/firebase_storage/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/firebase_storage/pubspec.yaml b/packages/firebase_storage/pubspec.yaml index 3b62a358c450..895f0f2f38f3 100755 --- a/packages/firebase_storage/pubspec.yaml +++ b/packages/firebase_storage/pubspec.yaml @@ -3,7 +3,7 @@ name: firebase_storage description: Firebase Storage plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_storage -version: 0.0.8 +version: 0.1.0 flutter: plugin: diff --git a/packages/google_sign_in/CHANGELOG.md b/packages/google_sign_in/CHANGELOG.md index 4e93eb1c9ea8..d8af2be8480f 100644 --- a/packages/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.0.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + ## 1.0.3 * Add FLT prefix to iOS types diff --git a/packages/google_sign_in/android/.gitignore b/packages/google_sign_in/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/google_sign_in/android/.gitignore +++ b/packages/google_sign_in/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/google_sign_in/android/build.gradle b/packages/google_sign_in/android/build.gradle index 0cb5b47aee79..54d802a27b51 100755 --- a/packages/google_sign_in/android/build.gradle +++ b/packages/google_sign_in/android/build.gradle @@ -3,28 +3,27 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -35,6 +34,6 @@ android { } dependencies { - compile 'com.google.android.gms:play-services-auth:11.4.+' - compile 'com.google.guava:guava:20.0' + api 'com.google.android.gms:play-services-auth:[11.4.0,12.0[' + implementation 'com.google.guava:guava:20.0' } diff --git a/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java index 6071de5d8b65..1cc52a599f8a 100755 --- a/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java +++ b/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java @@ -121,7 +121,7 @@ public static final class Delegate { private static final String STATE_RESOLVING_ERROR = "resolving_error"; - private final PluginRegistry.Registrar mRegistrar; + private final PluginRegistry.Registrar registrar; private final Handler handler = new Handler(); private final BackgroundTaskRunner backgroundTaskRunner = new BackgroundTaskRunner(1); @@ -132,10 +132,10 @@ public static final class Delegate { private volatile GoogleSignInAccount currentAccount; public Delegate(PluginRegistry.Registrar registrar) { - mRegistrar = registrar; - Application application = (Application) mRegistrar.context(); + this.registrar = registrar; + Application application = (Application) registrar.context(); application.registerActivityLifecycleCallbacks(handler); - mRegistrar.addActivityResultListener(handler); + registrar.addActivityResultListener(handler); } /** Returns the most recently signed-in account, or null if there was none. */ @@ -168,13 +168,13 @@ public void init(Result result, List requestedScopes, String hostedDomai // TODO(jackson): Perhaps we should provide a mechanism to override this // behavior. int clientIdIdentifier = - mRegistrar + registrar .context() .getResources() .getIdentifier( - "default_web_client_id", "string", mRegistrar.context().getPackageName()); + "default_web_client_id", "string", registrar.context().getPackageName()); if (clientIdIdentifier != 0) { - optionsBuilder.requestIdToken(mRegistrar.context().getString(clientIdIdentifier)); + optionsBuilder.requestIdToken(registrar.context().getString(clientIdIdentifier)); } for (String scope : requestedScopes) { optionsBuilder.requestScopes(new Scope(scope)); @@ -185,7 +185,7 @@ public void init(Result result, List requestedScopes, String hostedDomai this.requestedScopes = requestedScopes; googleApiClient = - new GoogleApiClient.Builder(mRegistrar.context()) + new GoogleApiClient.Builder(registrar.context()) .addApi(Auth.GOOGLE_SIGN_IN_API, optionsBuilder.build()) .addConnectionCallbacks(handler) .addOnConnectionFailedListener(handler) @@ -224,13 +224,13 @@ public void onResult(@NonNull GoogleSignInResult signInResult) { * were requested. */ public void signIn(Result result) { - if (mRegistrar.activity() == null) { + if (registrar.activity() == null) { throw new IllegalStateException("signIn needs a foreground activity"); } checkAndSetPendingOperation(METHOD_SIGN_IN, result); Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); - mRegistrar.activity().startActivityForResult(signInIntent, REQUEST_CODE); + registrar.activity().startActivityForResult(signInIntent, REQUEST_CODE); } /** @@ -251,7 +251,7 @@ public void getTokens(final Result result, final String email) { public String call() throws Exception { Account account = new Account(email, "com.google"); String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes); - return GoogleAuthUtil.getToken(mRegistrar.context(), account, scopesStr); + return GoogleAuthUtil.getToken(registrar.context(), account, scopesStr); } }; @@ -417,14 +417,14 @@ public void onActivitySaveInstanceState(Activity activity, Bundle outState) { @Override public void onActivityStarted(Activity activity) { - if (!resolvingError && activity == mRegistrar.activity() && googleApiClient != null) { + if (!resolvingError && activity == registrar.activity() && googleApiClient != null) { googleApiClient.connect(); } } @Override public void onActivityStopped(Activity activity) { - if (activity == mRegistrar.activity() && googleApiClient != null) { + if (activity == registrar.activity() && googleApiClient != null) { googleApiClient.disconnect(); } } @@ -452,19 +452,19 @@ public void onConnectionFailed(@NonNull final ConnectionResult result) { if (resolvingError) { // Already attempting to resolve an error. return; - } else if (result.hasResolution() && mRegistrar.activity() != null) { + } else if (result.hasResolution() && registrar.activity() != null) { resolvingError = true; try { - result.startResolutionForResult(mRegistrar.activity(), REQUEST_CODE_RESOLVE_ERROR); + result.startResolutionForResult(registrar.activity(), REQUEST_CODE_RESOLVE_ERROR); } catch (SendIntentException e) { resolvingError = false; finishWithError(ERROR_REASON_CONNECTION_FAILED, String.valueOf(result.getErrorCode())); } - } else if (mRegistrar.activity() != null) { + } else if (registrar.activity() != null) { resolvingError = true; GoogleApiAvailability.getInstance() .showErrorDialogFragment( - mRegistrar.activity(), + registrar.activity(), result.getErrorCode(), REQUEST_CODE_RESOLVE_ERROR, new DialogInterface.OnCancelListener() { diff --git a/packages/google_sign_in/example/android/.gitignore b/packages/google_sign_in/example/android/.gitignore index e6a9f0678cf1..258f69b639cb 100755 --- a/packages/google_sign_in/example/android/.gitignore +++ b/packages/google_sign_in/example/android/.gitignore @@ -8,6 +8,6 @@ /captures PluginRegistry.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/google_sign_in/example/android/app/build.gradle b/packages/google_sign_in/example/android/app/build.gradle index e2f450aa973d..2828fd6e2dc8 100755 --- a/packages/google_sign_in/example/android/app/build.gradle +++ b/packages/google_sign_in/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' diff --git a/packages/google_sign_in/example/android/build.gradle b/packages/google_sign_in/example/android/build.gradle index e8f184943c55..447688755cf4 100755 --- a/packages/google_sign_in/example/android/build.gradle +++ b/packages/google_sign_in/example/android/build.gradle @@ -1,19 +1,18 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } @@ -21,11 +20,10 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } +subprojects { + project.evaluationDependsOn(':app') +} task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/google_sign_in/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/google_sign_in/pubspec.yaml b/packages/google_sign_in/pubspec.yaml index 3e84eed27d14..d67e79f98e48 100755 --- a/packages/google_sign_in/pubspec.yaml +++ b/packages/google_sign_in/pubspec.yaml @@ -3,7 +3,7 @@ name: google_sign_in description: Google Sign-In plugin for Flutter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/google_sign_in -version: 1.0.3 +version: 2.0.0 flutter: plugin: diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index ad9eaf6ebb91..ca53b3b4710b 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.2.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.1.5 * Added FLT prefix to iOS types diff --git a/packages/image_picker/android/.gitignore b/packages/image_picker/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100755 --- a/packages/image_picker/android/.gitignore +++ b/packages/image_picker/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/image_picker/android/build.gradle b/packages/image_picker/android/build.gradle index dab85fb51fe3..5d54165b00a6 100755 --- a/packages/image_picker/android/build.gradle +++ b/packages/image_picker/android/build.gradle @@ -3,31 +3,30 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() maven { url "https://jitpack.io" } - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -38,8 +37,8 @@ android { } dependencies { - compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'com.github.esafirm.android-image-picker:imagepicker:1.5.0@aar' - compile 'com.android.support:appcompat-v7:25.4.0' - compile 'com.android.support:recyclerview-v7:25.4.0' + api 'com.github.bumptech.glide:glide:4.0.0' + api 'com.github.esafirm.android-image-picker:imagepicker:1.9.2@aar' + api 'com.android.support:appcompat-v7:26.1.0' + api 'com.android.support:recyclerview-v7:26.1.0' } diff --git a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index 784e335a374b..ec6fdf66077b 100644 --- a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java @@ -37,23 +37,23 @@ public class ImagePickerPlugin implements MethodCallHandler, ActivityResultListe private static final int SOURCE_CAMERA = 1; private static final int SOURCE_GALLERY = 2; - private Activity activity; - private static final DefaultCameraModule cameraModule = new DefaultCameraModule(); + private final PluginRegistry.Registrar registrar; + // Pending method call to obtain an image private Result pendingResult; private MethodCall methodCall; public static void registerWith(PluginRegistry.Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL); - final ImagePickerPlugin instance = new ImagePickerPlugin(registrar.activity()); + final ImagePickerPlugin instance = new ImagePickerPlugin(registrar); registrar.addActivityResultListener(instance); channel.setMethodCallHandler(instance); } - private ImagePickerPlugin(Activity activity) { - this.activity = activity; + private ImagePickerPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; } @Override @@ -63,6 +63,12 @@ public void onMethodCall(MethodCall call, Result result) { return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "image_picker plugin requires a foreground activity.", null); + return; + } + pendingResult = result; methodCall = call; @@ -106,7 +112,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_CAMERA) { if (resultCode == Activity.RESULT_OK) { cameraModule.getImage( - activity, + registrar.context(), data, new OnImageReadyListener() { @Override diff --git a/packages/image_picker/example/android/.gitignore b/packages/image_picker/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100755 --- a/packages/image_picker/example/android/.gitignore +++ b/packages/image_picker/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/image_picker/example/android/app/build.gradle b/packages/image_picker/example/android/app/build.gradle index f43fa121fef4..3ec83cc01028 100755 --- a/packages/image_picker/example/android/app/build.gradle +++ b/packages/image_picker/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -41,7 +41,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/image_picker/example/android/build.gradle b/packages/image_picker/example/android/build.gradle index f2ab44010cf3..96c50be82c04 100755 --- a/packages/image_picker/example/android/build.gradle +++ b/packages/image_picker/example/android/build.gradle @@ -1,22 +1,21 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() maven { url "https://jitpack.io" } - maven { - url "https://maven.google.com" - } } } @@ -24,11 +23,10 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } +subprojects { + project.evaluationDependsOn(':app') +} task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/image_picker/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 4c3e2ca76d7b..c54afc6a85a7 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ name: image_picker description: Flutter plugin that shows an image picker and uses the camera. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.1.5 +version: 0.2.0 flutter: plugin: diff --git a/packages/local_auth/CHANGELOG.md b/packages/local_auth/CHANGELOG.md index d7f0687094f9..992657e06428 100644 --- a/packages/local_auth/CHANGELOG.md +++ b/packages/local_auth/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.1.0] + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## [0.0.3] * Add FLT prefix to iOS types diff --git a/packages/local_auth/android/.gitignore b/packages/local_auth/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/local_auth/android/.gitignore +++ b/packages/local_auth/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/local_auth/android/build.gradle b/packages/local_auth/android/build.gradle index aede4dc02ca5..104476aceb0e 100644 --- a/packages/local_auth/android/build.gradle +++ b/packages/local_auth/android/build.gradle @@ -3,28 +3,27 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -35,5 +34,5 @@ android { } dependencies { - compile "com.android.support:support-v4:25.0.0" + compile "com.android.support:support-v4:26.1.0" } diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java b/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java index b37a2bfeeedf..f56806c184a5 100644 --- a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java +++ b/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java @@ -15,18 +15,18 @@ /** LocalAuthPlugin */ public class LocalAuthPlugin implements MethodCallHandler { - private final Activity activity; + private final Registrar registrar; private final AtomicBoolean authInProgress = new AtomicBoolean(false); /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/local_auth"); - channel.setMethodCallHandler(new LocalAuthPlugin(registrar.activity())); + channel.setMethodCallHandler(new LocalAuthPlugin(registrar)); } - private LocalAuthPlugin(Activity activity) { - this.activity = activity; + private LocalAuthPlugin(Registrar registrar) { + this.registrar = registrar; } @Override @@ -40,6 +40,11 @@ public void onMethodCall(MethodCall call, final Result result) { result.error("auth_in_progress", "Authentication in progress", null); return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "local_auth plugin requires a foreground activity", null); + return; + } AuthenticationHelper authenticationHelper = new AuthenticationHelper( activity, diff --git a/packages/local_auth/example/android/.gitignore b/packages/local_auth/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/local_auth/example/android/.gitignore +++ b/packages/local_auth/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/local_auth/example/android/app/build.gradle b/packages/local_auth/example/android/app/build.gradle index 46e88a115783..b119e2d04d18 100644 --- a/packages/local_auth/example/android/app/build.gradle +++ b/packages/local_auth/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -39,7 +39,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.4.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/local_auth/example/android/build.gradle b/packages/local_auth/example/android/build.gradle index ebe4957c1b3c..447688755cf4 100644 --- a/packages/local_auth/example/android/build.gradle +++ b/packages/local_auth/example/android/build.gradle @@ -1,32 +1,29 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/local_auth/pubspec.yaml b/packages/local_auth/pubspec.yaml index 7ef92e0e2a9c..a69799902062 100644 --- a/packages/local_auth/pubspec.yaml +++ b/packages/local_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: local_auth description: A plugin that uses local sensors to authenticate users (such as Fingerprint Reader/Touch ID). -version: 0.0.3 +version: 0.1.0 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/local_auth diff --git a/packages/package_info/CHANGELOG.md b/packages/package_info/CHANGELOG.md index 9e4974e62a0e..f7e97f7daa4a 100644 --- a/packages/package_info/CHANGELOG.md +++ b/packages/package_info/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.0.2 * Add FLT prefix to iOS types diff --git a/packages/package_info/android/.gitignore b/packages/package_info/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/package_info/android/.gitignore +++ b/packages/package_info/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/package_info/android/build.gradle b/packages/package_info/android/build.gradle index 1ffbe9331e07..39a0e0895fd1 100644 --- a/packages/package_info/android/build.gradle +++ b/packages/package_info/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java b/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java index 58863a20ae22..4c38019676b5 100644 --- a/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java +++ b/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java @@ -15,22 +15,23 @@ /** PackageInfoPlugin */ public class PackageInfoPlugin implements MethodCallHandler { - private final Context context; + private final Registrar mRegistrar; /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/package_info"); - channel.setMethodCallHandler(new PackageInfoPlugin(registrar.context())); + channel.setMethodCallHandler(new PackageInfoPlugin(registrar)); } - private PackageInfoPlugin(Context context) { - this.context = context; + private PackageInfoPlugin(Registrar registrar) { + this.mRegistrar = registrar; } @Override public void onMethodCall(MethodCall call, Result result) { try { + Context context = mRegistrar.context(); PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); switch (call.method) { case "getVersion": diff --git a/packages/package_info/example/android/.gitignore b/packages/package_info/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/package_info/example/android/.gitignore +++ b/packages/package_info/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/package_info/example/android/app/build.gradle b/packages/package_info/example/android/app/build.gradle index a5bbec6530c3..76138a0956bb 100644 --- a/packages/package_info/example/android/app/build.gradle +++ b/packages/package_info/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -40,7 +40,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/package_info/example/android/build.gradle b/packages/package_info/example/android/build.gradle index 20525de0448d..1c71b664fc83 100644 --- a/packages/package_info/example/android/build.gradle +++ b/packages/package_info/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -23,7 +25,3 @@ subprojects { task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/package_info/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/package_info/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/package_info/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/package_info/pubspec.yaml b/packages/package_info/pubspec.yaml index a8547cc9113b..1547769e49ae 100644 --- a/packages/package_info/pubspec.yaml +++ b/packages/package_info/pubspec.yaml @@ -1,6 +1,6 @@ name: package_info description: Plugin for querying information about the application package. -version: 0.0.2 +version: 0.1.0 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/package_info diff --git a/packages/path_provider/CHANGELOG.md b/packages/path_provider/CHANGELOG.md index 1917d94efcb2..b6bad6f3548c 100644 --- a/packages/path_provider/CHANGELOG.md +++ b/packages/path_provider/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.3.0] - 2017-12-20 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## [0.2.2] - 2017-12-03 * Add FLT prefix to iOS types diff --git a/packages/path_provider/android/.gitignore b/packages/path_provider/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/path_provider/android/.gitignore +++ b/packages/path_provider/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/path_provider/android/build.gradle b/packages/path_provider/android/build.gradle index 20c5eaffedf4..968563ab0f47 100644 --- a/packages/path_provider/android/build.gradle +++ b/packages/path_provider/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index 4836569911ec..d56cb2b60ca1 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -4,7 +4,6 @@ package io.flutter.plugins.pathprovider; -import android.content.Context; import android.os.Environment; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -14,17 +13,17 @@ import io.flutter.util.PathUtils; public class PathProviderPlugin implements MethodCallHandler { - private final Context context; + private final Registrar mRegistrar; public static void registerWith(Registrar registrar) { MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider"); - PathProviderPlugin instance = new PathProviderPlugin(registrar.context()); + PathProviderPlugin instance = new PathProviderPlugin(registrar); channel.setMethodCallHandler(instance); } - private PathProviderPlugin(Context context) { - this.context = context; + private PathProviderPlugin(Registrar registrar) { + this.mRegistrar = registrar; } @Override @@ -45,11 +44,11 @@ public void onMethodCall(MethodCall call, Result result) { } private String getPathProviderTemporaryDirectory() { - return context.getCacheDir().getPath(); + return mRegistrar.context().getCacheDir().getPath(); } private String getPathProviderApplicationDocumentsDirectory() { - return PathUtils.getDataDirectory(context); + return PathUtils.getDataDirectory(mRegistrar.context()); } private String getPathProviderStorageDirectory() { diff --git a/packages/path_provider/example/android/.gitignore b/packages/path_provider/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100644 --- a/packages/path_provider/example/android/.gitignore +++ b/packages/path_provider/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/path_provider/example/android/app/build.gradle b/packages/path_provider/example/android/app/build.gradle index 114a0ee1094c..cb6aa52e49b0 100644 --- a/packages/path_provider/example/android/app/build.gradle +++ b/packages/path_provider/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -40,7 +40,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/path_provider/example/android/build.gradle b/packages/path_provider/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/path_provider/example/android/build.gradle +++ b/packages/path_provider/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/path_provider/pubspec.yaml b/packages/path_provider/pubspec.yaml index c3b67c1cbea2..90f2e155c655 100644 --- a/packages/path_provider/pubspec.yaml +++ b/packages/path_provider/pubspec.yaml @@ -1,6 +1,6 @@ name: path_provider -version: 0.2.2 +version: 0.3.0 description: A Flutter plugin for getting commonly used locations on the filesystem. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider diff --git a/packages/quick_actions/CHANGELOG.md b/packages/quick_actions/CHANGELOG.md index 9e4974e62a0e..f7e97f7daa4a 100644 --- a/packages/quick_actions/CHANGELOG.md +++ b/packages/quick_actions/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.0.2 * Add FLT prefix to iOS types diff --git a/packages/quick_actions/android/.gitignore b/packages/quick_actions/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/quick_actions/android/.gitignore +++ b/packages/quick_actions/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/quick_actions/android/build.gradle b/packages/quick_actions/android/build.gradle index 315e0052a9f2..a3a318303db5 100644 --- a/packages/quick_actions/android/build.gradle +++ b/packages/quick_actions/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java b/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java index f2f1fb17568e..7bc7b70485ee 100644 --- a/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java +++ b/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java @@ -25,15 +25,16 @@ /** QuickActionsPlugin */ @SuppressWarnings("unchecked") public class QuickActionsPlugin implements MethodCallHandler { - private final Context context; + private final Registrar registrar; + // Channel is a static field because it needs to be accessible to the // {@link ShortcutHandlerActivity} which has to be a static class with // no-args constructor. // It is also mutable because it is derived from {@link Registrar}. private static MethodChannel channel; - private QuickActionsPlugin(Context context) { - this.context = context; + private QuickActionsPlugin(Registrar registrar) { + this.registrar = registrar; } /** Plugin registration. */ @@ -42,7 +43,7 @@ public static void registerWith(Registrar registrar) { throw new IllegalStateException("You should not call registerWith more than once."); } channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/quick_actions"); - channel.setMethodCallHandler(new QuickActionsPlugin(registrar.context())); + channel.setMethodCallHandler(new QuickActionsPlugin(registrar)); } @Override @@ -54,6 +55,7 @@ public void onMethodCall(MethodCall call, Result result) { result.success(null); return; } + Context context = registrar.context(); ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); switch (call.method) { @@ -75,6 +77,7 @@ public void onMethodCall(MethodCall call, Result result) { @SuppressLint("NewApi") private List deserializeShortcuts(List> shortcuts) { List shortcutInfos = new ArrayList<>(); + Context context = registrar.context(); for (Map shortcut : shortcuts) { String icon = shortcut.get("icon"); String type = shortcut.get("type"); diff --git a/packages/quick_actions/example/android/.gitignore b/packages/quick_actions/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/quick_actions/example/android/.gitignore +++ b/packages/quick_actions/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/quick_actions/example/android/app/build.gradle b/packages/quick_actions/example/android/app/build.gradle index 3deffe087e27..81b1938810f5 100644 --- a/packages/quick_actions/example/android/app/build.gradle +++ b/packages/quick_actions/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -39,7 +39,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/quick_actions/example/android/build.gradle b/packages/quick_actions/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/quick_actions/example/android/build.gradle +++ b/packages/quick_actions/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/quick_actions/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/quick_actions/pubspec.yaml b/packages/quick_actions/pubspec.yaml index 0085225bb93b..1cdb2d49ab3b 100644 --- a/packages/quick_actions/pubspec.yaml +++ b/packages/quick_actions/pubspec.yaml @@ -1,6 +1,6 @@ name: quick_actions description: Plugin that allows developers to define shortcuts on home screen. -version: 0.0.2 +version: 0.1.0 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/quick_actions diff --git a/packages/sensors/CHANGELOG.md b/packages/sensors/CHANGELOG.md index f6cf8df5742a..7aa9b67fd774 100644 --- a/packages/sensors/CHANGELOG.md +++ b/packages/sensors/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.2.0] - 2016-12-20 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## [0.1.1] - 2017-12-03 * Add FLT prefix to iOS types. diff --git a/packages/sensors/android/.gitignore b/packages/sensors/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/sensors/android/.gitignore +++ b/packages/sensors/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/sensors/android/build.gradle b/packages/sensors/android/build.gradle index 326f84a40c5c..412f30f6cc3b 100644 --- a/packages/sensors/android/build.gradle +++ b/packages/sensors/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/sensors/example/android/.gitignore b/packages/sensors/example/android/.gitignore index 1fd9325cac44..16e843edcb73 100644 --- a/packages/sensors/example/android/.gitignore +++ b/packages/sensors/example/android/.gitignore @@ -8,6 +8,6 @@ /captures GeneratedPluginRegistrant.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/sensors/example/android/app/build.gradle b/packages/sensors/example/android/app/build.gradle index 3c9fc528b531..935f955050b7 100644 --- a/packages/sensors/example/android/app/build.gradle +++ b/packages/sensors/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -24,7 +24,7 @@ android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "io.flutter.plugins.sensors_example" } @@ -43,7 +43,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/sensors/example/android/build.gradle b/packages/sensors/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/sensors/example/android/build.gradle +++ b/packages/sensors/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/sensors/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/sensors/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/sensors/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/sensors/pubspec.yaml b/packages/sensors/pubspec.yaml index e8ba556321c3..ca9b77d7d58b 100644 --- a/packages/sensors/pubspec.yaml +++ b/packages/sensors/pubspec.yaml @@ -1,6 +1,6 @@ name: sensors -version: 0.1.1 +version: 0.2.0 description: A Flutter plugin to access the accelerometer and gyroscope sensors. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/sensors diff --git a/packages/share/CHANGELOG.md b/packages/share/CHANGELOG.md index 9917425bb806..317114f5a9ed 100644 --- a/packages/share/CHANGELOG.md +++ b/packages/share/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.3.0] - 2017-12-20 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## [0.2.2] - 2017-12-03 * Added FLT prefix to iOS types diff --git a/packages/share/android/.gitignore b/packages/share/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/share/android/.gitignore +++ b/packages/share/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/share/android/build.gradle b/packages/share/android/build.gradle index a7a6b7b57e55..1f9cf7f105ac 100644 --- a/packages/share/android/build.gradle +++ b/packages/share/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/share/example/android/.gitignore b/packages/share/example/android/.gitignore index e6a9f0678cf1..258f69b639cb 100644 --- a/packages/share/example/android/.gitignore +++ b/packages/share/example/android/.gitignore @@ -8,6 +8,6 @@ /captures PluginRegistry.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/share/example/android/app/build.gradle b/packages/share/example/android/app/build.gradle index 114a0ee1094c..cb6aa52e49b0 100644 --- a/packages/share/example/android/app/build.gradle +++ b/packages/share/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -40,7 +40,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/share/example/android/build.gradle b/packages/share/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/share/example/android/build.gradle +++ b/packages/share/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/share/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/share/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/share/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/share/pubspec.yaml b/packages/share/pubspec.yaml index 9ddf5ff289fc..3e376f42f442 100644 --- a/packages/share/pubspec.yaml +++ b/packages/share/pubspec.yaml @@ -1,5 +1,5 @@ name: share -version: 0.2.2 +version: 0.3.0 description: A Flutter plugin for sharing content from the Flutter app via the platform share sheet. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/share diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index 25c12f0bd062..693e1b608854 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.3.0 - 2017-12-20 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 0.2.6 - 2017-12-03 * Added FLT prefix to iOS types diff --git a/packages/shared_preferences/android/.gitignore b/packages/shared_preferences/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/shared_preferences/android/.gitignore +++ b/packages/shared_preferences/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/shared_preferences/android/build.gradle b/packages/shared_preferences/android/build.gradle index abd87338a5bc..e20da2c182d0 100644 --- a/packages/shared_preferences/android/build.gradle +++ b/packages/shared_preferences/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -28,8 +30,8 @@ allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/shared_preferences/example/android/.gitignore b/packages/shared_preferences/example/android/.gitignore index e6a9f0678cf1..258f69b639cb 100644 --- a/packages/shared_preferences/example/android/.gitignore +++ b/packages/shared_preferences/example/android/.gitignore @@ -8,6 +8,6 @@ /captures PluginRegistry.java -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/shared_preferences/example/android/app/build.gradle b/packages/shared_preferences/example/android/app/build.gradle index 2ddeaa6522ce..327b949729a5 100644 --- a/packages/shared_preferences/example/android/app/build.gradle +++ b/packages/shared_preferences/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -24,7 +24,7 @@ android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.yourcompany.shared_preferences_example" } @@ -43,7 +43,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/shared_preferences/example/android/build.gradle b/packages/shared_preferences/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/shared_preferences/example/android/build.gradle +++ b/packages/shared_preferences/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/shared_preferences/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/shared_preferences/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/shared_preferences/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/shared_preferences/pubspec.yaml b/packages/shared_preferences/pubspec.yaml index d35ac216d7bd..a8b20115f99b 100644 --- a/packages/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/pubspec.yaml @@ -1,6 +1,6 @@ name: shared_preferences -version: 0.2.6 +version: 0.3.0 description: A Flutter plugin for reading and writing simple key-value pairs. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences diff --git a/packages/url_launcher/CHANGELOG.md b/packages/url_launcher/CHANGELOG.md index f0bbcddecd4b..c31549171d4d 100644 --- a/packages/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + ## 1.0.3 * Add FLT prefix to iOS types. diff --git a/packages/url_launcher/android/.gitignore b/packages/url_launcher/android/.gitignore index 5c4ef82869b5..c6cbe562a427 100644 --- a/packages/url_launcher/android/.gitignore +++ b/packages/url_launcher/android/.gitignore @@ -6,7 +6,3 @@ .DS_Store /build /captures - -/gradle -/gradlew -/gradlew.bat diff --git a/packages/url_launcher/android/build.gradle b/packages/url_launcher/android/build.gradle index a8ea4ca71b8e..d511ac431740 100644 --- a/packages/url_launcher/android/build.gradle +++ b/packages/url_launcher/android/build.gradle @@ -3,16 +3,18 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() } } @@ -20,8 +22,8 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/packages/url_launcher/example/android/.gitignore b/packages/url_launcher/example/android/.gitignore index 5c4ef82869b5..5b3d2bedb623 100644 --- a/packages/url_launcher/example/android/.gitignore +++ b/packages/url_launcher/example/android/.gitignore @@ -7,6 +7,6 @@ /build /captures -/gradle +/gradle/wrapper/gradle-wrapper.jar /gradlew /gradlew.bat diff --git a/packages/url_launcher/example/android/app/build.gradle b/packages/url_launcher/example/android/app/build.gradle index 114a0ee1094c..cb6aa52e49b0 100644 --- a/packages/url_launcher/example/android/app/build.gradle +++ b/packages/url_launcher/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -40,7 +40,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/url_launcher/example/android/build.gradle b/packages/url_launcher/example/android/build.gradle index 20525de0448d..447688755cf4 100644 --- a/packages/url_launcher/example/android/build.gradle +++ b/packages/url_launcher/example/android/build.gradle @@ -1,15 +1,17 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() } } @@ -17,13 +19,11 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir } - -task wrapper(type: Wrapper) { - gradleVersion = '2.14.1' -} diff --git a/packages/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000000..bf1b63c3462c --- /dev/null +++ b/packages/url_launcher/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/url_launcher/pubspec.yaml b/packages/url_launcher/pubspec.yaml index f888659d6745..564d03a11de0 100644 --- a/packages/url_launcher/pubspec.yaml +++ b/packages/url_launcher/pubspec.yaml @@ -1,6 +1,6 @@ name: url_launcher -version: 1.0.3 +version: 2.0.0 description: A Flutter plugin for launching a URL. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher diff --git a/packages/video_player/CHANGELOG.md b/packages/video_player/CHANGELOG.md index 2e1487cbf6b0..58102f2c9b39 100644 --- a/packages/video_player/CHANGELOG.md +++ b/packages/video_player/CHANGELOG.md @@ -1,3 +1,15 @@ +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). + +## 0.0.7 + +* Added access to the video size. +* Made the VideoProgressIndicator render using a LinearProgressIndicator. + ## 0.0.6 * Fixed a bug related to hot restart on Android. diff --git a/packages/video_player/android/build.gradle b/packages/video_player/android/build.gradle index d77c6608a819..650fa6e589a5 100644 --- a/packages/video_player/android/build.gradle +++ b/packages/video_player/android/build.gradle @@ -3,37 +3,29 @@ version '1.0-SNAPSHOT' buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } rootProject.allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' defaultConfig { - minSdkVersion 16 - targetSdkVersion 25 - versionCode 1 - versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } lintOptions { diff --git a/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java b/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java index 8ded2975dcc6..14de0f8290d0 100644 --- a/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java @@ -10,7 +10,6 @@ import android.media.MediaPlayer; import android.os.Build; import android.view.Surface; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -152,6 +151,8 @@ private void sendInitialized() { Map event = new HashMap<>(); event.put("event", "initialized"); event.put("duration", mediaPlayer.getDuration()); + event.put("width", mediaPlayer.getVideoWidth()); + event.put("height", mediaPlayer.getVideoHeight()); eventSink.success(event); } } @@ -170,22 +171,24 @@ void dispose() { public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter.io/videoPlayer"); - channel.setMethodCallHandler( - new VideoPlayerPlugin(registrar.messenger(), registrar.textures())); + channel.setMethodCallHandler(new VideoPlayerPlugin(registrar)); } - private VideoPlayerPlugin(BinaryMessenger messenger, TextureRegistry textures) { - this.textures = textures; + private VideoPlayerPlugin(Registrar registrar) { + this.registrar = registrar; this.videoPlayers = new HashMap<>(); - this.messenger = messenger; } private final Map videoPlayers; - private final TextureRegistry textures; - private final BinaryMessenger messenger; + private final Registrar registrar; @Override public void onMethodCall(MethodCall call, Result result) { + TextureRegistry textures = registrar.textures(); + if (textures == null) { + result.error("no_activity", "video_player plugin requires a foreground activity", null); + return; + } if (call.method.equals("init")) { for (VideoPlayer player : videoPlayers.values()) { player.dispose(); @@ -194,7 +197,8 @@ public void onMethodCall(MethodCall call, Result result) { } else if (call.method.equals("create")) { TextureRegistry.SurfaceTextureEntry handle = textures.createSurfaceTexture(); EventChannel eventChannel = - new EventChannel(messenger, "flutter.io/videoPlayer/videoEvents" + handle.id()); + new EventChannel( + registrar.messenger(), "flutter.io/videoPlayer/videoEvents" + handle.id()); VideoPlayer player = new VideoPlayer(eventChannel, handle, (String) call.argument("dataSource"), result); videoPlayers.put(handle.id(), player); diff --git a/packages/video_player/example/android/.gitignore b/packages/video_player/example/android/.gitignore index 1658458c9245..16e843edcb73 100644 --- a/packages/video_player/example/android/.gitignore +++ b/packages/video_player/example/android/.gitignore @@ -7,3 +7,7 @@ /build /captures GeneratedPluginRegistrant.java + +/gradle/wrapper/gradle-wrapper.jar +/gradlew +/gradlew.bat diff --git a/packages/video_player/example/android/app/build.gradle b/packages/video_player/example/android/app/build.gradle index 84b482098335..a01bebbacead 100644 --- a/packages/video_player/example/android/app/build.gradle +++ b/packages/video_player/example/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 25 - buildToolsVersion '25.0.3' + compileSdkVersion 26 + buildToolsVersion '26.0.3' lintOptions { disable 'InvalidPackage' @@ -26,7 +26,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "io.flutter.videoplayerexample" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -46,7 +46,7 @@ flutter { } dependencies { - androidTestCompile 'com.android.support:support-annotations:25.4.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } diff --git a/packages/video_player/example/android/build.gradle b/packages/video_player/example/android/build.gradle index 77cbd091409d..447688755cf4 100644 --- a/packages/video_player/example/android/build.gradle +++ b/packages/video_player/example/android/build.gradle @@ -1,28 +1,26 @@ buildscript { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' } } allprojects { repositories { + google() jcenter() - maven { - url "https://maven.google.com" - } } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties index 45e7f14e952d..aa901e1e0db2 100644 --- a/packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/packages/video_player/example/lib/main.dart b/packages/video_player/example/lib/main.dart index 44b667901b8e..7fb1109a9391 100644 --- a/packages/video_player/example/lib/main.dart +++ b/packages/video_player/example/lib/main.dart @@ -255,12 +255,7 @@ class VideoInListOfCards extends StatelessWidget { alignment: FractionalOffset.bottomRight + const FractionalOffset(-0.1, -0.1), children: [ - new Center( - child: new AspectRatio( - aspectRatio: 3 / 2, - child: new VideoPlayPause(controller), - ), - ), + new AspectRatioVideo(controller), new Image.asset('assets/flutter-mark-square-64.png'), ]), ], @@ -276,19 +271,49 @@ class VideoInListOfCards extends StatelessWidget { } } -class FullScreenVideo extends StatelessWidget { +class AspectRatioVideo extends StatefulWidget { final VideoPlayerController controller; - FullScreenVideo(this.controller); + AspectRatioVideo(this.controller); + + @override + AspectRatioVideoState createState() => new AspectRatioVideoState(); +} + +class AspectRatioVideoState extends State { + VideoPlayerController get controller => widget.controller; + bool initialized = false; + + VoidCallback listener; + + @override + void initState() { + super.initState(); + listener = () { + if (!mounted) { + return; + } + if (initialized != controller.value.initialized) { + initialized = controller.value.initialized; + setState(() {}); + } + }; + controller.addListener(listener); + } @override Widget build(BuildContext context) { - return new Center( - child: new AspectRatio( - aspectRatio: 3 / 2, - child: new VideoPlayPause(controller), - ), - ); + if (initialized) { + final Size size = controller.value.size; + return new Center( + child: new AspectRatio( + aspectRatio: size.width / size.height, + child: new VideoPlayPause(controller), + ), + ); + } else { + return new Container(); + } } } @@ -313,7 +338,7 @@ void main() { new PlayerLifeCycle( 'http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_20mb.mp4', (BuildContext context, VideoPlayerController controller) => - new FullScreenVideo(controller), + new AspectRatioVideo(controller), ), new PlayerLifeCycle( 'http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_20mb.mp4', diff --git a/packages/video_player/ios/Classes/VideoPlayerPlugin.m b/packages/video_player/ios/Classes/VideoPlayerPlugin.m index c4aa3bc20f60..1754c796efab 100644 --- a/packages/video_player/ios/Classes/VideoPlayerPlugin.m +++ b/packages/video_player/ios/Classes/VideoPlayerPlugin.m @@ -173,7 +173,13 @@ - (void)updatePlayingState { - (void)sendInitialized { if (_eventSink && _isInitialized) { - _eventSink(@{ @"event" : @"initialized", @"duration" : @([self duration]) }); + CGSize size = [self.player currentItem].presentationSize; + _eventSink(@{ + @"event" : @"initialized", + @"duration" : @([self duration]), + @"width" : @(size.width), + @"height" : @(size.height), + }); } } diff --git a/packages/video_player/lib/video_player.dart b/packages/video_player/lib/video_player.dart index 822edf6942a3..fc7331ee4c69 100644 --- a/packages/video_player/lib/video_player.dart +++ b/packages/video_player/lib/video_player.dart @@ -39,9 +39,11 @@ class VideoPlayerValue { final bool isLooping; final double volume; final String errorDescription; + final Size size; VideoPlayerValue({ @required this.duration, + this.size, this.position: const Duration(), this.buffered: const [], this.isPlaying: false, @@ -57,9 +59,11 @@ class VideoPlayerValue { bool get initialized => duration != null; bool get isErroneous => errorDescription != null; + double get aspectRatio => size.width / size.height; VideoPlayerValue copyWith({ Duration duration, + Size size, Duration position, List buffered, bool isPlaying, @@ -69,6 +73,7 @@ class VideoPlayerValue { }) { return new VideoPlayerValue( duration: duration ?? this.duration, + size: size ?? this.size, position: position ?? this.position, buffered: buffered ?? this.buffered, isPlaying: isPlaying ?? this.isPlaying, @@ -82,6 +87,7 @@ class VideoPlayerValue { String toString() { return '$runtimeType(' 'duration: $duration, ' + 'size: $size, ' 'position: $position, ' 'buffered: [${buffered.join(', ')}], ' 'isplaying: $isPlaying, ' @@ -134,6 +140,7 @@ class VideoPlayerController extends ValueNotifier { if (event["event"] == "initialized") { value = value.copyWith( duration: new Duration(milliseconds: event["duration"]), + size: new Size(event["width"].toDouble(), event["height"].toDouble()), ); _applyLooping(); _applyVolume(); @@ -168,6 +175,7 @@ class VideoPlayerController extends ValueNotifier { if (_creatingCompleter != null) { await _creatingCompleter.future; if (!isDisposed) { + isDisposed = true; timer?.cancel(); await _eventSubscription?.cancel(); await _channel.invokeMethod( @@ -218,7 +226,13 @@ class VideoPlayerController extends ValueNotifier { timer = new Timer.periodic( const Duration(milliseconds: 500), (Timer timer) async { + if (isDisposed) { + return; + } final Duration newPosition = await position; + if (isDisposed) { + return; + } value = value.copyWith(position: newPosition); }, ); diff --git a/packages/video_player/pubspec.yaml b/packages/video_player/pubspec.yaml index c41ad0929e98..199de6462e60 100644 --- a/packages/video_player/pubspec.yaml +++ b/packages/video_player/pubspec.yaml @@ -1,7 +1,7 @@ name: video_player description: Flutter plugin for displaying inline video. author: Flutter Team -version: 0.0.6 +version: 0.1.0 homepage: https://github.com/flutter/plugins/tree/master/packages/video_player flutter: