From 7f1dff5216494ab95c36db2daa85d95c55b17e08 Mon Sep 17 00:00:00 2001 From: Aurimas Date: Thu, 3 May 2018 14:59:47 -0700 Subject: [PATCH 01/11] Use targetSdk for setting targetSdkVersion --- installed/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installed/build.gradle b/installed/build.gradle index ea1a27c2..dbe4fab6 100644 --- a/installed/build.gradle +++ b/installed/build.gradle @@ -20,7 +20,7 @@ android { compileSdkVersion rootProject.compileSdk defaultConfig { - targetSdkVersion rootProject.compileSdk + targetSdkVersion rootProject.targetSdk minSdkVersion rootProject.minSdk missingDimensionStrategy 'delivery', 'installed' } From b9a1147faaa1903a351e55815cfb049cd6bfaf15 Mon Sep 17 00:00:00 2001 From: Aurimas Date: Thu, 3 May 2018 15:13:20 -0700 Subject: [PATCH 02/11] Update to a newer version of Gradle --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e64bf027..2c10a6ab 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip From e58802657c1d44a14fd6f1a64662381bb814e13d Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Fri, 4 May 2018 23:25:27 +0100 Subject: [PATCH 03/11] Fix drawable resource referencing The referenced resources were moved around. With the changes in instant apps package names this requires some logic to have icons in both installed and instant package names. Change-Id: I6dd2cf18129e79e68014cb6e85474d7f20cca72e --- .../samples/apps/topeka/adapter/CategoryAdapter.kt | 9 ++++++++- .../google/samples/apps/topeka/activity/QuizActivity.kt | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt index 56cdb2a3..575f1fd5 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt @@ -30,10 +30,12 @@ import android.view.ViewGroup import android.widget.AdapterView import android.widget.ImageView import android.widget.TextView +import com.google.android.instantapps.InstantApps import com.google.samples.apps.topeka.categories.R import com.google.samples.apps.topeka.helper.ApiLevelHelper import com.google.samples.apps.topeka.helper.database import com.google.samples.apps.topeka.model.Category +import java.time.Instant class CategoryAdapter( private val activity: Activity, @@ -91,8 +93,13 @@ class CategoryAdapter( } private fun setCategoryIcon(category: Category, icon: ImageView) { + val packageName = + if (InstantApps.isInstantApp(activity)) + "${activity.packageName}.categories" + else activity.packageName + val imageRes = resources.getIdentifier("icon_category_${category.id}", - "drawable", "${activity.packageName}.categories") + "drawable", packageName) if (category.solved) { icon.setImageDrawable(loadSolvedIcon(category, imageRes)) } else { diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt b/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt index 4a9a5543..3c36a286 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt @@ -46,6 +46,7 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.ListView import android.widget.TextView +import com.google.android.instantapps.InstantApps import com.google.samples.apps.topeka.fragment.QuizFragment import com.google.samples.apps.topeka.helper.ActivityLaunchHelper import com.google.samples.apps.topeka.helper.ApiLevelHelper @@ -155,10 +156,15 @@ class QuizActivity : AppCompatActivity() { private fun initLayout(categoryId: String) { setContentView(R.layout.activity_quiz) + val packageName = + if (InstantApps.isInstantApp(this)) + "$packageName.quiz" + else packageName + icon = (findViewById(R.id.icon)).apply { val resId = resources.getIdentifier("$IMAGE_CATEGORY$categoryId", "drawable", - "$packageName.quiz") + packageName) setImageResource(resId) ViewCompat.animate(this) From eed3c9e0d00a7dd77cb1ec4d60cd61e359097053 Mon Sep 17 00:00:00 2001 From: Subhrajyoti Sen Date: Sun, 21 Oct 2018 20:50:18 +0530 Subject: [PATCH 04/11] README: correct link to blog post --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 0fdb5648..7e4cda4e 100644 --- a/README.markdown +++ b/README.markdown @@ -27,7 +27,7 @@ tests](http://google.github.io/android-testing-support-library) which can be executed with the `connectedAndroidTest` gradle task. You can read more about the project on the [Android Developers -blog](http://android-developers.blogspot.co.uk/2015/06/more-material-design-with-topeka-for_16.html). +blog](https://android-developers.googleblog.com/2015/06/more-material-design-with-topeka-for.html). ### Screenshots From 6e105ff1f1e8eb7b362d273f47f0df5e347b323b Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Thu, 13 Feb 2020 20:26:28 +0000 Subject: [PATCH 05/11] Migrate instant app to app model structure #124 * Remove com.android.feature plugin * Remove modules and flavors unnecessary * Add com.android.dynamic-feature plugin --- {installed => app}/build.gradle | 10 +- app/src/main/AndroidManifest.xml | 63 ++++++++ base/build.gradle | 39 +---- base/src/main/AndroidManifest.xml | 35 ---- .../apps/topeka/fragment/SignInFragment.kt | 13 +- .../apps/topeka/helper/AnswerHelper.kt | 2 +- build.gradle | 9 +- categories/build.gradle | 25 +-- categories/src/main/AndroidManifest.xml | 7 + .../activity/CategorySelectionActivity.kt | 5 +- .../apps/topeka/adapter/CategoryAdapter.kt | 6 +- .../src/main/res/menu/menu_category.xml | 23 --- gradle/wrapper/gradle-wrapper.properties | 2 +- installed/src/main/AndroidManifest.xml | 18 --- instant/build.gradle | 29 ---- instant/proguard.pro | 149 ------------------ quiz/build.gradle | 31 +--- quiz/src/main/AndroidManifest.xml | 7 + .../apps/topeka/activity/QuizActivity.kt | 18 ++- .../apps/topeka/fragment/QuizFragment.kt | 2 +- .../apps/topeka/widget/quiz/AbsQuizView.kt | 7 +- .../src/main/res/drawable/selector_subtle.xml | 19 --- settings.gradle | 3 +- 23 files changed, 128 insertions(+), 394 deletions(-) rename {installed => app}/build.gradle (77%) create mode 100644 app/src/main/AndroidManifest.xml delete mode 100644 categories/src/main/res/menu/menu_category.xml delete mode 100644 installed/src/main/AndroidManifest.xml delete mode 100644 instant/build.gradle delete mode 100644 instant/proguard.pro delete mode 100644 quiz/src/main/res/drawable/selector_subtle.xml diff --git a/installed/build.gradle b/app/build.gradle similarity index 77% rename from installed/build.gradle rename to app/build.gradle index dbe4fab6..146ab35a 100644 --- a/installed/build.gradle +++ b/app/build.gradle @@ -15,6 +15,7 @@ */ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { compileSdkVersion rootProject.compileSdk @@ -22,21 +23,18 @@ android { defaultConfig { targetSdkVersion rootProject.targetSdk minSdkVersion rootProject.minSdk - missingDimensionStrategy 'delivery', 'installed' + versionCode 1 } buildTypes { release { - minifyEnabled true signingConfig signingConfigs.debug - proguardFiles getDefaultProguardFile("proguard-android.txt") } } + dynamicFeatures = [":categories", ":quiz"] } dependencies { - implementation project(':base') - implementation project(':categories') - implementation project(':quiz') + implementation project(":base") } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..5b820c2a --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/base/build.gradle b/base/build.gradle index e412babd..bdc0f837 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -14,67 +14,34 @@ * limitations under the License. */ -apply plugin: 'com.android.feature' +apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - buildToolsVersion rootProject.buildTools compileSdkVersion rootProject.compileSdk - baseFeature true - defaultConfig { minSdkVersion rootProject.minSdk targetSdkVersion rootProject.targetSdk - versionCode 1 versionName "1.0" testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' } buildTypes { release { - minifyEnabled true signingConfig signingConfigs.debug - proguardFiles getDefaultProguardFile("proguard-android.txt"), "../instant/proguard.pro" - } - } - - packagingOptions { - pickFirst 'LICENSE.txt' - pickFirst 'protobuf.meta' - } - - flavorDimensions 'delivery' - - productFlavors { - instant { - dimension 'delivery' - minSdkVersion rootProject.minSdkInstant - } - installed { - dimension 'delivery' } } - generatePureSplits true - - splits { - density { - enable true - } - } } dependencies { - application project(':installed') - feature project(':categories') - feature project(':quiz') api "com.android.support:appcompat-v7:$supportLibVersion" api "com.android.support:design:$supportLibVersion" api "com.android.support:support-v4:$supportLibVersion" api 'com.google.android.instantapps:instantapps:1.1.0' - api "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" + api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "com.google.android.gms:play-services-auth:$playServicesAuthVersion" @@ -91,4 +58,6 @@ dependencies { androidTestImplementation "com.android.support.test:rules:$androidTestVersion" androidTestImplementation "com.android.support.test:runner:$androidTestVersion" androidTestImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion" + androidTestImplementation "com.google.android.gms:play-services-auth:$playServicesAuthVersion" + } diff --git a/base/src/main/AndroidManifest.xml b/base/src/main/AndroidManifest.xml index 7d014a49..b7d19ece 100644 --- a/base/src/main/AndroidManifest.xml +++ b/base/src/main/AndroidManifest.xml @@ -19,39 +19,4 @@ package="com.google.samples.apps.topeka.base"> - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt b/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt index cb5553cc..69471fc5 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt @@ -101,8 +101,9 @@ class SignInFragment : Fragment() { setSelection(length()) } this@SignInFragment.player = player.also { - if (activity != null) + if (activity != null) { login.savePlayer(activity!!, this, { selectAvatar(it.avatar!!) }) + } } } } else { @@ -263,10 +264,12 @@ class SignInFragment : Fragment() { } }) - val pairs = TransitionHelper.createSafeTransitionParticipants(this, true, - Pair(v, getString(R.string.transition_avatar))) - val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *pairs) - ActivityLaunchHelper.launchCategorySelection(this, options) +// TODO: #125 Fix crash and re-enable shared element transition. +// val pairs = TransitionHelper.createSafeTransitionParticipants(this, true, +// Pair(v, getString(R.string.transition_avatar))) +// val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *pairs) +// ActivityLaunchHelper.launchCategorySelection(this, options) + ActivityLaunchHelper.launchCategorySelection(this) } } } diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/AnswerHelper.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/AnswerHelper.kt index 610d7a94..cabf58a8 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/AnswerHelper.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/AnswerHelper.kt @@ -23,7 +23,7 @@ import android.util.SparseBooleanArray */ object AnswerHelper { - val SEPARATOR: String = System.getProperty("line.separator") + val SEPARATOR: String = System.getProperty("line.separator")!! /** * Converts an array of answers to a readable answer. diff --git a/build.gradle b/build.gradle index 072c774a..7ec6279c 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.10' + ext.kotlin_version = '1.3.50' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.6.0-rc03' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -39,9 +39,8 @@ allprojects { } ext { - buildTools = "27.0.3" - compileSdk = 27 - targetSdk = 27 + compileSdk = 29 + targetSdk = 29 minSdkInstant = 21 minSdk = 14 diff --git a/categories/build.gradle b/categories/build.gradle index f3dc0217..922099ff 100644 --- a/categories/build.gradle +++ b/categories/build.gradle @@ -14,11 +14,10 @@ * limitations under the License. */ -apply plugin: 'com.android.feature' +apply plugin: 'com.android.dynamic-feature' apply plugin: 'kotlin-android' android { - buildToolsVersion rootProject.buildTools compileSdkVersion rootProject.compileSdk defaultConfig { @@ -31,11 +30,7 @@ android { buildTypes { release { - minifyEnabled true signingConfig signingConfigs.debug - proguardFiles getDefaultProguardFile("proguard-android.txt"), - "../instant/proguard.pro", - "proguard.pro" } } @@ -46,26 +41,10 @@ android { flavorDimensions 'delivery' - productFlavors { - instant { - dimension 'delivery' - minSdkVersion rootProject.minSdkInstant - } - installed { - dimension 'delivery' - } - } - - generatePureSplits true - - splits { - density { - enable true - } - } } dependencies { + implementation project(":app") implementation project(':base') androidTestImplementation("com.android.support.test.espresso:espresso-core:$espressoVersion") { diff --git a/categories/src/main/AndroidManifest.xml b/categories/src/main/AndroidManifest.xml index 5b0faab7..540e4d0a 100644 --- a/categories/src/main/AndroidManifest.xml +++ b/categories/src/main/AndroidManifest.xml @@ -15,7 +15,14 @@ --> + + + + + + diff --git a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt index f287ebf0..51688426 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt @@ -26,6 +26,7 @@ import android.view.Menu import android.view.MenuItem import android.view.View import android.widget.TextView +import com.google.samples.apps.topeka.R as baseR import com.google.samples.apps.topeka.categories.R import com.google.samples.apps.topeka.fragment.CategorySelectionFragment import com.google.samples.apps.topeka.helper.ActivityLaunchHelper @@ -87,7 +88,7 @@ class CategorySelectionActivity : AppCompatActivity() { } override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_category, menu) + menuInflater.inflate(baseR.menu.menu_category, menu) return true } @@ -111,7 +112,7 @@ class CategorySelectionActivity : AppCompatActivity() { } override fun onOptionsItemSelected(item: MenuItem): Boolean { - return if (item.itemId == R.id.sign_out) { + return if (item.itemId == baseR.id.sign_out) { handleSignOut() true } else super.onOptionsItemSelected(item) diff --git a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt index 575f1fd5..5a2f4628 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt @@ -98,8 +98,10 @@ class CategoryAdapter( "${activity.packageName}.categories" else activity.packageName - val imageRes = resources.getIdentifier("icon_category_${category.id}", - "drawable", packageName) + val imageRes = resources.getIdentifier( + "icon_category_${category.id}", + "drawable", + "$packageName.categories") if (category.solved) { icon.setImageDrawable(loadSolvedIcon(category, imageRes)) } else { diff --git a/categories/src/main/res/menu/menu_category.xml b/categories/src/main/res/menu/menu_category.xml deleted file mode 100644 index f89e96ec..00000000 --- a/categories/src/main/res/menu/menu_category.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2c10a6ab..15f9d4e0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-all.zip diff --git a/installed/src/main/AndroidManifest.xml b/installed/src/main/AndroidManifest.xml deleted file mode 100644 index 49b8b667..00000000 --- a/installed/src/main/AndroidManifest.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - \ No newline at end of file diff --git a/instant/build.gradle b/instant/build.gradle deleted file mode 100644 index f691bbf7..00000000 --- a/instant/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * 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. - */ - -apply plugin: 'com.android.instantapp' - -android { - defaultConfig { - missingDimensionStrategy 'delivery', 'instant' - } -} - -dependencies { - implementation project(':base') - implementation project(':categories') - implementation project(':quiz') -} diff --git a/instant/proguard.pro b/instant/proguard.pro deleted file mode 100644 index db043667..00000000 --- a/instant/proguard.pro +++ /dev/null @@ -1,149 +0,0 @@ -# ProGuard configuration was created by following this guide: -# https://medium.com/google-developers/enabling-proguard-in-an-android-instant-app-fbd4fc014518 - -# -# rules from quiz module, generated using: -# comm -23 <(apkanalyzer dex packages quiz-debug.apk | grep "^C r" | cut -f4 | sort) \ -# <(jar tf ~/Android/Sdk/platforms/android-27/android.jar | sed s/.class$// | sed -e s-/-.-g | sort) -# - --keep, includedescriptorclasses class android.support.design.widget.FloatingActionButton { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.ActivityCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.Fragment { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.FragmentManager { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.FragmentTransaction { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.SharedElementCallback { public protected *; } --keep, includedescriptorclasses class android.support.v4.content.ContextCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.graphics.drawable.DrawableCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.animation.FastOutLinearInInterpolator { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.animation.FastOutSlowInInterpolator { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.animation.LinearOutSlowInInterpolator { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.MarginLayoutParamsCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.ViewCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.ViewPropertyAnimatorCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.view.ViewPropertyAnimatorListenerAdapter { public protected *; } --keep, includedescriptorclasses class android.support.v7.app.AppCompatActivity { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ActivityLaunchHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ActivityLaunchHelper$Companion { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.AnswerHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ApiLevelHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ContextExtensionsKt { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.FragmentExtensionsKt { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ViewExtensionsKt { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ViewUtils { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Avatar { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Category { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Player { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.AlphaPickerQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.FillBlankQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.FillTwoBlanksQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.FourQuarterQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.MultiSelectQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.PickerQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.Quiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.QuizType { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.SelectItemQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.ToggleTranslateQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.quiz.TrueFalseQuiz { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Theme { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.persistence.TopekaDatabaseHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.widget.AvatarView { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.widget.TextWatcherAdapter { public protected *; } --keep, includedescriptorclasses class kotlin.collections.ArraysKt { public protected *; } --keep, includedescriptorclasses class kotlin.collections.CollectionsKt { public protected *; } --keep, includedescriptorclasses class kotlin.collections.IntIterator { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.functions.Function0 { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.FunctionReference { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Intrinsics { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Lambda { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.PropertyReference1Impl { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Reflection { public protected *; } --keep, includedescriptorclasses class kotlin.Lazy { public protected *; } --keep, includedescriptorclasses class kotlin.LazyKt { public protected *; } --keep, includedescriptorclasses class kotlin.LazyThreadSafetyMode { public protected *; } --keep, includedescriptorclasses class kotlin.NoWhenBranchMatchedException { public protected *; } --keep, includedescriptorclasses class kotlin.ranges.RangesKt { public protected *; } --keep, includedescriptorclasses class kotlin.text.StringsKt { public protected *; } --keep, includedescriptorclasses class kotlin.TypeCastException { public protected *; } --keep, includedescriptorclasses class kotlin.Unit { public protected *; } - -# -# rules from categories module, generated using: -# comm -23 <(apkanalyzer dex packages categories-debug.apk | grep "^C r" | cut -f4 | sort) \ -# <(jar tf ~/Android/Sdk/platforms/android-27/android.jar | sed s/.class$// | sed -e s-/-.-g | sort) -# - - --keep, includedescriptorclasses class android.support.v4.app.ActivityCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.ActivityOptionsCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.Fragment { public protected *; } --keep, includedescriptorclasses class android.support.v4.app.FragmentActivity { public protected *; } --keep, includedescriptorclasses class android.support.v4.content.ContextCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.graphics.drawable.DrawableCompat { public protected *; } --keep, includedescriptorclasses class android.support.v4.util.Pair { public protected *; } --keep, includedescriptorclasses class android.support.v7.app.ActionBar { public protected *; } --keep, includedescriptorclasses class android.support.v7.app.AppCompatActivity { public protected *; } --keep, includedescriptorclasses class android.support.v7.widget.RecyclerView { public protected *; } --keep, includedescriptorclasses class android.support.v7.widget.RecyclerView$Adapter { public protected *; } --keep, includedescriptorclasses class android.support.v7.widget.RecyclerView$ViewHolder { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ActivityLaunchHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ActivityLaunchHelper$Companion { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ApiLevelHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.ContextExtensionsKt { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.FragmentExtensionsKt { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.helper.TransitionHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Category { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Player { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.model.Theme { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.persistence.TopekaDatabaseHelper { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.widget.AvatarView { public protected *; } --keep, includedescriptorclasses class com.google.samples.apps.topeka.widget.OffsetDecoration { public protected *; } --keep, includedescriptorclasses class kotlin.collections.CollectionsKt { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Intrinsics { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Lambda { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.PropertyReference1Impl { public protected *; } --keep, includedescriptorclasses class kotlin.jvm.internal.Reflection { public protected *; } --keep, includedescriptorclasses class kotlin.Lazy { public protected *; } --keep, includedescriptorclasses class kotlin.LazyKt { public protected *; } --keep, includedescriptorclasses class kotlin.LazyThreadSafetyMode { public protected *; } --keep, includedescriptorclasses class kotlin.TypeCastException { public protected *; } - - -# -# rules copied from: quiz/build/intermediates/proguard-rules/feature/release/aapt_rules.txt -# - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/src/main/res/layout/activity_quiz.xml:88 --keep class android.support.design.widget.FloatingActionButton { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/src/main/res/layout/fragment_quiz.xml:37 --keep class android.support.v7.widget.Toolbar { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/build/intermediates/manifests/full/feature/release/AndroidManifest.xml:29 --keep class com.google.samples.apps.topeka.activity.QuizActivity { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/src/main/res/layout/fragment_quiz.xml:66 --keep class com.google.samples.apps.topeka.widget.AvatarView { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/src/main/res/transition-v21/quiz_shared_enter.xml:24 --keep class com.google.samples.apps.topeka.widget.TextResizeTransition { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/quiz/src/main/res/layout/answer_submit.xml:18 --keep class com.google.samples.apps.topeka.widget.fab.CheckableFab { (...); } - -# -# rules copied from: categories/build/intermediates/proguard-rules/feature/release/aapt_rules.txt -# - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/categories/src/main/res/layout/fragment_categories.xml:17 --keep class android.support.v7.widget.RecyclerView { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/categories/src/main/res/layout/activity_category_selection.xml:25 --keep class android.support.v7.widget.Toolbar { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/categories/build/intermediates/manifests/full/feature/release/AndroidManifest.xml:29 --keep class com.google.samples.apps.topeka.activity.CategorySelectionActivity { (...); } - -# Referenced at /usr/local/google/home/wkal/StudioProjects/topeka-devrel/categories/src/main/res/layout/activity_category_selection.xml:34 --keep class com.google.samples.apps.topeka.widget.AvatarView { (...); } - diff --git a/quiz/build.gradle b/quiz/build.gradle index 3daf0b3c..775d133a 100644 --- a/quiz/build.gradle +++ b/quiz/build.gradle @@ -14,11 +14,10 @@ * limitations under the License. */ -apply plugin: 'com.android.feature' +apply plugin: 'com.android.dynamic-feature' apply plugin: 'kotlin-android' android { - buildToolsVersion rootProject.buildTools compileSdkVersion rootProject.compileSdk defaultConfig { @@ -31,42 +30,20 @@ android { buildTypes { release { - minifyEnabled true signingConfig signingConfigs.debug - proguardFiles getDefaultProguardFile("proguard-android.txt"), - "../instant/proguard.pro", - "proguard.pro" } } packagingOptions { - pickFirst 'LICENSE.txt' - pickFirst 'protobuf.meta' + merge 'LICENSE.txt' + merge 'protobuf.meta' } - flavorDimensions 'delivery' - - productFlavors { - instant { - dimension 'delivery' - minSdkVersion rootProject.minSdkInstant - } - installed { - dimension 'delivery' - } - } - - generatePureSplits true - - splits { - density { - enable true - } - } } dependencies { + implementation project(":app") implementation project(":base") implementation "com.android.support.test.espresso:espresso-idling-resource:$espressoVersion" diff --git a/quiz/src/main/AndroidManifest.xml b/quiz/src/main/AndroidManifest.xml index d037285b..1fcff651 100644 --- a/quiz/src/main/AndroidManifest.xml +++ b/quiz/src/main/AndroidManifest.xml @@ -15,7 +15,14 @@ --> + + + + + + (R.id.icon)).apply { val resId = resources.getIdentifier("$IMAGE_CATEGORY$categoryId", "drawable", - packageName) + "$packageName.quiz") setImageResource(resId) ViewCompat.animate(this) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt b/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt index be13bd8d..08344dbe 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt @@ -48,7 +48,7 @@ import com.google.samples.apps.topeka.widget.quiz.AbsQuizView class QuizFragment : Fragment() { private val category by lazy(LazyThreadSafetyMode.NONE) { - val categoryId = arguments!!.getString(Category.TAG) + val categoryId = arguments?.getString(Category.TAG)!! activity!!.database().getCategoryWith(categoryId) } diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt index 15fbcf90..fc8f9607 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt @@ -99,7 +99,6 @@ abstract class AbsQuizView> } private val ANSWER_HIDE_DELAY = 500L - private val FOREGROUND_COLOR_CHANGE_DELAY = 750L private val doubleSpacing = resources.getDimensionPixelSize( com.google.samples.apps.topeka.base.R.dimen.spacing_double) @@ -148,8 +147,7 @@ abstract class AbsQuizView> } private fun addContentView(container: LinearLayout, quizContentView: View) { - val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.WRAP_CONTENT) + val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) container.run { addView((layoutInflater.inflate(R.layout.question, this, false) as TextView).apply { setBackgroundColor(ContextCompat.getColor(context, @@ -165,7 +163,7 @@ abstract class AbsQuizView> val fabSize = resources.getDimensionPixelSize( com.google.samples.apps.topeka.base.R.dimen.size_fab) val bottomOfQuestionView = findViewById(R.id.question_view).bottom - val fabLayoutParams = FrameLayout.LayoutParams(fabSize, fabSize, Gravity.END or Gravity.TOP) + val fabLayoutParams = LayoutParams(fabSize, fabSize, Gravity.END or Gravity.TOP) val halfAFab = fabSize / 2 fabLayoutParams.setMargins(0, // left bottomOfQuestionView - halfAFab, // top @@ -278,6 +276,7 @@ abstract class AbsQuizView> if (context is QuizActivity) (context as QuizActivity).proceed() } + @Suppress("UNCHECKED_CAST") protected fun inflate(@LayoutRes resId: Int) = layoutInflater.inflate(resId, this, false) as T diff --git a/quiz/src/main/res/drawable/selector_subtle.xml b/quiz/src/main/res/drawable/selector_subtle.xml deleted file mode 100644 index d388107b..00000000 --- a/quiz/src/main/res/drawable/selector_subtle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 8200891d..d4ea9cc1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,5 @@ * limitations under the License. */ -include ':base', ':quiz', ':categories', ':installed', ':instant' +include ':app' +include ':base', ':quiz', ':categories' From c9b3bdf1f21ac0ba4d58877847505984147216b7 Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Thu, 13 Feb 2020 21:39:43 +0000 Subject: [PATCH 06/11] Update dependencies to androidx --- README.markdown | 4 +-- base/build.gradle | 25 +++++++------- .../topeka/activity/SignInActivityTest.kt | 34 +++++++++---------- .../topeka/helper/AnswerHelperAndroidTest.kt | 4 +-- .../helper/ParcelableHelperAndroidTest.kt | 4 +-- .../helper/PreferencesHelperAndroidTest.kt | 6 ++-- .../apps/topeka/model/PlayerAndroidTest.kt | 4 +-- .../apps/topeka/activity/SignInActivity.kt | 2 +- .../apps/topeka/fragment/SignInFragment.kt | 13 +++---- .../topeka/helper/ActivityLaunchHelper.kt | 4 +-- .../apps/topeka/helper/CredentialsHelper.kt | 6 ++-- .../apps/topeka/helper/FragmentExtensions.kt | 6 ++-- .../apps/topeka/helper/TransitionHelper.kt | 4 +-- .../apps/topeka/helper/ViewExtensions.kt | 2 +- .../samples/apps/topeka/model/Avatar.kt | 2 +- .../google/samples/apps/topeka/model/Theme.kt | 4 +-- .../samples/apps/topeka/widget/AvatarView.kt | 10 +++--- .../apps/topeka/widget/OffsetDecoration.kt | 4 +-- base/src/main/res/layout/fab_done.xml | 2 +- base/src/main/res/layout/sign_in_username.xml | 8 ++--- build.gradle | 6 ---- categories/build.gradle | 12 +++---- .../activity/CategorySelectionActivityTest.kt | 28 +++++++-------- .../activity/CategorySelectionActivity.kt | 2 +- .../apps/topeka/adapter/CategoryAdapter.kt | 10 +++--- .../fragment/CategorySelectionFragment.kt | 10 +++--- .../layout/activity_category_selection.xml | 4 +-- .../main/res/layout/fragment_categories.xml | 4 +-- gradle.properties | 4 ++- quiz/build.gradle | 14 ++++---- .../samples/apps/topeka/SolveQuizUtil.kt | 34 +++++++++---------- .../activity/quiz/BaseQuizActivityTest.kt | 20 +++++------ .../apps/topeka/activity/QuizActivity.kt | 34 +++++++++---------- .../apps/topeka/adapter/ScoreAdapter.kt | 8 ++--- .../apps/topeka/fragment/QuizFragment.kt | 8 ++--- .../topeka/widget/TextResizeTransition.kt | 2 +- .../widget/TextSharedElementCallback.kt | 2 +- .../apps/topeka/widget/fab/CheckableFab.kt | 5 +-- .../apps/topeka/widget/quiz/AbsQuizView.kt | 10 +++--- quiz/src/main/res/layout/activity_quiz.xml | 2 +- quiz/src/main/res/layout/fragment_quiz.xml | 4 +-- 41 files changed, 181 insertions(+), 190 deletions(-) diff --git a/README.markdown b/README.markdown index 7e4cda4e..75740021 100644 --- a/README.markdown +++ b/README.markdown @@ -43,7 +43,7 @@ to get an overview of all the tasks available for this project. Some important tasks are: ``` -assembleDebug - Assembles all Debug builds. +bundleDebug - Assembles all Debug builds. installDebug - Installs the Debug build. connectedAndroidTest - Installs and runs the tests for Debug build on connected devices. @@ -52,8 +52,6 @@ test - Run all unit tests. ### Support -- Google+ Community: https://plus.google.com/communities/105153134372062985968 - - Stack Overflow: http://stackoverflow.com/questions/tagged/android If you've found an error in this sample, please file an issue: diff --git a/base/build.gradle b/base/build.gradle index bdc0f837..a7367b2f 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -24,7 +24,7 @@ android { minSdkVersion rootProject.minSdk targetSdkVersion rootProject.targetSdk versionName "1.0" - testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -37,27 +37,26 @@ android { dependencies { - api "com.android.support:appcompat-v7:$supportLibVersion" - api "com.android.support:design:$supportLibVersion" - api "com.android.support:support-v4:$supportLibVersion" + api 'androidx.appcompat:appcompat:1.1.0' + api 'com.google.android.material:material:1.1.0' + api 'androidx.legacy:legacy-support-v4:1.0.0' api 'com.google.android.instantapps:instantapps:1.1.0' api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "com.google.android.gms:play-services-auth:$playServicesAuthVersion" + implementation "com.google.android.gms:play-services-auth:17.0.0" - testImplementation "junit:junit:$junitVersion" + testImplementation "junit:junit:4.12" - androidTestImplementation("com.android.support.test.espresso:espresso-core:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0') { exclude module: "espresso-idling-resource" } - androidTestImplementation("com.android.support.test.espresso:espresso-contrib:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-contrib:3.2.0') { exclude module: "espresso-core" } - androidTestImplementation "com.android.support.test:rules:$androidTestVersion" - androidTestImplementation "com.android.support.test:runner:$androidTestVersion" - androidTestImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion" - androidTestImplementation "com.google.android.gms:play-services-auth:$playServicesAuthVersion" - + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation "com.google.android.gms:play-services-auth:17.0.0" + androidTestImplementation "org.hamcrest:hamcrest-core:1.3" } diff --git a/base/src/androidTest/java/com/google/samples/apps/topeka/activity/SignInActivityTest.kt b/base/src/androidTest/java/com/google/samples/apps/topeka/activity/SignInActivityTest.kt index 463d70a3..8947b7b8 100644 --- a/base/src/androidTest/java/com/google/samples/apps/topeka/activity/SignInActivityTest.kt +++ b/base/src/androidTest/java/com/google/samples/apps/topeka/activity/SignInActivityTest.kt @@ -16,23 +16,23 @@ package com.google.samples.apps.topeka.activity -import android.support.test.InstrumentationRegistry -import android.support.test.espresso.Espresso.onData -import android.support.test.espresso.Espresso.onView -import android.support.test.espresso.action.ViewActions.click -import android.support.test.espresso.action.ViewActions.closeSoftKeyboard -import android.support.test.espresso.action.ViewActions.typeText -import android.support.test.espresso.assertion.ViewAssertions.matches -import android.support.test.espresso.matcher.ViewMatchers.isChecked -import android.support.test.espresso.matcher.ViewMatchers.isClickable -import android.support.test.espresso.matcher.ViewMatchers.isDisplayed -import android.support.test.espresso.matcher.ViewMatchers.isEnabled -import android.support.test.espresso.matcher.ViewMatchers.isFocusable -import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.espresso.matcher.ViewMatchers.withText -import android.support.test.filters.LargeTest -import android.support.test.rule.ActivityTestRule -import android.support.test.runner.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.espresso.Espresso.onData +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isChecked +import androidx.test.espresso.matcher.ViewMatchers.isClickable +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isEnabled +import androidx.test.espresso.matcher.ViewMatchers.isFocusable +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import androidx.test.ext.junit.runners.AndroidJUnit4 import android.view.View import com.google.samples.apps.topeka.TestLogin import com.google.samples.apps.topeka.base.R diff --git a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/AnswerHelperAndroidTest.kt b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/AnswerHelperAndroidTest.kt index 079778f6..c48e48ec 100644 --- a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/AnswerHelperAndroidTest.kt +++ b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/AnswerHelperAndroidTest.kt @@ -16,8 +16,8 @@ package com.google.samples.apps.topeka.helper -import android.support.test.filters.SmallTest -import android.support.test.runner.AndroidJUnit4 +import androidx.test.filters.SmallTest +import androidx.test.ext.junit.runners.AndroidJUnit4 import android.util.SparseBooleanArray import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat diff --git a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/ParcelableHelperAndroidTest.kt b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/ParcelableHelperAndroidTest.kt index 2408565f..328f0087 100644 --- a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/ParcelableHelperAndroidTest.kt +++ b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/ParcelableHelperAndroidTest.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.topeka.helper import android.os.Parcel -import android.support.test.filters.SmallTest -import android.support.test.runner.AndroidJUnit4 +import androidx.test.filters.SmallTest +import androidx.test.ext.junit.runners.AndroidJUnit4 import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/PreferencesHelperAndroidTest.kt b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/PreferencesHelperAndroidTest.kt index 10d608c0..cce893f7 100644 --- a/base/src/androidTest/java/com/google/samples/apps/topeka/helper/PreferencesHelperAndroidTest.kt +++ b/base/src/androidTest/java/com/google/samples/apps/topeka/helper/PreferencesHelperAndroidTest.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.topeka.helper -import android.support.test.InstrumentationRegistry -import android.support.test.filters.SmallTest -import android.support.test.runner.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.filters.SmallTest +import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.samples.apps.topeka.model.Player import com.google.samples.apps.topeka.model.TEST_AVATAR import com.google.samples.apps.topeka.model.TEST_FIRST_NAME diff --git a/base/src/androidTest/java/com/google/samples/apps/topeka/model/PlayerAndroidTest.kt b/base/src/androidTest/java/com/google/samples/apps/topeka/model/PlayerAndroidTest.kt index 0b98f2f1..33d8b3fd 100644 --- a/base/src/androidTest/java/com/google/samples/apps/topeka/model/PlayerAndroidTest.kt +++ b/base/src/androidTest/java/com/google/samples/apps/topeka/model/PlayerAndroidTest.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.topeka.model import android.os.Parcel -import android.support.test.filters.SmallTest -import android.support.test.runner.AndroidJUnit4 +import androidx.test.filters.SmallTest +import androidx.test.ext.junit.runners.AndroidJUnit4 import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/base/src/main/java/com/google/samples/apps/topeka/activity/SignInActivity.kt b/base/src/main/java/com/google/samples/apps/topeka/activity/SignInActivity.kt index 0122a995..33da0599 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/activity/SignInActivity.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/activity/SignInActivity.kt @@ -18,7 +18,7 @@ package com.google.samples.apps.topeka.activity import android.content.Intent import android.os.Bundle -import android.support.v7.app.AppCompatActivity +import androidx.appcompat.app.AppCompatActivity import com.google.samples.apps.topeka.base.R import com.google.samples.apps.topeka.fragment.SignInFragment diff --git a/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt b/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt index 69471fc5..288d3505 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.kt @@ -20,12 +20,10 @@ import android.annotation.TargetApi import android.content.Intent import android.os.Build import android.os.Bundle -import android.support.design.widget.FloatingActionButton -import android.support.v4.app.ActivityOptionsCompat -import android.support.v4.app.Fragment -import android.support.v4.util.Pair -import android.support.v4.view.ViewCompat -import android.support.v4.view.animation.FastOutSlowInInterpolator +import com.google.android.material.floatingactionbutton.FloatingActionButton +import androidx.fragment.app.Fragment +import androidx.core.view.ViewCompat +import androidx.interpolator.view.animation.FastOutSlowInInterpolator import android.text.Editable import android.text.TextWatcher import android.transition.Transition @@ -42,7 +40,6 @@ import com.google.samples.apps.topeka.helper.ActivityLaunchHelper import com.google.samples.apps.topeka.helper.ApiLevelHelper import com.google.samples.apps.topeka.helper.DefaultLogin import com.google.samples.apps.topeka.helper.TAG -import com.google.samples.apps.topeka.helper.TransitionHelper import com.google.samples.apps.topeka.helper.isLoggedIn import com.google.samples.apps.topeka.helper.login import com.google.samples.apps.topeka.helper.onLayoutChange @@ -237,7 +234,7 @@ class SignInFragment : Fragment() { } private fun removeDoneFab(endAction: () -> Unit) { - ViewCompat.animate(doneFab) + ViewCompat.animate(doneFab!!) .scaleX(0f) .scaleY(0f) .setInterpolator(FastOutSlowInInterpolator()) diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/ActivityLaunchHelper.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/ActivityLaunchHelper.kt index 6c1a537a..6fece01d 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/ActivityLaunchHelper.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/ActivityLaunchHelper.kt @@ -21,8 +21,8 @@ import android.content.Intent import android.content.Context import android.net.Uri import com.google.samples.apps.topeka.model.Category -import android.support.v4.app.ActivityCompat -import android.support.v4.app.ActivityOptionsCompat +import androidx.core.app.ActivityCompat +import androidx.core.app.ActivityOptionsCompat class ActivityLaunchHelper { diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/CredentialsHelper.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/CredentialsHelper.kt index c4d64a94..cff39d69 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/CredentialsHelper.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/CredentialsHelper.kt @@ -6,7 +6,7 @@ import android.content.ContentValues.TAG import android.content.Context import android.content.Intent import android.content.IntentSender -import android.support.annotation.VisibleForTesting +import androidx.annotation.VisibleForTesting import android.util.Log import com.google.android.gms.auth.api.credentials.Credential import com.google.android.gms.auth.api.credentials.CredentialRequest @@ -42,8 +42,8 @@ fun Activity.requestLogin(success: (Player) -> Unit) { .setPasswordLoginSupported(true) .build()) .addOnCompleteListener { - if (it.isSuccessful) { - val player = Player(it.result.credential) + if (it.isSuccessful && it.result != null) { + val player = Player(it.result!!.credential) storePlayerLocally(player) success(player) } else { diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/FragmentExtensions.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/FragmentExtensions.kt index e4757310..297f8174 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/FragmentExtensions.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/FragmentExtensions.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.topeka.helper -import android.support.annotation.IdRes -import android.support.v4.app.Fragment -import android.support.v4.app.FragmentActivity +import androidx.annotation.IdRes +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity fun FragmentActivity.replaceFragment(@IdRes id: Int, fragment: Fragment) { supportFragmentManager.beginTransaction().replace(id, fragment).commit() diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/TransitionHelper.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/TransitionHelper.kt index 6ba0df5d..7a34ffd9 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/TransitionHelper.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/TransitionHelper.kt @@ -19,8 +19,8 @@ package com.google.samples.apps.topeka.helper import android.annotation.TargetApi import android.app.Activity import android.os.Build -import android.support.annotation.IdRes -import android.support.v4.util.Pair +import androidx.annotation.IdRes +import androidx.core.util.Pair import android.view.View /** diff --git a/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt b/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt index 9efc051a..2d5ed8b3 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt @@ -18,7 +18,7 @@ package com.google.samples.apps.topeka.helper import android.graphics.Color import android.graphics.drawable.ColorDrawable -import android.support.v4.view.ViewCompat +import androidx.core.view.ViewCompat import android.transition.ChangeBounds import android.util.Property import android.util.TypedValue diff --git a/base/src/main/java/com/google/samples/apps/topeka/model/Avatar.kt b/base/src/main/java/com/google/samples/apps/topeka/model/Avatar.kt index b2658dfb..0b8343eb 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/model/Avatar.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/model/Avatar.kt @@ -16,7 +16,7 @@ package com.google.samples.apps.topeka.model -import android.support.annotation.DrawableRes +import androidx.annotation.DrawableRes import com.google.samples.apps.topeka.base.R diff --git a/base/src/main/java/com/google/samples/apps/topeka/model/Theme.kt b/base/src/main/java/com/google/samples/apps/topeka/model/Theme.kt index b2369a6f..7c7ca6d6 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/model/Theme.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/model/Theme.kt @@ -16,8 +16,8 @@ package com.google.samples.apps.topeka.model -import android.support.annotation.ColorRes -import android.support.annotation.StyleRes +import androidx.annotation.ColorRes +import androidx.annotation.StyleRes import com.google.samples.apps.topeka.base.R /** diff --git a/base/src/main/java/com/google/samples/apps/topeka/widget/AvatarView.kt b/base/src/main/java/com/google/samples/apps/topeka/widget/AvatarView.kt index 6b48ee3d..a9c1486d 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/widget/AvatarView.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/widget/AvatarView.kt @@ -22,11 +22,11 @@ import android.graphics.Canvas import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.os.Build -import android.support.annotation.DrawableRes -import android.support.v4.content.ContextCompat -import android.support.v4.content.res.ResourcesCompat -import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory -import android.support.v7.widget.AppCompatImageView +import androidx.annotation.DrawableRes +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory +import androidx.appcompat.widget.AppCompatImageView import android.util.AttributeSet import android.widget.Checkable diff --git a/base/src/main/java/com/google/samples/apps/topeka/widget/OffsetDecoration.kt b/base/src/main/java/com/google/samples/apps/topeka/widget/OffsetDecoration.kt index 382a848d..1cb63ac7 100644 --- a/base/src/main/java/com/google/samples/apps/topeka/widget/OffsetDecoration.kt +++ b/base/src/main/java/com/google/samples/apps/topeka/widget/OffsetDecoration.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.topeka.widget import android.graphics.Rect -import android.support.v7.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView import android.view.View class OffsetDecoration(private val offset: Int) : RecyclerView.ItemDecoration() { @@ -25,7 +25,7 @@ class OffsetDecoration(private val offset: Int) : RecyclerView.ItemDecoration() override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, - state: RecyclerView.State?) { + state: RecyclerView.State) { outRect.set(offset, offset, offset, offset) } } diff --git a/base/src/main/res/layout/fab_done.xml b/base/src/main/res/layout/fab_done.xml index 1ea162df..50e58aec 100644 --- a/base/src/main/res/layout/fab_done.xml +++ b/base/src/main/res/layout/fab_done.xml @@ -14,7 +14,7 @@ ~ limitations under the License. --> - - - + - - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7ec6279c..7d63cf9d 100644 --- a/build.gradle +++ b/build.gradle @@ -44,10 +44,4 @@ ext { minSdkInstant = 21 minSdk = 14 - supportLibVersion = "27.1.1" - playServicesAuthVersion = "11.8.0" - espressoVersion = "3.0.1" - androidTestVersion = "0.5" - hamcrestVersion = "1.3" - junitVersion = "4.12" } diff --git a/categories/build.gradle b/categories/build.gradle index 922099ff..6d4a6601 100644 --- a/categories/build.gradle +++ b/categories/build.gradle @@ -25,7 +25,7 @@ android { targetSdkVersion rootProject.targetSdk versionCode 1 versionName "1.0" - testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -47,15 +47,15 @@ dependencies { implementation project(":app") implementation project(':base') - androidTestImplementation("com.android.support.test.espresso:espresso-core:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0') { exclude module: "espresso-idling-resource" } - androidTestImplementation("com.android.support.test.espresso:espresso-contrib:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-contrib:3.2.0') { exclude module: "espresso-core" } - androidTestImplementation "com.android.support.test:rules:$androidTestVersion" - androidTestImplementation "com.android.support.test:runner:$androidTestVersion" - androidTestImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion" + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation "org.hamcrest:hamcrest-core:1.3" } diff --git a/categories/src/androidTest/java/com/google/samples/apps/topeka/activity/CategorySelectionActivityTest.kt b/categories/src/androidTest/java/com/google/samples/apps/topeka/activity/CategorySelectionActivityTest.kt index 76548f38..c204b13a 100644 --- a/categories/src/androidTest/java/com/google/samples/apps/topeka/activity/CategorySelectionActivityTest.kt +++ b/categories/src/androidTest/java/com/google/samples/apps/topeka/activity/CategorySelectionActivityTest.kt @@ -17,20 +17,20 @@ package com.google.samples.apps.topeka.activity import android.content.Context -import android.support.test.InstrumentationRegistry -import android.support.test.espresso.Espresso.onView -import android.support.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu -import android.support.test.espresso.action.ViewActions.click -import android.support.test.espresso.action.ViewActions.scrollTo -import android.support.test.espresso.assertion.ViewAssertions.matches -import android.support.test.espresso.contrib.RecyclerViewActions -import android.support.test.espresso.matcher.ViewMatchers.isDisplayed -import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.espresso.matcher.ViewMatchers.withText -import android.support.test.filters.LargeTest -import android.support.test.rule.ActivityTestRule -import android.support.test.runner.AndroidJUnit4 -import android.support.v7.widget.RecyclerView +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.scrollTo +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.contrib.RecyclerViewActions +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.recyclerview.widget.RecyclerView import com.google.samples.apps.topeka.TestLogin import com.google.samples.apps.topeka.categories.R import com.google.samples.apps.topeka.helper.ActivityLaunchHelper diff --git a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt index 51688426..5e9be3ea 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt @@ -20,7 +20,7 @@ import android.annotation.SuppressLint import android.content.Intent import android.os.Build import android.os.Bundle -import android.support.v7.app.AppCompatActivity +import androidx.appcompat.app.AppCompatActivity import android.transition.TransitionInflater import android.view.Menu import android.view.MenuItem diff --git a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt index 5a2f4628..fd68483c 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/adapter/CategoryAdapter.kt @@ -20,11 +20,11 @@ import android.app.Activity import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Build -import android.support.annotation.ColorRes -import android.support.annotation.DrawableRes -import android.support.v4.content.ContextCompat -import android.support.v4.graphics.drawable.DrawableCompat -import android.support.v7.widget.RecyclerView +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat +import androidx.recyclerview.widget.RecyclerView import android.view.LayoutInflater import android.view.ViewGroup import android.widget.AdapterView diff --git a/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt b/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt index 480ca80e..a93768c2 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt @@ -22,11 +22,11 @@ import android.app.Activity import android.content.Intent import android.os.Build import android.os.Bundle -import android.support.v4.app.ActivityCompat -import android.support.v4.app.ActivityOptionsCompat -import android.support.v4.app.Fragment -import android.support.v4.util.Pair -import android.support.v7.widget.RecyclerView +import androidx.core.app.ActivityCompat +import androidx.core.app.ActivityOptionsCompat +import androidx.fragment.app.Fragment +import androidx.core.util.Pair +import androidx.recyclerview.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup diff --git a/categories/src/main/res/layout/activity_category_selection.xml b/categories/src/main/res/layout/activity_category_selection.xml index da279c8b..92d9ef8f 100644 --- a/categories/src/main/res/layout/activity_category_selection.xml +++ b/categories/src/main/res/layout/activity_category_selection.xml @@ -22,7 +22,7 @@ android:transitionGroup="false" tools:ignore="Overdraw,UnusedAttribute"> - - + - diff --git a/gradle.properties b/gradle.properties index 53e73a79..97c8a3b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,4 +33,6 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true # suppress inspection "UnusedProperty" -org.gradle.daemon=true \ No newline at end of file +org.gradle.daemon=true +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/quiz/build.gradle b/quiz/build.gradle index 775d133a..c939c0d5 100644 --- a/quiz/build.gradle +++ b/quiz/build.gradle @@ -25,7 +25,7 @@ android { targetSdkVersion rootProject.targetSdk versionCode 1 versionName "1.0" - testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -46,17 +46,17 @@ dependencies { implementation project(":app") implementation project(":base") - implementation "com.android.support.test.espresso:espresso-idling-resource:$espressoVersion" + implementation 'androidx.test.espresso:espresso-idling-resource:3.2.0' - androidTestImplementation("com.android.support.test.espresso:espresso-core:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0') { exclude module: "espresso-idling-resource" } - androidTestImplementation("com.android.support.test.espresso:espresso-contrib:$espressoVersion") { + androidTestImplementation('androidx.test.espresso:espresso-contrib:3.2.0') { exclude module: "espresso-core" } - androidTestImplementation "com.android.support.test:rules:$androidTestVersion" - androidTestImplementation "com.android.support.test:runner:$androidTestVersion" - androidTestImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion" + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation "org.hamcrest:hamcrest-core:1.3" } diff --git a/quiz/src/androidTest/java/com/google/samples/apps/topeka/SolveQuizUtil.kt b/quiz/src/androidTest/java/com/google/samples/apps/topeka/SolveQuizUtil.kt index 9c39e327..05db8596 100644 --- a/quiz/src/androidTest/java/com/google/samples/apps/topeka/SolveQuizUtil.kt +++ b/quiz/src/androidTest/java/com/google/samples/apps/topeka/SolveQuizUtil.kt @@ -19,23 +19,23 @@ package com.google.samples.apps.topeka import android.app.Activity import android.content.pm.ActivityInfo import android.content.res.Configuration -import android.support.test.InstrumentationRegistry -import android.support.test.InstrumentationRegistry.getInstrumentation -import android.support.test.espresso.Espresso.onData -import android.support.test.espresso.Espresso.onView -import android.support.test.espresso.UiController -import android.support.test.espresso.ViewAction -import android.support.test.espresso.action.ViewActions.click -import android.support.test.espresso.action.ViewActions.closeSoftKeyboard -import android.support.test.espresso.action.ViewActions.typeText -import android.support.test.espresso.matcher.ViewMatchers -import android.support.test.espresso.matcher.ViewMatchers.hasSibling -import android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom -import android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA -import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.espresso.matcher.ViewMatchers.withText -import android.support.test.runner.lifecycle.ActivityLifecycleMonitorRegistry -import android.support.test.runner.lifecycle.Stage +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation +import androidx.test.espresso.Espresso.onData +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.UiController +import androidx.test.espresso.ViewAction +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.hasSibling +import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom +import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry +import androidx.test.runner.lifecycle.Stage import android.text.TextUtils import android.view.View import android.widget.AdapterView diff --git a/quiz/src/androidTest/java/com/google/samples/apps/topeka/activity/quiz/BaseQuizActivityTest.kt b/quiz/src/androidTest/java/com/google/samples/apps/topeka/activity/quiz/BaseQuizActivityTest.kt index cd39d6b0..c23b34c3 100644 --- a/quiz/src/androidTest/java/com/google/samples/apps/topeka/activity/quiz/BaseQuizActivityTest.kt +++ b/quiz/src/androidTest/java/com/google/samples/apps/topeka/activity/quiz/BaseQuizActivityTest.kt @@ -16,16 +16,16 @@ package com.google.samples.apps.topeka.activity.quiz -import android.support.test.InstrumentationRegistry -import android.support.test.espresso.Espresso -import android.support.test.espresso.Espresso.onView -import android.support.test.espresso.action.ViewActions.click -import android.support.test.espresso.assertion.ViewAssertions.matches -import android.support.test.espresso.matcher.ViewMatchers.isDisplayed -import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.espresso.matcher.ViewMatchers.withText -import android.support.test.rule.ActivityTestRule -import android.support.test.runner.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.espresso.Espresso +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.rule.ActivityTestRule +import androidx.test.ext.junit.runners.AndroidJUnit4 import android.view.View import com.google.samples.apps.topeka.SolveQuizUtil import com.google.samples.apps.topeka.TestLogin diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt b/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt index 2aa13912..f38dc82a 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.kt @@ -27,17 +27,17 @@ import android.content.Intent import android.graphics.Color import android.os.Build import android.os.Bundle -import android.support.annotation.RequiresApi -import android.support.annotation.VisibleForTesting -import android.support.design.widget.FloatingActionButton -import android.support.test.espresso.idling.CountingIdlingResource -import android.support.v4.app.ActivityCompat -import android.support.v4.content.ContextCompat -import android.support.v4.view.ViewCompat -import android.support.v4.view.ViewPropertyAnimatorListenerAdapter -import android.support.v4.view.animation.FastOutLinearInInterpolator -import android.support.v4.view.animation.FastOutSlowInInterpolator -import android.support.v7.app.AppCompatActivity +import androidx.annotation.RequiresApi +import androidx.annotation.VisibleForTesting +import com.google.android.material.floatingactionbutton.FloatingActionButton +import androidx.test.espresso.idling.CountingIdlingResource +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.ViewPropertyAnimatorListenerAdapter +import androidx.interpolator.view.animation.FastOutLinearInInterpolator +import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import androidx.appcompat.app.AppCompatActivity import android.util.Log import android.view.View import android.view.ViewAnimationUtils @@ -132,7 +132,7 @@ class QuizActivity : AppCompatActivity() { sharedElements, sharedElementSnapshots) // Make sure to perform this animation after the transition has ended. - ViewCompat.animate(toolbarBack) + ViewCompat.animate(toolbarBack!!) .setStartDelay(startDelay) .scaleX(1f) .scaleY(1f) @@ -231,7 +231,7 @@ class QuizActivity : AppCompatActivity() { override fun onBackPressed() { - ViewCompat.animate(toolbarBack) + ViewCompat.animate(toolbarBack!!) .scaleX(0f) .scaleY(0f) .alpha(0f) @@ -239,14 +239,14 @@ class QuizActivity : AppCompatActivity() { .start() // Scale the icon and fab to 0 size before calling onBackPressed if it exists. - ViewCompat.animate(icon) + ViewCompat.animate(icon!!) .scaleX(.7f) .scaleY(.7f) .alpha(0f) .setInterpolator(interpolator) .start() - ViewCompat.animate(quizFab) + ViewCompat.animate(quizFab!!) .scaleX(0f) .scaleY(0f) .setInterpolator(interpolator) @@ -267,7 +267,7 @@ class QuizActivity : AppCompatActivity() { initQuizFragment() supportFragmentManager .beginTransaction() - .replace(R.id.quiz_fragment_container, quizFragment, FRAGMENT_TAG) + .replace(R.id.quiz_fragment_container, quizFragment!!, FRAGMENT_TAG) .commit() val container = (findViewById(R.id.quiz_fragment_container)).apply { setBackgroundColor(ContextCompat.getColor( @@ -395,7 +395,7 @@ class QuizActivity : AppCompatActivity() { scaleX = 0f scaleY = 0f } - ViewCompat.animate(quizFab) + ViewCompat.animate(quizFab!!) .scaleX(1f) .scaleY(1f) .setInterpolator(interpolator) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/adapter/ScoreAdapter.kt b/quiz/src/main/java/com/google/samples/apps/topeka/adapter/ScoreAdapter.kt index 810ba0b4..417f7853 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/adapter/ScoreAdapter.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/adapter/ScoreAdapter.kt @@ -18,10 +18,10 @@ package com.google.samples.apps.topeka.adapter import android.content.Context import android.graphics.drawable.Drawable -import android.support.annotation.ColorRes -import android.support.annotation.DrawableRes -import android.support.v4.content.ContextCompat -import android.support.v4.graphics.drawable.DrawableCompat +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat import android.view.View import android.view.ViewGroup import android.widget.AbsListView diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt b/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt index 08344dbe..21b914bd 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/fragment/QuizFragment.kt @@ -19,9 +19,9 @@ package com.google.samples.apps.topeka.fragment import android.annotation.TargetApi import android.os.Build import android.os.Bundle -import android.support.v4.app.Fragment -import android.support.v4.view.ViewCompat -import android.support.v4.view.animation.FastOutLinearInInterpolator +import androidx.fragment.app.Fragment +import androidx.core.view.ViewCompat +import androidx.interpolator.view.animation.FastOutLinearInInterpolator import android.view.ContextThemeWrapper import android.view.LayoutInflater import android.view.View @@ -130,7 +130,7 @@ class QuizFragment : Fragment() { activity?.requestLogin { player -> if (player.valid()) { avatarView?.setAvatar(player.avatar!!.drawableId) - with(ViewCompat.animate(avatarView)) { + with(ViewCompat.animate(avatarView!!)) { interpolator = FastOutLinearInInterpolator() startDelay = 500 scaleX(1f) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextResizeTransition.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextResizeTransition.kt index eb6818a9..072bfcb1 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextResizeTransition.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextResizeTransition.kt @@ -22,7 +22,7 @@ import android.animation.ObjectAnimator import android.annotation.TargetApi import android.content.Context import android.os.Build -import android.support.v4.view.ViewCompat +import androidx.core.view.ViewCompat import android.transition.Transition import android.transition.TransitionValues import android.util.AttributeSet diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextSharedElementCallback.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextSharedElementCallback.kt index 13975492..30dc363c 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextSharedElementCallback.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/TextSharedElementCallback.kt @@ -18,7 +18,7 @@ package com.google.samples.apps.topeka.widget import android.annotation.TargetApi import android.os.Build -import android.support.v4.app.SharedElementCallback +import androidx.core.app.SharedElementCallback import android.util.Log import android.util.TypedValue import android.view.View diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt index 9584e85f..58e4c700 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.topeka.widget.fab import android.content.Context -import android.support.design.widget.FloatingActionButton +import com.google.android.material.floatingactionbutton.FloatingActionButton import android.util.AttributeSet import android.view.View import android.widget.Checkable @@ -36,7 +36,8 @@ class CheckableFab( private var _checked = true init { - setImageResource(R.drawable.answer_quiz_fab) + // TODO #126 fix image resource crash +// setImageResource(R.drawable.answer_quiz_fab) } private val attrs = intArrayOf(android.R.attr.state_checked) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt index fc8f9607..52525fb3 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/quiz/AbsQuizView.kt @@ -25,11 +25,11 @@ import android.graphics.Color import android.os.Build import android.os.Bundle import android.os.Handler -import android.support.annotation.ColorInt -import android.support.annotation.LayoutRes -import android.support.v4.content.ContextCompat -import android.support.v4.view.MarginLayoutParamsCompat -import android.support.v4.view.animation.LinearOutSlowInInterpolator +import androidx.annotation.ColorInt +import androidx.annotation.LayoutRes +import androidx.core.content.ContextCompat +import androidx.core.view.MarginLayoutParamsCompat +import androidx.interpolator.view.animation.LinearOutSlowInInterpolator import android.util.Property import android.view.Gravity import android.view.LayoutInflater diff --git a/quiz/src/main/res/layout/activity_quiz.xml b/quiz/src/main/res/layout/activity_quiz.xml index acccad9b..bd5e8fe4 100644 --- a/quiz/src/main/res/layout/activity_quiz.xml +++ b/quiz/src/main/res/layout/activity_quiz.xml @@ -85,7 +85,7 @@ - - - + \ No newline at end of file From 9972ca8f8f77b63a28ba30ce8e504df470408163 Mon Sep 17 00:00:00 2001 From: anikiki Date: Sun, 23 Feb 2020 17:57:01 +0000 Subject: [PATCH 07/11] Fixed image resource crash in CheckableFab. --- .../google/samples/apps/topeka/widget/fab/CheckableFab.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt index 58e4c700..0bd72ed8 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt @@ -35,13 +35,12 @@ class CheckableFab( private var _checked = true + private val attrs: IntArray = intArrayOf(android.R.attr.state_checked) + init { - // TODO #126 fix image resource crash -// setImageResource(R.drawable.answer_quiz_fab) + setImageResource(R.drawable.answer_quiz_fab) } - private val attrs = intArrayOf(android.R.attr.state_checked) - override fun onCreateDrawableState(extraSpace: Int): IntArray { val drawableState = super.onCreateDrawableState(1 + extraSpace) if (_checked) { From 5943c3ff41bd7c2702737ccc7b44e5c45f6d1370 Mon Sep 17 00:00:00 2001 From: anikiki Date: Sun, 23 Feb 2020 18:13:04 +0000 Subject: [PATCH 08/11] Removed unneeded IntArray. --- .../com/google/samples/apps/topeka/widget/fab/CheckableFab.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt index 0bd72ed8..81650472 100644 --- a/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt +++ b/quiz/src/main/java/com/google/samples/apps/topeka/widget/fab/CheckableFab.kt @@ -35,7 +35,7 @@ class CheckableFab( private var _checked = true - private val attrs: IntArray = intArrayOf(android.R.attr.state_checked) + private val attrs = intArrayOf(android.R.attr.state_checked) init { setImageResource(R.drawable.answer_quiz_fab) From ef08b071eccbdcdfd7bb7e585b40351aa61b229b Mon Sep 17 00:00:00 2001 From: Oscar Wahltinez Date: Wed, 15 Apr 2020 11:13:09 -0400 Subject: [PATCH 09/11] Add GitHub Actions workflow This enables automatic builds for new commits and PRs in the master branch. This sample is currently **green**, see build logs: + GRADLE_OPTS=' -Xms4g -Xmx4g' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.daemon=false' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false -Dkotlin.compiler.execution.strategy=in-process' + GRADLE_OPTS=' -Xms4g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false -Dkotlin.compiler.execution.strategy=in-process -Dfile.encoding=UTF-8' + export GRADLE_OPTS ++ find . -name gradlew + for GRADLEW in '`find . -name "gradlew"`' ++ dirname ./gradlew + SAMPLE=. + bash ./gradlew -p . -Pci --no-parallel --stacktrace assembleDebug Downloading https://services.gradle.org/distributions/gradle-6.0-all.zip ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Unzipping /Users/owahltinez/.gradle/wrapper/dists/gradle-6.0-all/cra2s42cvogxluqqpvbc5e9xd/gradle-6.0-all.zip to /Users/owahltinez/.gradle/wrapper/dists/gradle-6.0-all/cra2s42cvogxluqqpvbc5e9xd Set executable permissions for: /Users/owahltinez/.gradle/wrapper/dists/gradle-6.0-all/cra2s42cvogxluqqpvbc5e9xd/gradle-6.0/bin/gradle Welcome to Gradle 6.0! Here are the highlights of this release: - Substantial improvements in dependency management, including - Publishing Gradle Module Metadata in addition to pom.xml - Advanced control of transitive versions - Support for optional features and dependencies - Rules to tweak published metadata - Support for Java 13 - Faster incremental Java and Groovy compilation - New Zinc compiler for Scala - VS2019 support - Support for Gradle Enterprise plugin 3.0 For more details see https://docs.gradle.org/6.0/release-notes.html To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/6.0/userguide/gradle_daemon.html. Daemon will be stopped at the end of the build stopping after processing > Task :app:generateDebugFeatureTransitiveDeps > Task :categories:generateDebugFeatureTransitiveDeps > Task :quiz:generateDebugFeatureTransitiveDeps > Task :app:checkDebugLibraries > Task :app:preBuild UP-TO-DATE > Task :app:preDebugBuild > Task :base:preBuild UP-TO-DATE > Task :base:preDebugBuild UP-TO-DATE > Task :base:compileDebugAidl NO-SOURCE > Task :app:compileDebugAidl NO-SOURCE > Task :base:packageDebugRenderscript NO-SOURCE > Task :app:generateDebugBuildConfig > Task :app:compileDebugRenderscript NO-SOURCE > Task :app:mainApkListPersistenceDebug > Task :app:generateDebugResValues > Task :app:generateDebugResources > Task :base:compileDebugRenderscript NO-SOURCE > Task :base:generateDebugResValues > Task :base:generateDebugResources > Task :base:packageDebugResources > Task :app:createDebugCompatibleScreenManifests > Task :app:extractDeepLinksDebug > Task :base:extractDeepLinksDebug > Task :base:processDebugManifest > Task :categories:preBuild UP-TO-DATE > Task :categories:preDebugBuild UP-TO-DATE > Task :categories:featureDebugWriter > Task :quiz:preBuild UP-TO-DATE > Task :quiz:preDebugBuild UP-TO-DATE > Task :quiz:featureDebugWriter > Task :app:generateDebugFeatureMetadata > Task :app:writeDebugModuleMetadata > Task :categories:mainApkListPersistenceDebug > Task :categories:createDebugCompatibleScreenManifests > Task :categories:extractDeepLinksDebug > Task :categories:processDebugManifest > Task :app:mergeDebugResources > Task :quiz:mainApkListPersistenceDebug > Task :quiz:createDebugCompatibleScreenManifests > Task :quiz:extractDeepLinksDebug > Task :quiz:processDebugManifest > Task :app:processDebugManifest > Task :base:compileDebugLibraryResources > Task :base:parseDebugLocalResources > Task :base:generateDebugRFile > Task :app:processDebugResources > Task :base:generateDebugBuildConfig > Task :base:compileDebugKotlin w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/CredentialsHelper.kt: (102, 41): Type mismatch: inferred type is Credential? but Credential was expected w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ParcelExtensions.kt: (26, 12): Extension is shadowed by a member: public open fun writeBoolean(p0: Boolean): Unit w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ParcelExtensions.kt: (31, 12): Extension is shadowed by a member: public open fun readBoolean(): Boolean w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (71, 31): The corresponding parameter in the supertype 'IntProperty' is named 'type'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (71, 47): The corresponding parameter in the supertype 'IntProperty' is named 'value'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (86, 31): The corresponding parameter in the supertype 'FloatProperty' is named 'type'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (86, 47): The corresponding parameter in the supertype 'FloatProperty' is named 'value'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (96, 31): The corresponding parameter in the supertype 'IntProperty' is named 'type'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/helper/ViewExtensions.kt: (116, 31): The corresponding parameter in the supertype 'IntProperty' is named 'type'. This may cause problems when calling this function with named arguments. w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/model/Player.kt: (47, 43): Elvis operator (?:) always returns the left operand of non-nullable type String w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/persistence/TopekaDatabaseHelper.kt: (149, 33): Type mismatch: inferred type is Nothing? but String was expected w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/persistence/TopekaDatabaseHelper.kt: (149, 38): Unnecessary safe call on a non-null receiver of type String! w: /Users/owahltinez/Sandbox/samples/topeka/base/src/main/java/com/google/samples/apps/topeka/persistence/TopekaDatabaseHelper.kt: (358, 61): Unnecessary non-null assertion (!!) on a non-null receiver of type Int > Task :base:javaPreCompileDebug > Task :base:compileDebugJavaWithJavac > Task :base:bundleLibCompileDebug > Task :app:compileDebugKotlin > Task :app:javaPreCompileDebug > Task :app:compileDebugJavaWithJavac > Task :app:compileDebugSources > Task :app:mergeDebugShaders > Task :app:compileDebugShaders > Task :app:generateDebugAssets > Task :base:mergeDebugShaders > Task :base:compileDebugShaders > Task :base:generateDebugAssets > Task :base:packageDebugAssets > Task :app:mergeDebugAssets > Task :app:processDebugJavaRes NO-SOURCE > Task :base:processDebugJavaRes NO-SOURCE > Task :base:bundleLibResDebug > Task :base:bundleLibRuntimeDebug > Task :app:mergeDebugJavaResource > Task :app:dexBuilderDebug > Task :app:checkDebugDuplicateClasses > Task :app:mergeDebugJniLibFolders > Task :base:mergeDebugJniLibFolders > Task :base:mergeDebugNativeLibs > Task :base:stripDebugDebugSymbols > Task :base:copyDebugJniLibsProjectOnly > Task :app:mergeDebugNativeLibs > Task :app:stripDebugDebugSymbols > Task :app:validateSigningDebug > Task :base:copyDebugJniLibsProjectAndLocalJars > Task :base:extractDebugAnnotations > Task :base:mergeDebugGeneratedProguardFiles > Task :base:mergeDebugConsumerProguardFiles > Task :base:prepareLintJarForPublish > Task :base:mergeDebugJavaResource > Task :base:syncDebugLibJars > Task :base:bundleDebugAar > Task :base:compileDebugSources > Task :base:assembleDebug > Task :app:bundleDebugClasses > Task :categories:compileDebugAidl NO-SOURCE > Task :categories:compileDebugRenderscript NO-SOURCE > Task :categories:generateDebugBuildConfig > Task :categories:generateDebugResValues > Task :categories:generateDebugResources > Task :categories:mergeDebugResources > Task :categories:processDebugResources > Task :categories:compileDebugKotlin w: /Users/owahltinez/Sandbox/samples/topeka/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt: (81, 40): Type mismatch: inferred type is String? but String was expected > Task :app:mergeExtDexDebug > Task :categories:javaPreCompileDebug > Task :categories:compileDebugJavaWithJavac > Task :categories:compileDebugSources > Task :app:signingConfigWriterDebug > Task :categories:mergeDebugShaders > Task :categories:compileDebugShaders > Task :categories:generateDebugAssets > Task :categories:mergeDebugAssets > Task :categories:processDebugJavaRes NO-SOURCE > Task :categories:mergeDebugJavaResource > Task :categories:checkDebugDuplicateClasses > Task :categories:mergeExtDexDebug > Task :categories:mergeLibDexDebug > Task :categories:dexBuilderDebug > Task :categories:mergeProjectDexDebug > Task :categories:mergeDebugJniLibFolders > Task :categories:mergeDebugNativeLibs > Task :categories:stripDebugDebugSymbols > Task :categories:packageDebug > Task :categories:assembleDebug > Task :quiz:compileDebugAidl NO-SOURCE > Task :quiz:compileDebugRenderscript NO-SOURCE > Task :quiz:generateDebugBuildConfig > Task :quiz:generateDebugResValues > Task :quiz:generateDebugResources > Task :quiz:mergeDebugResources > Task :quiz:processDebugResources > Task :quiz:compileDebugKotlin > Task :app:mergeDexDebug > Task :app:packageDebug > Task :app:assembleDebug > Task :quiz:javaPreCompileDebug > Task :quiz:compileDebugJavaWithJavac > Task :quiz:compileDebugSources > Task :quiz:mergeDebugShaders > Task :quiz:compileDebugShaders > Task :quiz:generateDebugAssets > Task :quiz:mergeDebugAssets > Task :quiz:processDebugJavaRes NO-SOURCE > Task :quiz:mergeDebugJavaResource > Task :quiz:checkDebugDuplicateClasses > Task :quiz:mergeLibDexDebug > Task :quiz:dexBuilderDebug > Task :quiz:mergeExtDexDebug > Task :quiz:mergeDebugJniLibFolders > Task :quiz:mergeDebugNativeLibs > Task :quiz:stripDebugDebugSymbols > Task :quiz:mergeProjectDexDebug > Task :quiz:packageDebug > Task :quiz:assembleDebug BUILD SUCCESSFUL in 3m 15s 112 actionable tasks: 112 executed --- .github/scripts/gradlew_recursive.sh | 36 +++++++++++++++++++++++ .github/workflows/android.yml | 43 ++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100755 .github/scripts/gradlew_recursive.sh create mode 100644 .github/workflows/android.yml diff --git a/.github/scripts/gradlew_recursive.sh b/.github/scripts/gradlew_recursive.sh new file mode 100755 index 00000000..e554ee8c --- /dev/null +++ b/.github/scripts/gradlew_recursive.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Copyright (C) 2020 The Android Open Source Project +# +# 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 +# +# https://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. + +set -xe + +# Default Gradle settings are not optimal for Android builds, override them +# here to make the most out of the GitHub Actions build servers +GRADLE_OPTS="$GRADLE_OPTS -Xms4g -Xmx4g" +GRADLE_OPTS="$GRADLE_OPTS -XX:+HeapDumpOnOutOfMemoryError" +GRADLE_OPTS="$GRADLE_OPTS -Dorg.gradle.daemon=false" +GRADLE_OPTS="$GRADLE_OPTS -Dorg.gradle.workers.max=2" +GRADLE_OPTS="$GRADLE_OPTS -Dkotlin.incremental=false" +GRADLE_OPTS="$GRADLE_OPTS -Dkotlin.compiler.execution.strategy=in-process" +GRADLE_OPTS="$GRADLE_OPTS -Dfile.encoding=UTF-8" +export GRADLE_OPTS + +# Crawl all gradlew files which indicate an Android project +# You may edit this if your repo has a different project structure +for GRADLEW in `find . -name "gradlew"` ; do + SAMPLE=$(dirname "${GRADLEW}") + # Tell Gradle that this is a CI environment and disable parallel compilation + bash "$GRADLEW" -p "$SAMPLE" -Pci --no-parallel --stacktrace $@ +done diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 00000000..d8d296de --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,43 @@ +# Copyright (C) 2020 The Android Open Source Project +# +# 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 +# +# https://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. + +name: Android CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + + build: + name: Build + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v1 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build project + run: .github/scripts/gradlew_recursive.sh assembleDebug + - name: Zip artifacts + run: zip -r assemble.zip . -i '**/build/*.apk' '**/build/*.aab' '**/build/*.aar' '**/build/*.so' + - name: Upload artifacts + uses: actions/upload-artifact@v1 + with: + name: assemble + path: assemble.zip From df5a53987e2191f29ed0ffb32b5d81ded1826a1a Mon Sep 17 00:00:00 2001 From: GeorgCantor Date: Sat, 5 Sep 2020 18:05:27 +0300 Subject: [PATCH 10/11] updated kotlin_version, gradle, cleaned up some code --- build.gradle | 4 +-- .../activity/CategorySelectionActivity.kt | 2 +- .../fragment/CategorySelectionFragment.kt | 7 +---- .../main/res/layout/fragment_categories.xml | 28 ++++++++++--------- gradle/wrapper/gradle-wrapper.properties | 4 +-- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 7d63cf9d..2df889c5 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.4.0' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.0-rc03' + classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt index 5e9be3ea..b237171d 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/activity/CategorySelectionActivity.kt @@ -59,7 +59,7 @@ class CategorySelectionActivity : AppCompatActivity() { } private fun updatePlayerViews(player: Player) { - findViewById(R.id.title).setText(player.toString()) + findViewById(R.id.title).text = player.toString() player.avatar?.run { findViewById(R.id.avatar).setAvatar(this) } } diff --git a/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt b/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt index a93768c2..e6949766 100644 --- a/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt +++ b/categories/src/main/java/com/google/samples/apps/topeka/fragment/CategorySelectionFragment.kt @@ -40,7 +40,7 @@ import com.google.samples.apps.topeka.model.Category import com.google.samples.apps.topeka.model.JsonAttributes import com.google.samples.apps.topeka.widget.OffsetDecoration -class CategorySelectionFragment : Fragment() { +class CategorySelectionFragment : Fragment(R.layout.fragment_categories) { private val adapter: CategoryAdapter? by lazy(LazyThreadSafetyMode.NONE) { activity?.run { @@ -54,11 +54,6 @@ class CategorySelectionFragment : Fragment() { } } - override fun onCreateView(inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?): View = - inflater.inflate(R.layout.fragment_categories, container, false) - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { setUpQuizGrid(view.findViewById(R.id.categories)) super.onViewCreated(view, savedInstanceState) diff --git a/categories/src/main/res/layout/fragment_categories.xml b/categories/src/main/res/layout/fragment_categories.xml index f6d93e31..ad40ea22 100644 --- a/categories/src/main/res/layout/fragment_categories.xml +++ b/categories/src/main/res/layout/fragment_categories.xml @@ -15,16 +15,18 @@ --> + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/categories" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:clipToPadding="false" + android:padding="@dimen/spacing_nano" + android:scrollbarStyle="outsideOverlay" + android:scrollbars="vertical" + android:transitionGroup="false" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" + tools:ignore="UnusedAttribute" + tools:listitem="@layout/item_category" /> diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 15f9d4e0..eb35c8d9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jan 04 11:48:07 GMT 2018 +#Sat Sep 05 17:53:09 MSK 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 7e8beb28e1e9569d728a0bd87d44c3c2491658c4 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 28 Sep 2020 12:59:56 -0700 Subject: [PATCH 11/11] Create copy-branch.yml --- .github/workflows/copy-branch.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/copy-branch.yml diff --git a/.github/workflows/copy-branch.yml b/.github/workflows/copy-branch.yml new file mode 100644 index 00000000..f8f8572d --- /dev/null +++ b/.github/workflows/copy-branch.yml @@ -0,0 +1,31 @@ +# Duplicates default main branch to the old master branch + +name: Duplicates main to old master branch + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the main branch +on: + push: + branches: [ main ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "copy-branch" + copy-branch: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it, + # but specifies master branch (old default). + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + ref: master + + - run: | + git config user.name github-actions + git config user.email github-actions@github.com + git merge origin/main + git push