From 116584a50769401cff3bc67333ef923e3dfa728e Mon Sep 17 00:00:00 2001 From: soulduse Date: Sun, 23 Jul 2017 02:29:59 +0900 Subject: [PATCH 1/5] first commit kotlin code - admob --- admob/app/build.gradle | 9 + .../admobexample/InterstitialAdTest.java | 2 +- admob/app/src/main/AndroidManifest.xml | 6 +- .../quickstart/admobexample/MainActivity.java | 2 +- .../quickstart/admobexample/MainActivityA.kt | 157 ++++++++++++++++++ .../quickstart/admobexample/MainActivityKt.kt | 60 +++++++ .../app/src/main/res/layout/activity_main.xml | 2 +- analytics/app/build.gradle | 5 + app-indexing/app/build.gradle | 5 + auth/app/build.gradle | 5 + build.gradle | 2 + config/app/build.gradle | 5 + crash/app/build.gradle | 5 + database/app/build.gradle | 5 + dynamiclinks/app/build.gradle | 5 + invites/app/build.gradle | 5 + messaging/app/build.gradle | 3 + storage/app/build.gradle | 5 + 18 files changed, 282 insertions(+), 6 deletions(-) create mode 100644 admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt create mode 100644 admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt diff --git a/admob/app/build.gradle b/admob/app/build.gradle index eebdae21b2..6f40f88c1e 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' check.dependsOn 'assembleDebugAndroidTest' android { @@ -22,6 +23,10 @@ android { } } + sourceSets{ + main.java.srcDirs += 'src/main/kotlin' + } + packagingOptions { exclude 'LICENSE.txt' } @@ -41,6 +46,10 @@ dependencies { androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test:runner:0.5' + compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } apply plugin: 'com.google.gms.google-services' +repositories { + mavenCentral() +} diff --git a/admob/app/src/androidTest/java/com/google/samples/quickstart/admobexample/InterstitialAdTest.java b/admob/app/src/androidTest/java/com/google/samples/quickstart/admobexample/InterstitialAdTest.java index a2ead579c5..d1267bc42b 100644 --- a/admob/app/src/androidTest/java/com/google/samples/quickstart/admobexample/InterstitialAdTest.java +++ b/admob/app/src/androidTest/java/com/google/samples/quickstart/admobexample/InterstitialAdTest.java @@ -29,7 +29,7 @@ public class InterstitialAdTest { private AdViewIdlingResource mAdResource; @Rule - public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(MainActivity.class); + public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(MainActivityKt.class); @Before public void setUp() { diff --git a/admob/app/src/main/AndroidManifest.xml b/admob/app/src/main/AndroidManifest.xml index 1b9a0a2833..2369f1269b 100644 --- a/admob/app/src/main/AndroidManifest.xml +++ b/admob/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme" > @@ -34,10 +34,10 @@ + android:parentActivityName=".MainActivityKt" > + android:value=".MainActivityKt" /> diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/MainActivity.java b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/MainActivity.java index 9d547211d5..e8d66e04d5 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/MainActivity.java +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/MainActivity.java @@ -34,7 +34,7 @@ public class MainActivity extends AppCompatActivity { - private static final String TAG = "MainActivity"; + private static final String TAG = "MainActivityKt"; private AdView mAdView; // [START_EXCLUDE] diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt new file mode 100644 index 0000000000..8ba1a7d77e --- /dev/null +++ b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt @@ -0,0 +1,157 @@ +/** + * Copyright Google Inc. All Rights Reserved. + + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.samples.quickstart.admobexample + +import android.content.Intent +import android.os.Bundle +import android.support.annotation.VisibleForTesting +import android.support.v7.app.AppCompatActivity +import android.util.Log +import android.view.View +import android.widget.Button + +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdView +import com.google.android.gms.ads.InterstitialAd + +// [SNIPPET load_banner_ad] +// Load an ad into the AdView. +// [START load_banner_ad] +// [START_EXCLUDE] +// [END_EXCLUDE] + +class MainActivityA : AppCompatActivity() { + + // [END add_lifecycle_methods] + + @get:VisibleForTesting + internal var adView: AdView? = null + private set + // [START_EXCLUDE] + private var mInterstitialAd: InterstitialAd? = null + private var mLoadInterstitialButton: Button? = null + // [END_EXCLUDE] + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + adView = findViewById(R.id.adView) as AdView + val adRequest = AdRequest.Builder().build() + adView!!.loadAd(adRequest) + // [END load_banner_ad] + + // AdMob ad unit IDs are not currently stored inside the google-services.json file. + // Developers using AdMob can store them as custom values in a string resource file or + // simply use constants. Note that the ad units used here are configured to return only test + // ads, and should not be used outside this sample. + + // [START instantiate_interstitial_ad] + // Create an InterstitialAd object. This same object can be re-used whenever you want to + // show an interstitial. + mInterstitialAd = InterstitialAd(this) + mInterstitialAd!!.adUnitId = getString(R.string.interstitial_ad_unit_id) + // [END instantiate_interstitial_ad] + + // [START create_interstitial_ad_listener] + mInterstitialAd!!.adListener = object : AdListener() { + override fun onAdClosed() { + requestNewInterstitial() + beginSecondActivity() + } + + override fun onAdLoaded() { + // Ad received, ready to display + // [START_EXCLUDE] + if (mLoadInterstitialButton != null) { + mLoadInterstitialButton!!.isEnabled = true + } + // [END_EXCLUDE] + } + + override fun onAdFailedToLoad(i: Int) { + // See https://goo.gl/sCZj0H for possible error codes. + Log.w(TAG, "onAdFailedToLoad:" + i) + } + } + // [END create_interstitial_ad_listener] + + // [START display_interstitial_ad] + mLoadInterstitialButton = findViewById(R.id.load_interstitial_button) as Button + mLoadInterstitialButton!!.setOnClickListener { + if (mInterstitialAd!!.isLoaded) { + mInterstitialAd!!.show() + } else { + beginSecondActivity() + } + } + // [END display_interstitial_ad] + + // Disable button if an interstitial ad is not loaded yet. + mLoadInterstitialButton!!.isEnabled = mInterstitialAd!!.isLoaded + } + + /** + * Load a new interstitial ad asynchronously. + */ + // [START request_new_interstitial] + private fun requestNewInterstitial() { + val adRequest = AdRequest.Builder() + .build() + + mInterstitialAd!!.loadAd(adRequest) + } + // [END request_new_interstitial] + + private fun beginSecondActivity() { + val intent = Intent(this, SecondActivity::class.java) + startActivity(intent) + } + + // [START add_lifecycle_methods] + /** Called when leaving the activity */ + public override fun onPause() { + if (adView != null) { + adView!!.pause() + } + super.onPause() + } + + /** Called when returning to the activity */ + public override fun onResume() { + super.onResume() + if (adView != null) { + adView!!.resume() + } + if (!mInterstitialAd!!.isLoaded) { + requestNewInterstitial() + } + } + + /** Called before the activity is destroyed */ + public override fun onDestroy() { + if (adView != null) { + adView!!.destroy() + } + super.onDestroy() + } + + companion object { + + private val TAG = "MainActivityKt" + } +} diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt new file mode 100644 index 0000000000..a744dd92e0 --- /dev/null +++ b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt @@ -0,0 +1,60 @@ +package com.google.samples.quickstart.admobexample + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.util.Log +import android.widget.Button +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdView +import com.google.android.gms.ads.InterstitialAd + +/** + * Created by soul on 2017. 7. 23.. + */ +class MainActivityKt : AppCompatActivity() { + + private val TAG : String = "MainActivityKt" + private var mAdView : AdView? = null + private var mInterstitialAd: InterstitialAd? = null + private var mLoadInterstitialButton : Button? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + mAdView = findViewById(R.id.adView) as AdView + var adRequest:AdRequest = AdRequest.Builder().build() + mAdView!!.loadAd(adRequest) + + mInterstitialAd = InterstitialAd(this) + mInterstitialAd!!.adUnitId = getString(R.string.interstitial_ad_unit_id) + + mInterstitialAd!!.adListener = object :AdListener(){ + override fun onAdClosed() { + requestNewInterstitial() + beginSecondActivity() + } + + override fun onAdLoaded() { + if(mLoadInterstitialButton != null){ + mLoadInterstitialButton!!.isEnabled = true + } + } + + override fun onAdFailedToLoad(i: Int) { + Log.w(TAG, "onAdFailedToLoad:"+i) + } + } + + } + + private fun beginSecondActivity() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + private fun requestNewInterstitial() { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} + diff --git a/admob/app/src/main/res/layout/activity_main.xml b/admob/app/src/main/res/layout/activity_main.xml index fc44409995..fbbb7af2c7 100644 --- a/admob/app/src/main/res/layout/activity_main.xml +++ b/admob/app/src/main/res/layout/activity_main.xml @@ -10,7 +10,7 @@ Define the namespace and AdView layout that will show the banner. android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - tools:context=".MainActivity"> + tools:context=".MainActivityKt"> Date: Sun, 23 Jul 2017 16:28:13 +0900 Subject: [PATCH 2/5] converted java to kotlin - adMob's Activity --- admob/app/build.gradle | 1 + .../quickstart/admobexample/MainActivityKt.kt | 54 +++++++++++++++++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/admob/app/build.gradle b/admob/app/build.gradle index 6f40f88c1e..7d75bc7414 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt index a744dd92e0..32676eceeb 100644 --- a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt +++ b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt @@ -1,5 +1,6 @@ package com.google.samples.quickstart.admobexample +import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log @@ -47,14 +48,61 @@ class MainActivityKt : AppCompatActivity() { } } + // [END create_interstitial_ad_listener] + + // [START display_interstitial_ad] + mLoadInterstitialButton = findViewById(R.id.load_interstitial_button) as Button? + mLoadInterstitialButton!!.setOnClickListener { + view-> + if(mInterstitialAd!!.isLoaded()){ + mInterstitialAd!!.show() + }else{ + beginSecondActivity() + } + } + // [END display_interstitial_ad] + + // Disable button if an interstitial ad is not loaded yet. + mLoadInterstitialButton!!.isEnabled = mInterstitialAd!!.isLoaded + + } + + private fun requestNewInterstitial() { + var adRequest = AdRequest.Builder().build() + mInterstitialAd!!.loadAd(adRequest) } private fun beginSecondActivity() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + var intent :Intent = Intent(this, SecondActivity::class.java) + startActivity(intent) } - private fun requestNewInterstitial() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + override fun onPause() { + if(mAdView != null){ + mAdView!!.destroy() + } + super.onPause() + } + + override fun onResume() { + super.onResume() + if(mAdView != null){ + mAdView!!.resume() + } + if(!mInterstitialAd!!.isLoaded){ + requestNewInterstitial() + } + } + + override fun onDestroy() { + if(mAdView != null){ + mAdView!!.destroy() + } + super.onDestroy() + } + + fun getAdView() : AdView{ + return mAdView!! } } From 7c614e2de9dc9d7bc68d3290d5a06afd84c4aec6 Mon Sep 17 00:00:00 2001 From: soulduse Date: Tue, 8 Aug 2017 00:20:01 +0900 Subject: [PATCH 3/5] changed quickstart --- .gitignore | 2 +- admob/app/build.gradle | 1 + .../quickstart/admobexample/MainActivityA.kt | 157 -------- .../quickstart/admobexample/MainActivityKt.kt | 50 +-- .../admobexample/SecondActivityKt.kt | 15 + admob/build.gradle | 1 - analytics/app/build.gradle | 11 +- analytics/app/src/main/AndroidManifest.xml | 12 +- .../quickstart/analytics/ImageInfo.java | 6 +- .../quickstart/analytics/MainActivity.java | 8 +- .../quickstart/analytics/ImageFragmentKt.kt | 45 +++ .../quickstart/analytics/ImageInfo.kt | 44 +++ .../quickstart/analytics/ImageInfoKt.kt | 10 + .../quickstart/analytics/MainActivityKt.kt | 50 +++ .../src/main/res/layout/activity_main_kt.xml | 9 + .../app/src/main/res/layout/fragment_main.xml | 2 +- app-indexing/app/google-services.json | 352 ++++++++++++++++++ 17 files changed, 577 insertions(+), 198 deletions(-) delete mode 100644 admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt create mode 100644 admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/SecondActivityKt.kt create mode 100644 analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageFragmentKt.kt create mode 100644 analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt create mode 100644 analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfoKt.kt create mode 100644 analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt create mode 100644 analytics/app/src/main/res/layout/activity_main_kt.xml create mode 100644 app-indexing/app/google-services.json diff --git a/.gitignore b/.gitignore index 10cc0ea8bd..88038f082b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ build/ *.apk *.aar *.zip -google-services.json +*/google-services.json \ No newline at end of file diff --git a/admob/app/build.gradle b/admob/app/build.gradle index 7d75bc7414..4fa76b36dd 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' + check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt deleted file mode 100644 index 8ba1a7d77e..0000000000 --- a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityA.kt +++ /dev/null @@ -1,157 +0,0 @@ -/** - * Copyright Google Inc. All Rights Reserved. - - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - - * http://www.apache.org/licenses/LICENSE-2.0 - - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.samples.quickstart.admobexample - -import android.content.Intent -import android.os.Bundle -import android.support.annotation.VisibleForTesting -import android.support.v7.app.AppCompatActivity -import android.util.Log -import android.view.View -import android.widget.Button - -import com.google.android.gms.ads.AdListener -import com.google.android.gms.ads.AdRequest -import com.google.android.gms.ads.AdView -import com.google.android.gms.ads.InterstitialAd - -// [SNIPPET load_banner_ad] -// Load an ad into the AdView. -// [START load_banner_ad] -// [START_EXCLUDE] -// [END_EXCLUDE] - -class MainActivityA : AppCompatActivity() { - - // [END add_lifecycle_methods] - - @get:VisibleForTesting - internal var adView: AdView? = null - private set - // [START_EXCLUDE] - private var mInterstitialAd: InterstitialAd? = null - private var mLoadInterstitialButton: Button? = null - // [END_EXCLUDE] - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - - adView = findViewById(R.id.adView) as AdView - val adRequest = AdRequest.Builder().build() - adView!!.loadAd(adRequest) - // [END load_banner_ad] - - // AdMob ad unit IDs are not currently stored inside the google-services.json file. - // Developers using AdMob can store them as custom values in a string resource file or - // simply use constants. Note that the ad units used here are configured to return only test - // ads, and should not be used outside this sample. - - // [START instantiate_interstitial_ad] - // Create an InterstitialAd object. This same object can be re-used whenever you want to - // show an interstitial. - mInterstitialAd = InterstitialAd(this) - mInterstitialAd!!.adUnitId = getString(R.string.interstitial_ad_unit_id) - // [END instantiate_interstitial_ad] - - // [START create_interstitial_ad_listener] - mInterstitialAd!!.adListener = object : AdListener() { - override fun onAdClosed() { - requestNewInterstitial() - beginSecondActivity() - } - - override fun onAdLoaded() { - // Ad received, ready to display - // [START_EXCLUDE] - if (mLoadInterstitialButton != null) { - mLoadInterstitialButton!!.isEnabled = true - } - // [END_EXCLUDE] - } - - override fun onAdFailedToLoad(i: Int) { - // See https://goo.gl/sCZj0H for possible error codes. - Log.w(TAG, "onAdFailedToLoad:" + i) - } - } - // [END create_interstitial_ad_listener] - - // [START display_interstitial_ad] - mLoadInterstitialButton = findViewById(R.id.load_interstitial_button) as Button - mLoadInterstitialButton!!.setOnClickListener { - if (mInterstitialAd!!.isLoaded) { - mInterstitialAd!!.show() - } else { - beginSecondActivity() - } - } - // [END display_interstitial_ad] - - // Disable button if an interstitial ad is not loaded yet. - mLoadInterstitialButton!!.isEnabled = mInterstitialAd!!.isLoaded - } - - /** - * Load a new interstitial ad asynchronously. - */ - // [START request_new_interstitial] - private fun requestNewInterstitial() { - val adRequest = AdRequest.Builder() - .build() - - mInterstitialAd!!.loadAd(adRequest) - } - // [END request_new_interstitial] - - private fun beginSecondActivity() { - val intent = Intent(this, SecondActivity::class.java) - startActivity(intent) - } - - // [START add_lifecycle_methods] - /** Called when leaving the activity */ - public override fun onPause() { - if (adView != null) { - adView!!.pause() - } - super.onPause() - } - - /** Called when returning to the activity */ - public override fun onResume() { - super.onResume() - if (adView != null) { - adView!!.resume() - } - if (!mInterstitialAd!!.isLoaded) { - requestNewInterstitial() - } - } - - /** Called before the activity is destroyed */ - public override fun onDestroy() { - if (adView != null) { - adView!!.destroy() - } - super.onDestroy() - } - - companion object { - - private val TAG = "MainActivityKt" - } -} diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt index 32676eceeb..0a3c5471b4 100644 --- a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt +++ b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/MainActivityKt.kt @@ -4,7 +4,6 @@ import android.content.Intent import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log -import android.widget.Button import com.google.android.gms.ads.AdListener import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.AdView @@ -16,22 +15,29 @@ import com.google.android.gms.ads.InterstitialAd class MainActivityKt : AppCompatActivity() { private val TAG : String = "MainActivityKt" - private var mAdView : AdView? = null - private var mInterstitialAd: InterstitialAd? = null - private var mLoadInterstitialButton : Button? = null + + private val mAdView by lazy { + findViewById(R.id.adView) as AdView + } + + private val mInterstitialAd by lazy { + InterstitialAd(this) + } + + private val mLoadInterstitialButton by lazy { + findViewById(R.id.load_interstitial_button) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - mAdView = findViewById(R.id.adView) as AdView - var adRequest:AdRequest = AdRequest.Builder().build() - mAdView!!.loadAd(adRequest) + var adRequest: AdRequest = AdRequest.Builder().build() + mAdView.loadAd(adRequest) - mInterstitialAd = InterstitialAd(this) - mInterstitialAd!!.adUnitId = getString(R.string.interstitial_ad_unit_id) + mInterstitialAd.adUnitId = getString(R.string.interstitial_ad_unit_id) - mInterstitialAd!!.adListener = object :AdListener(){ + mInterstitialAd.adListener = object : AdListener(){ override fun onAdClosed() { requestNewInterstitial() beginSecondActivity() @@ -39,7 +45,7 @@ class MainActivityKt : AppCompatActivity() { override fun onAdLoaded() { if(mLoadInterstitialButton != null){ - mLoadInterstitialButton!!.isEnabled = true + mLoadInterstitialButton.isEnabled = true } } @@ -51,11 +57,9 @@ class MainActivityKt : AppCompatActivity() { // [END create_interstitial_ad_listener] // [START display_interstitial_ad] - mLoadInterstitialButton = findViewById(R.id.load_interstitial_button) as Button? - mLoadInterstitialButton!!.setOnClickListener { - view-> - if(mInterstitialAd!!.isLoaded()){ - mInterstitialAd!!.show() + mLoadInterstitialButton.setOnClickListener { + if(mInterstitialAd.isLoaded){ + mInterstitialAd.show() }else{ beginSecondActivity() } @@ -63,13 +67,13 @@ class MainActivityKt : AppCompatActivity() { // [END display_interstitial_ad] // Disable button if an interstitial ad is not loaded yet. - mLoadInterstitialButton!!.isEnabled = mInterstitialAd!!.isLoaded + mLoadInterstitialButton.isEnabled = mInterstitialAd.isLoaded } private fun requestNewInterstitial() { var adRequest = AdRequest.Builder().build() - mInterstitialAd!!.loadAd(adRequest) + mInterstitialAd.loadAd(adRequest) } private fun beginSecondActivity() { @@ -79,7 +83,7 @@ class MainActivityKt : AppCompatActivity() { override fun onPause() { if(mAdView != null){ - mAdView!!.destroy() + mAdView.destroy() } super.onPause() } @@ -87,22 +91,22 @@ class MainActivityKt : AppCompatActivity() { override fun onResume() { super.onResume() if(mAdView != null){ - mAdView!!.resume() + mAdView.resume() } - if(!mInterstitialAd!!.isLoaded){ + if(!mInterstitialAd.isLoaded){ requestNewInterstitial() } } override fun onDestroy() { if(mAdView != null){ - mAdView!!.destroy() + mAdView.destroy() } super.onDestroy() } fun getAdView() : AdView{ - return mAdView!! + return mAdView } } diff --git a/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/SecondActivityKt.kt b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/SecondActivityKt.kt new file mode 100644 index 0000000000..e38cae9c69 --- /dev/null +++ b/admob/app/src/main/kotlin/com/google/samples/quickstart/admobexample/SecondActivityKt.kt @@ -0,0 +1,15 @@ +package com.google.samples.quickstart.admobexample + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity + +/** + * Created by soul on 2017. 7. 23.. + */ +class SecondActivityKt : AppCompatActivity(){ + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.second_activity) + } +} \ No newline at end of file diff --git a/admob/build.gradle b/admob/build.gradle index 3e2db7596c..4856b2561b 100644 --- a/admob/build.gradle +++ b/admob/build.gradle @@ -9,7 +9,6 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.google.gms:google-services:3.1.0' - // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/analytics/app/build.gradle b/analytics/app/build.gradle index 7121d4b41a..cec9af3c6e 100644 --- a/analytics/app/build.gradle +++ b/analytics/app/build.gradle @@ -21,6 +21,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } } configurations.all { @@ -29,14 +33,15 @@ configurations.all { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) + + + compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:support-v4:25.3.1' - compile 'com.google.firebase:firebase-analytics:11.0.1' - + compile 'com.android.support.constraint:constraint-layout:1.0.2' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test:runner:0.5' - compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } apply plugin: 'com.google.gms.google-services' diff --git a/analytics/app/src/main/AndroidManifest.xml b/analytics/app/src/main/AndroidManifest.xml index 2fc5bafdfe..ec6c716098 100644 --- a/analytics/app/src/main/AndroidManifest.xml +++ b/analytics/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.google.firebase.quickstart.analytics"> - + - + + - + + \ No newline at end of file diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java index 4f47954dde..2aa0b12957 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java @@ -33,9 +33,9 @@ public class ImageInfo { * @param id resource of id */ public ImageInfo(int image, int title, int id) { - this.image = image; - this.title = title; - this.id = id; + this.setImage(image); + this.setTitle(title); + this.setId(id); } } diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java index 5dad645b73..639996e7db 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java @@ -212,7 +212,7 @@ public boolean onOptionsItemSelected(MenuItem item) { private String getCurrentImageTitle() { int position = mViewPager.getCurrentItem(); ImageInfo info = IMAGE_INFOS[position]; - return getString(info.title); + return getString(info.getTitle()); } /** @@ -223,7 +223,7 @@ private String getCurrentImageTitle() { private String getCurrentImageId() { int position = mViewPager.getCurrentItem(); ImageInfo info = IMAGE_INFOS[position]; - return getString(info.id); + return getString(info.getId()); } /** @@ -272,7 +272,7 @@ public ImagePagerAdapter(FragmentManager fm, ImageInfo[] infos) { @Override public Fragment getItem(int position) { ImageInfo info = infos[position]; - return ImageFragment.newInstance(info.image); + return ImageFragment.newInstance(info.getImage()); } @Override @@ -287,7 +287,7 @@ public CharSequence getPageTitle(int position) { } Locale l = Locale.getDefault(); ImageInfo info = infos[position]; - return getString(info.title).toUpperCase(l); + return getString(info.getTitle()).toUpperCase(l); } } } diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageFragmentKt.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageFragmentKt.kt new file mode 100644 index 0000000000..90d056c68c --- /dev/null +++ b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageFragmentKt.kt @@ -0,0 +1,45 @@ +package com.google.firebase.quickstart.analytics + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView + +/** + * Created by soul on 2017. 7. 23.. + */ +class ImageFragmentKt : Fragment() { + + var resId : Int = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if(arguments != null){ + resId = arguments.getInt(ARG_PATTERN) + } + } + + override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { + var view :View = inflater!!.inflate(R.layout.fragment_main, null) + var imageView = view.findViewById(R.id.imageView) as ImageView + imageView.setImageResource(resId) + + return view; + } + + companion object { + private val ARG_PATTERN : String = "pattern" + + fun newInstance(resId:Int) : ImageFragmentKt{ + var fragment : ImageFragmentKt = ImageFragmentKt() + var args:Bundle = Bundle() + args.putInt(ARG_PATTERN, resId) + fragment.arguments = args + return fragment + } + + } + +} \ No newline at end of file diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt new file mode 100644 index 0000000000..9e5ee0bbb8 --- /dev/null +++ b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt @@ -0,0 +1,44 @@ +/* + * Copyright Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.firebase.quickstart.analytics + +/** + * Pair of resource IDs representing an image and its title. + */ +class ImageInfo +/** + * Create a new ImageInfo. + + * @param image resource of image + * * + * @param title resource of title + * * + * @param id resource of id + */ +(image: Int, title: Int, id: Int) { + + val image: Int = 0 + val title: Int = 0 + val id: Int = 0 + + init { + this.setImage(image) + this.setTitle(title) + this.setId(id) + } + +} diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfoKt.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfoKt.kt new file mode 100644 index 0000000000..49ee9ecb03 --- /dev/null +++ b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfoKt.kt @@ -0,0 +1,10 @@ +package com.google.firebase.quickstart.analytics + +/** + * Created by soul on 2017. 7. 23.. + */ +data class ImageInfoKt( + val image : Int, + val title : Int, + val id : Int +) \ No newline at end of file diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt new file mode 100644 index 0000000000..e8736ffad6 --- /dev/null +++ b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt @@ -0,0 +1,50 @@ +package com.google.firebase.quickstart.analytics + +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager +import android.support.v4.app.FragmentPagerAdapter +import java.util.* + +class MainActivityKt : AppCompatActivity() { + + /** + * The {@link android.support.v4.view.PagerAdapter} that will provide fragments for each image. + * This uses a {@link FragmentPagerAdapter}, which keeps every loaded fragment in memory. + */ + private var mImagePagerAdapter : ImagePagerAdapter; + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main_kt) + } + + + + companion object { + private val TAG:String = "MainActivity" + private val KEY_FAVORITE_FOOD = "favorite_food" + + val IMAGE_INFOS = arrayOf( + ImageInfo(R.drawable.favorite, R.string.pattern1_title, R.string.pattern1_id), + ImageInfo(R.drawable.flash, R.string.pattern2_title, R.string.pattern2_id), + ImageInfo(R.drawable.face, R.string.pattern3_title, R.string.pattern3_id), + ImageInfo(R.drawable.whitebalance, R.string.pattern4_title, R.string.pattern4_id)) + } + + inner class ImagePagerAdapter(fm: FragmentManager?, val infos: Array) : FragmentPagerAdapter(fm) { + + + override fun getItem(position: Int): Fragment { + var info : ImageInfoKt = infos[position] + return ImageFragmentKt.newInstance(info.) + } + + override fun getCount(): Int { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + } +} diff --git a/analytics/app/src/main/res/layout/activity_main_kt.xml b/analytics/app/src/main/res/layout/activity_main_kt.xml new file mode 100644 index 0000000000..42e1ab2e32 --- /dev/null +++ b/analytics/app/src/main/res/layout/activity_main_kt.xml @@ -0,0 +1,9 @@ + + + + diff --git a/analytics/app/src/main/res/layout/fragment_main.xml b/analytics/app/src/main/res/layout/fragment_main.xml index 3191d9af92..868e02fb0b 100644 --- a/analytics/app/src/main/res/layout/fragment_main.xml +++ b/analytics/app/src/main/res/layout/fragment_main.xml @@ -20,7 +20,7 @@ specific language governing permissions and limitations under the License. android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" - tools:context="com.google.firebase.quickstart.analytics.ImageFragment"> + tools:context="com.google.firebase.quickstart.analytics.ImageFragmentKt"> Date: Sat, 12 Aug 2017 12:51:58 +0900 Subject: [PATCH 4/5] add extensions in gradle --- analytics/app/build.gradle | 1 + app-indexing/app/build.gradle | 1 + auth/app/build.gradle | 1 + config/app/build.gradle | 1 + crash/app/build.gradle | 1 + database/app/build.gradle | 1 + dynamiclinks/app/build.gradle | 1 + invites/app/build.gradle | 1 + messaging/app/build.gradle | 1 + storage/app/build.gradle | 1 + 10 files changed, 10 insertions(+) diff --git a/analytics/app/build.gradle b/analytics/app/build.gradle index cec9af3c6e..417f86489a 100644 --- a/analytics/app/build.gradle +++ b/analytics/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/app-indexing/app/build.gradle b/app-indexing/app/build.gradle index 61eaa7c476..1976201e6f 100644 --- a/app-indexing/app/build.gradle +++ b/app-indexing/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/auth/app/build.gradle b/auth/app/build.gradle index bd71c8f1f5..d4c1c7a8e9 100644 --- a/auth/app/build.gradle +++ b/auth/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleMinSdkJellybeanDebugAndroidTest', 'assembleMinSdkIcsDebugAndroidTest' android { diff --git a/config/app/build.gradle b/config/app/build.gradle index ecb8df7eb1..bdf77cd592 100644 --- a/config/app/build.gradle +++ b/config/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/crash/app/build.gradle b/crash/app/build.gradle index ff8be31aad..37ff2bbb67 100644 --- a/crash/app/build.gradle +++ b/crash/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/database/app/build.gradle b/database/app/build.gradle index 0f7e3c3e2f..61d596fb2a 100644 --- a/database/app/build.gradle +++ b/database/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/dynamiclinks/app/build.gradle b/dynamiclinks/app/build.gradle index a7322889c0..b0a2c3e092 100644 --- a/dynamiclinks/app/build.gradle +++ b/dynamiclinks/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleMainDebugAndroidTest' android { diff --git a/invites/app/build.gradle b/invites/app/build.gradle index 5b1be45926..572e735155 100644 --- a/invites/app/build.gradle +++ b/invites/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleMainDebugAndroidTest' android { diff --git a/messaging/app/build.gradle b/messaging/app/build.gradle index 053fb9048d..1819c795ff 100644 --- a/messaging/app/build.gradle +++ b/messaging/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { diff --git a/storage/app/build.gradle b/storage/app/build.gradle index 84c4c674a1..00736e08ae 100644 --- a/storage/app/build.gradle +++ b/storage/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' check.dependsOn 'assembleDebugAndroidTest' android { From fb6b5527f75a94cb7fb849be5b6467ad9d277ba5 Mon Sep 17 00:00:00 2001 From: soulduse Date: Sat, 12 Aug 2017 23:49:13 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[=EC=BD=94=ED=8B=80=EB=A6=B0=20=EB=B3=80?= =?UTF-8?q?=ED=99=98]=20firebase=20-=20analytics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- analytics/app/src/main/AndroidManifest.xml | 3 +- .../quickstart/analytics/ImageInfo.java | 7 +- .../quickstart/analytics/MainActivity.java | 8 +- .../quickstart/analytics/ImageInfo.kt | 44 ----- .../quickstart/analytics/MainActivityKt.kt | 164 ++++++++++++++++-- .../src/main/res/layout/activity_main_kt.xml | 9 - 6 files changed, 158 insertions(+), 77 deletions(-) delete mode 100644 analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt delete mode 100644 analytics/app/src/main/res/layout/activity_main_kt.xml diff --git a/analytics/app/src/main/AndroidManifest.xml b/analytics/app/src/main/AndroidManifest.xml index ec6c716098..8f95c2d0d2 100644 --- a/analytics/app/src/main/AndroidManifest.xml +++ b/analytics/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme"> @@ -16,7 +16,6 @@ - \ No newline at end of file diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java index 2aa0b12957..0fc545a13e 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/ImageInfo.java @@ -33,9 +33,8 @@ public class ImageInfo { * @param id resource of id */ public ImageInfo(int image, int title, int id) { - this.setImage(image); - this.setTitle(title); - this.setId(id); + this.image = image; + this.title = title; + this.id = id; } - } diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java index 639996e7db..5dad645b73 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/MainActivity.java @@ -212,7 +212,7 @@ public boolean onOptionsItemSelected(MenuItem item) { private String getCurrentImageTitle() { int position = mViewPager.getCurrentItem(); ImageInfo info = IMAGE_INFOS[position]; - return getString(info.getTitle()); + return getString(info.title); } /** @@ -223,7 +223,7 @@ private String getCurrentImageTitle() { private String getCurrentImageId() { int position = mViewPager.getCurrentItem(); ImageInfo info = IMAGE_INFOS[position]; - return getString(info.getId()); + return getString(info.id); } /** @@ -272,7 +272,7 @@ public ImagePagerAdapter(FragmentManager fm, ImageInfo[] infos) { @Override public Fragment getItem(int position) { ImageInfo info = infos[position]; - return ImageFragment.newInstance(info.getImage()); + return ImageFragment.newInstance(info.image); } @Override @@ -287,7 +287,7 @@ public CharSequence getPageTitle(int position) { } Locale l = Locale.getDefault(); ImageInfo info = infos[position]; - return getString(info.getTitle()).toUpperCase(l); + return getString(info.title).toUpperCase(l); } } } diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt deleted file mode 100644 index 9e5ee0bbb8..0000000000 --- a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/ImageInfo.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.quickstart.analytics - -/** - * Pair of resource IDs representing an image and its title. - */ -class ImageInfo -/** - * Create a new ImageInfo. - - * @param image resource of image - * * - * @param title resource of title - * * - * @param id resource of id - */ -(image: Int, title: Int, id: Int) { - - val image: Int = 0 - val title: Int = 0 - val id: Int = 0 - - init { - this.setImage(image) - this.setTitle(title) - this.setId(id) - } - -} diff --git a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt index e8736ffad6..dea17b5253 100644 --- a/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt +++ b/analytics/app/src/main/kotlin/com/google/firebase/quickstart/analytics/MainActivityKt.kt @@ -1,10 +1,20 @@ package com.google.firebase.quickstart.analytics +import android.content.DialogInterface +import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.preference.PreferenceManager import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentPagerAdapter +import android.support.v4.view.ViewPager +import android.support.v7.app.AlertDialog +import android.util.Log +import android.view.Menu +import android.view.MenuItem +import com.google.firebase.analytics.FirebaseAnalytics +import kotlinx.android.synthetic.main.activity_main.* import java.util.* class MainActivityKt : AppCompatActivity() { @@ -13,38 +23,164 @@ class MainActivityKt : AppCompatActivity() { * The {@link android.support.v4.view.PagerAdapter} that will provide fragments for each image. * This uses a {@link FragmentPagerAdapter}, which keeps every loaded fragment in memory. */ - private var mImagePagerAdapter : ImagePagerAdapter; - + private var mImagePagerAdapter: ImagePagerAdapter? = null + private var mFirebaseAnalytics: FirebaseAnalytics? = null + private var mFavoriteFood: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main_kt) + setContentView(R.layout.activity_main) + + mFirebaseAnalytics = FirebaseAnalytics.getInstance(this) + + var userFavoriteFood: String = getUserFavoriteFood() + if (userFavoriteFood == null) { + askFavoriteFood() + } else { + setUserFavoriteFood(userFavoriteFood) + } + + mImagePagerAdapter = ImagePagerAdapter(supportFragmentManager, IMAGE_INFOS) + pager.adapter = mImagePagerAdapter + + var params = pager_tab_strip.layoutParams as ViewPager.LayoutParams + params.isDecor = true + + pager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + recordImageView() + recordScreenView() + } + }) + + recordImageView() } + override fun onResume() { + super.onResume() + recordScreenView() + } + private fun askFavoriteFood() { + val choices: Array = resources.getStringArray(R.array.food_items) + var ad: AlertDialog = AlertDialog.Builder(this) + .setCancelable(false) + .setTitle(R.string.food_dialog_title) + .setItems(choices, DialogInterface.OnClickListener { + dialogInterface, i -> + var food: String = choices[i] + setUserFavoriteFood(food) + }).create() - companion object { - private val TAG:String = "MainActivity" - private val KEY_FAVORITE_FOOD = "favorite_food" + ad.show() + } - val IMAGE_INFOS = arrayOf( - ImageInfo(R.drawable.favorite, R.string.pattern1_title, R.string.pattern1_id), - ImageInfo(R.drawable.flash, R.string.pattern2_title, R.string.pattern2_id), - ImageInfo(R.drawable.face, R.string.pattern3_title, R.string.pattern3_id), - ImageInfo(R.drawable.whitebalance, R.string.pattern4_title, R.string.pattern4_id)) + private fun getUserFavoriteFood(): String { + return PreferenceManager.getDefaultSharedPreferences(this) + .getString(KEY_FAVORITE_FOOD, null) + } + + private fun setUserFavoriteFood(food: String) { + Log.d(TAG, "setFavoriteFood: " + food) + mFavoriteFood = food + + PreferenceManager.getDefaultSharedPreferences(this).edit() + .putString(KEY_FAVORITE_FOOD, food) + .apply() + + mFirebaseAnalytics?.setUserProperty("favorite_food", mFavoriteFood) + } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.main, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + var i: Int = item.itemId + if (i == R.id.menu_share) { + var name: String = getCurrentItemTitle() + var text: String = "I'd love you to hear about " + name + + var sendIntent = Intent() + sendIntent.action = Intent.ACTION_SEND + sendIntent.putExtra(Intent.EXTRA_TEXT, text) + sendIntent.type = "text/plain" + startActivity(sendIntent) + + // [START custom_event] + var params = Bundle() + params.putString("image_name", name) + params.putString("full_text", text) + mFirebaseAnalytics!!.logEvent("share_image", params) + } + return false + } + + private fun getCurrentItemTitle(): String { + var position = pager.currentItem + var info: ImageInfoKt = IMAGE_INFOS[position] + return getString(info.title) + } + + private fun getCurrentImageId(): String { + var position = pager.currentItem + var info = IMAGE_INFOS[position] + return getString(info.id) + } + + private fun recordImageView() { + var id = getCurrentImageId(); + var name = getCurrentItemTitle() + + // [START image_view_event] + var bundle = Bundle() + bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id) + bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name) + bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image") + mFirebaseAnalytics!!.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle) + // [END image_view_event] + } + + private fun recordScreenView() { + var screenName = getCurrentImageId() + "-" + getCurrentItemTitle() + + // [START set_current_screen] + mFirebaseAnalytics!!.setCurrentScreen(this, screenName, null /* class override */) + // [END set_current_screen] } inner class ImagePagerAdapter(fm: FragmentManager?, val infos: Array) : FragmentPagerAdapter(fm) { override fun getItem(position: Int): Fragment { - var info : ImageInfoKt = infos[position] - return ImageFragmentKt.newInstance(info.) + var info: ImageInfoKt = infos[position] + return ImageFragmentKt.newInstance(info.image) } override fun getCount(): Int { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + return infos.size } + override fun getPageTitle(position: Int): CharSequence? { + if (position < 0 || position >= infos.size) { + return null + } + var l = Locale.getDefault() + var info = infos[position] + return getString(info.title).toUpperCase() + } + } + + + companion object { + private val TAG: String = "MainActivity" + private val KEY_FAVORITE_FOOD = "favorite_food" + + val IMAGE_INFOS = arrayOf( + ImageInfoKt(R.drawable.favorite, R.string.pattern1_title, R.string.pattern1_id), + ImageInfoKt(R.drawable.flash, R.string.pattern2_title, R.string.pattern2_id), + ImageInfoKt(R.drawable.face, R.string.pattern3_title, R.string.pattern3_id), + ImageInfoKt(R.drawable.whitebalance, R.string.pattern4_title, R.string.pattern4_id)) } } diff --git a/analytics/app/src/main/res/layout/activity_main_kt.xml b/analytics/app/src/main/res/layout/activity_main_kt.xml deleted file mode 100644 index 42e1ab2e32..0000000000 --- a/analytics/app/src/main/res/layout/activity_main_kt.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - -