From f6ff132fbca2ae5c1eb7316611d58e5dcdd4ede1 Mon Sep 17 00:00:00 2001 From: Chiziaruhoma Date: Wed, 9 Dec 2020 10:11:07 +0100 Subject: [PATCH] initial commit --- .gitignore | 7 + .idea/libraries/Dart_SDK.xml | 19 + .idea/modules.xml | 10 + .../example_lib_main_dart.xml | 6 + .idea/workspace.xml | 45 ++ .metadata | 10 + .vscode/launch.json | 19 + 1.png | Bin 0 -> 115510 bytes CHANGELOG.md | 3 + LICENSE | 1 + README.md | 79 +++ android/.gitignore | 8 + android/build.gradle | 43 ++ android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle | 1 + android/src/main/AndroidManifest.xml | 5 + .../chizi/carrier_info/CarrierInfoPlugin.kt | 67 +++ .../carrier_info/MethodCallHandlerImpl.kt | 230 +++++++ carrier_info.iml | 19 + example/.gitignore | 46 ++ example/.metadata | 10 + example/README.md | 16 + example/android/.gitignore | 11 + example/android/app/build.gradle | 63 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 41 ++ .../carrier_info_example/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + example/android/build.gradle | 31 + example/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + example/android/settings.gradle | 11 + example/flutter_01.png | Bin 0 -> 39280 bytes example/ios/.gitignore | 32 + example/ios/Flutter/AppFrameworkInfo.plist | 26 + example/ios/Flutter/Debug.xcconfig | 2 + example/ios/Flutter/Release.xcconfig | 2 + example/ios/Podfile | 41 ++ example/ios/Podfile.lock | 22 + example/ios/Runner.xcodeproj/project.pbxproj | 563 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ example/ios/Runner/Base.lproj/Main.storyboard | 26 + example/ios/Runner/Info.plist | 45 ++ example/ios/Runner/Runner-Bridging-Header.h | 1 + example/lib/main.dart | 147 +++++ example/pubspec.lock | 161 +++++ example/pubspec.yaml | 71 +++ example/test/widget_test.dart | 27 + ios/.gitignore | 37 ++ ios/Assets/.gitkeep | 0 ios/Classes/Carrier.swift | 115 ++++ ios/Classes/CarrierInfoPlugin.h | 4 + ios/Classes/CarrierInfoPlugin.m | 15 + ios/Classes/SwiftCarrierInfoPlugin.swift | 79 +++ ios/carrier_info.podspec | 23 + lib/carrier_info.dart | 4 + lib/src/carrier_info.dart | 48 ++ lib/src/model/carrier_data.dart | 35 ++ pubspec.lock | 147 +++++ pubspec.yaml | 65 ++ test/carrier_info_test.dart | 23 + 100 files changed, 3000 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/libraries/Dart_SDK.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations/example_lib_main_dart.xml create mode 100644 .idea/workspace.xml create mode 100644 .metadata create mode 100644 .vscode/launch.json create mode 100644 1.png create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 android/.gitignore create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/kotlin/com/chizi/carrier_info/CarrierInfoPlugin.kt create mode 100644 android/src/main/kotlin/com/chizi/carrier_info/MethodCallHandlerImpl.kt create mode 100644 carrier_info.iml create mode 100644 example/.gitignore create mode 100644 example/.metadata create mode 100644 example/README.md create mode 100644 example/android/.gitignore create mode 100644 example/android/app/build.gradle create mode 100644 example/android/app/src/debug/AndroidManifest.xml create mode 100644 example/android/app/src/main/AndroidManifest.xml create mode 100644 example/android/app/src/main/kotlin/com/chizi/carrier_info_example/MainActivity.kt create mode 100644 example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/values-night/styles.xml create mode 100644 example/android/app/src/main/res/values/styles.xml create mode 100644 example/android/app/src/profile/AndroidManifest.xml create mode 100644 example/android/build.gradle create mode 100644 example/android/gradle.properties create mode 100644 example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 example/android/settings.gradle create mode 100644 example/flutter_01.png create mode 100644 example/ios/.gitignore create mode 100644 example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example/ios/Flutter/Debug.xcconfig create mode 100644 example/ios/Flutter/Release.xcconfig create mode 100644 example/ios/Podfile create mode 100644 example/ios/Podfile.lock create mode 100644 example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example/ios/Runner/AppDelegate.swift create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example/ios/Runner/Info.plist create mode 100644 example/ios/Runner/Runner-Bridging-Header.h create mode 100644 example/lib/main.dart create mode 100644 example/pubspec.lock create mode 100644 example/pubspec.yaml create mode 100644 example/test/widget_test.dart create mode 100644 ios/.gitignore create mode 100644 ios/Assets/.gitkeep create mode 100644 ios/Classes/Carrier.swift create mode 100644 ios/Classes/CarrierInfoPlugin.h create mode 100644 ios/Classes/CarrierInfoPlugin.m create mode 100644 ios/Classes/SwiftCarrierInfoPlugin.swift create mode 100644 ios/carrier_info.podspec create mode 100644 lib/carrier_info.dart create mode 100644 lib/src/carrier_info.dart create mode 100644 lib/src/model/carrier_data.dart create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/carrier_info_test.dart diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9dc58d --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +.dart_tool/ + +.packages +.pub/ + +build/ diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml new file mode 100644 index 0000000..8f45ce2 --- /dev/null +++ b/.idea/libraries/Dart_SDK.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..cddaf38 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/runConfigurations/example_lib_main_dart.xml b/.idea/runConfigurations/example_lib_main_dart.xml new file mode 100644 index 0000000..5fd9159 --- /dev/null +++ b/.idea/runConfigurations/example_lib_main_dart.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..7bbf8fa --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..b65dcaf --- /dev/null +++ b/.metadata @@ -0,0 +1,10 @@ +# 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: 022b333a089afb81c471ec43d1f1f4f26305d876 + channel: dev + +project_type: plugin diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7aeb0da --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "carrier_info", + "request": "launch", + "type": "dart" + }, + { + "name": "example", + "cwd": "example", + "request": "launch", + "type": "dart" + } + ] +} \ No newline at end of file diff --git a/1.png b/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e43f3da35640d7304151ed8f67678de2cc7725c1 GIT binary patch literal 115510 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

J2brEC4+ANd8BbXVVq<@z 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 z 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 Gj{O^V2A*&L literal 0 HcmV?d00001 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..41cc7d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ba75c69 --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/README.md b/README.md new file mode 100644 index 0000000..77b1cff --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# 📱 Carrier Info + +Carrier Info gets networkType, networkGeneration, mobileCountryCode, mobileCountryCode, e.t.c from both android and ios devices. It's a port from this [js project](https://github.com/react-native-webrtc/react-native-carrier-info) and an improvement on the existing [flt_telephony_info package](https://pub.dev/packages/flt_telephony_info). + +## 📸 Screen Shots + +

+ +

+ +### allowsVOIP (iOS only) + +```dart + bool carrierInfo = await CarrierInfo.allowsVOIP; // Indicates if the carrier allows VoIP calls to be made on its network. +``` + +- If you configure a device for a carrier and then remove the SIM card, this property retains the Boolean value indicating the carrier’s policy regarding VoIP. +- Always return `true` on Android. + +### carrierName + +```dart + String carrierInfo = await CarrierInfo.carrierName; // The name of the user’s home cellular service provider. +``` + +- This string is provided by the carrier and formatted for presentation to the user. The value does not change if the user is roaming; it always represents the provider with whom the user has an account. +- If you configure a device for a carrier and then remove the SIM card, this property retains the name of the carrier. +- The value for this property is 'nil' if the device was never configured for a carrier. + +### isoCountryCode + +```dart +String carrierInfo = await CarrierInfo.isoCountryCode; // The ISO country code for the user’s cellular service provider. +``` + +- This property uses the ISO 3166-1 country code representation. +- The value for this property is 'nil' if any of the following apply: + - The device is in Airplane mode. + - There is no SIM card in the device. + - The device is outside of cellular service range. + +### mobileCountryCode + +```dart +String carrierInfo = await CarrierInfo.mobileCountryCode; //The mobile country code (MCC) for the user’s cellular service provider. +``` + +- MCCs are defined by ITU-T Recommendation E.212, “List of Mobile Country or Geographical Area Codes.” +- The value for this property is 'nil' if any of the following apply: + - There is no SIM card in the device. + - The device is outside of cellular service range. +- The value may be 'nil' on hardware prior to iPhone 4S when in Airplane mode. + +### mobileNetworkCode + +```dart +String carrierInfo = await CarrierInfo.mobileNetworkCode // The mobile network code (MNC) for the user’s cellular service provider. +``` + +- The value for this property is 'nil' if any of the following apply: + - There is no SIM card in the device. + - The device is outside of cellular service range. +- The value may be 'nil' on hardware prior to iPhone 4S when in Airplane mode. + +### networkGeneration + +```dart +String carrierInfo = await CarrierInfo.networkGeneration // 5G, 4G ... 2G +``` + +### radioType + +```dart +String carrierInfo = await CarrierInfo.radioType // LTE, HSDPA, e.t.c +``` + +## ✨ Contribution + + Lots of PR's would be needed to make this plugin standard, as for iOS there's a permanent limitation for getting the exact data usage, there's only one way arount it and it's super complex. diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..bd2adda --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,43 @@ +group 'com.chizi.carrier_info' +version '1.0-SNAPSHOT' + +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +rootProject.allprojects { + repositories { + google() + jcenter() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 29 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + defaultConfig { + minSdkVersion 16 + } + lintOptions { + disable 'InvalidPackage' + } +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..01a286e --- /dev/null +++ b/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-5.6.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..bfa0b6f --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'carrier_info' diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f808096 --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/android/src/main/kotlin/com/chizi/carrier_info/CarrierInfoPlugin.kt b/android/src/main/kotlin/com/chizi/carrier_info/CarrierInfoPlugin.kt new file mode 100644 index 0000000..5a06566 --- /dev/null +++ b/android/src/main/kotlin/com/chizi/carrier_info/CarrierInfoPlugin.kt @@ -0,0 +1,67 @@ +package com.chizi.carrier_info + +import androidx.annotation.NonNull +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.PluginRegistry + + +/** CarrierInfoPlugin */ +class CarrierInfoPlugin: FlutterPlugin, + PluginRegistry.RequestPermissionsResultListener, ActivityAware { + /// The MethodChannel that will the communication between Flutter and native Android + /// + /// This local reference serves to register the plugin with the Flutter Engine and unregister it + /// when the Flutter Engine is detached from the Activity + + private var channel: MethodChannel? = null + private val channelID = "plugins.chizi.tech/carrier_info" + private var handler: MethodCallHandlerImpl? = null + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + setupChannel(flutterPluginBinding) + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + teardownChannel() + } + + private fun setupChannel(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.binaryMessenger, channelID) + handler = MethodCallHandlerImpl(flutterPluginBinding.applicationContext, null) + channel?.setMethodCallHandler(handler) + } + + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + handler?.setActivity(binding.activity) + } + + override fun onDetachedFromActivityForConfigChanges() { + handler?.setActivity(null) + } + + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + onAttachedToActivity(binding) + binding.addRequestPermissionsResultListener(this) + } + + override fun onDetachedFromActivity() { + onDetachedFromActivity() + } + + + + + private fun teardownChannel() { + channel?.setMethodCallHandler(null) + channel = null + handler = null + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array?, grantResults: IntArray?): Boolean { + handler?.onRequestPermissionsResult(requestCode,permissions, grantResults) + return true + } +} diff --git a/android/src/main/kotlin/com/chizi/carrier_info/MethodCallHandlerImpl.kt b/android/src/main/kotlin/com/chizi/carrier_info/MethodCallHandlerImpl.kt new file mode 100644 index 0000000..e890c89 --- /dev/null +++ b/android/src/main/kotlin/com/chizi/carrier_info/MethodCallHandlerImpl.kt @@ -0,0 +1,230 @@ +package com.chizi.carrier_info + + +import android.Manifest +import android.app.Activity +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import android.os.Handler +import android.os.Looper +import android.telephony.TelephonyManager +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler + + +internal class MethodCallHandlerImpl(context: Context, activity: Activity?) : MethodCallHandler { + + + private val TAG: String = "carrier_info" + private var context: Context? + private var activity: Activity? + private val E_NO_CARRIER_NAME = "no_carrier_name" + private val E_NO_NETWORK_TYPE = "no_network_type" + private val E_NO_ISO_COUNTRY_CODE = "no_iso_country_code" + private val E_NO_MOBILE_COUNTRY_CODE = "no_mobile_country_code" + private val E_NO_MOBILE_NETWORK = "no_mobile_network" + private val E_NO_NETWORK_OPERATOR = "no_network_operator" + private var mTelephonyManager: TelephonyManager? = null + private lateinit var func: () -> Unit? + + + + fun setActivity(act: Activity?) { + this.activity = act + } + + init { + this.activity = activity + this.context = context + + mTelephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + + } + + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + Handler(Looper.getMainLooper()).post { + when (call.method) { + "carrierName" -> { + carrierName(result) + } + "isoCountryCode" -> { + isoCountryCode(result) + } + "mobileCountryCode" -> { + mobileCountryCode(result) + } + "mobileNetworkCode" -> { + mobileNetworkCode(result) + } + "mobileNetworkOperator" -> { + mobileNetworkOperator(result) + } + "radioType" -> { + func = { radioType(result) } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { + if (!checkIfAlreadyHavePermission()) { + requestForSpecificPermission(0) + }else{ + radioType(result) + } + } + } + "networkGeneration" -> { + func = { networkGeneration(result) } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { + if (!checkIfAlreadyHavePermission()) { + requestForSpecificPermission(1) + }else{ + networkGeneration(result) + } + } + + } + else -> { + result.notImplemented() + } + } + } + } + + private fun requestForSpecificPermission(i: Int) { + ActivityCompat.requestPermissions(this.activity!!, arrayOf(Manifest.permission.ACCESS_WIFI_STATE), i) + } + + private fun checkIfAlreadyHavePermission(): Boolean { + return ContextCompat.checkSelfPermission(this.activity!!, Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED + } + + private fun carrierName(result: MethodChannel.Result) { + val carrierName = mTelephonyManager!!.simOperatorName + if (carrierName != null && "" != carrierName) { + result.success(carrierName) + } else { + result.error(E_NO_CARRIER_NAME, "No carrier name","") + } + } + + private fun radioType(result: MethodChannel.Result) { + when (mTelephonyManager!!.radioType) { + TelephonyManager.NETWORK_TYPE_1xRTT -> result.success("1xRTT") + TelephonyManager.NETWORK_TYPE_CDMA -> result.success("CDMA") + TelephonyManager.NETWORK_TYPE_EDGE -> result.success("EDGE") + TelephonyManager.NETWORK_TYPE_EHRPD -> result.success("eHRPD") + TelephonyManager.NETWORK_TYPE_EVDO_0 ->result.success("EVDO rev. 0") + TelephonyManager.NETWORK_TYPE_EVDO_A -> result.success("EVDO rev. A") + TelephonyManager.NETWORK_TYPE_EVDO_B -> result.success("EVDO rev. B") + TelephonyManager.NETWORK_TYPE_GPRS -> result.success("GPRS") + TelephonyManager.NETWORK_TYPE_GSM -> result.success("GSM") + TelephonyManager.NETWORK_TYPE_HSDPA -> result.success("HSDPA") + TelephonyManager.NETWORK_TYPE_HSPA -> result.success("HSPA") + TelephonyManager.NETWORK_TYPE_HSPAP -> result.success("HSPA+") + TelephonyManager.NETWORK_TYPE_HSUPA -> result.success("HSUPA") + TelephonyManager.NETWORK_TYPE_IDEN -> result.success("iDen") + TelephonyManager.NETWORK_TYPE_UMTS -> result.success("UMTS") + TelephonyManager.NETWORK_TYPE_LTE -> result.success("LTE") + TelephonyManager.NETWORK_TYPE_NR -> result.success("NR") + TelephonyManager.NETWORK_TYPE_TD_SCDMA -> result.success("TD SCDMA") + TelephonyManager.NETWORK_TYPE_IWLAN -> result.success("IWLAN") + TelephonyManager.NETWORK_TYPE_UNKNOWN -> result.success("Unknown") + } + } + + private fun networkGeneration(result: MethodChannel.Result) { + val radioType = mTelephonyManager?.radioType + if (radioType != null) { + when (radioType) { + TelephonyManager.NETWORK_TYPE_GPRS, + TelephonyManager.NETWORK_TYPE_EDGE, + TelephonyManager.NETWORK_TYPE_CDMA, + TelephonyManager.NETWORK_TYPE_1xRTT, + TelephonyManager.NETWORK_TYPE_IDEN, + TelephonyManager.NETWORK_TYPE_GSM + -> result.success("2G") + TelephonyManager.NETWORK_TYPE_UMTS, + TelephonyManager.NETWORK_TYPE_EVDO_0, + TelephonyManager.NETWORK_TYPE_EVDO_A, + TelephonyManager.NETWORK_TYPE_HSDPA, + TelephonyManager.NETWORK_TYPE_HSUPA, + TelephonyManager.NETWORK_TYPE_HSPA, + TelephonyManager.NETWORK_TYPE_EVDO_B, + TelephonyManager.NETWORK_TYPE_EHRPD, + TelephonyManager.NETWORK_TYPE_HSPAP, + TelephonyManager.NETWORK_TYPE_TD_SCDMA + -> result.success("3G") + TelephonyManager.NETWORK_TYPE_LTE + -> result.success("4G") + TelephonyManager.NETWORK_TYPE_NR + -> result.success("5G") + else -> result.success("Unknown") + } + + } else { + result.error(E_NO_NETWORK_TYPE, "No network type","") + } + } + + private fun isoCountryCode(result: MethodChannel.Result) { + val iso = mTelephonyManager!!.simCountryIso + if (iso != null && "" != iso) { + result.success(iso) + } else { + result.error(E_NO_ISO_COUNTRY_CODE, "No iso country code","") + } + } + + // returns MCC (3 digits) + + private fun mobileCountryCode(result: MethodChannel.Result) { + val plmn = mTelephonyManager!!.simOperator + if (plmn != null && "" != plmn) { + result.success(plmn.substring(0, 3)) + } else { + result.error(E_NO_MOBILE_COUNTRY_CODE, "No mobile country code","") + } + } + + // returns MNC (2 or 3 digits) + + private fun mobileNetworkCode(result: MethodChannel.Result) { + val plmn = mTelephonyManager!!.simOperator + if (plmn != null && "" != plmn) { + result.success(plmn.substring(3)) + } else { + result.error(E_NO_MOBILE_NETWORK, "No mobile network code","") + } + } + + // return MCC + MNC (5 or 6 digits), e.g. 20601 + private fun mobileNetworkOperator(result: MethodChannel.Result){ + val plmn = mTelephonyManager!!.simOperator + if (plmn != null && "" != plmn) { + result.success(plmn) + } else { + result.error(E_NO_NETWORK_OPERATOR, "No mobile network operator", "") + } + } + + + fun onRequestPermissionsResult(requestCode: Int, permissions: Array?, grantResults: IntArray?) { + when (requestCode) { + 0 -> return if (grantResults!![0] == PackageManager.PERMISSION_GRANTED) { + this.func()!! + + } else { + requestForSpecificPermission(0) + + } + 1 -> return if (grantResults!![0] == PackageManager.PERMISSION_GRANTED) { + this.func()!! + + } else { + requestForSpecificPermission(1) + + } + } + } +} diff --git a/carrier_info.iml b/carrier_info.iml new file mode 100644 index 0000000..429df7d --- /dev/null +++ b/carrier_info.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 0000000..0fa6b67 --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/example/.metadata b/example/.metadata new file mode 100644 index 0000000..c73702c --- /dev/null +++ b/example/.metadata @@ -0,0 +1,10 @@ +# 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: 022b333a089afb81c471ec43d1f1f4f26305d876 + channel: dev + +project_type: app diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..5dcbc98 --- /dev/null +++ b/example/README.md @@ -0,0 +1,16 @@ +# carrier_info_example + +Demonstrates how to use the carrier_info plugin. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/android/.gitignore b/example/android/.gitignore new file mode 100644 index 0000000..0a741cb --- /dev/null +++ b/example/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle new file mode 100644 index 0000000..18fa0d9 --- /dev/null +++ b/example/android/app/build.gradle @@ -0,0 +1,63 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +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.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 29 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.chizi.carrier_info_example" + minSdkVersion 16 + targetSdkVersion 29 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + 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 { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..e238105 --- /dev/null +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1d1a8e5 --- /dev/null +++ b/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + diff --git a/example/android/app/src/main/kotlin/com/chizi/carrier_info_example/MainActivity.kt b/example/android/app/src/main/kotlin/com/chizi/carrier_info_example/MainActivity.kt new file mode 100644 index 0000000..8f58705 --- /dev/null +++ b/example/android/app/src/main/kotlin/com/chizi/carrier_info_example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.chizi.carrier_info_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..449a9f9 --- /dev/null +++ b/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..d74aa35 --- /dev/null +++ b/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..e238105 --- /dev/null +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/android/build.gradle b/example/android/build.gradle new file mode 100644 index 0000000..3100ad2 --- /dev/null +++ b/example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +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/example/android/gradle.properties b/example/android/gradle.properties new file mode 100644 index 0000000..a673820 --- /dev/null +++ b/example/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..296b146 --- /dev/null +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#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-5.6.2-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/flutter_01.png b/example/flutter_01.png new file mode 100644 index 0000000000000000000000000000000000000000..82d29c35c7334a64048336274d42b7a6ba415824 GIT binary patch literal 39280 zcmeFZWmHyc+ck_^-6pavP;zgvC^6`CtAHTgje;QEohB%$2!fy>(k;@hA`;Tw2uPQ7 zUwm_Uzt6vKeB*h(_uo5S#<=edcyX<@&hv zAtT#6w)ao`hS#6E1^?M$BQJK1EUk`q96#)`xhAf-7hkS>?>;3X`D-3 zTosi_+jA>1&mU7>vxs_h|LWMyJ>!2_2A?YUXmZD{)JIE2WXJIvtR41BmhIUG68?U; zc=qwx;+KE@egB`o|#zc0Bp$=COwR=%}JM#d#Rn~@Y<-3!BeXt?oe#ia>O#dK{! zPO~n>9Xoc+FD(TJ1O)iF9Ks*}edUV6+}vD&^{{tSb92y(7fd=j3~Osjim?*GiqWEe z!aw^bGBPr-Jg;u0*=?>`#m2-O%aaM97u0MDG1<#=`}y0qsZXEoeJkjqj61zhnC9gr z(wek;?3ISOTx}SqmVNJ}TB@?XfdMlwueewMy@IN0=*N#~l+K#c(*C-7ddFyJq8Y^w zB})V|Pc%e5QqM6xqobpvlpy&gOyS# zMOBW|q)qtD5)jfU1F4-3S z+E~?)swKu#r#Rd<9oN>^3l?TitHB`Z%%tqjhhC%XQ^~nUz}N zq%^Y4xO=1NvEsa@es5!(+9=7}>YHb~Oh(SoxV8HYAnbVqWIc6H1 zj=%m2(X2PlX2#xAv1_;BzK@?=3sI+WHeq~c{3!4+ca6!FKm8!SzcW|Eb!&ax6229QnRyLv?j=D z(bLmQNK3Z`v#8v~BM*Mv7qW}CedbZ-y?W!(Iy!q3)1a@d$tuUGoi(35dp6Nqm^;yu zShht}hhuV*HD{(fGOlBRSXw7lQ*|!HrKKP2kok9G^ykm>%o9ai<~{FT zFp4FrXB$5zO2_?27qpAs;hoQ)i8WM^llX$2z-|_}u6-2sJ&}eRDV*x^w`{HS8}y_x zsEZU%fBu|}n&1A7LY+gj^-;?=$Tfa@(_Ev;zFywl;+L;nL6j-e2|BmTEGxuIkGCW$ zbYHh>JHyUH7t`>S)}2UWNrBky^3d=d#Uv zy9~BXY*tU5IyJviUsWY%Yn!z^-JOo~%`71L9i9BWJodAFsgEB&mgikTJuv&?_wJoP;^Sp){HU6m8lTnR;~dk@ zH^Q8{L*M+cjS+wR@rP+$dy*0hr+H7Fs#|BiP5hTH*S0-``GSl-Wmpb8+)Uqd@I(Ug zh|e`8BqZeF!-vE(mw8d}X9XG8hGn;8=!tP!^z{rUM~7C`)U==wn(p`3)?iM$6>@=i z@>){6XoT%_ml9f**CD#V*05yn<1C4&<_H&!gB$otw&-`CpPOqPDDzr~zoAv^tQ0T( zR{kxYodo9%qLub2iHdr*> zKy|@zo8%U2J>x^g-X(c!ym5$YX{@pAqWb6VZjI@#?3d~3>DcFgnAoHEZO5MfdGN&T z%yhIfS65f>o{*Ln#qcgVv+h3ipEf)S_#LU;Uz#&RJ#}r{9;GWuEi-O?c{&-fFx^`y zW@TmNc}EW+ZQNIsUtl}_9`&$WFp_21FYTthp<$?$OW%s(tyGQN9G8^H$Ve=l?TF-K zd3kw7^qT8=R)XkMz0Q-VXt%ynZm-dQ>4e=SYs0zO+qQP$p*LToYUaP!d_vRC?;#|g ztenc4&39xu^a+hwSC*25gmt3yhUGc^0&RU|$+6&1A>eO*1fp#0Z|*+bHiLS{#OZ#oUg`cSgjR?vCK zqdA+tx|*t0m?P>(9sBR2KVN&&pl(`;ms+5~M@5STFtJU0OBIHMK9r?xhfB>Gn8#+sQVqp$eG>w%jb` z`Ut_Lc;VheY+iW7^=cO8%)3>(SfTH&{SQ-=lhd%&=+$Lh6ciLnNs6mUg2aZSRtX3Q zC}rpllr`ZSNw0MMyLZpCvbMz06G=&ysGO=!eL2QesEFd^<(QUNyqpWeAv$AU_jQj_ zeId8er+ila?c0d(kM-5n1czB6u5x<1!_?GCf-d&ozkk)m-W6srTiMpz=t_)F0S2(QY9-7Ec;hGcfQZvb#B6#^lre2T2;a=I)kv zGgK9G&9%rGgnBIB0CzY$7oc#&6ZtvZpUq=!Z4Hd1@IKZYKoJijg38gcOK|z;$Vk|q z`t2mC!NI}mqA_MXjBH<)ajOItzpK!}Le1ffPJ5bGD+)u1*6eroQdwQy_fj+io^JX_ zECE^!zrU(o6QSBz98U(iqh$JV^VY3q6p8uz41-#AsR#jHkF5Lg@$sU5`|JAq8y`=9 zJ9E{|RYLi%D*z^Y4o%g2^a250PUIgj1%O;%8yz<8{1}TSn?hvKRteD`*B6bZyK`mc z=DzXKr3Jlyod~2D|AvKy<<@Au7}NQL=-$SE+pqbCo>*9W^!l}m-AK*JKL}L%=|;MC zG0B+t($uKMR0I1gZWLT?}a0H ztUa_sLPExk??qnJ(@;@`Z`&0+FG*;UT}EB@cyhvH+t|1(%jj91N`xkARE0lX^OFNq zDB$;qPHDg_YHpr3IH+s4`s>aUuSnL$gnjp_s;isunzz62% zju0^7F8W?q_mRe(h$U`*pYr!8fRlx@l)+uq;r@H~CZyr#!l^RjFMfkoPUQZNAMZkQ zVw)YLkCo$@T!w<3U{-b1S?>~H1d*0^O+)Y59R zs5gN(Z{BPesVz0E4QuuG_kY!D+=`ZF_v4fM*5<-~I)3{U&BrwI+UKqGtQrG}?M%}u zodEKYxOGbbP4wf(k3kU;X}AYEUhA(T^cN>(|84R}B}(F6rm2-|kxy zE1X(47!V!$CbgHF_D55^872&r!jX2Jyy={7#Y}@*-M8O$GYo%xdN9$Ios8sC%(ou? zLc#nMSSKhfj9ENMF)>g*`(x>5JmV=w4+UG>KEoXh3=AQ4t=8E+J(?n-qRju?2?j_@ z0YDKE5eZgHCBK3PW)jh}5V&{k+Cy~9_&BL>B1bW_$e}*GkB+vR(;bKwNogyhrqj>x z=fb-GID{6+;kvq)O{b(Lmf?`Iqod*1r!V&J-D_F3RP%+LDSdg*{?VrUjI6AR_v(JO z3MVKf=kVE2slHzTrc+8)Z#}7{psD!=Xg^}Rz+tv;eu+(O%WvnNLn9u&QP&$7NITkq z3(lNTL&sy9Obe|>d$+c3+~3JZAZR|TQ#G=^9fzH^BuHib47j1I;v7azH{3Rs6>e5i zhG=EVM3xx$>dE8BKTBu&OFf>&2l3oOdu&V7N}ifB6_@}1 zDz&A+F8s*bg{IhBTu&^!vY0y8hzR>(&kER z`Xht|-zmh`88^Ipz;Zz=;msRbvyKl!rFn+K)xoXlI;BUb0(fo5WJ&GVNvqE1XOGo1 zH)p04-oA|iRKFBgxIa&9C;+!@Lt{^_x#2hvA`Dyym{oUZEc*TG=n zP_BPKAC3ITk@u)*w*rBtICQ^O9%)}dpvoGK&6Z1a=UV8zU---`ASgIItCN~ic<0B! z0HEXc#~ETM_(91^>GSZ>Bc*)nV0m5-3{A&rX{Q2@E9~Wdliae?e{s<^JdtT@eTm)5 z?7+RwVwc=Q3?#Rh@^}9}QYv-dIuf}8th%PdZQ3D=0>LuJD`!pVBXXQs@w`g(8N4;_ zsJhmc4OjX^x4O1wR1+ zepbFnP5#XoJgYH;MqrSI*h$QV|Q8fp~$oTjW0#Ud1 z;!0#a(y8j%9Cx4Egh->c5vY2&#U|{Zp7V6E1>V&brCSD9uARDgQC3b)&VHp-dCyST z*q9HdsydI}cmM8;f4m#%-V`TAv!LTJ-6i#w-+^h)=?oJG2Zx7I%l-TJt&fiV9RLCV zp_kmz5&Ch)JEn-#l3u@;2)%bam@;BJI!*xJk5K&U?d{#vm2EPwlZ#;&HPc$cG7tqDNq`{j$k59VJG3M5 z+LQgpO)-i7w7l|DOPQ(4$w2ULn-~}(iC;fcsM}3Ey)Oos)Vw^$a3xlsB=MJVxX+NI zF8cnK(YC?HpI(H9Du%_gf5apUaCF&&w?jGATn+=lTdpUk1q3w5$BhC{qe^5O+xaNe zO-fMucwrwA-RLJvOYJ(r6H7v?Kirz_+0&a6#fjnV{(Ul~G|e*}6D_kT)m2Oad6l)b z*vuq_b@^2F`$@{NpU&g9WHk{OjH12`??rrqo?GTuR_xiO*#7h|qeO8Q*?{OcOY8k; z?4Zbckiex&a$^3Q+NJL?2F%Z`75{A{E_(g+xpOAv-pAK=+<19b3Pbwsc)t&ob#-kI zc5W=_?Ag6LI9xYLL@wW2pI{|a(lnVeg;ZH7@%z56Hg|V-g4?j4=}GMAd9%5Uw2X~8 zjah?o^*bA?{oI_@nTbar4Tvnww;4V1mS8@v_T8Lrj24^pVsNkY7_oUAsUzY?FQ`rg zcX{7o^E`>fKWPE5nVU#2UcBJiQIVRPqkwLIt0w?ig9wxt7kA=T#8z^ec3g~4)5NG9 zg|T9@9q@P}%cfACxLUReH-Uu5$H%3^y$AOCl%JB3k!elUkm)T5?vwxG6m6o;jIxOi zzc$_3$xDnYC|yd4x+On@{=<=6(9BbPFXZU#oMb=Ehmn%C(Fr$C_H*Cfy$xfHpNY|~ zcF*f&M@L8F#j)GFckK!?F5Szm8Lzn0fBtVE0h9K$#@JgSr^P|#G$HBU@)ZyR@sH2_ zCKg#{F3Fo)y$)Uf%E~@Rxl6SfbtgL6_cRlLrebG1g3?02k9B6#=`WI_MYU;1P@fUc z&*v?0<<;IpL9ZBcLF?z}=)Eg}jOWgY5yNPqLwZw_x9}HYoCP(Lj5>XWBt+cvW}0^K zI`zfd_iNuDSw48;;#JfX_Eyqg=6SC)_Rs=$cV*toMM-Imm$Be9Zs{;^0f)t9+VRe2 zv`#z_Yz&H5N_8*`e>MZQq`+}*MP{)(+hnw5p)d@)i>!1u_d{ z30LM$-woUIOBA&GxHap|cKU-LL(TukW2`ZZ(}dG${w}zQpR+dLG=OL-J>Ftw#u6Q0 zQ`aiASHQ?HWiE_pCbd6!;0GAmdrD_#+UVqDa^2g)^GF1Itu5(-uwxe3eC)n4{RV8! zKbZWr3XVm`#GKaG*J5krWKm3b2UK*$nV9s>i=bvGqE}zge0te5S*P^DpND8wliJVq zoTo9TvAnCV-&vC^AtR%JwUhc}r59DhqLOwj+0g()P_G$wtLgQX!)xjM=+6_a4g<7E zTM~(cB9cq2bWF_G%@?$oLlLoj9;70$BeOv!#EL$6@L-}jK3!pwXk%m_K&c+XZtOll zd7hK=Olh%1aMJ!mhc2|<%W2xneeK${pF?`udpWss?jHDi^F^N7C%J56CGdRzcy!1` z3b|GPjGFs3(C;M(;^(>_4floHv-4%>8l9a^pKIrbzkg3*kP(=>`&vt*I@wDuUYd@a zhD#CAr($bs>n?TZo_1M%y$lAyb3Me(Xnw^{df$8-SNc8T(czt(oJsi4o!D zIT@xaSDK@$zwge^VU}!7A{8vPX|$HOxqKmFVva)RFC1$@9mrx3`nX@N@yo{Ix zoqOWC%?oQ2N8bp0L?}>2{+gR>?B6DNNb~nE_1N$73R)o>_tn2^A)4FUrl68;z;xll z1&`AewXCz+^D47_ZkT@QFz9OT+ZPgyIM)e}K2OY8iSlPqI8*@m=7HG=j);g#R!Ijx%2Fy?;Wsa8;#k$)eG6q^ekDEb5FHJU`atgLX5C1faC_V-<9PtK;;T4*|)vKJ~+BB!T9iDsbiIl<)h5qvc z^_=$UvuBOxB3<7*EeI)N_Ic~3s}w77oNDFZ`4Wtu6Upf%99fu(;|`+Au0|uw$lm!* zcV>#M^lz((+_-TpPv^=01w9xt( zV{N3c%*m7AyjswlF!o7wrN-X!2s%wHgpANy&`ka)Jt&*1a={D2q_ujFiExXODi1nJ z$~XYy^~L7x;5+H&+UX_hN!JHNuU@?mKzP6zBkPZd1jRo;O|xomK5||hi$Zm+=jiz` zx;WnKJe46vkVR1-5MF8T`JO=#gO)>K0N={swDlXJ!!;Zo^C;O#pBuEX%(btth($%+ zk+^wN(REXwPQWqYpz~f_Kxi)ySspni-+Y_?wixl3wrkd|8TFZF-CX33q&~2{4Ypfy$wRni-xstc$>}htcw36rylEd=)cmt zjQn-qJxkefvZaCyI4UwC}1F?uap8dMz728%c6zk?R$HuHCz%BVm~wx}}BHZJodU!SWu!)N*9 zzCVL-T1pBlv?FmOVBqOqx0PKWFM38+U1p0_wm16kJz3TWgi4eE3}G_#jhxSEJ_Zby zBHkQmUY1QgOLm*IvjxL7e*ExhAw@G^9&$jokqJ0BD2k`V`CL~&lx&k+KsPDfxpRjQ zIFVI}6$~C(45R926(XM}TmP3A;6mIJgSTvF&WL~uZ6%W6XXW9y zyf&if_ux#PLD&V_W>^|;7Q^MZ1%=qyq<}9QK&zQ`u_&h`;D;o+Xi@ugxACSkb~8Pl zvc7rf|B#ow2ux7(P-OJa%SA zw&IV+JMV2XiGyKl14LQ;&K_<%cq6awEk8k&LP9W@XiF{p=6f;~!i?we0~>2=U~!>T zwM@~Cg!(H&$kw=Z2y%ge9P!fzQ!F zc&Mz*^m5+D)lgd+hTqh>uL%D7v~zuR$SH8%_y%!T;ap}-RWAn++=^gQT4ThIF3tAq zT=zVv1Oe(mk!N91DcKKG0F&zM(9jcX8p|)E1bKM!Dm@wqCT*%C!}C5PGqVJGSX{Fr zNW{f*DxEPu?vbCuW18$x%P=E!fteYpk7NfB5?rXc5(ZA;6xFn(OnpPu%X1h)u6qh; zPnK@!H3tO+#oUWjhnsJ?EBE24s)HrEvuXt?7Bf=7`hpPi)2(foJGTzln*7L{e(IS|vr9H)fZh^2k|~ta*ZZ zTlz+0LEXoH&$7);Q62+F*d@J!S8N&v1%lXGLTVD$LDV!)rkAEcyQ3WE!-xiLH%Dmm zSHJVtQad63W(wjO1euQE_l#hCe1x-lz2M55-i=O4Cuffx@3Jn6?7o_BKNO$azBw-A zKso6;-Syh*6zIguS!Yh4HiWOld2_BpvW)x+RseT^8xv#V;>x+{#t&#QlYj5MQJ!4r zm(O82fP0?PyZ+kI>?MB%qjSss9b1H_q$~$TQOjd%Qipsx(tSN~ zoD^t_GKQZSPIS$pQ-HVWYKXw(jechY7Nl^%^EG?P>NP=^zPPQ86<$~0(?rdq5cqXp z+j;zqS6`;n!pQi57Xz#W{_a~#Dj*`7Ik0CCm1jy^9`^R{Tdo0Q8L9}dF+4d9WMPPa z!hGcTB2DhZy?(LsY-nRkQ%>Q%mSvJRZ$3q0L=*VwW;^nuL6|h>5yoei^iR*lg+7;A zzdmy?LAfa} zs6$ocG-`5-6FEKo`pT#shPj%V<%gnoSk*qNVui8_i%;(mGc+XBXF^9mzSe=JYW(H# zoQQLS$8zVrDRY+O!?bYeG*5M=A0H1zL7N;35N3|07ay&UY^QVZZHy2Uq4;{*XnCrg z!)`(m=AZb*bG*E2N6-4UQwY22{L~v79ON*lq1#VE!EG8YiDNGteA{=F_g5Ugdo0&VVl?|1mz*Y zP3_sa3I?0=L4_lL7)(uT(b3VIm_twPDOe6d#wdP&wH325Q&=B$wY`QhKp+L+jlakP zCZ`h8`s67sz3;Es);IdM%~yHP-&89tC6nz6egDTh&CC@qClHBJ-3Nw-hl!!{SV2E} ze>|$zbr+Q7r4GG-WH2=7ZJzQ93R(B+wTl<(G|SHUY2=s^JVH7yny%_*7dQAPZM%>- zC(Y+0$BxB7k;7kntA=Kks1UzcM$u2xmx;F-$C@@>sTa^l5zI?t6S#tC1^HfaZ__K-t^`iWIYNLWzM(0u}$)F`um`1@QK-_mZk?JWwfev3zc zl5^OMunI1BM00JVYZWR33(H$tTDo_G7+Q$muUX&M@&v7v0K}YGdv@&_%c!7N0FeV5 z0v#-0lV6`*#1PW|OYqy*uVW~YmFbbP$9fCw+JAh0M7$<8R;v-6S1SIec+Ef| zmuV=}?sLMW-UaYbz09&_aA(WL>eZLX|WJX;2%-OTY)PFTc5MA1~gT#_v z^d6IHwQT6pczk4=f{b7yXts{5(&a9bg4q)BB!zhYvi6zI%=m8sk?#P6usR|bC!rCD zXOvLfd(CO`Do)Z#5wtkhv_gDI!p6)-CIUylnI2;gqnLlfz50m2d3xqF_FqQJ5da}4 zW-@5p&}-r-=24TIO1HP7uGaY||fJ>@-o z6IGz?z%x3p4WINB+O>Q4_zN+TdDko^bgnE^y&J%cNGp$xm2Vhqm#WT1hWdX5s1a)TS@p8@qy8zwHXNq5<@ug+i6zN|#lFW7L1E7z zK*M49ZZyKBuc5?k!@iJ$*#InWLb1z=(M*p6td+aSX?bKZ@ic#ZcJ#m&$4ATn03bdk zTgw_!VI1OU1+CEVIP9l*%66tR0t~+k5V}lh?TUG6adUw^G>uOIglz5G4gZ0E*%=wH z!--@!R?yei2h>#pLtV`FM(MT!koEe?Y&!qU>dS`@`6$;mEME~>2l#HZmpi8DI9H$Z zq*?P2>;e-l?sxCr4fW^Si#aqt(%pEan4Z%(2-wrYkU)VL#MP!qUE4pGA%RJe3!d8$*d%Y0;^URVY9JN`6=fKjXBYaXNphU3| z(qx{gn|7K=j7Q)}HgDG}CM!$L7O#}Rm}A^QNl$NnqDogrtr$R``8Ux2`Sb2|4LOx_ zOi6928pL4ax!sk+mNz2?p~YwedJJuWIU4^GpgyHbRypof2R5u|)rv5+k9RX_TMjZ= z*gjKxZc_~PO>n72!P8!B@=(!yHA}%ZY2&*opZ9Bc`MT+LTS@^gN(z5=Sln`GL9$66 z*d-m#RotMYF_SkW1MgQ%)Yc;klD=a)UAD`Ld9zpYc=NquJV(lPGsd2si{Qv&2apJ1 z*Wt=?m~5+E9B=~+u!TFLcsVRXw0di$KOG8nn07zhIE$m3--h`uT40((8Kmx_BmWD$ zl$V{}hTy{JH&RuDit z*JYAPzETd~!~ubC*lz3wSC*J4Y2=q3gWF=`AGsS~D`G?9UYlPzFj@1TG`aR^$2(0H zi8+pYFe`+CXS=tW4zYAM{k_=$Q8AU=P>yl-B=q4I8!X}gKyuKoz3oy2X}HZfvU+Xm z1rL#zl}_hGc;=x0d+k5nXH#G7Z`bey)1utiFAJ1lBy)8`M37>Z(xLqX{d8ReK|@FF zZ;_$8_~Q}9$u4#s|J*`dxjXJ#t*f$KC<`crxea=N&v(1bEm}R1tJ3gbelYR@&-iPg z?4ZJaDArNq&3+2XX>-fVTwA>Ctf%1yCWLhIX_V{T^eY>72O>pfla<+;|91HL^zf4l zYo@afH;s*x9&IgLuw}rsw>8ZEtl{2-G}JHA{|!~$2-#Fr-r2zZLtUtoPk3YB*)S++yt zP-|l>&#n1lXQ$)op%Iu$nBd@f8C7i3Zhk2BsjfxXjT<)}_rAE$ek}LmZKvDHk`0}= z%FR1I^flPS4QD;}StM{gz9x{E(d}mYiYvD+9nger@Er)4>ugVHoSoKIiW|!6UF59cn+7AHgykJt!e1^_wlg zu*#w$9~|afKH|pBvaX@p?^6w94d#Th{d&;BWHDAYi}LVoZ0#mf0a+}YMtD{lM#j#) zsI$hL!3Ikue3KVbg674JA3dtK?zIMj#%TWT&|WgJ<95$(b>KEQ+@2CH&(ZX4JR1wAp@&qD3Un3>37(0pOP z4ZQ#H6rV%(GqgpjFh&)RANfWwGoXX$O6oG}g`&4Ha+Xhw*49*1s2VB-LVp%IlbkXW z{m>N+7xMvwm9E8`ij>OK7+tFUTthV&!!#2&CC&Gc9R-nk#Z1^?Ml(^X8M=7>Xv7tA zZUR_Ex~s<#3gAEg$icY}pP{U?Gs-=)_KR=x2?DJ`pJ%6bpA>QXaOr?VP28j7aVaw| zMSLjX1r4+X3G0U8>(JX#bR}+bZkV3ZFptW^9Ia$(+OwUW`|`!MjuE@k^r6dFYG?D` zdz#6wZMbE6YzsA8Mgtjz@jIk}O^x=UipKnJY@;JE|J3AU6%H2(>PEsGZk*l)^f}LC`yo{d;`_riK_GrkjDpbnCX#d#X$bgK`>aF2Lj1TG&iw zU)c=g>(){a52}?v+e1^E{!Xm?ekVfM;>{u1%s4AP)jP}}|KQF(5m#3Os<~chqyAK6 z{b52szQtaw`a=lgt~cR-#s4~ciGlHofh2dS2eg7r^vNe&&lq<3eurkQ*; z68^RsskxN3d-ram@utWrN?H5Z$Ga9H9b8HoyvttCvXkY>uX)$(`0*z^Jr~V%U_QvG za{$Aqm1p_+m(K0mw@E@o^QVQi%3%v54|^MD?~Bfszr_j1wvWrhNi?M-AXCrf_pDy8 z0|Vc~cR<}m!)2=alLV(ov+iRr3I?Y6d|J>+lTX?P#KG7CX>0xvLfz!l`rmQkTvZ_JmVa<{wnggGDV)pdgDt`^Dr=k+%I^3sysM3&UO5;S{>-_0I|9HZ4= z1D?xgZc$F60*Ua2fG`7HZ)k`~Ij)wWT`YilJAwYv-XdN)XJUd{fm+FGvxUydaUB9Q5cE;yu&4K?yC?>t~h zeZyzh)X)ZO5 zWSL(Od2@9veC{wtLX9hfR$eEsu7AZ)VmYQFsrjJZjO(S?Ebs=MY(Qc zg4}1%WvKPcr%!(!SkNqSRRaf9H`OJTE)yx_nM1g4LA4&D+XlHv-G%li7ZYoc-VPr1 zx(57rC98urUiB~DzST0k{TfC|aQl4?efc(2Y^on*LF8UE4aY=U$Ws5cf`;ME^l__V zZE$s$FYn)W`;kVwuNreY;ZQo+1+#UcaqA!6c3LXEVox%t5_sf4WW^-s0A3y|sK@C8 z$!+1bWEBgqG&yA=u=W##iv=N4z|9u5g@Vxxh&s{0ODF*NuG+R6j7xXXp}iMLJE)F) zjQ#YS5j=Q$(Y*I{H!CWzK-^{?gU>4H)RVX`UHW&WcjcZRolD3CZPxW8F&D9avY1xB zHV6^Wkcp~YBilIm)dfy}UFXF{rZ|>l9$k2msbfg1#JqL8XriS^ESbrr1>y>V*!Gm6x7ZhsrPxc!Qi z1B3hO>@}Y@G??v6T5UKn;yEKwjQ zhGd z2q5g#0*)Wt*M_O4`-(LjdhO!jddY2?nV0&EX;4OZ%QwmmM#Fg{sZ?YF% zY;6!SZaH7PF~jeN(S`1+oY#Qpa~Oneq5L%^i2R#E;G#2MPO6- z!`(7Je&jIgy0t#wRnBE+3l=FEy^K0e7K^G0y0@7i%0P>pIdg^uGhe^!LUwQenZTge z<0ZnQ-0GOGFq0*NkVrJ^)_@5>AIiKq_B>Z3{0@fiGZ((7g{{1ZrsgtD0AXze{)1~8 z^%GX5;>CvR6!@zgf&j!MOb~#$M9<6`Of^2XTgYF+NYGTgLQ=yR{sQ)XLe_%6Ak1?y zaB(8}3T#ufC8EE<`F`|{o^L@+0l?)xkP}vHg5mg(3bD3e zrOze%_UAv!a;S^!CYw7WN0xUq2p1=U=ISo+7sg*x03R4&e z{B%=#2{6)$7OirvSK-2Snu#)$+L7T=& zUb?X5I@NKh805&4uOe*n z;Q5nmMh8>f=ZOb>>(Iy6bgpzah+co3h|({3|BR7vTtUht2(&dbpl|0nk)iX+h`>qk zp;rX!uTw~IY3;!Dsx9wYWH#-)hu-ljaKMch>u9ffi2K$CZQ1EV4ws>E#WnAkHp0Ou z$_tu?>xJn&5<^1FNsv6(Hy7UfaS`MvxKr|J!rCGwWj97^pzz0m%LX+kisw9?qz<`M zuW#+X-z55J$EQ@l8^QTX#;*JY6+~U)&59h8c4-Lo3~bs(H$aOqTk2qxBz_=Fby1^B zOG~W>*d<#7&j=H)YR_qx73u?w1>qpC#zSDKy zXP>3zy+AO9bg#CnS<;h$o8m^3HS<4eyDceQce#5v2I`(!I2Vq2@Y;-w4F!z8rlcxq zT%9|bWi@n`Xt{T~k-Bv1W{E}NJXY_O)3x=~JJv*xp6yA+rc$kMWF@?DV>n&`);Q}< znJ8g@XmBgEn@od!aAIv#=VGt>;EmAh?QgD(lDlor33$2dfGyFA^dO162=Qd209Xh* z8<#+4NgPURBS;ykNTKVcoAW*(nF!{T=p@(;B{19Y@@Vb;lS>}*a4QZC5c2TNNKKgV z)GUhTJPD`8_-N$9$XTx^Pngc06$LkdQ&v6iNn3l)^YEy`O&K_^oTpl7pIYmLoFRn# zZnwW}s0hxU;2|p+0}Lztr@IR5k_k5h$Zb?*roaEbiXD~%i9{T;d$7|Yq_osS&0&M0 z9w!Ef=1H0lDK#c60$6VhVs@l~JrUjis|9JbM^C{Srh2n(DOCi!@az`=pBFTAjA&!64!h%{$t=t z2n!RAm$YOVDg0K=y$;o~|LiEtwMy*6sTG`6Yqrf-cWB0eE3>{L5qN2uaevv6YY6iQ z&NIkEb!sVgq40xe9=l@Gwf7wj@1zj(GaL*x8LiXFcHiP7wEaT+={Aefw=Z!(lSuV$ z^T|X)R0QQ-2*)vTo(3sWW=x3rm+6*l7!iX+@)E96Fc8^RL!yvxBw@!Slw?GE9Kah~ z7X!QfuiF0HV4fs|Js-jrn0K0R$&fw}*b)i@b(hDw(Q7bs%6|$LIQ=gl31?O$|4MkX zXd&cvtWx_1{fp0?spSDG~&w~ey`u({C~cvJ}@HU4%?*k?^luq z?SfN>`1+r|&424!|0lhu=>7W(L3YIX4tz;`o%}Trt=~(W5y09V$+#g>uKK;;=lhd+$@Fr?pROSzqbzImq=|T>p*i zOG$whQg~vR)1`&##2VkD=R`jLrKg;E;PftCPTfY&S0(I*xu=Le79JZK zH*QSz#MCd8W5;Zd7=i_tdFZtZGNLH|w`){rvoz`ziqE2661~@ZmWhoy}9Q z4gLDoExqJgR0Z@i*eoObcG*5wp2^wS`F(CKH@%?qF?jvQ*ql)&Yghk?~{{R;4VD+=+UD~e0d%`WDO#7$UXG*&Hfb#f)Gjb^y6 z&7Wk*RAeq68#7#7SrJ1+wY9So(a_MK#WB4kpIM;7s09>J$jVg)y&b6$J5J; z2tTWVFHaChPvNR*ab*Ce_shx2Ia#{$2id2>%jpk>;FGfgvwDJo0a1wg_8Z!`E;xF` z4j|gt^t2y_BuDsI5M7%xnu!zfZDi7v)VfvbAdeDw?cNOeUTd_$ezVrzCi&bkns+d~M~2)J%UV17QQi zc8PrbIrg%uKT=$}It&)>f)z^<;ib<;Z$Z^8q2@#6Bb=+~c>32kj{s-SsU5$eQ-0I*r% zoZ<;2K5p?_LxZeTx*T5TyS>%F?FX;4wR9Z~8QIA9qTT+0&pbH5 z*ilnc8&gy3_&IEa8Vo{=SCUamYz>bHP(Mf!@D;}keeyC;tvaxjEYX2jjUl)eeP(86 zi0#K2*>9j!CX>Y2rIr>x;FKG21EpKj7Who2!_caImzS5r{-}oMNe?Td)VmCOu`h$i zX2yhGX;nvu>f++!jjwlaFbCM?JIrdQ0JT@oZgtkXQwnc%)@yHMgV{d5t&I=U$jZv9 zS=WrWh9Y&!oK>rU10LqhE>&9$FT{=rc#s58abzVol0}?iq&XFofN$I`S@`%y@Y=+k zFz#z?oa@SyYwPS((^Txqw>d{IN_zEcCdzK^3CWeMj z>xKAF9H3-<`t&JC#q+@unL_3^HVX$##CuRd+bUe!`*JH3=>;$I@SH$t+u|1tNkpEW zMI~|_>gqamY7nbw!?pj^DP0KXM7wz!N-HN@@*_fe?OG90 z063Zx1!g-XH<$ycy+diGGA#$bJax2Ftk^KcXBDZ|$KZn-+?SGdimgu9VE7qiAPq2h zM@}Qw+7{gvNhPQkCD|*IWMqysBWElRl9L~&`dC|A+w9J)s-v_0rDsn4!o!XAb?+s? z9P?gkEG--9wnsP>hm@3$w~VEjn3#`GW2btlyPFkhyHwM(NG8At8gjDI5}lDP@qi1eE5R2$|tO;#y1GhvoS2;3D_mRHKs4 zg+lRAS>VW)81CP|M}<)Nd=QoNtVD^ZU(H(>$8aJN(}8l6RbK&JK@Tk(J3-Q*|19r^ z5lQr`jDph0sWy}}*U*qpRZEvTlZ`Y(-&~k~SSHR6p^=~)-5$& z0-u{B-)j4EWMo8ly&R!1gbrb2FGNl*Tx*)Vykueme+yfp!Hp`ASU!3dpm`_c7}#A< zKrj7~LaSCCT>(EpvNzl8BWuUx^z=yUMU7bN9|@ZzW4J|GFzwSF7M4;%>pF-HQml(+ z-yRTni>s|d4q||5X?Ca~>bjC!J;v3Z5;y)++C_h{Zbu0V2yA{STFd7^PQi)g{j|#G zd8g~3<~Wjx)&7>Dxp~A(y%LkzZoRM`Wt;i;R+g6Maq?u%zkW<4SRu=}Q#*IwA+?Ro zBwpSr#aO3QK2cGiVry%wIYNf_VGxzPn^VPe%}#phNdQY$ywCHbzgt} zNKrAdA$YV8U*g>#+hwPVQD3QOPa9wDEK~@VhtnVty*Kud-CyY}+T~w;_=Ls6!)0{v z@+Y#x@gWee&f8yh)M!=&q|!L(U}0hs{*uiI=uBIc3Lj4-l_@k*xLhI>S65eeN&?v! zy;pzs5xCsJ{%q4;HK%S!2)w)@D3*DSbGmc=;ao~9>wWVK~f0}a>=a|wc~~+iwAWfPRmf)b0j1u``{q%S48a)c+g7#dXrjgr_M5{ zpoM7WTgR%NyNedgY4Ke(5wM}MasdtA9mtWQJmEP|Uq^{scS`-5KGY>Y;mrYx=Dryy z0n;=NFGK5Gh2vfunwt9Je8N{9upUpJuEGXNPZZD5yDGs*2x*r$=rB}qJW5HMTZzN2 z%ohCN*=NxN4jwur3hNL~X9|gmilUytS*>KT#s`=N5#Ar%#SO4l86**>&-D_+t8#cP z>k)yMhiQXNOcnpEe_Hj)YNY0M=x>-|l7Ykx3lP>})+to?p#PqWqxAs*EMZ?J(eZyn zNCC&cC>Vr%@z&qaR80yza3oD;;Rp}2@LICLmf!1y&6X9rZvULz+zKpIv?8;Jii*k< zK3*Vhh=Jdp6|j_R7;gBmL7WfLmx}zjJ?cRk&B|3n>)ad?CJnvu-T#_GjX?qFm4#iz zAES1agLGF}T1-f!6?S*+>L$RY#hW%oUgxM+qsj9*t$#i=e$ukSJbOw*pc4Aoq{vy42|(b-{Pl*J#Hrg6moeQGKjaAI`)sDZ7$ z`@Hhdq^V+weKx5?v82C^n&;Hn_@qr}&Axa?9uJZ$4$<8C7KIVIFUM)yhh#=>b3vy@ zvMzi3M{qj3PKf~8Fj3yEP}#$FR@f5w4kF*{W}g^1AHRZX(S^^~#=a&5Bqq=DY`^gI z^oX(4i#12d%*M{nlMXXI&k*)wGc*41EEHQ?3G_3I*|%H{yu(HH&ElhJ=f~Bl%=#ql zTk$Eh=Yf5w@NPbE$A2S)i+!|!5amuGxzVYpG~{USFl8Vr7Dm|8$&*p%{m{Tp(9!t; zv?Wo^zOlICw#BIJTKcxC{;E?_HRcIjAZw6x^q|?(`_&WvB)i{! z5kpUXL_N?g_6srVE#M@kik&-m62;ii%q(?X2wwj(6-vjc$w`+xJX?~3-*7Hn`=q@) zl7oP}mr}OPjL}koPI(1K3f(0$=L!;;p@ut6D|#DmO_q`-Q|N7mZFu?k)R!`t<8u^U zNEZ9Gfi43GB#C3RzCxeV4<3Uq6acHE5G=;a)w6e;gxp3hf_+zEkzcv6+!~UqiXPRm6+ksi+_kseR!E{)T7}Rl0X$28F z%|exeA!{yPc#G-ODSQ$TUFlk_g)!eq;j67n**Q7ia?GZ!rqxvrQczT&qK@88s+Lsp zk8qm*Dc<^E0H^%Y1-~iw9V;S&2Yc&JJUSxzFAP9Rbm=M9r$1xohhRIq#KlF4+Q;Tj zfp$(n!Bg6_#dGs3DmFU7-KB&@;?1(lZ-isRABnuKZnx!&l}~gO`hVIx*KjJ+wvXS7 zjE2di?6PY{r9xCpHc_U~hEn!PD?>3O$)+OP)jaPsEMg{!k`>lSG`6Xf&013y&!jS| zl0>Z5A|z==QQ5rz%X7S6-Vg6_ywCA`c#h||zu2$ay3hN%&g(qS>-zuBKrL0o=o)(y zCf_N#x(Drgqk?escC8U>#|_rrs~zr2N=l75SEz$OIC9=1%I{#z+_A3XXuY%sORd*VHPM15A$gk|a3nxmoK_OU_z#auLj1&&SlIR-981L%uJC zm5C!k0P?u%@BP_O?KdDx&xeyoNZ^k{0t0<@fzeKL=FF)`n4a=0z5{n<-sgI(7@WVG zUgf^ulE@w@Ctg?^)|63+g{&IK7ww!%xhp%II|c^_{Yl7@5j#_&7GBx-b89s2MS)7{f~N z2|JiI7biJyOI?)HABF{>h@3-=K_;Sg^yo5@nGgCSp7J@D$?M59+T~*O$YSNnxyW~N z-oA%11cf)0SM9HYTgQpv^(k0RoIdbS9#bPEJF>D%m|L(^u<#hFe zp`r8x@|ZipPy3Ai7M%7&c=4T{H3cXwRG<=8#}#feKr0~cUvNHZeaG3l9CdEUWMyqS*^pS zUM1tk^z_=TIhcC@L`n;cR1_f z3_`l=CmTCB5VmO42_HXxe@i8EE4g2{pHcL%cXVv7>LY9AM8!1TWN{$~yKu7=2n7-o zkt@f27sL<7vQ{Sc6Hn~km3yRqe~c66rob&D(sFS^cYPZB-5%q;^#p= z;tg@wibA-5&C>E`49#)Ka`pV)-oQDX(ce=&nSrQSEF;Oi^7^65)vg&e5;U8Z( zy6fzphp&Gq-}mP!KdVjz(y=4=%mshHn)!^Eu%2v_sH`u8m}ubq$*o1_i~ZON6g8ZE ztV91=ZCwvewEOw_=@D()Og#mQ9r1|x5$vFeY*4WDw&NM2Bm^I|(kyV}1hJ#uFJ2vj zI8@_97BdS$T2hoYY-@+)}a%Ix(3qIBs^FZ^{j~f!NI|I zo{YZz;5Pr)i)$M@;+-Oj^76jM-sN0uL0#w`IEG>l8})!D>{e)@h(unGxQtbiO>rEq)P!rQkOl|9ou zs(*(Yj2yPOt1A*$t-$UbnP{CgktUyg_8I%qyLFhb&eri079m}=3$SR-xMz~`;n)D+ zm$yh|1_`cehs43@HEXpe*Zd9yCJSJrZ%X8`Wij$ym&~Sy9=UCBfAEQVCr+Hm2VzoV z`&1>V>&1@0IbCzgE&i#uqX>n+ZAeL)uyv0TL1PPUe%HMZX<6qb^(Y8cCrrm%N4@!q zEGh5g9=nlz91FJ;W4Jo@LpZjXxG!?NFRnH-Qz1&R%QuH0traJm)Mvems~>7IYa{DE z^3<5VF(|COM%n{apIy~W~LgyDUX=o?{mt<+^3NDFHrrqe>=BM%QeATC#X zU91JzP^)_d?Z~c@o#%QYn;6k!_a3o9nTYwsC43Fk7ZPzdPJf+E|GE=?U$Eg4nMkM; z?pipqr+GZfps={s5u1%^*v)Lf2`pV~c(IW~5vMEtbOpCDE-;B#-is4DyVrIjDo{)I zAd+y8wc=pxD`x3F=;~T`**-8((|VD;{8-JCx|m3m8yZkS zHgxH-fERMCFoWr1ebz4zj8J?VU)J5SwS7Eq29uRYi z`eq*4xMGdYnn7sW94A{}o1I1YNIjTO|BAK-JvRQC>5y)%bMSx80?-qRb}zI?rPmjF zNu|D`0}MK*qGKvLrut`MDmsp$<0v|gqT{H4K^!%n@ahTUb6kj(J6+bH-2VmOd{5?+ zlZ||i2p_5Uv&i|z@})DYwap)-*UziZiRpcvXU;mt{74EV^h;m_+F~#QJz(hhLc0sv zTT(1~v4A(E*Gd?H4i(74NJmOA0v#yA2y~!G<^!EszzB3=1tZX*0-aXVkSc2j^Z*lF?j93A|>RJ*r|q z+YetKiaK@9%CZJ)oE~!rab`sPChx2{c23M7}gOgNBHZV2I|X{6D!V^sxCC z4;xQ*Vt{ZFxoGK$we$fs*x~;=pHx=Y&){cVZVjqHYoo+O2x~$C{!p!*4PAvsLE`sn zHZtRVko4s9cgY4`c4Zb6Y453i?Vow!IrER>9YywyPm{f+3yUbJ(i4w2 z(8dS=^LUn|=x8fqEe^Ws4S~-hP}ok&fl z9(Ox$+eQS?>S)3<15RmZurt$~lPBw?cGY_Y8f~^GNAj+nimuazC`nJ=XGx2QrRG`U zA<6q$mkqk7s*Ri|ALtE;QV&8qyyWA@j|8^!^yyUlm1byeREcJ$=JicOh}zZB13LxG z5F!U}Z*Sl4t>klAH(^40CPhm*A+}o!m=B`;vypR|Z;|`cJLsCAku*N0Etk6th7JSN zw1JzpP7`|1oyM7EFGq+B@nUueyGb|3=rwP8DhjGK2~JV=dA-$blEfAou zdjQ2d#b?M3LbwL4HepQ&T`A)tE_V?ua?LMH!Yk|O=+H_}Pp?2LffoF|v7?CfW0g4O z31f8ETpv6KoF@rHxQ*O2AkjJE}_g?v#;N0Vn(`h#_@0F}%G2(t&=d z5$3(w^QFq7cu~c_lZYA6R<|l>U!k)iASzlkjEVJ3ZB`N%d zHUyqhP(>ZM!ccX2s+`4VG+**AVOpok{IaFMB?$nSwGcA0IpM%cd3FMaxC-QflMdW| zOUgD`*~0fMQNM{qxqZRZa`(%vMEO;9^{T2(Z$1RzQKIAW;${<`iUq}zo2BICMx=!Np<6?t4H=oD~f45JnJ?gOu0 zr2xj!glWU(RPu>X3sPPwELxL{Hn{VT%bsDi)yqul!#AvuzBnxaxuglbT$Z4AM6Tyf zWQfp`MhzLhDSH6t0h&>S&{XY+FP3o2JITRT(^4MFecFNG6)vv-zK zwG22!#?dnT${*HbuQE6H98IzRMsrSCq8z0**FvO_lA1~+^lT2J+=$Rf&~TuCLGrnO zOws&6JVFN%%MeY!IK%~_%^zmG@0M-O&P`xwy5V9_&LJJ(%gD(4)2AC-^&}c7-?;J!FdB46%@Wnv593tEXI94`CHdJu#UH}19pvCB?{6eG9w>^J? zqfq;EiVUSVTf6+f@N06DXj}=YHGxF2IkQ6T^_MR7-?wiuW_U6uTsScio05`ZF>f~I zgNfIi+aBBqgsujB9uZw*Bv1ICbXc_gyoJyu?`Uwa5x!C;!*DretB5(VpcU^59Z;>& za54-XX2}Z<-U~1VqeVi5%{Ok`$nR_D?DWyLj#>$7l(sX2GTwrz5eolIRDclbUw>4V zM`b?z-b{=JX(37G#S@TQOF^=)j*+FjPV*UtJ+}_*zi{lu*(baNo@tM5^8q|ifLg#% zb;$efyPzNgCb;Pkc}I?YMwKr+F6-e1>tX~8pwbot_hR3|sQw*}7yT+t#DqSDuT^nNcN?PNC^w!KJpr3P5VHJ~oG+geS2G71`FJ7iRO@ z4-}u5&S$Lnjak-209Lpwtb-bu*!Ipc53 zL45kO^i|Iw87ox$Mi&fshkGpWBJpFQ%@_stVBmly<};z{7aqQv6Z6_K&>Ry;vf(i4Ov?2xQM-n?h~NtK^ct96 zdU#9dPt7eWGkN(gnka$sNth0YsPOeaK$m;kKXu|;$~%$HTwsR(MFSn<$@oN$4Jj!x QiH)|{Z?`Mm;QQl$0~{cn;{X5v literal 0 HcmV?d00001 diff --git a/example/ios/.gitignore b/example/ios/.gitignore new file mode 100644 index 0000000..e96ef60 --- /dev/null +++ b/example/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..6b4c0f7 --- /dev/null +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..e8efba1 --- /dev/null +++ b/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..399e934 --- /dev/null +++ b/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile new file mode 100644 index 0000000..1e8c3c9 --- /dev/null +++ b/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock new file mode 100644 index 0000000..b819a3f --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,22 @@ +PODS: + - carrier_info (0.0.1): + - Flutter + - Flutter (1.0.0) + +DEPENDENCIES: + - carrier_info (from `.symlinks/plugins/carrier_info/ios`) + - Flutter (from `Flutter`) + +EXTERNAL SOURCES: + carrier_info: + :path: ".symlinks/plugins/carrier_info/ios" + Flutter: + :path: Flutter + +SPEC CHECKSUMS: + carrier_info: 74da91657834617c4409e6afdb706ac4685efe66 + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + +PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c + +COCOAPODS: 1.10.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..aa7452b --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,563 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 781F205528E06E3B39161026 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C51C85DA491AB835CB16F55 /* Pods_Runner.framework */; }; + 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 = ( + ); + 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 = ""; }; + 25988AF902DFB85D3171FE6B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7782EB34733FA760F2A1FBAD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7C51C85DA491AB835CB16F55 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + F57F15A4CBD875C9F3F205A2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 781F205528E06E3B39161026 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 43528D54683DBABE3F92D387 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C51C85DA491AB835CB16F55 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + F28EE90FADB37267F44923B9 /* Pods */, + 43528D54683DBABE3F92D387 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + F28EE90FADB37267F44923B9 /* Pods */ = { + isa = PBXGroup; + children = ( + F57F15A4CBD875C9F3F205A2 /* Pods-Runner.debug.xcconfig */, + 7782EB34733FA760F2A1FBAD /* Pods-Runner.release.xcconfig */, + 25988AF902DFB85D3171FE6B /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + A05C8D7CD0F0B16E71A3442C /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3015D0279ED644B63A234BF3 /* [CP] Embed Pods Frameworks */, + ); + 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 = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + 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 = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3015D0279ED644B63A234BF3 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.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\" embed_and_thin"; + }; + 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"; + }; + A05C8D7CD0F0B16E71A3442C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + 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; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift 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 */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + 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_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + 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 = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + 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.chizi.carrierInfoExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + 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_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + 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 = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + 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_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + 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 = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + 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.chizi.carrierInfoExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + 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.chizi.carrierInfoExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "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" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/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/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist new file mode 100644 index 0000000..eaf2b6d --- /dev/null +++ b/example/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + carrier_info_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example/lib/main.dart b/example/lib/main.dart new file mode 100644 index 0000000..38318e6 --- /dev/null +++ b/example/lib/main.dart @@ -0,0 +1,147 @@ +import 'package:flutter/cupertino.dart'; +import 'dart:async'; +import 'package:carrier_info/carrier_info.dart'; +import 'package:flutter/material.dart'; + +void main() { + runApp(MyApp()); +} + +class MyApp extends StatefulWidget { + @override + _MyAppState createState() => _MyAppState(); +} + +class _MyAppState extends State { + CarrierData carrierInfo; + + @override + void initState() { + super.initState(); + initPlatformState(); + } + + // Platform messages are asynchronous, so we initialize in an async method. + Future initPlatformState() async { + // Platform messages may fail, so we use a try/catch PlatformException. + try { + carrierInfo = await CarrierInfo.all; + setState(() {}); + } catch (e) { + print(e.toString()); + } + + // If the widget was removed from the tree while the asynchronous platform + // message was in flight, we want to discard the reply rather than calling + // setState to update our non-existent appearance. + } + + @override + Widget build(BuildContext context) { + return CupertinoApp( + debugShowCheckedModeBanner: false, + home: CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: const Text('Carrier Info example app'), + border: Border.symmetric( + horizontal: BorderSide( + width: 0.5, + color: CupertinoColors.systemGrey2.withOpacity(0.4), + ), + ), + ), + backgroundColor: CupertinoColors.lightBackgroundGray, + child: ListView( + children: [ + const SizedBox( + height: 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(15), + child: Text( + 'CARRIER INFORMATION', + style: TextStyle( + fontSize: 11, + color: CupertinoColors.systemGrey, + ), + ), + ), + HomeItem( + title: 'Name', + value: carrierInfo?.carrierName, + isFirst: true, + ), + HomeItem( + title: 'Country Code', + value: carrierInfo?.isoCountryCode, + ), + HomeItem( + title: 'Mobile Country Code', + value: carrierInfo?.mobileCountryCode, + ), + HomeItem( + title: 'Mobile Network Operator', + value: '${carrierInfo?.mobileNetworkOperator}', + ), + HomeItem( + title: 'Mobile Network Code', + value: '${carrierInfo?.mobileNetworkCode}', + ), + HomeItem( + title: 'Allows VOIP', + value: '${carrierInfo?.allowsVOIP}', + ), + HomeItem( + title: 'Radio Type', + value: '${carrierInfo?.radioType}', + ), + HomeItem( + title: 'Network Generation', + value: '${carrierInfo?.networkGeneration}', + ), + ], + ) + ], + ), + ), + ); + } +} + +class HomeItem extends StatelessWidget { + final bool isFirst; + final String title; + final String value; + const HomeItem({ + Key key, + @required this.title, + this.value, + this.isFirst = false, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.white, + child: Column( + children: [ + if (!isFirst) + Container(height: 0.5, color: Colors.grey.withOpacity(0.3)), + Padding( + padding: const EdgeInsets.all(15), + child: Row( + children: [ + Text(title ?? ''), + Spacer(), + Text(value ?? ''), + ], + ), + ), + ], + ), + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock new file mode 100644 index 0000000..0494ffc --- /dev/null +++ b/example/pubspec.lock @@ -0,0 +1,161 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0-nullsafety.3" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.3" + carrier_info: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.0.1" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.5" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.3" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0-nullsafety.5" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1+1" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.10-nullsafety.3" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0-nullsafety.6" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0-nullsafety.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0-nullsafety.4" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0-nullsafety.6" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.3" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.3" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.19-nullsafety.6" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0-nullsafety.5" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.5" +sdks: + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml new file mode 100644 index 0000000..c2e6fbc --- /dev/null +++ b/example/pubspec.yaml @@ -0,0 +1,71 @@ +name: carrier_info_example +description: Demonstrates how to use the carrier_info plugin. + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + carrier_info: + # When depending on this package from a real application you should use: + # carrier_info: ^x.y.z + # See https://dart.dev/tools/pub/dependencies#version-constraints + # The example app is bundled with the plugin so we use a path dependency on + # the parent directory to use the current plugin's version. + path: ../ + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.1 + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart new file mode 100644 index 0000000..50eeef7 --- /dev/null +++ b/example/test/widget_test.dart @@ -0,0 +1,27 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:carrier_info_example/main.dart'; + +void main() { + testWidgets('Verify Platform version', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that platform version is retrieved. + expect( + find.byWidgetPredicate( + (Widget widget) => widget is Text && + widget.data.startsWith('Running on:'), + ), + findsOneWidget, + ); + }); +} diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..aa479fd --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,37 @@ +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +.DS_Store +*.swp +profile + +DerivedData/ +build/ +GeneratedPluginRegistrant.h +GeneratedPluginRegistrant.m + +.generated/ + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +/Flutter/Generated.xcconfig +/Flutter/flutter_export_environment.sh \ No newline at end of file diff --git a/ios/Assets/.gitkeep b/ios/Assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ios/Classes/Carrier.swift b/ios/Classes/Carrier.swift new file mode 100644 index 0000000..203b12e --- /dev/null +++ b/ios/Classes/Carrier.swift @@ -0,0 +1,115 @@ +// +// Carrier.swift +// carrier_info +// +// From https://github.com/StanislavK/Carrier/blob/master/Carrier/Classes/Carrier.swift + +import UIKit +import CoreTelephony + +/// Wraps CTRadioAccessTechnologyDidChange notification +public protocol CarrierDelegate: class { + func carrierRadioAccessTechnologyDidChange() +} + +final public class Carrier { + + // MARK: - Private Properties + private let networkInfo = CTTelephonyNetworkInfo() + private let carrier: CTCarrier? + private var changeObserver: NSObjectProtocol! + + public init() { + self.carrier = networkInfo.subscriberCellularProvider + + changeObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.CTRadioAccessTechnologyDidChange, object: nil, queue: nil) { [unowned self](notification) in + DispatchQueue.main.async { + self.delegate?.carrierRadioAccessTechnologyDidChange() + } + } + } + + deinit { + NotificationCenter.default.removeObserver(changeObserver!) + print(#function) + } + + // MARK: - Public Properties + public weak var delegate: CarrierDelegate? + + /// Returns the name of the user’s home cellular service provider. + public var carrierName: String? { + return carrier?.carrierName + } + + /// Returns the ISO country code for the user’s cellular service provider. + public var carrierIsoCountryCode: String? { + return carrier?.isoCountryCode + } + + /// Returns the mobile country code (MCC) for the user’s cellular service provider. + public var carrierMobileCountryCode: String? { + return carrier?.mobileCountryCode + } + + /// Returns the mobile network code (MNC) for the user’s cellular service provider. + public var carrierMobileNetworkCode: String? { + return carrier?.mobileNetworkCode + } + + /// Returns true/false if the carrier allows VoIP calls to be made on its network. + public var carrierAllowsVOIP: Bool { + return carrier?.allowsVOIP ?? false + } + + /// Returns current radio access technology type used (GPRS, Edge, LTE, etc.) with the carrier. + public var carrierRadioAccessTechnologyType: String? { + let prefix = "CTRadioAccessTechnology" + guard let currentTechnology = networkInfo.currentRadioAccessTechnology else { + return nil + } + guard currentTechnology.hasPrefix(prefix) else { + return currentTechnology + } + return String(currentTechnology.dropFirst(prefix.count)) + } + + /// Returns carrier network generation based on radio accesss technology type. + public var carrierNetworkGeneration: String? { + + enum ShortRadioAccessTechnologyList: String { + case gprs = "GPRS" + case edge = "Edge" + case cdma = "CDMA1x" + case lte = "LTE" + + var generation: String { + switch self { + case .gprs, .edge, .cdma: return "2G" + case .lte: return "4G" + } + } + } + + if let radioType = carrierRadioAccessTechnologyType { + let generation = ShortRadioAccessTechnologyList(rawValue: radioType)?.generation ?? "3G" + return generation + + } else { + return nil + } + } + + /// Returns all available info about the carrier. + public var carrierInfo: [String: Any?] { + return [ + "carrierName": carrierName, + "carrierIsoCountryCode": carrierIsoCountryCode, + "carrierMobileCountryCode": carrierMobileCountryCode, + "carrierMobileNetworkCode": carrierMobileNetworkCode, + "carrierAllowsVOIP": carrierAllowsVOIP, + "carrierRadioAccessTechnologyType": carrierRadioAccessTechnologyType, + "carrierNetworkGeneration": carrierNetworkGeneration, + ] + } +} diff --git a/ios/Classes/CarrierInfoPlugin.h b/ios/Classes/CarrierInfoPlugin.h new file mode 100644 index 0000000..bcadb73 --- /dev/null +++ b/ios/Classes/CarrierInfoPlugin.h @@ -0,0 +1,4 @@ +#import + +@interface CarrierInfoPlugin : NSObject +@end diff --git a/ios/Classes/CarrierInfoPlugin.m b/ios/Classes/CarrierInfoPlugin.m new file mode 100644 index 0000000..9219480 --- /dev/null +++ b/ios/Classes/CarrierInfoPlugin.m @@ -0,0 +1,15 @@ +#import "CarrierInfoPlugin.h" +#if __has_include() +#import +#else +// Support project import fallback if the generated compatibility header +// is not copied when this plugin is created as a library. +// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 +#import "carrier_info-Swift.h" +#endif + +@implementation CarrierInfoPlugin ++ (void)registerWithRegistrar:(NSObject*)registrar { + [SwiftCarrierInfoPlugin registerWithRegistrar:registrar]; +} +@end diff --git a/ios/Classes/SwiftCarrierInfoPlugin.swift b/ios/Classes/SwiftCarrierInfoPlugin.swift new file mode 100644 index 0000000..baca336 --- /dev/null +++ b/ios/Classes/SwiftCarrierInfoPlugin.swift @@ -0,0 +1,79 @@ +import Flutter +import UIKit + +public class SwiftCarrierInfoPlugin: NSObject, FlutterPlugin { + fileprivate let carrier = Carrier() + + + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel(name: "plugins.chizi.tech/carrier_info", binaryMessenger: registrar.messenger()) + let instance = SwiftCarrierInfoPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + DispatchQueue.main.async { [self] in + switch call.method { + + case "carrierName": + self.carrierName(result: result) + + case "allowsVOIP": + self.allowsVOIP(result: result) + + case "isoCountryCode": + self.isoCountryCode(result: result) + + case "mobileCountryCode": + self.mobileCountryCode(result: result) + + case "mobileNetworkCode": + self.mobileNetworkCode(result: result) + + case "mobileNetworkOperator": + self.mobileNetworkOperator(result: result) + + case "radioType": + self.radioType(result: result) + + case "networkGeneration": + self.networkGeneration(result: result) + + default: + result(FlutterMethodNotImplemented) + return + } + } + } + + public func carrierName(result: @escaping FlutterResult){ + result(carrier.carrierName) + } + public func allowsVOIP(result: @escaping FlutterResult){ + result(carrier.carrierAllowsVOIP) + } + + public func isoCountryCode(result: @escaping FlutterResult){ + result(carrier.carrierIsoCountryCode) + } + + public func mobileCountryCode(result: @escaping FlutterResult){ + result(carrier.carrierMobileCountryCode) + } + + public func mobileNetworkCode(result: @escaping FlutterResult){ + result(carrier.carrierMobileNetworkCode) + } + + public func mobileNetworkOperator(result: @escaping FlutterResult){ + result(carrier.carrierMobileCountryCode) + } + + public func radioType(result: @escaping FlutterResult){ + result(carrier.carrierRadioAccessTechnologyType) + } + + public func networkGeneration(result: @escaping FlutterResult){ + result(carrier.carrierNetworkGeneration) + } +} diff --git a/ios/carrier_info.podspec b/ios/carrier_info.podspec new file mode 100644 index 0000000..849e3f9 --- /dev/null +++ b/ios/carrier_info.podspec @@ -0,0 +1,23 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. +# Run `pod lib lint carrier_info.podspec' to validate before publishing. +# +Pod::Spec.new do |s| + s.name = 'carrier_info' + 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.dependency 'Flutter' + s.platform = :ios, '8.0' + + # Flutter.framework does not contain a i386 slice. + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } + s.swift_version = '5.0' +end diff --git a/lib/carrier_info.dart b/lib/carrier_info.dart new file mode 100644 index 0000000..aaea593 --- /dev/null +++ b/lib/carrier_info.dart @@ -0,0 +1,4 @@ +library carrier_info; + +export './src/carrier_info.dart'; +export './src/model/carrier_data.dart'; \ No newline at end of file diff --git a/lib/src/carrier_info.dart b/lib/src/carrier_info.dart new file mode 100644 index 0000000..52b978c --- /dev/null +++ b/lib/src/carrier_info.dart @@ -0,0 +1,48 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/services.dart'; + +import 'model/carrier_data.dart'; + +class CarrierInfo { + static const MethodChannel _channel = + const MethodChannel('plugins.chizi.tech/carrier_info'); + + static Future get allowsVOIP async => + Platform.isAndroid ? true : await _channel.invokeMethod('allowsVOIP'); + + static Future get carrierName async => + await _channel.invokeMethod('carrierName'); + + static Future get isoCountryCode async { + return await _channel.invokeMethod('isoCountryCode'); + } + + static Future get mobileCountryCode async { + return await _channel.invokeMethod('mobileCountryCode'); + } + + static Future get mobileNetworkCode async => + await _channel.invokeMethod('mobileNetworkCode'); + + static Future get mobileNetworkOperator async => + await _channel.invokeMethod('mobileNetworkOperator'); + + static Future get radioType async => + await _channel.invokeMethod('radioType'); + + static Future get networkGeneration async => + await _channel.invokeMethod('networkGeneration'); + + static Future get all async => CarrierData( + allowsVOIP: await allowsVOIP, + carrierName: await carrierName, + isoCountryCode: await isoCountryCode, + mobileCountryCode: await mobileCountryCode, + mobileNetworkCode: await mobileNetworkCode, + mobileNetworkOperator: await mobileNetworkOperator, + networkGeneration: await networkGeneration, + radioType: await radioType, + ); +} diff --git a/lib/src/model/carrier_data.dart b/lib/src/model/carrier_data.dart new file mode 100644 index 0000000..35347c6 --- /dev/null +++ b/lib/src/model/carrier_data.dart @@ -0,0 +1,35 @@ +class CarrierData { + final bool allowsVOIP; + final String carrierName; + final String isoCountryCode; + final String mobileCountryCode; + final String mobileNetworkCode; + final String mobileNetworkOperator; + final String networkGeneration; + final String radioType; + + CarrierData({ + this.allowsVOIP = false, + this.carrierName, + this.isoCountryCode, + this.mobileCountryCode, + this.mobileNetworkCode, + this.mobileNetworkOperator, + this.networkGeneration, + this.radioType, + }); + + @override + String toString() { + return '''${this.runtimeType}( + allowsVOIP: ${this.allowsVOIP}, + carrierName: ${this.carrierName}, + isoCountryCode: ${this.isoCountryCode}, + mobileCountryCode: ${this.mobileCountryCode}, + mobileNetworkCode: ${this.mobileNetworkCode}, + mobileNetworkOperator: ${this.mobileNetworkOperator}, + networkGeneration: ${this.networkGeneration}, + radioType: ${this.radioType}, + })'''; + } +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..4ff500d --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,147 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0-nullsafety.3" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.3" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.5" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.3" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0-nullsafety.5" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.10-nullsafety.3" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0-nullsafety.6" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0-nullsafety.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0-nullsafety.4" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0-nullsafety.6" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.3" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.3" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.3" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.19-nullsafety.6" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0-nullsafety.5" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.5" +sdks: + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.20.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..aa89b58 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,65 @@ +name: carrier_info +description: A new flutter plugin project. +version: 0.0.1 +author: +homepage: + +environment: + sdk: ">=2.7.0 <3.0.0" + flutter: ">=1.20.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + # This section identifies this Flutter project as a plugin project. + # The 'pluginClass' and Android 'package' identifiers should not ordinarily + # be modified. They are used by the tooling to maintain consistency when + # adding or updating assets for this project. + plugin: + platforms: + android: + package: com.chizi.carrier_info + pluginClass: CarrierInfoPlugin + ios: + pluginClass: CarrierInfoPlugin + + # To add assets to your plugin package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # To add custom fonts to your plugin package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/test/carrier_info_test.dart b/test/carrier_info_test.dart new file mode 100644 index 0000000..87a48d8 --- /dev/null +++ b/test/carrier_info_test.dart @@ -0,0 +1,23 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:carrier_info/carrier_info.dart'; + +void main() { + const MethodChannel channel = MethodChannel('carrier_info'); + + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + return '42'; + }); + }); + + tearDown(() { + channel.setMockMethodCallHandler(null); + }); + + test('getPlatformVersion', () async { + expect(await CarrierInfo.carrierName, isNotEmpty); + }); +}