Browse Source

Modernize a bit (#3171)

* Remove redundant ignore file

* Add .gitattributes

* Generate new wrapper

* Apply plugins in `plugins`

* Adopt new dsl

* Enable stable config cache

* Ignore all build folders

* Enable build scan

* Disable buildFeatures flags by default

* Migrate to nonTransitive R class

* Tweak flags

* Bump AGP to 7.4.0

* Bump deps

* Run `ktlintFormat`

* Add an icon for IDEA to display

* Revert "Bump deps"

This reverts commit bc0d5b69d59f70289d5d5c4887a85e6af23cc662.

* Revert "Enable build scan"

This reverts commit 1568e5e84f1ee51064b3f426b1da0cf35fb67856.

* Remove com.android.library

* Enable Gradle cache

* Enable room incremental build

* Cleanups

* Cleanups

* Add .editorconfig

* Defer clean task

* Migrate `flavorDimensions`

* Merge instance-build.gradle into app's build.gradle

* Declare compileOptions & kotlinOptions

* Bump jvmTarget to 17

* Fix conflicts

* Xmx4g

* Rename output apks

* Revert "Bump jvmTarget to 17"

This reverts commit e4d1543bda65b6d2979ae0712bceee33fa8298a6.
Goooler 1 year ago
parent
commit
3592318dc1
28 changed files with 241 additions and 215 deletions
  1. 11 0
      .editorconfig
  2. 4 0
      .gitattributes
  3. 3 2
      .gitignore
  4. BIN
      .idea/icon.png
  5. 0 2
      app/.gitignore
  6. 57 42
      app/build.gradle
  7. 1 1
      app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
  8. 3 3
      app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
  9. 2 2
      app/src/main/java/com/keylesspalace/tusky/components/account/AccountActivity.kt
  10. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaGridAdapter.kt
  11. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaViewModel.kt
  12. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/announcements/AnnouncementAdapter.kt
  13. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
  14. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt
  15. 1 1
      app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt
  16. 1 1
      app/src/main/java/com/keylesspalace/tusky/db/Converters.kt
  17. 1 1
      app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt
  18. 1 1
      app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt
  19. 1 1
      app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt
  20. 8 18
      build.gradle
  21. 14 14
      gradle.properties
  22. 8 6
      gradle/libs.versions.toml
  23. BIN
      gradle/wrapper/gradle-wrapper.jar
  24. 2 1
      gradle/wrapper/gradle-wrapper.properties
  25. 8 4
      gradlew
  26. 92 91
      gradlew.bat
  27. 0 19
      instance-build.gradle
  28. 18 0
      settings.gradle

+ 11 - 0
.editorconfig

@@ -0,0 +1,11 @@
+root = true
+
+[*]
+charset = utf-8
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{yml,yaml}]
+indent_size = 2

+ 4 - 0
.gitattributes

@@ -0,0 +1,4 @@
+* text=auto eol=lf
+
+*.bat text eol=crlf
+*.jar binary

+ 3 - 2
.gitignore

@@ -3,7 +3,8 @@
 /local.properties
 /.idea
 .DS_Store
-/build
+build
 /captures
 .externalNativeBuild
-app/release
+app/release
+app-release.apk

BIN
.idea/icon.png


+ 0 - 2
app/.gitignore

@@ -1,2 +0,0 @@
-/build
-app-release.apk

+ 57 - 42
app/build.gradle

@@ -1,30 +1,33 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-kapt'
-apply plugin: 'kotlin-parcelize'
-
-apply from: "../instance-build.gradle"
-
-def getGitSha = {
-    def stdout = new ByteArrayOutputStream()
-    try {
-        exec {
-            commandLine 'git', 'rev-parse', '--short', 'HEAD'
-            standardOutput = stdout
-        }
-    } catch (Exception e) {
-        return "unknown"
-    }
-    return stdout.toString().trim()
+plugins {
+    alias(libs.plugins.android.application)
+    alias(libs.plugins.kotlin.android)
+    alias(libs.plugins.kotlin.kapt)
+    alias(libs.plugins.kotlin.parcelize)
 }
 
+final def gitSha = providers.exec {
+    commandLine('git', 'rev-parse', '--short=7', 'HEAD')
+}.standardOutput.asText.get().trim()
+
+// The app name
+final def APP_NAME = "Tusky"
+// The application id. Must be unique, e.g. based on your domain
+final def APP_ID = "com.keylesspalace.tusky"
+// url of a custom app logo. Recommended size at least 600x600. Keep empty to use the Tusky elephant friend.
+final def CUSTOM_LOGO_URL = ""
+// e.g. mastodon.social. Keep empty to not suggest any instance on the signup screen
+final def CUSTOM_INSTANCE = ""
+// link to your support account. Will be linked on the about page when not empty.
+final def SUPPORT_ACCOUNT_URL = "https://mastodon.social/@Tusky"
+
 android {
-    compileSdkVersion 33
+    compileSdk 33
+    namespace "com.keylesspalace.tusky"
     defaultConfig {
         applicationId APP_ID
         namespace "com.keylesspalace.tusky"
-        minSdkVersion 23
-        targetSdkVersion 33
+        minSdk 23
+        targetSdk 33
         versionCode 100
         versionName "21.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -35,12 +38,6 @@ android {
         buildConfigField("String", "CUSTOM_LOGO_URL", "\"$CUSTOM_LOGO_URL\"")
         buildConfigField("String", "CUSTOM_INSTANCE", "\"$CUSTOM_INSTANCE\"")
         buildConfigField("String", "SUPPORT_ACCOUNT_URL", "\"$SUPPORT_ACCOUNT_URL\"")
-
-        kapt {
-            arguments {
-                arg("room.schemaLocation", "$projectDir/schemas")
-            }
-        }
     }
     buildTypes {
         release {
@@ -51,20 +48,22 @@ android {
         debug {}
     }
 
-    flavorDimensions "color"
+    flavorDimensions += "color"
     productFlavors {
         blue {}
         green {
             resValue "string", "app_name", APP_NAME + " Test"
             applicationIdSuffix ".test"
-            versionNameSuffix "-" + getGitSha()
+            versionNameSuffix "-" + gitSha
         }
     }
 
-    lintOptions {
+    lint {
         disable 'MissingTranslation'
     }
     buildFeatures {
+        buildConfig true
+        resValues true
         viewBinding true
     }
     testOptions {
@@ -74,17 +73,18 @@ android {
         }
         unitTests.all {
             systemProperty 'robolectric.logging.enabled', 'true'
-        }        
+        }
     }
     sourceSets {
         androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
     }
 
-    packagingOptions {
-        // Exclude unneeded files added by libraries
-        exclude 'LICENSE_OFL'
-        exclude 'LICENSE_UNICODE'
-    }
+    // Exclude unneeded files added by libraries
+    packagingOptions.resources.excludes += [
+            'LICENSE_OFL',
+            'LICENSE_UNICODE',
+    ]
+
     bundle {
         language {
             // bundle all languages in every apk so the dynamic language switching works
@@ -95,6 +95,26 @@ android {
         includeInApk false
         includeInBundle false
     }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_11
+        targetCompatibility JavaVersion.VERSION_11
+    }
+    kotlinOptions {
+        jvmTarget = JavaVersion.VERSION_11
+    }
+    applicationVariants.configureEach { variant ->
+        variant.outputs.configureEach {
+            outputFileName = "Tusky_${variant.versionName}_${variant.versionCode}_${gitSha}_" +
+                "${variant.flavorName}_${buildType.name}.apk"
+        }
+    }
+}
+
+kapt {
+    arguments {
+        arg("room.schemaLocation", "$projectDir/schemas")
+        arg("room.incremental", "true")
+    }
 }
 
 // library versions are in PROJECT_ROOT/gradle/libs.versions.toml
@@ -132,11 +152,7 @@ dependencies {
     implementation libs.photoview
 
     implementation libs.bundles.material.drawer
-    implementation libs.material.typeface, {
-        artifact {
-            type = "aar"
-        }
-    }
+    implementation libs.material.typeface
 
     implementation libs.image.cropper
 
@@ -156,5 +172,4 @@ dependencies {
     androidTestImplementation libs.espresso.core
     androidTestImplementation libs.androidx.room.testing
     androidTestImplementation libs.androidx.test.junit
-
 }

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/BaseActivity.java

@@ -79,7 +79,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
         /* set the taskdescription programmatically, the theme would turn it blue */
         String appName = getString(R.string.app_name);
         Bitmap appIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
-        int recentsBackgroundColor = MaterialColors.getColor(this, R.attr.colorSurface, Color.BLACK);
+        int recentsBackgroundColor = MaterialColors.getColor(this, com.google.android.material.R.attr.colorSurface, Color.BLACK);
 
         setTaskDescription(new ActivityManager.TaskDescription(appName, appIcon, recentsBackgroundColor));
 

+ 3 - 3
app/src/main/java/com/keylesspalace/tusky/MainActivity.kt

@@ -519,8 +519,8 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
                         startActivityWithSlideInAnimation(AnnouncementsActivity.newIntent(context))
                     }
                     badgeStyle = BadgeStyle().apply {
-                        textColor = ColorHolder.fromColor(MaterialColors.getColor(binding.mainDrawer, R.attr.colorOnPrimary))
-                        color = ColorHolder.fromColor(MaterialColors.getColor(binding.mainDrawer, R.attr.colorPrimary))
+                        textColor = ColorHolder.fromColor(MaterialColors.getColor(binding.mainDrawer, com.google.android.material.R.attr.colorOnPrimary))
+                        color = ColorHolder.fromColor(MaterialColors.getColor(binding.mainDrawer, androidx.appcompat.R.attr.colorPrimary))
                     }
                 },
                 DividerDrawerItem(),
@@ -618,7 +618,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
 
     private fun setupTabs(selectNotificationTab: Boolean) {
         val activeTabLayout = if (preferences.getString("mainNavPosition", "top") == "bottom") {
-            val actionBarSize = getDimension(this, R.attr.actionBarSize)
+            val actionBarSize = getDimension(this, androidx.appcompat.R.attr.actionBarSize)
             val fabMargin = resources.getDimensionPixelSize(R.dimen.fabMargin)
             (binding.composeButton.layoutParams as CoordinatorLayout.LayoutParams).bottomMargin = actionBarSize + fabMargin
             binding.topNav.hide()

+ 2 - 2
app/src/main/java/com/keylesspalace/tusky/components/account/AccountActivity.kt

@@ -178,9 +178,9 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
      * Load colors and dimensions from resources
      */
     private fun loadResources() {
-        toolbarColor = MaterialColors.getColor(this, R.attr.colorSurface, Color.BLACK)
+        toolbarColor = MaterialColors.getColor(this, com.google.android.material.R.attr.colorSurface, Color.BLACK)
         statusBarColorTransparent = getColor(R.color.transparent_statusbar_background)
-        statusBarColorOpaque = MaterialColors.getColor(this, R.attr.colorPrimaryDark, Color.BLACK)
+        statusBarColorOpaque = MaterialColors.getColor(this, androidx.appcompat.R.attr.colorPrimaryDark, Color.BLACK)
         avatarSize = resources.getDimension(R.dimen.account_activity_avatar_size)
         titleVisibleHeight = resources.getDimensionPixelSize(R.dimen.account_activity_scroll_title_visible_height)
     }

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaGridAdapter.kt

@@ -40,7 +40,7 @@ class AccountMediaGridAdapter(
     }
 ) {
 
-    private val baseItemBackgroundColor = MaterialColors.getColor(context, R.attr.colorSurface, Color.BLACK)
+    private val baseItemBackgroundColor = MaterialColors.getColor(context, com.google.android.material.R.attr.colorSurface, Color.BLACK)
     private val videoIndicator = AppCompatResources.getDrawable(context, R.drawable.ic_play_indicator)
     private val mediaHiddenDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_hide_media_24dp)
 

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaViewModel.kt

@@ -25,7 +25,7 @@ import com.keylesspalace.tusky.network.MastodonApi
 import com.keylesspalace.tusky.viewdata.AttachmentViewData
 import javax.inject.Inject
 
-class AccountMediaViewModel @Inject constructor (
+class AccountMediaViewModel @Inject constructor(
     api: MastodonApi
 ) : ViewModel() {
 

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/announcements/AnnouncementAdapter.kt

@@ -80,7 +80,7 @@ class AnnouncementAdapter(
         item.reactions.forEachIndexed { i, reaction ->
             (
                 chips.getChildAt(i)?.takeUnless { it.id == R.id.addReactionChip } as Chip?
-                    ?: Chip(ContextThemeWrapper(chips.context, R.style.Widget_MaterialComponents_Chip_Choice)).apply {
+                    ?: Chip(ContextThemeWrapper(chips.context, com.google.android.material.R.style.Widget_MaterialComponents_Chip_Choice)).apply {
                         isCheckable = true
                         checkedIcon = null
                         chips.addView(this, i)

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt

@@ -569,7 +569,7 @@ class ComposeActivity :
     }
 
     private fun setupAvatar(activeAccount: AccountEntity) {
-        val actionBarSizeAttr = intArrayOf(R.attr.actionBarSize)
+        val actionBarSizeAttr = intArrayOf(androidx.appcompat.R.attr.actionBarSize)
         val a = obtainStyledAttributes(null, actionBarSizeAttr)
         val avatarSize = a.getDimensionPixelSize(0, 1)
         a.recycle()

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt

@@ -63,7 +63,7 @@ fun showAddPollDialog(
     var durations = context.resources.getIntArray(R.array.poll_duration_values).toList()
     val durationLabels = context.resources.getStringArray(R.array.poll_duration_names).filterIndexed { index, _ -> durations[index] in minDuration..maxDuration }
     binding.pollDurationSpinner.adapter = ArrayAdapter(context, android.R.layout.simple_spinner_item, durationLabels).apply {
-        setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item)
+        setDropDownViewResource(androidx.appcompat.R.layout.support_simple_spinner_dropdown_item)
     }
     durations = durations.filter { it in minDuration..maxDuration }
 

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsViewModel.kt

@@ -11,7 +11,7 @@ import com.keylesspalace.tusky.entity.HashTag
 import com.keylesspalace.tusky.network.MastodonApi
 import javax.inject.Inject
 
-class FollowedTagsViewModel @Inject constructor (
+class FollowedTagsViewModel @Inject constructor(
     api: MastodonApi
 ) : ViewModel(), Injectable {
     val tags: MutableList<HashTag> = mutableListOf()

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/db/Converters.kt

@@ -36,7 +36,7 @@ import javax.inject.Singleton
 
 @ProvidedTypeConverter
 @Singleton
-class Converters @Inject constructor (
+class Converters @Inject constructor(
     private val gson: Gson
 ) {
 

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt

@@ -1,5 +1,5 @@
 /* Copyright 2020 Tusky Contributors
- * 
+ *
  * This file is a part of Tusky.
  *
  * This program is free software; you can redistribute it and/or modify it under the terms of the

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt

@@ -253,7 +253,7 @@ private fun openLinkInBrowser(uri: Uri?, context: Context) {
  * @param context context
  */
 fun openLinkInCustomTab(uri: Uri, context: Context) {
-    val toolbarColor = MaterialColors.getColor(context, R.attr.colorSurface, Color.BLACK)
+    val toolbarColor = MaterialColors.getColor(context, com.google.android.material.R.attr.colorSurface, Color.BLACK)
     val navigationbarColor = MaterialColors.getColor(context, android.R.attr.navigationBarColor, Color.BLACK)
     val navigationbarDividerColor = MaterialColors.getColor(context, R.attr.dividerColor, Color.BLACK)
     val colorSchemeParams = CustomTabColorSchemeParams.Builder()

+ 1 - 1
app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt

@@ -36,7 +36,7 @@ class LicenseCard
     init {
         val binding = CardLicenseBinding.inflate(LayoutInflater.from(context), this)
 
-        setCardBackgroundColor(MaterialColors.getColor(context, R.attr.colorSurface, Color.BLACK))
+        setCardBackgroundColor(MaterialColors.getColor(context, com.google.android.material.R.attr.colorSurface, Color.BLACK))
 
         val a = context.theme.obtainStyledAttributes(attrs, R.styleable.LicenseCard, 0, 0)
 

+ 8 - 18
build.gradle

@@ -1,25 +1,15 @@
-buildscript {
-    repositories {
-        google()
-        mavenCentral()
-        gradlePluginPortal()
-    }
-    dependencies {
-        classpath libs.android.gradle.plugin
-        classpath libs.kotlin.gradle.plugin
-        classpath libs.ktlint.gradle
-    }
+plugins {
+    alias(libs.plugins.android.application) apply false
+    alias(libs.plugins.kotlin.android) apply false
+    alias(libs.plugins.kotlin.kapt) apply false
+    alias(libs.plugins.kotlin.parcelize) apply false
+    alias(libs.plugins.ktlint) apply false
 }
 
 allprojects {
-    apply plugin: "org.jlleitschuh.gradle.ktlint"
-    repositories {
-        google()
-        mavenCentral()
-        maven { url "https://jitpack.io" }
-    }
+    apply plugin: libs.plugins.ktlint.get().pluginId
 }
 
-task clean(type: Delete) {
+tasks.register('clean') {
     delete rootProject.buildDir
 }

+ 14 - 14
gradle.properties

@@ -1,19 +1,19 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-
-org.gradle.jvmargs=-Xmx4096m
-
+org.gradle.caching=true
+org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8
 # use parallel execution
 org.gradle.parallel=true
+# https://docs.gradle.org/7.6/userguide/configuration_cache.html
+org.gradle.unsafe.configuration-cache=true
+
+# https://blog.jetbrains.com/kotlin/2022/07/a-new-approach-to-incremental-compilation-in-kotlin/
+kotlin.incremental.useClasspathSnapshot=true
 
+# Disable buildFeatures flags by default
+android.defaults.buildfeatures.aidl=false
+android.defaults.buildfeatures.buildconfig=false
+android.defaults.buildfeatures.renderscript=false
+android.defaults.buildfeatures.resvalues=false
+android.defaults.buildfeatures.shaders=false
 android.enableR8.fullMode=true
+android.nonTransitiveRClass=true
 android.useAndroidX=true

+ 8 - 6
gradle/libs.versions.toml

@@ -1,5 +1,5 @@
 [versions]
-agp = "7.3.1"
+agp = "7.4.0"
 androidx-activity = "1.6.0"
 androidx-appcompat = "1.6.0-rc01"
 androidx-browser = "1.4.0"
@@ -30,7 +30,6 @@ glide = "4.13.2"
 glide-animation-plugin = "2.23.0"
 gson = "2.9.0"
 kotlin = "1.7.10"
-ktlint = "10.2.1"
 image-cropper = "4.3.1"
 lifecycle = "2.5.1"
 material = "1.6.1"
@@ -50,8 +49,14 @@ photoview = "2.3.0"
 sparkbutton = "4.1.0"
 unified-push = "2.0.1"
 
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
+kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
+ktlint = "org.jlleitschuh.gradle.ktlint:11.0.0"
+
 [libraries]
-android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
 android-material = { module = "com.google.android.material:material", version.ref = "material" }
 androidx-activity = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" }
 androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
@@ -105,7 +110,6 @@ kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", v
 kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
 kotlinx-coroutines-rx3 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3", version.ref = "coroutines" }
 kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
-ktlint-gradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" }
 image-cropper = { module = "com.github.CanHub:Android-Image-Cropper", version.ref = "image-cropper" }
 material-drawer-core = { module = "com.mikepenz:materialdrawer", version.ref = "material-drawer" }
 material-drawer-iconics = { module = "com.mikepenz:materialdrawer-iconics", version.ref = "material-drawer" }
@@ -145,5 +149,3 @@ okhttp = ["okhttp-core", "okhttp-logging-interceptor"]
 retrofit = ["retrofit-core", "retrofit-converter-gson", "retrofit-adapter-rxjava3"]
 room = ["androidx-room-ktx", "androidx-room-paging"]
 rxjava3 = ["rxjava3-core", "rxjava3-android", "rxjava3-kotlin"]
-
-[plugins]

BIN
gradle/wrapper/gradle-wrapper.jar


+ 2 - 1
gradle/wrapper/gradle-wrapper.properties

@@ -1,5 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
+networkTimeout=10000
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists

+ 8 - 4
gradlew

@@ -55,7 +55,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,10 +80,10 @@ do
     esac
 done
 
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
@@ -143,12 +143,16 @@ fi
 if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045 
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
     case $MAX_FD in  #(
       '' | soft) :;; #(
       *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045 
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac

+ 92 - 91
gradlew.bat

@@ -1,91 +1,92 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 0 - 19
instance-build.gradle

@@ -1,19 +0,0 @@
-/**
-Edit this file to create a Tusky build that is customized for your Fediverse instance.
-Note: Publishing a custom build on Google Play may violate the Google Play developer policy (Repetitive Content)
- */
-
-// The app name
-ext.APP_NAME = "Tusky"
-
-// The application id. Must be unique, e.g. based on your domain
-ext.APP_ID = "com.keylesspalace.tusky"
-
-// url of a custom app logo. Recommended size at least 600x600. Keep empty to use the Tusky elephant friend.
-ext.CUSTOM_LOGO_URL = ""
-
-// e.g. mastodon.social. Keep empty to not suggest any instance on the signup screen
-ext.CUSTOM_INSTANCE = ""
-
-// link to your support account. Will be linked on the about page when not empty.
-ext.SUPPORT_ACCOUNT_URL = "https://mastodon.social/@Tusky"

+ 18 - 0
settings.gradle

@@ -1 +1,19 @@
+pluginManagement {
+    repositories {
+        google()
+        gradlePluginPortal()
+    }
+}
+
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+    repositories {
+        google()
+        mavenCentral()
+        maven { url 'https://jitpack.io' }
+    }
+}
+
+enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
+
 include ':app'