From a3d952743685dd523e86e11d14c379c0dd718164 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Mon, 12 Dec 2022 22:24:46 -0600 Subject: [PATCH 01/13] add compose implementation to entry choices --- admob/app/build.gradle | 1 + admob/app/src/main/AndroidManifest.xml | 1 + .../admobexample/EntryChoiceActivity.kt | 8 +- .../kotlin/MainComposeActivity.kt | 192 ++++++++++++++++++ .../admobexample/kotlin/ui/theme/Color.kt | 12 ++ .../admobexample/kotlin/ui/theme/Theme.kt | 68 +++++++ .../admobexample/kotlin/ui/theme/Type.kt | 34 ++++ admob/app/src/main/res/values/strings.xml | 3 +- admob/build.gradle | 3 + 9 files changed, 319 insertions(+), 3 deletions(-) create mode 100644 admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt create mode 100644 admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt create mode 100644 admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt create mode 100644 admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt diff --git a/admob/app/build.gradle b/admob/app/build.gradle index 41007b0a0..fb997e6b8 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -71,6 +71,7 @@ dependencies { // For an optimal experience using AdMob, add the Firebase SDK // for Google Analytics. This is recommended, but not required. implementation 'com.google.firebase:firebase-analytics' + implementation 'androidx.compose.material3:material3:1.0.0-alpha02' debugImplementation "androidx.fragment:fragment-testing:1.5.4" // Jetpack Compose diff --git a/admob/app/src/main/AndroidManifest.xml b/admob/app/src/main/AndroidManifest.xml index aeddd6ffc..fdd24ea52 100644 --- a/admob/app/src/main/AndroidManifest.xml +++ b/admob/app/src/main/AndroidManifest.xml @@ -36,6 +36,7 @@ + diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt index adc6fee47..445281e81 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt @@ -12,11 +12,15 @@ class EntryChoiceActivity : BaseEntryChoiceActivity() { Choice( "Java", "Run the Firebase Admob quickstart written in Java.", - Intent(this, MainActivity::class.java)), + Intent(this, com.google.samples.quickstart.admobexample.java.MainActivity::class.java)), Choice( "Kotlin", "Run the Firebase Admob quickstart written in Kotlin.", - Intent(this, com.google.samples.quickstart.admobexample.kotlin.MainActivity::class.java)) + Intent(this, com.google.samples.quickstart.admobexample.kotlin.MainActivity::class.java)), + Choice( + "Compose", + "Run the Firebase Admob quickstart written in Kotlin with Compose.", + Intent(this, com.google.samples.quickstart.admobexample.kotlin.MainComposeActivity::class.java)) ) } } diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt new file mode 100644 index 000000000..5a88a3464 --- /dev/null +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -0,0 +1,192 @@ +package com.google.samples.quickstart.admobexample.kotlin + +import android.content.ContentValues.TAG +import android.os.Bundle +import android.util.Log +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.material.TopAppBar +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.viewinterop.AndroidView +import com.google.android.gms.ads.* +import com.google.samples.quickstart.admobexample.kotlin.ui.theme.AdmobTheme +import com.google.samples.quickstart.admobexample.R +import com.google.android.gms.ads.interstitial.InterstitialAd +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback + +class MainComposeActivity : ComponentActivity() { + private var mInterstitialAd: InterstitialAd? = null + private var adUnitId: String = "ca-app-pub-3940256099942544/1033173712" // could be set to another id + private val buttonClickLambda = { displayNewInterstitial() } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + + setContent { + + AdmobTheme { + //A surface container using the 'background' color from the theme + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { +// Greeting("Android") + MainAppView( buttonClickEventAdLoader = buttonClickLambda ) // better here? + } + } + +// MainAppView( buttonClickEventAdLoader = { buttonClickLambda } ) // or here? + + initializeInterstitial() + } + } + + private fun setInterstitialCallback() { + + + mInterstitialAd?.fullScreenContentCallback = object: FullScreenContentCallback() { + override fun onAdClicked() { + // Called when a click is recorded for an ad. + Log.d(TAG, "Ad was clicked.") + } + + override fun onAdDismissedFullScreenContent() { + // Called when ad is dismissed. + Log.d(TAG, "Ad dismissed fullscreen content.") + mInterstitialAd = null + initializeInterstitial() // get a new ad + } + + override fun onAdFailedToShowFullScreenContent(p0: AdError) { + // Called when ad fails to show. + Log.e(TAG, "Ad failed to show fullscreen content.") + mInterstitialAd = null + initializeInterstitial() // get a new ad + } + + override fun onAdImpression() { + // Called when an impression is recorded for an ad. + Log.d(TAG, "Ad recorded an impression.") + } + + override fun onAdShowedFullScreenContent() { + // Called when ad is shown. + Log.d(TAG, "Ad showed fullscreen content.") + } + } + } + + private fun initializeInterstitial(){ + MobileAds.initialize(this) + val adRequest = AdRequest.Builder().build() + InterstitialAd.load(this, adUnitId, adRequest, object : InterstitialAdLoadCallback() { + override fun onAdFailedToLoad(adError: LoadAdError) { + Log.d(TAG, adError.toString()) + mInterstitialAd = null + } + + override fun onAdLoaded(interstitialAd: InterstitialAd) { + Log.d(TAG, "Ad was loaded.") + mInterstitialAd = interstitialAd + } + }) + } + + fun displayNewInterstitial(){ + if (mInterstitialAd != null) { // ad is available + setInterstitialCallback() // set the callback methods + mInterstitialAd?.show(this) + } else { // ad is not available + Log.d("TAG", "The interstitial ad wasn't ready yet.") + initializeInterstitial() + } + } + + +} + +@Composable +fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Unit = {}){ + Column(modifier = Modifier, horizontalAlignment = Alignment.CenterHorizontally) { + AppNameBanner() + Spacer(modifier = Modifier.height(24.dp)) + + Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") + Spacer(modifier = Modifier.height(160.dp)) + InterstitialButton(myClickEventInterstitialLoader = {buttonClickEventAdLoader()}) + + Spacer(modifier = Modifier.height(192.dp)) + AdvertBanner() + } +} + +@Composable +fun AppNameBanner(modifier: Modifier = Modifier){ + TopAppBar( + backgroundColor = colorResource(R.color.colorPrimary) + ) { + androidx.compose.material.Text( + text = stringResource(R.string.app_name), + style = androidx.compose.material.MaterialTheme.typography.h6, + textAlign = TextAlign.Center, + modifier = Modifier.padding(8.dp), + color = Color.White + ) + } +} + +@Composable +fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLoader : () -> Unit = {}){ + Button( + colors = ButtonDefaults.buttonColors(containerColor = colorResource(R.color.colorAccent)), + onClick = { myClickEventInterstitialLoader() } //lambda for onClick action + ) { + Text( + text = stringResource(R.string.interstitial_button_text), + fontSize = 24.sp + ) + } +} + +@Composable +fun AdvertBanner(modifier: Modifier = Modifier) { // banner advert + + AndroidView( + modifier = modifier.fillMaxWidth(), + factory = { context -> + AdView(context).apply { + setAdSize(AdSize.BANNER) + adUnitId = context.getString(R.string.banner_ad_unit_id) + loadAd(AdRequest.Builder().build()) + } + } + ) + +} + +@Composable +fun Greeting(name: String) { + Text(text = "Hello $name!") +} + +@Preview(showBackground = true) +@Composable +fun DefaultPreview() { + AdmobTheme { + Greeting("Android") + } +} \ No newline at end of file diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt new file mode 100644 index 000000000..7dd6639c4 --- /dev/null +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt @@ -0,0 +1,12 @@ +package com.google.samples.quickstart.admobexample.kotlin.ui.theme + +import androidx.compose.ui.graphics.Color +import com.google.samples.quickstart.admobexample.R + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val FirebaseBlue = Color(0xFF0288D1) // copied from colors.xml +val FirebaseBannerBlue = Color(0xFF039BE5) // copied from colors.xml +val FirebaseOrange = Color(0xFFFFA000) // copied from colors.xml \ No newline at end of file diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt new file mode 100644 index 000000000..dcf811864 --- /dev/null +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt @@ -0,0 +1,68 @@ +package com.google.samples.quickstart.admobexample.kotlin.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.ViewCompat + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = FirebaseBlue, + secondary = FirebaseBannerBlue, + tertiary = FirebaseOrange + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun AdmobTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() + ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme + } + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt new file mode 100644 index 000000000..81c07fb40 --- /dev/null +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.google.samples.quickstart.admobexample.kotlin.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/admob/app/src/main/res/values/strings.xml b/admob/app/src/main/res/values/strings.xml index 1bfbb0741..2bbf82340 100644 --- a/admob/app/src/main/res/values/strings.xml +++ b/admob/app/src/main/res/values/strings.xml @@ -12,5 +12,6 @@ ca-app-pub-3940256099942544~3347511713 ca-app-pub-3940256099942544/6300978111 - ca-app-pub-3940256099942544/1033173712 + ca-app-pub-3940256099942544/1033173712\ + MainComposeActivity diff --git a/admob/build.gradle b/admob/build.gradle index fbaae1ec7..a73e82d46 100644 --- a/admob/build.gradle +++ b/admob/build.gradle @@ -1,6 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext { + compose_version = '1.1.0-beta01' + } repositories { mavenLocal() google() From 2f23ebf2de59f08cbc110d99605f474cfc0d0396 Mon Sep 17 00:00:00 2001 From: millandavid <71908868+millandavid@users.noreply.github.com> Date: Thu, 15 Dec 2022 23:15:22 -0600 Subject: [PATCH 02/13] Config UI with Compose Config UI has now been recreated using Compose. --- .gitignore | 1 + config/app/build.gradle | 39 ++++++- config/app/src/main/AndroidManifest.xml | 20 ++-- .../quickstart/config/EntryChoiceActivity.kt | 8 +- .../config/kotlin/MainComposeActivity.kt | 110 ++++++++++++++++++ .../quickstart/config/ui/theme/Color.kt | 11 ++ .../quickstart/config/ui/theme/Theme.kt | 68 +++++++++++ .../quickstart/config/ui/theme/Type.kt | 34 ++++++ config/app/src/main/res/values/strings.xml | 3 +- config/build.gradle | 3 + config/gradle.properties | 2 +- 11 files changed, 285 insertions(+), 14 deletions(-) create mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt create mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt create mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt create mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt diff --git a/.gitignore b/.gitignore index 2503d43f9..843171caf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ google-services.json .settings .classpath .vscode +config/local-Millans-AsusG14Zephyrus.properties diff --git a/config/app/build.gradle b/config/app/build.gradle index 17f01745b..44cb6b719 100644 --- a/config/app/build.gradle +++ b/config/app/build.gradle @@ -12,12 +12,15 @@ android { defaultConfig { applicationId "com.google.samples.quickstart.config" - minSdkVersion 19 + minSdkVersion 21 // needed to be updated to 21 for compose/material 3 targetSdkVersion 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary true + } } buildTypes { @@ -29,6 +32,22 @@ android { buildFeatures { viewBinding = true + compose true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + composeOptions { + kotlinCompilerExtensionVersion '1.3.2' + } + packagingOptions { + resources { + excludes += '/META-INF/{AL2.0,LGPL2.1}' + } } } @@ -37,6 +56,7 @@ dependencies { implementation project(":internal:chooserx") implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' // Import the Firebase BoM (see: https://firebase.google.com/docs/android/learn-more#bom) implementation platform('com.google.firebase:firebase-bom:31.1.0') @@ -50,9 +70,20 @@ dependencies { // For an optimal experience using Remote Config, add the Firebase SDK // for Google Analytics. This is recommended, but not required. implementation 'com.google.firebase:firebase-analytics' + implementation 'androidx.compose.material3:material3:1.0.0-alpha02' + + debugImplementation "androidx.fragment:fragment-testing:1.5.4" + // Jetpack COmpose + implementation "androidx.compose.ui:ui:$compose_version" + implementation "androidx.compose.material:material:$compose_version" + implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" + implementation 'androidx.activity:activity-compose:1.5.1' + androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' - androidTestImplementation 'androidx.test:rules:1.5.0' - androidTestImplementation 'androidx.test:runner:1.5.1' - androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test:rules:1.4.0' + androidTestImplementation 'androidx.test:runner:1.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" + debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" } diff --git a/config/app/src/main/AndroidManifest.xml b/config/app/src/main/AndroidManifest.xml index 6065a87b1..0ab90089d 100644 --- a/config/app/src/main/AndroidManifest.xml +++ b/config/app/src/main/AndroidManifest.xml @@ -5,20 +5,26 @@ android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:theme="@style/AppTheme" > - + android:theme="@style/AppTheme"> + + + - - + android:exported="true" + android:label="@string/app_name"> @@ -27,4 +33,4 @@ - + \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt b/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt index e6ffe34e8..49a58074d 100644 --- a/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt +++ b/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt @@ -19,7 +19,13 @@ class EntryChoiceActivity : BaseEntryChoiceActivity() { "Run the Firebase Remote Config quickstart written in Kotlin.", Intent( this, - com.google.samples.quickstart.config.kotlin.MainActivity::class.java)) + com.google.samples.quickstart.config.kotlin.MainActivity::class.java)), + Choice( + "Compose", + "Run the Firebase Remote Config quickstart written in Compose.", + Intent( + this, + com.google.samples.quickstart.config.kotlin.MainComposeActivity::class.java)) ) } } diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt b/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt new file mode 100644 index 000000000..fa89f1b82 --- /dev/null +++ b/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt @@ -0,0 +1,110 @@ +package com.google.samples.quickstart.config.kotlin + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.material.TopAppBar +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.google.samples.quickstart.config.R +import com.google.samples.quickstart.config.ui.theme.ConfigTheme + + +class MainComposeActivity : ComponentActivity() { + private var startingText: String = "Fetching Config..." + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + ConfigTheme { + // A surface container using the 'background' color from the theme + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + MainAppView(remoteConfigDisplayText = startingText) + } + } + } + } +} + + +@Composable +fun MainAppView(modifier: Modifier = Modifier, remoteConfigDisplayText: String){ + Column(modifier, horizontalAlignment = Alignment.CenterHorizontally){ + AppNameBanner() + Spacer(modifier = Modifier.height(24.dp)) + + Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") +// Spacer(modifier = Modifier.height(16.dp)) + + ConfigText(remoteConfigDisplayText = remoteConfigDisplayText) + Spacer(modifier = Modifier.height(160.dp)) + + ConfigButton() + } + +} + +@Composable +fun AppNameBanner(modifier: Modifier = Modifier){ + TopAppBar( + backgroundColor = colorResource(R.color.colorPrimary) + ) { + androidx.compose.material.Text( + text = stringResource(R.string.app_name), + style = androidx.compose.material.MaterialTheme.typography.h6, + textAlign = TextAlign.Center, + modifier = Modifier.padding(8.dp), + color = Color.White + ) + } +} + +@Composable +fun ConfigText(modifier: Modifier = Modifier, remoteConfigDisplayText: String){ + Text( + text = remoteConfigDisplayText, + fontSize = 16.sp + ) +} + +@Composable +fun ConfigButton(modifier: Modifier = Modifier){ + Button( + colors = ButtonDefaults.buttonColors(containerColor = colorResource(R.color.colorAccent)), + onClick = { } //lambda for onClick action + ) { + Text( + text = stringResource(R.string.fetch_remote_welcome_message), + fontSize = 20.sp + ) + } +} + + +@Composable +fun Greeting(name: String) { + Text(text = "Hello $name!") +} + +@Preview(showBackground = true) +@Composable +fun DefaultPreview() { + ConfigTheme { + Greeting("Android") + } +} \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt new file mode 100644 index 000000000..42c5e6c50 --- /dev/null +++ b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.google.samples.quickstart.config.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val FirebaseBlue = Color(0xFF0288D1) // copied from colors.xml +val FirebaseBannerBlue = Color(0xFF039BE5) // copied from colors.xml +val FirebaseOrange = Color(0xFFFFA000) // copied from colors.xml \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt new file mode 100644 index 000000000..9432f460a --- /dev/null +++ b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt @@ -0,0 +1,68 @@ +package com.google.samples.quickstart.config.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.ViewCompat + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = FirebaseBlue, + secondary = FirebaseBannerBlue, + tertiary = FirebaseOrange + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun ConfigTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() + ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme + } + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt new file mode 100644 index 000000000..52958ba6b --- /dev/null +++ b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.google.samples.quickstart.config.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/config/app/src/main/res/values/strings.xml b/config/app/src/main/res/values/strings.xml index f03807996..e4a81651d 100644 --- a/config/app/src/main/res/values/strings.xml +++ b/config/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ Firebase Remote Config - fetch remote welcome + Fetch Remote Welcome + MainComposeActivity diff --git a/config/build.gradle b/config/build.gradle index f9bdde250..d53e8acfd 100644 --- a/config/build.gradle +++ b/config/build.gradle @@ -1,6 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext { + compose_version = '1.2.0' + } repositories { mavenLocal() google() diff --git a/config/gradle.properties b/config/gradle.properties index aac7c9b46..29b531a1d 100644 --- a/config/gradle.properties +++ b/config/gradle.properties @@ -10,7 +10,7 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m - +android.useAndroidX=true # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects From c6cf973a83285b6d954831f250192ed206ee701f Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Thu, 19 Jan 2023 16:54:57 -0600 Subject: [PATCH 03/13] justify ad banner to screen bottom --- .../kotlin/MainComposeActivity.kt | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index 5a88a3464..113a51028 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -121,16 +121,30 @@ class MainComposeActivity : ComponentActivity() { @Composable fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Unit = {}){ - Column(modifier = Modifier, horizontalAlignment = Alignment.CenterHorizontally) { - AppNameBanner() - Spacer(modifier = Modifier.height(24.dp)) + Column( + modifier = Modifier.fillMaxWidth() + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight() + .weight(1f), // fills as much space as possible + + horizontalAlignment = Alignment.CenterHorizontally + ) { + AppNameBanner() + Spacer(modifier = Modifier.height(24.dp)) - Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") - Spacer(modifier = Modifier.height(160.dp)) - InterstitialButton(myClickEventInterstitialLoader = {buttonClickEventAdLoader()}) + Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") + Spacer(modifier = Modifier.height(160.dp)) + InterstitialButton(myClickEventInterstitialLoader = { buttonClickEventAdLoader() }) - Spacer(modifier = Modifier.height(192.dp)) - AdvertBanner() + } + Row( // pushed to bottom due to .weight above + modifier = Modifier.fillMaxWidth() + ) { + AdvertBanner() + } } } @@ -165,16 +179,17 @@ fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLo @Composable fun AdvertBanner(modifier: Modifier = Modifier) { // banner advert - AndroidView( - modifier = modifier.fillMaxWidth(), - factory = { context -> - AdView(context).apply { - setAdSize(AdSize.BANNER) - adUnitId = context.getString(R.string.banner_ad_unit_id) - loadAd(AdRequest.Builder().build()) + AndroidView( + modifier = modifier.fillMaxWidth(), + factory = { context -> + AdView(context).apply { + setAdSize(AdSize.BANNER) + adUnitId = context.getString(R.string.banner_ad_unit_id) + loadAd(AdRequest.Builder().build()) + } } - } - ) + ) + } From b61226a6e2281a675de494f9fc05f549a0c61958 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Thu, 19 Jan 2023 17:49:47 -0600 Subject: [PATCH 04/13] touchups to justification and compose structure --- .../quickstart/admobexample/kotlin/MainComposeActivity.kt | 5 +++-- .../samples/quickstart/admobexample/kotlin/ui/theme/Color.kt | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index 113a51028..706101e14 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -34,7 +34,6 @@ class MainComposeActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContent { @@ -141,7 +140,9 @@ fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> } Row( // pushed to bottom due to .weight above - modifier = Modifier.fillMaxWidth() + modifier = Modifier + .fillMaxWidth() + .align(Alignment.CenterHorizontally) ) { AdvertBanner() } diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt index 7dd6639c4..ca187c6ee 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Color.kt @@ -7,6 +7,7 @@ val Purple80 = Color(0xFFD0BCFF) val PurpleGrey80 = Color(0xFFCCC2DC) val Pink80 = Color(0xFFEFB8C8) +// self-defined light-mode colour scheme val FirebaseBlue = Color(0xFF0288D1) // copied from colors.xml val FirebaseBannerBlue = Color(0xFF039BE5) // copied from colors.xml -val FirebaseOrange = Color(0xFFFFA000) // copied from colors.xml \ No newline at end of file +val FirebaseOrange = Color(0xFFFFA000) // copied from colors.xml \ No newline at end of file From bad9877d548319e85090e5e3e3984558e9486f6e Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Tue, 24 Jan 2023 22:13:23 -0600 Subject: [PATCH 05/13] finalize admob and reset config --- config/app/build.gradle | 39 ++----------------- config/app/src/main/AndroidManifest.xml | 20 ++++------ .../quickstart/config/EntryChoiceActivity.kt | 8 +--- config/app/src/main/res/values/strings.xml | 3 +- config/build.gradle | 3 -- config/gradle.properties | 2 +- 6 files changed, 14 insertions(+), 61 deletions(-) diff --git a/config/app/build.gradle b/config/app/build.gradle index 44cb6b719..17f01745b 100644 --- a/config/app/build.gradle +++ b/config/app/build.gradle @@ -12,15 +12,12 @@ android { defaultConfig { applicationId "com.google.samples.quickstart.config" - minSdkVersion 21 // needed to be updated to 21 for compose/material 3 + minSdkVersion 19 targetSdkVersion 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary true - } } buildTypes { @@ -32,22 +29,6 @@ android { buildFeatures { viewBinding = true - compose true - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = '1.8' - } - composeOptions { - kotlinCompilerExtensionVersion '1.3.2' - } - packagingOptions { - resources { - excludes += '/META-INF/{AL2.0,LGPL2.1}' - } } } @@ -56,7 +37,6 @@ dependencies { implementation project(":internal:chooserx") implementation 'com.google.android.material:material:1.7.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' // Import the Firebase BoM (see: https://firebase.google.com/docs/android/learn-more#bom) implementation platform('com.google.firebase:firebase-bom:31.1.0') @@ -70,20 +50,9 @@ dependencies { // For an optimal experience using Remote Config, add the Firebase SDK // for Google Analytics. This is recommended, but not required. implementation 'com.google.firebase:firebase-analytics' - implementation 'androidx.compose.material3:material3:1.0.0-alpha02' - - debugImplementation "androidx.fragment:fragment-testing:1.5.4" - // Jetpack COmpose - implementation "androidx.compose.ui:ui:$compose_version" - implementation "androidx.compose.material:material:$compose_version" - implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" - implementation 'androidx.activity:activity-compose:1.5.1' - androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' - androidTestImplementation 'androidx.test:rules:1.4.0' - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" - debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" + androidTestImplementation 'androidx.test:rules:1.5.0' + androidTestImplementation 'androidx.test:runner:1.5.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' } diff --git a/config/app/src/main/AndroidManifest.xml b/config/app/src/main/AndroidManifest.xml index 0ab90089d..6065a87b1 100644 --- a/config/app/src/main/AndroidManifest.xml +++ b/config/app/src/main/AndroidManifest.xml @@ -5,26 +5,20 @@ android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:theme="@style/AppTheme"> - - - + android:theme="@style/AppTheme" > + + + + android:label="@string/app_name" + android:exported="true"> @@ -33,4 +27,4 @@ - \ No newline at end of file + diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt b/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt index 49a58074d..e6ffe34e8 100644 --- a/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt +++ b/config/app/src/main/java/com/google/samples/quickstart/config/EntryChoiceActivity.kt @@ -19,13 +19,7 @@ class EntryChoiceActivity : BaseEntryChoiceActivity() { "Run the Firebase Remote Config quickstart written in Kotlin.", Intent( this, - com.google.samples.quickstart.config.kotlin.MainActivity::class.java)), - Choice( - "Compose", - "Run the Firebase Remote Config quickstart written in Compose.", - Intent( - this, - com.google.samples.quickstart.config.kotlin.MainComposeActivity::class.java)) + com.google.samples.quickstart.config.kotlin.MainActivity::class.java)) ) } } diff --git a/config/app/src/main/res/values/strings.xml b/config/app/src/main/res/values/strings.xml index e4a81651d..f03807996 100644 --- a/config/app/src/main/res/values/strings.xml +++ b/config/app/src/main/res/values/strings.xml @@ -1,5 +1,4 @@ Firebase Remote Config - Fetch Remote Welcome - MainComposeActivity + fetch remote welcome diff --git a/config/build.gradle b/config/build.gradle index d53e8acfd..f9bdde250 100644 --- a/config/build.gradle +++ b/config/build.gradle @@ -1,9 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext { - compose_version = '1.2.0' - } repositories { mavenLocal() google() diff --git a/config/gradle.properties b/config/gradle.properties index 29b531a1d..aac7c9b46 100644 --- a/config/gradle.properties +++ b/config/gradle.properties @@ -10,7 +10,7 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m -android.useAndroidX=true + # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects From 23ad2beb512c5d223f75e8a21782e6dc094d05c9 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Tue, 24 Jan 2023 22:20:56 -0600 Subject: [PATCH 06/13] reset config --- .../config/kotlin/MainComposeActivity.kt | 110 ------------------ .../quickstart/config/ui/theme/Color.kt | 11 -- .../quickstart/config/ui/theme/Theme.kt | 68 ----------- .../quickstart/config/ui/theme/Type.kt | 34 ------ 4 files changed, 223 deletions(-) delete mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt delete mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt delete mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt delete mode 100644 config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt b/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt deleted file mode 100644 index fa89f1b82..000000000 --- a/config/app/src/main/java/com/google/samples/quickstart/config/kotlin/MainComposeActivity.kt +++ /dev/null @@ -1,110 +0,0 @@ -package com.google.samples.quickstart.config.kotlin - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.material.TopAppBar -import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.google.samples.quickstart.config.R -import com.google.samples.quickstart.config.ui.theme.ConfigTheme - - -class MainComposeActivity : ComponentActivity() { - private var startingText: String = "Fetching Config..." - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - ConfigTheme { - // A surface container using the 'background' color from the theme - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - MainAppView(remoteConfigDisplayText = startingText) - } - } - } - } -} - - -@Composable -fun MainAppView(modifier: Modifier = Modifier, remoteConfigDisplayText: String){ - Column(modifier, horizontalAlignment = Alignment.CenterHorizontally){ - AppNameBanner() - Spacer(modifier = Modifier.height(24.dp)) - - Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") -// Spacer(modifier = Modifier.height(16.dp)) - - ConfigText(remoteConfigDisplayText = remoteConfigDisplayText) - Spacer(modifier = Modifier.height(160.dp)) - - ConfigButton() - } - -} - -@Composable -fun AppNameBanner(modifier: Modifier = Modifier){ - TopAppBar( - backgroundColor = colorResource(R.color.colorPrimary) - ) { - androidx.compose.material.Text( - text = stringResource(R.string.app_name), - style = androidx.compose.material.MaterialTheme.typography.h6, - textAlign = TextAlign.Center, - modifier = Modifier.padding(8.dp), - color = Color.White - ) - } -} - -@Composable -fun ConfigText(modifier: Modifier = Modifier, remoteConfigDisplayText: String){ - Text( - text = remoteConfigDisplayText, - fontSize = 16.sp - ) -} - -@Composable -fun ConfigButton(modifier: Modifier = Modifier){ - Button( - colors = ButtonDefaults.buttonColors(containerColor = colorResource(R.color.colorAccent)), - onClick = { } //lambda for onClick action - ) { - Text( - text = stringResource(R.string.fetch_remote_welcome_message), - fontSize = 20.sp - ) - } -} - - -@Composable -fun Greeting(name: String) { - Text(text = "Hello $name!") -} - -@Preview(showBackground = true) -@Composable -fun DefaultPreview() { - ConfigTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt deleted file mode 100644 index 42c5e6c50..000000000 --- a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Color.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.google.samples.quickstart.config.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val FirebaseBlue = Color(0xFF0288D1) // copied from colors.xml -val FirebaseBannerBlue = Color(0xFF039BE5) // copied from colors.xml -val FirebaseOrange = Color(0xFFFFA000) // copied from colors.xml \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt deleted file mode 100644 index 9432f460a..000000000 --- a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Theme.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.google.samples.quickstart.config.ui.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.ViewCompat - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = FirebaseBlue, - secondary = FirebaseBannerBlue, - tertiary = FirebaseOrange - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun ConfigTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() - ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) -} \ No newline at end of file diff --git a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt b/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt deleted file mode 100644 index 52958ba6b..000000000 --- a/config/app/src/main/java/com/google/samples/quickstart/config/ui/theme/Type.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.google.samples.quickstart.config.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) \ No newline at end of file From f321a274c0e681886aed21ac27a1bf84b72125a0 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Tue, 31 Jan 2023 18:01:10 -0600 Subject: [PATCH 07/13] make changes from comments on PR #1452 --- admob/app/build.gradle | 2 +- .../admobexample/EntryChoiceActivity.kt | 2 +- .../admobexample/kotlin/MainComposeActivity.kt | 18 +----------------- admob/build.gradle | 2 +- 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/admob/app/build.gradle b/admob/app/build.gradle index fb997e6b8..530ef8e75 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -71,7 +71,7 @@ dependencies { // For an optimal experience using AdMob, add the Firebase SDK // for Google Analytics. This is recommended, but not required. implementation 'com.google.firebase:firebase-analytics' - implementation 'androidx.compose.material3:material3:1.0.0-alpha02' + implementation 'androidx.compose.material3:material3:1.0.1' debugImplementation "androidx.fragment:fragment-testing:1.5.4" // Jetpack Compose diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt index 445281e81..cc69a5f04 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/EntryChoiceActivity.kt @@ -19,7 +19,7 @@ class EntryChoiceActivity : BaseEntryChoiceActivity() { Intent(this, com.google.samples.quickstart.admobexample.kotlin.MainActivity::class.java)), Choice( "Compose", - "Run the Firebase Admob quickstart written in Kotlin with Compose.", + "Run the Firebase Admob quickstart written in Compose.", Intent(this, com.google.samples.quickstart.admobexample.kotlin.MainComposeActivity::class.java)) ) } diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index 706101e14..5b12ccff6 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -43,13 +43,10 @@ class MainComposeActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { -// Greeting("Android") - MainAppView( buttonClickEventAdLoader = buttonClickLambda ) // better here? + MainAppView( buttonClickEventAdLoader = buttonClickLambda ) // call Composable UI } } -// MainAppView( buttonClickEventAdLoader = { buttonClickLambda } ) // or here? - initializeInterstitial() } } @@ -193,16 +190,3 @@ fun AdvertBanner(modifier: Modifier = Modifier) { // banner advert } - -@Composable -fun Greeting(name: String) { - Text(text = "Hello $name!") -} - -@Preview(showBackground = true) -@Composable -fun DefaultPreview() { - AdmobTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/admob/build.gradle b/admob/build.gradle index a73e82d46..c04863dc2 100644 --- a/admob/build.gradle +++ b/admob/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - compose_version = '1.1.0-beta01' + compose_version = '1.2.0' } repositories { mavenLocal() From 6980baf039a6ebe118cc17764944b7e3aa219455 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Mon, 6 Feb 2023 09:14:57 -0600 Subject: [PATCH 08/13] implement scaffold in admob --- .../kotlin/MainComposeActivity.kt | 70 ++++++++++--------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index 5b12ccff6..97fc8c244 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -17,7 +17,6 @@ import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView @@ -115,35 +114,36 @@ class MainComposeActivity : ComponentActivity() { } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Unit = {}){ - Column( - modifier = Modifier.fillMaxWidth() - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .fillMaxHeight() - .weight(1f), // fills as much space as possible - - horizontalAlignment = Alignment.CenterHorizontally - ) { + Scaffold( + topBar = { // top bar with app name AppNameBanner() - Spacer(modifier = Modifier.height(24.dp)) + }, + content = { - Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") - Spacer(modifier = Modifier.height(160.dp)) - InterstitialButton(myClickEventInterstitialLoader = { buttonClickEventAdLoader() }) + Column( + modifier = Modifier + .padding(it) + .fillMaxWidth() + .fillMaxHeight(), - } - Row( // pushed to bottom due to .weight above - modifier = Modifier - .fillMaxWidth() - .align(Alignment.CenterHorizontally) - ) { + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.height(24.dp)) + + Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") + Spacer(modifier = Modifier.height(160.dp)) + InterstitialButton(myClickEventInterstitialLoader = { buttonClickEventAdLoader() }) + + } + }, + bottomBar = { // keeps the banner ad at the bottom! AdvertBanner() } - } + ) + } @Composable @@ -177,16 +177,20 @@ fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLo @Composable fun AdvertBanner(modifier: Modifier = Modifier) { // banner advert - AndroidView( - modifier = modifier.fillMaxWidth(), - factory = { context -> - AdView(context).apply { - setAdSize(AdSize.BANNER) - adUnitId = context.getString(R.string.banner_ad_unit_id) - loadAd(AdRequest.Builder().build()) + Row( + modifier = Modifier + .fillMaxWidth() + ) { + AndroidView( + modifier = modifier.fillMaxWidth(), + factory = { context -> + AdView(context).apply { + setAdSize(AdSize.BANNER) + adUnitId = context.getString(R.string.banner_ad_unit_id) + loadAd(AdRequest.Builder().build()) + } } - } - ) - + ) + } } From d8b901a73a1456b2647dbefd6f889392ad209e0c Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Mon, 6 Feb 2023 12:24:17 -0600 Subject: [PATCH 09/13] downgrade material3 to more stable material2 --- admob/app/build.gradle | 1 - .../kotlin/MainComposeActivity.kt | 34 +++++++++--- .../admobexample/kotlin/ui/theme/Shape.kt | 11 ++++ .../admobexample/kotlin/ui/theme/Theme.kt | 53 ++++++------------- .../admobexample/kotlin/ui/theme/Type.kt | 4 +- admob/build.gradle | 2 +- 6 files changed, 58 insertions(+), 47 deletions(-) create mode 100644 admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt diff --git a/admob/app/build.gradle b/admob/app/build.gradle index 530ef8e75..41007b0a0 100644 --- a/admob/app/build.gradle +++ b/admob/app/build.gradle @@ -71,7 +71,6 @@ dependencies { // For an optimal experience using AdMob, add the Firebase SDK // for Google Analytics. This is recommended, but not required. implementation 'com.google.firebase:firebase-analytics' - implementation 'androidx.compose.material3:material3:1.0.1' debugImplementation "androidx.fragment:fragment-testing:1.5.4" // Jetpack Compose diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index 97fc8c244..b34d85be8 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -6,9 +6,21 @@ import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.material.Surface import androidx.compose.material.TopAppBar -import androidx.compose.material3.* +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -20,7 +32,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView -import com.google.android.gms.ads.* +import com.google.android.gms.ads.AdError +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdSize +import com.google.android.gms.ads.AdView +import com.google.android.gms.ads.FullScreenContentCallback +import com.google.android.gms.ads.LoadAdError +import com.google.android.gms.ads.MobileAds import com.google.samples.quickstart.admobexample.kotlin.ui.theme.AdmobTheme import com.google.samples.quickstart.admobexample.R import com.google.android.gms.ads.interstitial.InterstitialAd @@ -28,11 +46,12 @@ import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback class MainComposeActivity : ComponentActivity() { private var mInterstitialAd: InterstitialAd? = null - private var adUnitId: String = "ca-app-pub-3940256099942544/1033173712" // could be set to another id + private lateinit var adUnitId: String //="ca-app-pub-3940256099942544/1033173712" //could be set to another id private val buttonClickLambda = { displayNewInterstitial() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + adUnitId = getString(R.string.interstitial_ad_unit_id) setContent { @@ -40,7 +59,7 @@ class MainComposeActivity : ComponentActivity() { //A surface container using the 'background' color from the theme Surface( modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background + color = MaterialTheme.colors.background ) { MainAppView( buttonClickEventAdLoader = buttonClickLambda ) // call Composable UI } @@ -88,6 +107,7 @@ class MainComposeActivity : ComponentActivity() { private fun initializeInterstitial(){ MobileAds.initialize(this) val adRequest = AdRequest.Builder().build() + InterstitialAd.load(this, adUnitId, adRequest, object : InterstitialAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError.toString()) @@ -114,7 +134,7 @@ class MainComposeActivity : ComponentActivity() { } -@OptIn(ExperimentalMaterial3Api::class) + @Composable fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Unit = {}){ Scaffold( @@ -164,7 +184,7 @@ fun AppNameBanner(modifier: Modifier = Modifier){ @Composable fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLoader : () -> Unit = {}){ Button( - colors = ButtonDefaults.buttonColors(containerColor = colorResource(R.color.colorAccent)), + colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.colorAccent)), onClick = { myClickEventInterstitialLoader() } //lambda for onClick action ) { Text( diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt new file mode 100644 index 000000000..afd4b9f51 --- /dev/null +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt @@ -0,0 +1,11 @@ +package com.google.samples.quickstart.admobexample.kotlin.ui.theme + +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Shapes +import androidx.compose.ui.unit.dp + +val Shapes = Shapes( + small = RoundedCornerShape(4.dp), + medium = RoundedCornerShape(4.dp), + large = RoundedCornerShape(0.dp) +) \ No newline at end of file diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt index dcf811864..2ae9d75d4 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Theme.kt @@ -1,30 +1,21 @@ package com.google.samples.quickstart.admobexample.kotlin.ui.theme -import android.app.Activity -import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme +import androidx.compose.material.MaterialTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.ViewCompat -private val DarkColorScheme = darkColorScheme( +private val DarkColorPalette = darkColors( primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 + primaryVariant = PurpleGrey80, + secondary = Pink80 ) -private val LightColorScheme = lightColorScheme( +private val LightColorPalette = lightColors( primary = FirebaseBlue, - secondary = FirebaseBannerBlue, - tertiary = FirebaseOrange + primaryVariant = FirebaseBannerBlue, + secondary = FirebaseOrange /* Other default colors to override background = Color(0xFFFFFBFE), @@ -40,29 +31,19 @@ private val LightColorScheme = lightColorScheme( @Composable fun AdmobTheme( darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, content: @Composable () -> Unit ) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb() - ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme - } + val colors = if (darkTheme) { + DarkColorPalette + } else { + LightColorPalette } MaterialTheme( - colorScheme = colorScheme, + colors = colors, typography = Typography, + shapes = Shapes, content = content ) -} \ No newline at end of file +} + diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt index 81c07fb40..d4b748c80 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Type.kt @@ -1,6 +1,6 @@ package com.google.samples.quickstart.admobexample.kotlin.ui.theme -import androidx.compose.material3.Typography +import androidx.compose.material.Typography import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight @@ -8,7 +8,7 @@ import androidx.compose.ui.unit.sp // Set of Material typography styles to start with val Typography = Typography( - bodyLarge = TextStyle( + body1 = TextStyle( fontFamily = FontFamily.Default, fontWeight = FontWeight.Normal, fontSize = 16.sp, diff --git a/admob/build.gradle b/admob/build.gradle index c04863dc2..d577ca24d 100644 --- a/admob/build.gradle +++ b/admob/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - compose_version = '1.2.0' + compose_version = '1.3.0' } repositories { mavenLocal() From 947700daa9a05fa29fa7a6fc6807c1397a162509 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Mon, 6 Feb 2023 13:00:43 -0600 Subject: [PATCH 10/13] fix button appearance, simplify composables --- .../kotlin/MainComposeActivity.kt | 30 ++++++++----------- .../admobexample/kotlin/ui/theme/Shape.kt | 2 +- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index b34d85be8..b2a53b0e2 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -139,7 +139,17 @@ class MainComposeActivity : ComponentActivity() { fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Unit = {}){ Scaffold( topBar = { // top bar with app name - AppNameBanner() + TopAppBar( + backgroundColor = colorResource(R.color.colorPrimary) + ) { + androidx.compose.material.Text( + text = stringResource(R.string.app_name), + style = androidx.compose.material.MaterialTheme.typography.h6, + textAlign = TextAlign.Center, + modifier = Modifier.padding(8.dp), + color = Color.White + ) + } }, content = { @@ -166,21 +176,6 @@ fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> } -@Composable -fun AppNameBanner(modifier: Modifier = Modifier){ - TopAppBar( - backgroundColor = colorResource(R.color.colorPrimary) - ) { - androidx.compose.material.Text( - text = stringResource(R.string.app_name), - style = androidx.compose.material.MaterialTheme.typography.h6, - textAlign = TextAlign.Center, - modifier = Modifier.padding(8.dp), - color = Color.White - ) - } -} - @Composable fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLoader : () -> Unit = {}){ Button( @@ -189,7 +184,8 @@ fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLo ) { Text( text = stringResource(R.string.interstitial_button_text), - fontSize = 24.sp + fontSize = 24.sp, + color = Color.White ) } } diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt index afd4b9f51..cb1986dc6 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/ui/theme/Shape.kt @@ -5,7 +5,7 @@ import androidx.compose.material.Shapes import androidx.compose.ui.unit.dp val Shapes = Shapes( - small = RoundedCornerShape(4.dp), + small = RoundedCornerShape(16.dp), medium = RoundedCornerShape(4.dp), large = RoundedCornerShape(0.dp) ) \ No newline at end of file From 44f99426ff3905176b45bee945b0285867b2033d Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Fri, 10 Feb 2023 12:06:31 -0600 Subject: [PATCH 11/13] move button to MainAppView --- .../kotlin/MainComposeActivity.kt | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt index b2a53b0e2..04511c033 100644 --- a/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt +++ b/admob/app/src/main/java/com/google/samples/quickstart/admobexample/kotlin/MainComposeActivity.kt @@ -54,9 +54,8 @@ class MainComposeActivity : ComponentActivity() { adUnitId = getString(R.string.interstitial_ad_unit_id) setContent { - AdmobTheme { - //A surface container using the 'background' color from the theme + //A surface container using the 'background' color from the theme Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background @@ -150,7 +149,7 @@ fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> color = Color.White ) } - }, + }, content = { Column( @@ -165,7 +164,16 @@ fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> Image(painter = painterResource(R.drawable.firebase_lockup_400), contentDescription = "") Spacer(modifier = Modifier.height(160.dp)) - InterstitialButton(myClickEventInterstitialLoader = { buttonClickEventAdLoader() }) + Button( + colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.colorAccent)), + onClick = { buttonClickEventAdLoader() } //lambda for onClick action + ) { + Text( + text = stringResource(R.string.interstitial_button_text), + fontSize = 24.sp, + color = Color.White + ) + } } }, @@ -176,19 +184,6 @@ fun MainAppView(modifier: Modifier = Modifier, buttonClickEventAdLoader : () -> } -@Composable -fun InterstitialButton(modifier: Modifier = Modifier, myClickEventInterstitialLoader : () -> Unit = {}){ - Button( - colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.colorAccent)), - onClick = { myClickEventInterstitialLoader() } //lambda for onClick action - ) { - Text( - text = stringResource(R.string.interstitial_button_text), - fontSize = 24.sp, - color = Color.White - ) - } -} @Composable fun AdvertBanner(modifier: Modifier = Modifier) { // banner advert From bdd43ac563c865c92bbcec947ea3126a99793d24 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Mon, 13 Feb 2023 21:38:40 -0600 Subject: [PATCH 12/13] remove vestigial string --- admob/app/src/main/res/values/strings.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/admob/app/src/main/res/values/strings.xml b/admob/app/src/main/res/values/strings.xml index 2bbf82340..1bfbb0741 100644 --- a/admob/app/src/main/res/values/strings.xml +++ b/admob/app/src/main/res/values/strings.xml @@ -12,6 +12,5 @@ ca-app-pub-3940256099942544~3347511713 ca-app-pub-3940256099942544/6300978111 - ca-app-pub-3940256099942544/1033173712\ - MainComposeActivity + ca-app-pub-3940256099942544/1033173712 From 81c2b6853cbef986306b90a325c6622ca3eed372 Mon Sep 17 00:00:00 2001 From: LokiFrostGiant Date: Fri, 24 Feb 2023 19:41:12 -0600 Subject: [PATCH 13/13] remove unnecessary automatic ignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 843171caf..2503d43f9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,3 @@ google-services.json .settings .classpath .vscode -config/local-Millans-AsusG14Zephyrus.properties