diff --git a/.circleci/config.yml b/.circleci/config.yml index 0efef672b..2653338bb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,8 +6,8 @@ executors: - image: circleci/android:api-29 working_directory: ~/plaid environment: - JAVA_TOOL_OPTIONS: "-Xmx2048m" - GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2" + JAVA_TOOL_OPTIONS: "-Xmx4096m" + GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=4" TERM: dumb plaid-gcloud-executor: diff --git a/about/build.gradle b/about/build.gradle index 480a887b1..c6c0c7351 100644 --- a/about/build.gradle +++ b/about/build.gradle @@ -31,8 +31,8 @@ android { testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } - dataBinding { - enabled true + buildFeatures { + dataBinding true } compileOptions { @@ -51,7 +51,7 @@ dependencies { implementation project(':bypass') implementation "androidx.viewpager2:viewpager2:${versions.viewPager2}" - implementation "com.android.support:customtabs:${versions.supportLibrary}" + implementation "androidx.browser:browser:${versions.browser}" implementation "com.github.bumptech.glide:glide:${versions.glide}" kapt "com.google.dagger:dagger-compiler:${versions.dagger}" diff --git a/app/build.gradle b/app/build.gradle index bfaaae63d..98e1c910c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,8 +42,8 @@ android { ] } - dataBinding { - enabled true + buildFeatures { + dataBinding true } buildTypes { diff --git a/app/src/main/java/io/plaidapp/ui/HomeViewModel.kt b/app/src/main/java/io/plaidapp/ui/HomeViewModel.kt index a832f12e7..9bf71e7c8 100644 --- a/app/src/main/java/io/plaidapp/ui/HomeViewModel.kt +++ b/app/src/main/java/io/plaidapp/ui/HomeViewModel.kt @@ -197,7 +197,7 @@ class HomeViewModel( positions.add(i) } - val scrollToPosition = positions.max() + val scrollToPosition = positions.maxOrNull() return if (scrollToPosition == null) { null } else { diff --git a/app/src/main/java/io/plaidapp/ui/PlaidApplication.kt b/app/src/main/java/io/plaidapp/ui/PlaidApplication.kt index e80287fc2..28b9923b2 100644 --- a/app/src/main/java/io/plaidapp/ui/PlaidApplication.kt +++ b/app/src/main/java/io/plaidapp/ui/PlaidApplication.kt @@ -19,10 +19,10 @@ package io.plaidapp.ui import android.app.Activity import android.app.Application import android.content.Context +import android.os.Build import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode -import androidx.core.os.BuildCompat import io.plaidapp.core.dagger.CoreComponent import io.plaidapp.core.dagger.DaggerCoreComponent @@ -33,7 +33,7 @@ class PlaidApplication : Application() { override fun onCreate() { super.onCreate() - val nightMode = if (BuildCompat.isAtLeastQ()) { + val nightMode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { MODE_NIGHT_FOLLOW_SYSTEM } else { MODE_NIGHT_AUTO_BATTERY diff --git a/build.gradle b/build.gradle index e33f77017..2563acf69 100644 --- a/build.gradle +++ b/build.gradle @@ -21,38 +21,40 @@ buildscript { scriptHandler -> 'compileSdk' : 29, 'minSdk' : 23, 'targetSdk' : 29, - 'appcompat' : '1.1.0-rc01', - 'androidx' : '1.0.0', + 'appcompat' : '1.1.0', + 'androidx' : '1.1.0', 'androidxCollection' : '1.0.0', 'androidxArch' : '2.0.0', - 'constraintLayout' : '2.0.0-alpha2', - 'coreKtx' : '1.2.0-alpha03', + 'browser' : '1.2.0', + 'constraintLayout' : '2.0.1', + 'coreKtx' : '1.3.1', 'coroutines' : '1.3.0', 'crashlytics' : '2.10.1', 'dagger' : '2.23.2', - 'espresso' : '3.1.0-beta02', + 'dynamicanimation' : '1.0.0', + 'espresso' : '3.1.0', 'extJunit' : '1.1.0', 'fabric' : '1.28.0', - 'firebase' : '17.0.0', - 'glide' : '4.9.0', + 'firebase' : '17.5.0', + 'glide' : '4.11.0', 'googleServices' : '4.3.0', 'gson' : '2.8.5', 'jsoup' : '1.11.3', 'junit' : '4.12', - 'kotlin' : '1.3.50', + 'kotlin' : '1.4.0', 'ktlint' : '0.36.0', 'legacyCoreUtils' : '1.0.0', - 'lifecycle' : '2.2.0-alpha03', - 'material' : '1.1.0-alpha05', + 'lifecycle' : '2.2.0', + 'material' : '1.1.0', 'mockito' : '2.23.0', - 'mockito_kotlin' : '2.0.0-RC3', + 'mockito_kotlin' : '2.0.0', 'okhttp' : '4.0.0', + 'palette' : '1.0.0', 'retrofit' : '2.6.0', - 'room' : '2.2.1', - 'supportLibrary' : '28.0.0', - 'test_rules' : '1.1.0-beta02', - 'test_runner' : '1.1.0-beta02', - 'ui_automator' : '2.2.0-beta02', + 'room' : '2.2.5', + 'test_rules' : '1.1.0', + 'test_runner' : '1.1.0', + 'ui_automator' : '2.2.0', 'viewPager2' : '1.0.0' ] ext.names = [ @@ -60,7 +62,7 @@ buildscript { scriptHandler -> ] dependencies { - classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.android.tools.build:gradle:4.2.0-alpha08' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "com.google.gms:google-services:${versions.googleServices}" classpath "io.fabric.tools:gradle:${versions.fabric}" diff --git a/core/build.gradle b/core/build.gradle index 5876d21b0..f3b48f448 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -45,8 +45,8 @@ android { } } - dataBinding { - enabled true + buildFeatures { + dataBinding true } buildTypes { @@ -65,18 +65,19 @@ android { } packagingOptions { - exclude 'META-INF/core_debug.kotlin_module' + merge 'META-INF/core_debug.kotlin_module' + merge 'META-INF/AL2.0' } } dependencies { implementation project(':bypass') implementation "com.google.code.gson:gson:${versions.gson}" - implementation "androidx.browser:browser:${versions.androidx}" + implementation "androidx.browser:browser:${versions.browser}" implementation "androidx.room:room-runtime:${versions.room}" implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}" - implementation "com.android.support:palette-v7:${versions.supportLibrary}" - implementation "com.android.support:support-dynamic-animation:${versions.supportLibrary}" + implementation "androidx.palette:palette:${versions.palette}" + implementation "androidx.dynamicanimation:dynamicanimation:${versions.dynamicanimation}" implementation "com.github.bumptech.glide:glide:${versions.glide}" implementation "com.squareup.okhttp3:okhttp:${versions.okhttp}" implementation "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}" diff --git a/core/src/main/java/io/plaidapp/core/ui/widget/BadgedFourThreeImageView.kt b/core/src/main/java/io/plaidapp/core/ui/widget/BadgedFourThreeImageView.kt index d7363eb87..60ca1d549 100644 --- a/core/src/main/java/io/plaidapp/core/ui/widget/BadgedFourThreeImageView.kt +++ b/core/src/main/java/io/plaidapp/core/ui/widget/BadgedFourThreeImageView.kt @@ -56,8 +56,8 @@ class BadgedFourThreeImageView( init { badge = GifBadge(context) val a = context.obtainStyledAttributes(attrs, R.styleable.BadgedImageView, 0, 0) - badgeGravity = a.getInt(R.styleable.BadgedImageView_badgeGravity, Gravity.END or Gravity - .BOTTOM) + badgeGravity = a.getInt(R.styleable.BadgedImageView_badgeImageGravity, + Gravity.END or Gravity.BOTTOM) badgePadding = a.getDimensionPixelSize(R.styleable.BadgedImageView_badgePadding, 0) a.recycle() } diff --git a/core/src/main/res/layout/dribbble_shot_item.xml b/core/src/main/res/layout/dribbble_shot_item.xml index 256c57022..c535696b6 100644 --- a/core/src/main/res/layout/dribbble_shot_item.xml +++ b/core/src/main/res/layout/dribbble_shot_item.xml @@ -24,5 +24,5 @@ android:elevation="@dimen/z_card" android:stateListAnimator="@animator/raise" android:foreground="@drawable/mid_grey_ripple" - app:badgeGravity="end|bottom" + app:badgeImageGravity="end|bottom" app:badgePadding="@dimen/padding_normal" /> diff --git a/core/src/main/res/values/attrs_badged_image_view.xml b/core/src/main/res/values/attrs_badged_image_view.xml index 2a810a119..ba7815704 100644 --- a/core/src/main/res/values/attrs_badged_image_view.xml +++ b/core/src/main/res/values/attrs_badged_image_view.xml @@ -17,7 +17,7 @@ - + diff --git a/designernews/build.gradle b/designernews/build.gradle index 4082f9e50..075bc0a59 100644 --- a/designernews/build.gradle +++ b/designernews/build.gradle @@ -39,8 +39,8 @@ android { } } - dataBinding { - enabled true + buildFeatures { + dataBinding true } compileOptions { @@ -59,7 +59,7 @@ dependencies { implementation project(':bypass') implementation "androidx.room:room-ktx:${versions.room}" - implementation "com.android.support:customtabs:${versions.supportLibrary}" + implementation "androidx.browser:browser:${versions.browser}" implementation "com.github.bumptech.glide:glide:${versions.glide}" kapt "com.google.dagger:dagger-compiler:${versions.dagger}" diff --git a/designernews/src/androidTest/java/io/plaidapp/designernews/data/database/LoggedInUserDaoTest.kt b/designernews/src/androidTest/java/io/plaidapp/designernews/data/database/LoggedInUserDaoTest.kt index aa1583419..32a2ac475 100644 --- a/designernews/src/androidTest/java/io/plaidapp/designernews/data/database/LoggedInUserDaoTest.kt +++ b/designernews/src/androidTest/java/io/plaidapp/designernews/data/database/LoggedInUserDaoTest.kt @@ -58,7 +58,9 @@ class LoggedInUserDaoTest { } @After fun tearDown() { - database.close() + if (::database.isInitialized) { + database.close() + } } @Test fun insertAndGetLoggedInUser() = runBlocking { diff --git a/designernews/src/main/java/io/plaidapp/ui/drawable/ThreadedCommentDrawable.kt b/designernews/src/main/java/io/plaidapp/ui/drawable/ThreadedCommentDrawable.kt index 0f3f5c798..911a538ff 100644 --- a/designernews/src/main/java/io/plaidapp/ui/drawable/ThreadedCommentDrawable.kt +++ b/designernews/src/main/java/io/plaidapp/ui/drawable/ThreadedCommentDrawable.kt @@ -17,12 +17,15 @@ package io.plaidapp.ui.drawable import android.content.res.ColorStateList +import android.graphics.BlendMode +import android.graphics.BlendModeColorFilter import android.graphics.Canvas import android.graphics.ColorFilter import android.graphics.Paint import android.graphics.PixelFormat import android.graphics.PorterDuff.Mode.SRC_IN import android.graphics.drawable.Drawable +import android.os.Build import androidx.annotation.ColorInt import androidx.annotation.Px @@ -76,14 +79,19 @@ class ThreadedCommentDrawable( override fun setTintList(tint: ColorStateList?) { if (tint != null) { - setColorFilter(tint.defaultColor, SRC_IN) + setTint(tint.defaultColor) } else { clearColorFilter() } } override fun setTint(tintColor: Int) { - setColorFilter(tintColor, SRC_IN) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + colorFilter = BlendModeColorFilter(tintColor, BlendMode.SRC_IN) + } else { + @Suppress("DEPRECATION") + setColorFilter(tintColor, SRC_IN) + } } override fun getOpacity(): Int { diff --git a/dribbble/build.gradle b/dribbble/build.gradle index f46e56123..abe3f089c 100644 --- a/dribbble/build.gradle +++ b/dribbble/build.gradle @@ -32,8 +32,8 @@ android { manifestPlaceholders = [filesAuthority: filesAuthorityValue] } - dataBinding { - enabled true + buildFeatures { + dataBinding true } compileOptions { @@ -50,8 +50,8 @@ dependencies { implementation project(':app') implementation project(':core') - implementation "com.android.support:customtabs:${versions.supportLibrary}" - implementation "com.android.support:palette-v7:${versions.supportLibrary}" + implementation "androidx.browser:browser:${versions.browser}" + implementation "androidx.palette:palette:${versions.palette}" implementation "com.github.bumptech.glide:recyclerview-integration:${versions.glide}" kapt "com.google.dagger:dagger-compiler:${versions.dagger}" diff --git a/gradle.properties b/gradle.properties index 93c1d4651..a1071cf22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,8 +20,6 @@ org.gradle.jvmargs=-Xmx1536m # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5028f28f8..b82039790 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon Sep 07 21:18:25 BST 2020 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-rc-6-bin.zip distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/repositories.gradle b/repositories.gradle index 991672618..50078beb2 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -6,10 +6,11 @@ repositories { includeGroupByRegex "androidx.*" includeGroup "android.arch.lifecycle" includeGroup "android.arch.core" - includeGroup "com.google.firebase" includeGroup "com.google.android.gms" includeGroup "com.google.android.material" + includeGroup "com.google.firebase" includeGroup "com.google.gms" + includeGroup "com.google.testing.platform" includeGroup "zipflinger" } } @@ -34,10 +35,13 @@ repositories { includeGroup "commons-codec" includeGroup "commons-logging" includeGroup "it.unimi.dsi" + includeGroup "jakarta.activation" + includeGroup "jakarta.xml.bind" includeGroup "junit" includeGroup "me.eugeniomarletti.kotlin.metadata" includeGroup "net.bytebuddy" includeGroup "net.java" + includeGroup "net.java.dev.jna" includeGroup "org.abego.treelayout" includeGroup "org.antlr" includeGroup "org.bouncycastle" diff --git a/search/src/main/java/io/plaidapp/search/ui/SearchActivity.kt b/search/src/main/java/io/plaidapp/search/ui/SearchActivity.kt index 682722c1c..7710b363e 100644 --- a/search/src/main/java/io/plaidapp/search/ui/SearchActivity.kt +++ b/search/src/main/java/io/plaidapp/search/ui/SearchActivity.kt @@ -232,9 +232,12 @@ class SearchActivity : AppCompatActivity() { super.onNewIntent(intent) if (intent.hasExtra(SearchManager.QUERY)) { val query = intent.getStringExtra(SearchManager.QUERY) - if (!TextUtils.isEmpty(query)) { - searchView.setQuery(query, false) - searchFor(query) + query?.apply { + if (TextUtils.isEmpty(this)) { + return@apply + } + searchView.setQuery(this, false) + searchFor(this) } } } diff --git a/test_dependencies.gradle b/test_dependencies.gradle index c5fa70b80..2c492ea8d 100644 --- a/test_dependencies.gradle +++ b/test_dependencies.gradle @@ -29,7 +29,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-runtime:${versions.lifecycle}" // Workaround for dependency conflict during assembleAndroidTest - androidTestImplementation("androidx.arch.core:core-runtime:2.0.1-alpha01") + androidTestImplementation("androidx.arch.core:core-runtime:2.0.1") // Work around issue with runtime classpath version conflict androidTestImplementation "androidx.arch.core:core-testing:${versions.androidxArch}" @@ -50,5 +50,5 @@ dependencies { androidTestImplementation "org.mockito:mockito-core:${versions.mockito}" // Adding this to bring "google_play_services_version" into the test project // without this, it fails on AGP 3.6.x. - androidTestImplementation "com.google.android.gms:play-services-gcm:16.0.0" + androidTestImplementation "com.google.android.gms:play-services-gcm:17.0.0" } diff --git a/third_party/bypass/build.gradle b/third_party/bypass/build.gradle index 302185c9f..da113ad0e 100644 --- a/third_party/bypass/build.gradle +++ b/third_party/bypass/build.gradle @@ -31,6 +31,10 @@ android { minifyEnabled false } } + + packagingOptions { + merge 'META-INF/AL2.0' + } } dependencies {