Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: Build

permissions:
contents: read

on:
workflow_dispatch:
push:
Expand All @@ -17,22 +20,22 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v6
uses: gradle/actions/wrapper-validation@8da46b539cd8fe6ab27ca75128919a18d757604c # v6

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: Set up JDK 17
uses: actions/setup-java@v5
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6
with:
distribution: 'zulu'
java-version: 17

- name: Setup Gradle
uses: gradle/gradle-build-action@v3
uses: gradle/actions/setup-gradle@8da46b539cd8fe6ab27ca75128919a18d757604c # v6

- name: Check spotless
run: ./gradlew spotlessCheck --init-script gradle/spotless-init.gradle.kts --no-configuration-cache
Expand All @@ -48,15 +51,15 @@ jobs:
# run: ./gradlew testDebug

- name: Upload build outputs (APKs)
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: build-outputs
path: app/build/outputs
overwrite: true

- name: Upload build reports
if: always()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: build-reports
path: app/build/reports
Expand All @@ -72,7 +75,7 @@ jobs:

steps:
- name: Delete unnecessary tools 🔧
uses: jlumbroso/free-disk-space@v1.3.1
uses: jlumbroso/free-disk-space@ceedf095f4ec1a097402bc6bd80831f2e1a6fde6 # v2.0.0
with:
android: false # Don't remove Android tools
tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY"
Expand All @@ -90,22 +93,22 @@ jobs:
ls /dev/kvm

- name: Checkout
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Copy CI gradle.properties
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: Set up JDK 17
uses: actions/setup-java@v5
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6
with:
distribution: 'zulu'
java-version: 17

- name: Setup Gradle
uses: gradle/gradle-build-action@v3
uses: gradle/actions/setup-gradle@8da46b539cd8fe6ab27ca75128919a18d757604c # v6

- name: Run instrumentation tests
uses: reactivecircus/android-emulator-runner@v2
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2
with:
api-level: ${{ matrix.api-level }}
arch: x86_64
Expand All @@ -116,7 +119,7 @@ jobs:

- name: Upload test reports
if: always()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
with:
name: test-reports-${{ matrix.api-level }}
path: '*/build/reports/androidTests'
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/issues-stale.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
name: 'Close stale issues and PRs'

permissions:
issues: write
pull-requests: write

on:
workflow_dispatch:
schedule:
Expand All @@ -8,7 +13,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
- uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11
with:
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
days-before-stale: 30
Expand Down
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
kotlin("plugin.serialization") version "2.4.0"
kotlin("plugin.serialization") version "2.4.21"
}

android {
Expand Down
49 changes: 25 additions & 24 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,28 @@
# limitations under the License.
#
[versions]
agp = "9.2.1"
fragmentCompose = "1.8.9"
kotlin = "2.4.0"
coreKtx = "1.19.0"
agp = "9.5.0"
fragmentCompose = "1.9.1"
kotlin = "2.4.21"
coreKtx = "1.19.1"
junit = "4.13.2"
junitVersion = "1.3.0"
espressoCore = "3.7.0"
kotlinxSerializationJson = "1.11.0"
kotlinxSerializationJson = "1.12.0"
lifecycleRuntimeKtx = "2.11.0"
activityCompose = "1.13.0"
composeBom = "2026.06.01"
appcompat = "1.7.1"
composeBom = "2026.09.00"
appcompat = "1.8.0"
material = "1.14.0"
coil = "2.7.0"
navigationCompose = "2.9.8"
navigationCompose = "2.10.2"
coroutines = "1.11.0"
photopickerCompose = "1.0.0-SNAPSHOT"
play-services-location = "21.4.0"

accompanist = "0.37.3"
androidx-datastore = "1.2.1"
androidx-navigation = "2.9.8"
androidx-datastore = "1.3.0"
androidx-navigation = "2.10.2"
androidx-window = "1.5.1"
hilt = "2.60.1"
junit4 = "4.13.2"
Expand All @@ -45,18 +45,19 @@ androidxTestExtJunit = "1.3.0"
androidxTestExtTruth = "1.7.0"
androidxTestRules = "1.7.0"
androidxTestRunner = "1.7.0"
camerax = "1.6.1"
camerax = "1.6.2"
material3Android = "1.4.0"
media3 = "1.10.1"
glide-compose = "1.0.0-beta09"
media3 = "1.11.1"
glide-compose = "1.0.0-beta10"
glance = "1.3.0-alpha02"
tensorflowLite = "2.16.1"
tensorflowLite = "2.17.0"
tensorflowLiteGpuDelegatePlugin = "0.4.4"
tensorflowLiteSupport = "0.4.4"
tensorflowLiteSelectTfOps = "2.16.1"
tensorflowLiteSupport = "0.5.0"
barcodeScanningCommon = "17.0.0"
playServicesMlkitBarcodeScanning = "18.3.1"
protobuf = "0.10.0"
firebaseCrashlyticsBuildtools = "3.0.7"
firebaseCrashlyticsBuildtools = "3.0.8"
uwb = "1.0.0"
remoteCompose = "1.0.0-alpha20"
telecom = "1.1.0-SNAPSHOT"
Expand Down Expand Up @@ -96,11 +97,11 @@ androidx-core-telecom = { module = "androidx.core:core-telecom", version.ref = "

androidx-activity = "androidx.activity:activity-ktx:1.13.0"

androidx-core = "androidx.core:core-ktx:1.19.0"
androidx-core = "androidx.core:core-ktx:1.19.1"
androidx-exifinterface = "androidx.exifinterface:exifinterface:1.4.2"
# Fragment 1.7.0 alpha and Transition 1.5.0 alpha are required for predictive back to work with Fragments and transitions
androidx-fragment = "androidx.fragment:fragment-ktx:1.8.9"
androidx-transition = "androidx.transition:transition-ktx:1.7.0"
androidx-fragment = "androidx.fragment:fragment-ktx:1.9.1"
androidx-transition = "androidx.transition:transition-ktx:1.7.2"
androidx-navigation-fragment = { module = "androidx.navigation:navigation-fragment", version.ref = "androidx-navigation" }
androidx-navigation-ui = { module = "androidx.navigation:navigation-ui", version.ref = "androidx-navigation" }
androidx-lifecycle-viewmodel-compose = "androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0"
Expand All @@ -120,7 +121,7 @@ junit4 = { group = "junit", name = "junit", version.ref = "junit4" }
# Sample specific dependencies
lottie = "com.airbnb.android:lottie:6.7.1"
rxjava2-android = 'io.reactivex.rxjava2:rxandroid:2.1.1'
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.11.2"
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.12.0"
androidx-glance-appwidget = {group = "androidx.glance", name = "glance-appwidget", version.ref = "glance"}
androidx-glance-preview = {group = "androidx.glance", name = "glance-preview", version.ref = "glance"}
androidx-glance-appwidget-preview = {group = "androidx.glance", name = "glance-appwidget-preview", version.ref = "glance"}
Expand All @@ -135,7 +136,7 @@ androidx-window-java = { module = "androidx.window:window-java", version.ref = "
androidx-window-rxjava2 = { module = "androidx.window:window-rxjava2", version.ref = "androidx-window" }
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window" }
androidx-media = "androidx.media:media:1.8.0"
androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1"
androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.2"
androidx-corepip = "androidx.core:core-pip:1.0.0-SNAPSHOT"
androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" }
androidx-draganddrop = "androidx.draganddrop:draganddrop:1.0.0"
Expand All @@ -157,15 +158,15 @@ androidx-camerax-view = { module = "androidx.camera:camera-view", version.ref =
androidx-camerax-mlkit-vision = { module = "androidx.camera:camera-mlkit-vision", version.ref = "camerax" }
androidx-camerax-extensions = { module = "androidx.camera:camera-extensions", version.ref = "camerax" }

fresco = "com.facebook.fresco:fresco:3.7.0"
fresco = "com.facebook.fresco:fresco:3.9.0"
fresco-nativeimagetranscoder = "com.facebook.fresco:nativeimagetranscoder:2.6.0!!"
glide = "com.github.bumptech.glide:glide:5.0.7"
glide = "com.github.bumptech.glide:glide:5.0.9"
glide-compose = { group = "com.github.bumptech.glide", name = "compose", version.ref = "glide-compose" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
tensorflow-lite = { module = "org.tensorflow:tensorflow-lite", version.ref = "tensorflowLite" }
tensorflow-lite-gpu = { module = "org.tensorflow:tensorflow-lite-gpu", version.ref = "tensorflowLite" }
tensorflow-lite-gpu-delegate-plugin = { module = "org.tensorflow:tensorflow-lite-gpu-delegate-plugin", version.ref = "tensorflowLiteGpuDelegatePlugin" }
tensorflow-lite-select-tf-ops = { module = "org.tensorflow:tensorflow-lite-select-tf-ops", version.ref = "tensorflowLite" }
tensorflow-lite-select-tf-ops = { module = "org.tensorflow:tensorflow-lite-select-tf-ops", version.ref = "tensorflowLiteSelectTfOps" }
tensorflow-lite-support = { module = "org.tensorflow:tensorflow-lite-support", version.ref = "tensorflowLiteSupport" }
barcode-scanning-common = { group = "com.google.mlkit", name = "barcode-scanning-common", version.ref = "barcodeScanningCommon" }
play-services-mlkit-barcode-scanning = { group = "com.google.android.gms", name = "play-services-mlkit-barcode-scanning", version.ref = "playServicesMlkitBarcodeScanning" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/spotless-init.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
val ktlintVersion = "0.48.1"

initscript {
val spotlessVersion = "8.8.0"
val spotlessVersion = "8.11.0"

repositories {
mavenCentral()
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
10 changes: 5 additions & 5 deletions samples/connectivity/UwbRanging/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protobuf {
// Configures the protoc compiler
protoc {
// Automatically download protoc from Maven Central
artifact = "com.google.protobuf:protoc:4.35.1"
artifact = "com.google.protobuf:protoc:4.36.2"
}

// Configures the code generation tasks
Expand Down Expand Up @@ -85,10 +85,10 @@ dependencies {
implementation(libs.androidx.navigation.compose)
implementation(libs.compose.material.iconsext)
implementation(libs.kotlin.coroutines.play)
implementation("com.google.android.gms:play-services-nearby:19.3.0")
implementation("com.google.protobuf:protobuf-java:4.35.1")
implementation("com.google.protobuf:protobuf-kotlin:4.35.1")
implementation("androidx.datastore:datastore:1.2.1")
implementation("com.google.android.gms:play-services-nearby:19.5.1")
implementation("com.google.protobuf:protobuf-java:4.36.2")
implementation("com.google.protobuf:protobuf-kotlin:4.36.2")
implementation("androidx.datastore:datastore:1.3.0")
implementation(libs.androidx.appcompat)
implementation(libs.kotlinx.serialization.json)
implementation(libs.firebase.crashlytics.buildtools)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.example.platform.graphics.ultrahdr.databinding.CompressUltrahdrBinding
import java.io.ByteArrayOutputStream
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext


@RequiresApi(34)
Expand Down Expand Up @@ -78,11 +82,10 @@ class CompressingUltraHDRImages : Fragment() {
/**
* Updated the currently displayed UltraHDR ORIGINAL image.
*/
private fun displayOriginalUltraHDRImage() {
private fun displayOriginalUltraHDRImage() = lifecycleScope.launch(Dispatchers.IO) {

val stream = context?.assets?.open(ULTRA_HDR_IMAGE)
val bitmap = BitmapFactory.decodeStream(stream)
binding.imageContainer.setImageBitmap(bitmap)

// display original size of image
val outputStream = ByteArrayOutputStream()
Expand All @@ -92,15 +95,19 @@ class CompressingUltraHDRImages : Fragment() {
// convert from bytes to MB for displaying text
orignalImageSize = (outputStreamSize / (1024 * 1024))

" Displayed Original Image size : $orignalImageSize MB".also {
binding.ultrahdrImageSizeText.text = it
withContext(Dispatchers.Main) {
binding.imageContainer.setImageBitmap(bitmap)

" Displayed Original Image size : $orignalImageSize MB".also {
binding.ultrahdrImageSizeText.text = it
}
}
}

/**
* Updated the currently displayed UltraHDR ORIGINAL image.
*/
private fun compressAndDisplayUltraHDRImage() {
private fun compressAndDisplayUltraHDRImage() = lifecycleScope.launch(Dispatchers.IO) {

//open original image
val stream = context?.assets?.open(ULTRA_HDR_IMAGE)
Expand All @@ -127,12 +134,14 @@ class CompressingUltraHDRImages : Fragment() {
.decodeByteArray(compressedByteArray, 0, compressedByteArray.size)


//Load the compressed bitmap
binding.imageContainer.setImageBitmap(compressedBitmap)
withContext(Dispatchers.Main) {
//Load the compressed bitmap
binding.imageContainer.setImageBitmap(compressedBitmap)

//Set compressed image details as text for informational purposes
("Compressed Image Quality : ${ULTRA_HDR_IMAGE_COMPRESSION_QUALITY}% \n Displayed Compressed Image Size : ${compressedImageSizeInMegabytes} MB ").also {
binding.ultrahdrImageSizeText.text = it
//Set compressed image details as text for informational purposes
("Compressed Image Quality : ${ULTRA_HDR_IMAGE_COMPRESSION_QUALITY}% \n Displayed Compressed Image Size : ${compressedImageSizeInMegabytes} MB ").also {
binding.ultrahdrImageSizeText.text = it
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion samples/media/video/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ dependencies {
// Tensorflow lite dependencies
implementation(libs.tensorflow.lite)
implementation(libs.tensorflow.lite.gpu)
implementation("org.tensorflow:tensorflow-lite-gpu-api:2.16.1")
implementation("org.tensorflow:tensorflow-lite-gpu-api:2.17.0")
implementation(libs.tensorflow.lite.gpu.delegate.plugin)
implementation(libs.tensorflow.lite.support)
implementation(libs.tensorflow.lite.select.tf.ops)
Expand Down
Loading