blob: 5aae051cade4118dfae2548c5b1ca6922686815b [file] [log] [blame]
/*
* Copyright (C) 2022 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
*
* 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.
*/
/**
* This file was created using the `create_project.py` script located in the
* `<AndroidX root>/development/project-creator` directory.
*
* Please use that script when creating a new project, rather than copying an existing project and
* modifying its settings.
*/
import androidx.build.LibraryType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.security.MessageDigest
import java.util.stream.Collectors
plugins {
id("AndroidXPlugin")
id("AndroidXComposePlugin")
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
dependencies {
api(libs.kotlinStdlib)
def composeVersion = '1.5.3'
implementation(libs.kotlinStdlibCommon)
implementation("androidx.profileinstaller:profileinstaller:1.3.1")
api("androidx.annotation:annotation:1.6.0")
api("androidx.compose.animation:animation:$composeVersion")
api("androidx.compose.runtime:runtime:$composeVersion")
api(project(":compose:foundation:foundation"))
api(project(":compose:ui:ui-util"))
api("androidx.compose.ui:ui:$composeVersion")
api("androidx.compose.foundation:foundation-layout:$composeVersion")
api("androidx.compose.ui:ui-graphics:$composeVersion")
api("androidx.compose.ui:ui-text:$composeVersion")
androidTestImplementation(libs.truth)
androidTestImplementation(project(":compose:runtime:runtime"))
androidTestImplementation(project(":compose:ui:ui-test"))
androidTestImplementation(project(":compose:ui:ui-test-junit4"))
androidTestImplementation(project(":compose:test-utils"))
androidTestImplementation(libs.testRunner)
}
android {
namespace "androidx.tv.foundation"
defaultConfig {
minSdkVersion 21
}
lintOptions {
disable 'IllegalExperimentalApiUsage' // TODO (b/233188423): Address before moving to beta
}
}
androidx {
name = "TV Foundation"
type = LibraryType.PUBLISHED_LIBRARY
inceptionYear = "2022"
description = "This library makes it easier for developers" +
"to write Jetpack Compose applications for TV devices by providing " +
"functionality to support TV specific devices sizes, shapes and d-pad navigation " +
"supported components. It builds upon the Jetpack Compose libraries."
targetsJavaConsumers = false
}
// Functions and tasks to monitor changes in copied files.
task generateMd5 {
ext.genMd5 = { fileNameToHash ->
MessageDigest digest = MessageDigest.getInstance("MD5")
file(fileNameToHash).withInputStream(){is->
byte[] buffer = new byte[8192]
int read = 0
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
byte[] md5sum = digest.digest()
BigInteger bigInt = new BigInteger(1, md5sum)
bigInt.toString(16).padLeft(32, '0')
}
doLast {
String hashValue = genMd5(file)
print "value="
println hashValue
}
}
List<CopiedClass> copiedClasses = new ArrayList<>();
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt",
"src/main/java/androidx/tv/foundation/ScrollableWithPivot.kt",
"4aa8f903a2cba4d46b6c4cc586c32a2a"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItemProvider.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasuredItemProvider.kt",
"4aa8f903a2cba4d46b6c4cc586c32a2a"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier.kt",
"src/main/java/androidx/tv/foundation/lazy/layout/AwaitFirstLayoutModifier.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState.kt",
"src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutNearestRangeState.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt",
"/src/main/java/androidx/tv/foundation/Scroll.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemInfo.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScopeImpl.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScopeImpl.kt",
"8196242113087ee01151552389745b14"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListHeaders.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListHeaders.kt",
"5b7d3ccdb09f41ec7790991ca313b734"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemPlacementAnimator.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListItemPlacementAnimator.kt",
"77cfe176fc4cc7b23b6d68a565882ef6"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListItemProvider.kt",
"e1be5cb2c26c41e37693fc8ba0c82816"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyList.kt",
"50a01ef362751d7636de8cb125c25c24"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasure.kt",
"2d303e4008b8f691d2fba800f2cff10b"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasureResult.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasureResult.kt",
"f6a82da105a11e3037353ddf71a06bd8"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItem.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListMeasuredItem.kt",
"5cc9c72197679de004d98b73ffacf038"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListScrollPosition.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListScrollPosition.kt",
"a3578c4eadde6e9b2d65ac8dda25a1bb"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListState.kt",
"7272cbf1f7ad406ecebbaedff50eea88"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListSemantics.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazySemantics.kt",
"f644c8b799080ef0a96cdcbea698603d"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridDsl.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridDsl.kt",
"fbaec87a3693a10268a5bf03638adb03"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemInfo.kt",
"b64314b3d025d726c18016c2159fcaf0"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator.kt",
"7411fe66a22073f328aa307c8db7182d"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScopeImpl.kt",
"9ffacf5b72b88f881c0e85bdd00c6d43"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemScope.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridItemScope.kt",
"62be340f3ab25e3e2c43462c20ff78f9"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridItemProvider.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridItemProvider.kt",
"faedb2916edafbf33b179c173a6e7e99"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGrid.kt",
"cb67c9a501885e713eab9fc2fbc53ac5"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridLayoutInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridLayoutInfo.kt",
"20f7055a2556d1c8ccd12873b1d8af2a"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasure.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridMeasure.kt",
"629d06f069b9c74f0dd06d7103f518ab"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasureResult.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult.kt",
"1a9f3308a5865beb6b53f547493f8d20"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScopeMarker.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridScopeMarker.kt",
"0b7ff258a80e2413f89d56ab0ef41b46"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridScrollPosition.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridScrollPosition.kt",
"adf5c0b390dd6d7080868ddd2c59d749"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpan.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpan.kt",
"cc63cb4f05cc556e8fcf7504ac0ea57c"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider.kt",
"b4f4d678cac8199c55d4b4768e5066e3"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/TvLazyGridState.kt",
"80892e49be3d89d1bb94f2fab5e8db25"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredItem.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridMeasuredItem.kt",
"f22dc4d4899dd7f53d7adeef4dabfd87"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyLayoutAnimateItemModifierNode.kt",
"blah"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridMeasuredLine.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridMeasuredLine.kt",
"98e45dc10e1f9cbc649b191dc243bbf7"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazySemantics.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazySemantics.kt",
"1525d43e14f6893ae7ba5290907b6908"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyDsl.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyDsl.kt",
"9d86fad30c0f3de2231fbef3f63db53e"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyScopeMarker.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListScopeMarker.kt",
"f7b72b3c6bad88868153300b9fbdd922"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemScope.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemScope.kt",
"1dcc195229055f46fb24983ffca58d4e"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListItemInfo.kt",
"c9ca74cfa34be20b61f89bf926a17acf"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListLayoutInfo.kt",
"src/main/java/androidx/tv/foundation/lazy/list/TvLazyListLayoutInfo.kt",
"060b1374487b4b78c60409fdea1cd75f"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutSemantics.kt",
"src/main/java/androidx/tv/foundation/lazy/layout/LazyLayoutSemantics.kt",
"d43923910ef811c75522ad36c0c9e700"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt",
"src/main/java/androidx/tv/foundation/lazy/layout/LazyAnimateScroll.kt",
"9a0f877f05d2e5a69c7b6a1eb8ef2b73"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt",
"src/main/java/androidx/tv/foundation/lazy/grid/LazyGridAnimateScrollScope.kt",
"dfedfe292e3bfe5c3d0bd4d63856a650"
)
)
copiedClasses.add(
new CopiedClass(
"../../compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt",
"src/main/java/androidx/tv/foundation/lazy/list/LazyListAnimateScrollScope.kt",
"b79f7582feddf8fce22bfaf9ac5178d8"
)
)
String generateMd5(String fileNameToHash) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5")
file(fileNameToHash).withInputStream() { is ->
byte[] buffer = new byte[8192]
int read
while ((read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
}
byte[] md5sum = digest.digest()
BigInteger bigInt = new BigInteger(1, md5sum)
bigInt.toString(16).padLeft(32, '0')
} catch (Exception e) {
throw new GradleException("Failed for file=$fileNameToHash", e)
}
}
task printCopiedClasses {
doLast {
copiedClasses.forEach(copiedClass -> {
String actualMd5 = generateMd5(copiedClass.originalFilePath)
System.out.println(copiedClass.toString(actualMd5))
})
}
}
task doCopiesNeedUpdate {
doLast {
List<String> failureFiles = new ArrayList<>()
boolean failures = false
copiedClasses.forEach(copiedClass -> {
assert file(copiedClass.originalFilePath).exists()
assert file(copiedClass.copyFilePath).exists()
try {
String actualMd5 = generateMd5(copiedClass.originalFilePath)
if (copiedClass.lastKnownGoodHash != actualMd5) {
failureFiles.add(copiedClass.toString()+ "\nactual= " + actualMd5 + "\n")
}
} catch (Exception e) {
logger.error("Failed for file=${copiedClass.originalFilePath}", e)
failures = true
}
})
if (!failureFiles.isEmpty()) {
throw new GradleException(
"Files that were copied have been updated at the source. " +
"Please update the copy and then" +
" update the hash in the compose-foundation build.gradle file." +
failureFiles.stream().collect(Collectors.joining("\n", "\n", "")) + "\ncount=${failureFiles.size()}")
}
if (failures) {
throw new GradleException("There were errors. Check the logs.")
}
}
}
class CopiedClass {
String originalFilePath
String copyFilePath
String lastKnownGoodHash
CopiedClass(String originalFilePath, String copyFilePath, String lastKnownGoodHash) {
this.originalFilePath = originalFilePath
this.copyFilePath = copyFilePath
this.lastKnownGoodHash = lastKnownGoodHash
}
@Override
String toString() {
return "originalFilePath='" + originalFilePath + '\'\n' +
"copyFilePath='" + copyFilePath + '\'\n' +
"lastKnownGoodHash='" + lastKnownGoodHash + '\'\n' +
"diffCmd='" + "kdiff3 " + originalFilePath + " " + copyFilePath + "\'"
}
String toString(String actualHash) {
return "copiedClasses.add(\n" +
" new CopiedClass(\n" +
" \"$originalFilePath\",\n" +
" \"$copyFilePath\",\n" +
" \"$actualHash\"\n" +
" )\n" +
")\n"
}
}