Wear Watchface

Membuat aplikasi untuk smartwatch Wear OS by Google.

Catatan: Mulai 10 Juli 2024, tampilan jam harus menggunakan Format Tampilan Jam agar diinstal di smartwatch baru yang diluncurkan dengan Wear OS 5 yang telah diinstal sebelumnya. Pelajari lebih lanjut tentang perubahan yang dihadapi pengguna Pusat Bantuan artikel ini.

Selain itu, mulai awal tahun 2025 (tanggal spesifik akan diumumkan selama K4 2024), semua tampilan jam baru yang dipublikasikan di Google Play harus menggunakan Tampilan Jam Format.

Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
17 April 2024 1.2.1 - - 1.3.0-alpha03

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Wear, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Groovy

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.2.1"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.2.1"

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Kotlin

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.2.1")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.2.1")

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Untuk informasi dependensi selengkapnya, lihat Menambahkan dependensi build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.3

Versi 1.3.0-alpha03

17 April 2024

androidx.wear.watchface:watchface-*:1.3.0-alpha03 dirilis. Versi 1.3.0-alpha03 berisi commit ini.

Perubahan API

  • Kami telah menambahkan EditorSession#setOverrideComplications yang untuk sementara menetapkan ComplicationData instance tampilan jam pokok saat mengedit. Jika detail jarang berubah, hal ini lebih efisien daripada meneruskan penggantian melalui EditorSession#renderWatchFaceToBitmap. (I19384)

Perbaikan Bug

  • Sebelumnya, selectComplicationDataForInstant memanggil toApiComplicationData untuk linimasa apa pun, yang berarti pengujian kesetaraan referensi === berikutnya akan selalu gagal. Artinya, detail dimuat ulang setiap frame yang menyebabkan pengurasan baterai. (717406)

Versi 1.3.0-alpha02

3 April 2024

androidx.wear.watchface:watchface-*:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Fitur Baru

  • Sekarang kami menggunakan kesetaraan referensi untuk membandingkan yang terbaik dan selectedData karena operator sama dengan lebih mahal. (446b00)

Perubahan API

  • Kami telah menambahkan API dinamis tanpa penggantian untuk GoalProgressComplicationData. (c33264)

Versi 1.3.0-alpha01

7 Februari 2024

androidx.wear.watchface:watchface-*:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Fitur Baru

  • WatchFaceServices dapat diinisialisasi secara serentak dan harus stateless. Untuk mendukung hal ini, kami telah menambahkan StatefulWatchFaceService dengan tambahan yang ditentukan pengguna yang dibuat oleh createExtra() dan diteruskan ke semua penggantian yang dipanggil selama inisialisasi.
  • GlesRenderer2 kini memiliki overload konstruktor yang memungkinkan Anda menentukan daftar atribut untuk dicoba secara bergantian dengan eglChooseConfig.

Perubahan API

  • StatefulWatchFaceService kini mendukung penggantian getComplicationSlotInflationFactory tempat tambahan buatan pengguna yang dibuat oleh createExtra() diteruskan. I82d9f
  • Beberapa tampilan jam perlu membagikan data tambahan yang dibuat selama createUserStyleSchema dengan metode inisialisasi lainnya. Karena tidak ada alternatif yang lebih baik, developer biasanya membuat WatchFaceServices mereka menjadi stateful. Ini berbahaya karena beberapa instance dapat dibuat secara serentak yang dapat menyebabkan bug. Untuk mengatasi hal ini, kami telah memperkenalkan StatefulWatchFaceService dan StatefulWatchFaceRuntimeService tempat jenis yang ditentukan pengguna dibuat oleh createExtra() dan diteruskan ke berbagai metode pembuatan sebagai parameter. (If8a99)
  • Kami telah menambahkan getUserStyleFlavors ke InteractiveWatchFaceClient, yang terutama menarik bagi OEM. (I0f5d8)
  • GlesRenderer2 kini memiliki overload konstruktor yang memungkinkan Anda menentukan daftar atribut untuk dicoba secara bergantian dengan eglChooseConfig. Misalnya, hal ini memungkinkan Anda mencoba konfigurasi dengan anti-aliasing terlebih dahulu dan kembali ke konfigurasi tersebut jika perlu. (I1ba74)
  • Mulai Android U, dukungan untuk SystemDataSources.DATA_SOURCE_HEART_RATE akan ditambahkan ke WearOS. Detail ini hanya dijamin mendukung detail SHORT_TEXT, tetapi sebaiknya ComplicationSlot juga menerima SMALL_IMAGE karena OEM dapat memilih untuk menayangkan pintasan ke aplikasi kesehatannya, bukan nilai aktif. (I34223)
  • Kami telah menambahkan METADATA_KEY_CONFIG_RESTORE_SUPPORTED yang mulai dari Android U dan seterusnya, mengontrol apa yang terjadi saat sistem dipulihkan dari cadangan untuk sumber data detail dengan METADATA_KEY_DATA_SOURCE_CONFIG_ACTION. Secara default, sistem berasumsi bahwa layanan sumber data detail mendukung pencadangan data konfigurasi apa pun, tetapi jika tidak, sistem dapat menambahkan setelan metadata METADATA_KEY_DATA_SOURCE_CONFIG_ACTION ke salah yang akan menandai slot detail sebagai tidak dikonfigurasi. (I6c505)

Versi 1.2

Versi 1.2.1

24 Januari 2024

androidx.wear.watchface:watchface-*:1.2.1 dirilis. Versi 1.2.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki error pada Samsung Galaxy Watch 4, 5 & 6. (43f0b0)

Versi 1.2.0

29 November 2023

androidx.wear.watchface:watchface-*:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak 1.1.0

  • Kami telah menambahkan dukungan beberapa jenis detail baru yang tersedia untuk digunakan dari Android T:
    • GoalProgressComplicationData yang mirip dengan RangedValueComplicationData, kecuali untuk progres menuju sasaran dengan nilai minimum secara implisit adalah nol, dan nilainya diizinkan lebih besar dari targetValue.
    • WeightedElementsComplicationData yang terdiri dari array Elemen (pasangan bobot dan warna) beserta teks/judul/gambar opsional. Dukungan ini mungkin ditampilkan sebagai diagram lingkaran dengan warna yang bermakna tergantung konteksnya, karena biasanya tidak ada ruang dalam detail untuk merender label.
  • Kami telah menambahkan dukungan untuk ColorRanges opsional ke RangedValueComplicationData. Detail biasanya akan dirender dalam warna pilihan tampilan jam, tetapi terkadang ComplicationDataSource paling cocok ditempatkan untuk menetapkan warna, misalnya saat memiliki makna semantik tertentu. Misalnya, merah ke biru untuk suhu.
  • Hampir setiap jenis ComplicationData kini mendukung SmallImages.
  • Kami telah menambahkan ComplicationDisplayPolicy dengan DO_NOT_SHOW_WHEN_DEVICE_LOCKED menginstruksikan tampilan jam yang kompatibel untuk tidak menampilkan detail saat perangkat terkunci.
  • Dari Android T, OEM akan dapat menentukan apakah permintaan detail berasal dari tampilan jam dalam daftar yang ditentukan oleh metadata android.support.wearable.complications.SAFE_WATCH_FACES dalam manifes penyedianya oleh ComplicationRequest#isForSafeWatchFace. Penyedia akan memerlukan izin com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE untuk menerima hal selain TargetViewsSafety.UNKNOWN`.
  • UserStyleFlavors telah menjadi fitur non-eksperimental.

Versi 1.2.0-rc01

18 Oktober 2023

androidx.wear.watchface:watchface-*:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

Versi 1.2.0-beta02

6 September 2023

androidx.wear.watchface:watchface-*:1.2.0-beta02 dirilis. Versi 1.2.0-beta02 berisi commit ini.

Fitur Baru

  • SuspendingComplicationDataSourceService#onDestroy sekarang buka. Perlu diketahui bahwa dukungan untuk detail cuaca default sistem telah dihapus.

Perubahan API

  • Batalkan opsi "Ekspos sumber data baru untuk detail cuaca". (I6f335)

Versi 1.2.0-beta01

23 Agustus 2023

androidx.wear.watchface:watchface-*:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit ini.

Fitur Baru

  • Mulai Android T, WearOS kini akan mendukung detail sistem cuaca default.

Perubahan API

  • Menambahkan penggantian sistem default cuaca untuk detail. (Ia0994)
  • Patch ini menambahkan WatchFaceRuntimeService dan WatchFaceControlClient.createWatchFaceRuntimeControlClient beserta wrapper guava. Hal ini menambahkan dukungan untuk runtime tampilan jam yang merupakan jenis tampilan jam khusus yang memuat definisinya dari paket lain. Saat ini WearOS hanya mendukung runtime untuk Format Tampilan Jam Android. (I2799f)
  • Patch ini adalah tindak lanjut dari AOSP/2636578 di mana kita mengganti nama int def sehingga kode apa pun yang bergantung pada WatchFaceType, CanvasType, TapType, atau ComplicationsSlotBoundsType tidak perlu diubah. (I4098b)
  • Memperbarui file API untuk memberi anotasi pada penyembunyian kompatibilitas. (I8e87a, b/287516207)
  • Patch ini mengekspos konstanta WatchFaceType dalam WatchFaceTypes, konstanta CanvasType dalam CanvasTypes, konstanta TapType dalam TapTypes, dan konstanta ComplicationsSlotBoundsType di ComplicationsSlotBoundsType. (I3b85a, b/288750666)
  • WatchFace.OverlayStyle memiliki penggunaan yang sangat rendah dan tidak didukung dengan baik oleh OEM sehingga kami mengurangi nilainya dengan niat menghapusnya di lain waktu. (I7344a)

Versi 1.2.0-alpha09

21 Juni 2023

androidx.wear.watchface:watchface-*:1.2.0-alpha09 dirilis. Versi 1.2.0-alpha09 berisi commit ini.

Fitur Baru

  • RangedValueComplicationData.Builder kini menerima DynamicFloat, dan DynamicComplicationText baru tersedia sebagai subclass ComplicationText, yang keduanya dapat menggunakan ekspresi dinamis serta binding platform yang diupdate pada 1 Hz di perangkat Wear 4 yang didukung.

Perubahan API

  • Menambahkan jenis dinamis untuk jarak harian, kalori harian, dan lantai harian. Kunci untuk sumber kondisi platform sekarang berada di bawah PlatformHealthSources.Keys (Ib7637)
  • Terapkan PlatformDataProvider untuk memberikan detak jantung dan langkah harian. Antarmuka SensorGateway dihapus dari API publik. (I55b84)
  • Ganti nama StateEntryValue menjadi DynamicDataValue, dan update API status untuk menggunakan DynamicDataKey. (If1c01)
  • Menambahkan AppDataKey untuk mengakses status yang dikirim aplikasi; Menambahkan PlatformDataKey untuk mengakses data platform; Menambahkan dukungan namespace di StateStore. (I7985e)
  • enable/disablePlatformSource metode telah dihapus dari DynamicTypeEvaluator. Pemanggil harus bertanggung jawab atas update. (I78c6d)
  • Mengizinkan pembatasan ukuran jenis data yang dibatasi. (Ie2966)

Versi 1.2.0-alpha08

19 April 2023

androidx.wear.watchface:watchface-*:1.2.0-alpha08 dirilis. Versi 1.2.0-alpha08 berisi commit ini.

Fitur Baru

  • Mulai Android T, penyedia detail dengan com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE dengan hak istimewa dapat mendaftarkan metadata androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES yang menggantikan android.support.wearable.complications.SUPPORTED_TYPES untuk tampilan jam yang aman. Ini berarti penyedia detail dapat memilih untuk menyajikan berbagai jenis ke tampilan jam tepercaya vs tidak tepercaya.

Perubahan API

  • Penyebaran class @Deprecated ke properti (I882d1, b/271441831)
  • Nama parameter nilai untuk Enum.valueOf diubah (Ia9b89)
  • Lebih banyak pengecualian yang ditampilkan dari enum valueOf (I818fe)
  • Kami telah menghapus renderWatchFaceToSurface dan mendukung createRemoteWatchFaceView yang dibuat berdasarkan SurfaceControlViewHost dan memungkinkan pemanggil menyematkan tampilan dari tampilan jam, yang dirender saat klien memanggil RemoteWatchFaceViewHost#renderWatchFace. (Ib311d)
  • Kami telah menambahkan renderWatchFaceToSurface ke InteractiveWatchFaceClient, HeadlessWatchFaceClient, dan EditorSession. Biasanya ini akan lebih berperforma tinggi daripada merender ke bitmap. (Ieacad)
  • ObservableStateStore diganti namanya menjadi StateStore. (Ieb0e2)
  • Menambahkan DynamicTypeEvaluator.Builder, bukan argumen konstruktor untuk mengizinkan lebih banyak argumen opsional, termasuk ObservableStateStore yang sekarang ditetapkan secara default ke penyimpanan kosong. (I6f832)
  • Urutan parameter telah difaktorkan ulang di DynamicTypeEvaluator. (Ic1ba4)
  • Executor telah ditambahkan ke metode DynamicTypeEvaluator.bind. (I346ab)
  • Kami telah menambahkan metode startEvaluation ke BoundDynamicType untuk memicu evaluasi setelah jenis dinamis terikat. (I19908)
  • Penyedia detail dengan com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE dengan hak istimewa dapat mendaftarkan metadata androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES yang menggantikan android.support.wearable.complications.SUPPORTED_TYPES untuk tampilan jam yang aman. (Id1c73)
  • Kami telah mengganti nama CustomValueUserStyleSettings2 menjadi LargeCustomValueUserStyleSettings. (Ic17ac)

Perbaikan Bug

  • DynamicTypeValueReceiver#onPreUpdate telah dihapus (I2dc35)

Versi 1.2.0-alpha07

22 Februari 2023

androidx.wear.watchface:watchface-*:1.2.0-alpha07 dirilis. Versi 1.2.0-alpha07 berisi commit ini.

Fitur Baru

  • Dari Android T, OEM akan dapat menentukan apakah permintaan detail berasal dari tampilan jam dalam daftar yang ditentukan oleh metadata android.support.wearable.complications.SAFE_WATCH_FACES dalam manifes penyedianya oleh ComplicationRequest#isForSafeWatchFace. Penyedia akan memerlukan izin com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE untuk menerima apa pun selain TargetWatchFaceSafety.UNKNOWN.

  • Selain itu, mulai dari Android T CustomValueUserStyleSetting2 tersedia untuk digunakan yang dapat menampung hingga 12,5 kb. Batas sebelumnya untuk CustomValueUserStyleSetting adalah 1 kb. Meskipun batas ukuran ditingkatkan, developer tampilan jam dianjurkan untuk membuat data tetap berukuran kecil karena setelan akan dikirim melalui bluetooth selama pengeditan dan bandwidth bluetooth dibatasi.

Perubahan API

  • Kami telah menambahkan parameter opsional eglContextAttribList ke GlesRenderer & GlesRenderer2 yang memungkinkan Anda menetapkan EGL14.EGL_CONTEXT_CLIENT_VERSION yang diteruskan ke EGL14.eglCreateContext. (I2a83e)
  • Kami telah memigrasikan library tampilan jam ke androidx.core.util.Consumer, bukan java.util.function.Consumer. (I273f5)
  • Lebih banyak pengecualian yang ditampilkan dari pengakses properti KT (Iff9d9)
  • Kami telah menambahkan InteractiveWatchFaceClient.isComplicationDisplayPolicySupported sehingga klien dapat menentukan apakah harus mengemulasi dukungan atau tidak atas nama tampilan jam lama. (I24c89)
  • Kami telah memutuskan bahwa isForSafeWatchFace harus berupa IntDef tiga status. (Ief2f7)
  • Untuk Android T, kami telah memperkenalkan ComplicationRequest.isForSafeWatchFace yang ditujukan untuk penggunaan OEM dan memerlukan com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE. Untuk sumber data dalam image sistem, hal ini akan menampilkan benar (true) jika tampilan jam yang meminta ada dalam daftar tampilan jam aman yang ditentukan oleh sumber data dalam manifesnya. (I0cbb6)
  • Untuk Android T, kami telah menambahkan CustomValueUserStyleSetting2 yang dapat menampung hingga 12,5 kb. Batas sebelumnya untuk CustomValueUserStyleSetting adalah 1 kb. (I0b100)

Versi 1.2.0-alpha06

25 Januari 2023

androidx.wear.watchface:watchface-*:1.2.0-alpha06 dirilis. Versi 1.2.0-alpha06 berisi commit ini.

Fitur Baru

  • Saat ini tengah berupaya menambahkan dukungan untuk detail binding platform. Ini belum siap digunakan, tetapi nantikan kabar terbarunya!
  • Kami telah menambahkan dukungan ComplicationSlot XML untuk jenis detail baru, GOAL_PROGRESS dan WEIGHTED_ELEMENTS.

Perbaikan Bug

  • Memperbaiki kebocoran saat editor tampilan jam tidak dirilis dengan benar di perangkat Samsung. (3b5987)
  • Memperbaiki bug saat detail terkadang tidak ditampilkan dengan benar ketika berganti-ganti tampilan jam dengan beberapa favorit. (b38ece)
  • Memperbaiki bug serialisasi dengan perOptionScreenReaderNames yang menyebabkan terjadinya error pada tampilan jam. (e9f466)

Versi 1.2.0-alpha05

7 Desember 2022

androidx.wear.watchface:watchface-*:1.2.0-alpha05 dirilis. Versi 1.2.0-alpha05 berisi commit ini.

Fitur Baru

  • Beberapa waktu lalu kami menambahkan dukungan untuk UserStyleSettings hierarkis, dan dari Android T, Anda kini dapat memiliki lebih dari satu ComplicationSlotsUserStyleSetting dalam hierarki. Hanya satu ComplicationSlotsUserStyleSetting yang akan aktif, berdasarkan pilihan gaya pengguna.

  • Kami meningkatkan dukungan pembaca layar untuk ListOption dan ComplicationSlotsOption dengan menambahkan kolom screenReaderName. Perhatikan bahwa sebelum Android T, kolom ini akan diabaikan oleh editor pendamping.

Perubahan API

  • Kami telah menambahkan kolom screenReaderName opsional baru ke ListOption dan ComplicationSlotsOption untuk digunakan oleh editor - akan diabaikan oleh editor pendamping di perangkat sebelum Android T. (I75326)
  • Mulai Android T, beberapa ComplicationSlotsUserStyleSettings kini didukung dalam hierarki gaya selama hanya salah satunya yang dapat aktif pada satu waktu. Kami telah menambahkan fungsi utilitas findComplicationSlotsOptionForUserStyle ke UserStyleSchema untuk membantu menemukan ComplicationSlotsOption aktif jika ada. (Ic2b06)
  • RangedValuesTypes telah ditarik ke dalam objek pendamping RangedValueComplicationData dan diganti namanya menjadi TYPE_UNDEFINED, TYPE_RATING dan TYPE_PERCENTAGE baru telah ditambahkan. (I55d02)
  • Kami telah mengganti nama DynamicFloat eksperimental menjadi FloatExpression dan menandainya sebagai @hide. (Idf4f1)
  • Menambahkan anotasi @JvmDefaultWithCompatibility (I8f206)

Versi 1.2.0-alpha04

9 November 2022

androidx.wear.watchface:watchface-*:1.2.0-alpha04 dirilis. Versi 1.2.0-alpha04 berisi commit ini.

Fitur Baru

  • Untuk Android T, kami telah menambahkan dukungan untuk dua jenis detail baru, GoalProgressComplicationData dan WeightedElementsComplicationData.
  • GoalProgressComplicationData mirip dengan RangedValueComplicationData tetapi nilainya diizinkan untuk melewati target (untuk RangedValueComplicationData, nilai ditetapkan ke rentang [min .. maks]) yang memiliki implikasi untuk desain visual yang mungkin hanya cocok untuk sebagian tampilan jam.
  • GoalProgressComplicationData menambahkan dukungan untuk diagram lingkaran dan pengelompokan data sederhana yang serupa.
  • Kami telah menambahkan dukungan opsional untuk ColorRamps ke RangedValueComplicationData.
  • Untuk Android T, kami telah menambahkan ComplicationPersistencePolicy dan setCachePolicy ke ComplicationData yang saat ini memungkinkan penyedia mengontrol apakah detail dipertahankan atau tidak (yaitu apakah di-cache setelah mulai ulang). Sebagian besar detail tidak perlu menyetel kontrol cache, tetapi melakukan hal tersebut dapat memperbaiki kasus dengan beberapa keadaan ekstrem dengan data yang sudah tidak berlaku untuk beberapa detail yang sering diperbarui (misalnya, detail data kesehatan). Kami juga telah menambahkan ComplicationDisplayPolicy tempat DO_NOT_SHOW_WHEN_DEVICE_LOCKED menginstruksikan tampilan jam yang kompatibel untuk tidak menampilkan detail saat perangkat terkunci. (Ic9574)

Perubahan API

  • GoalProgressComplicationData, WeightedElementsComplicationData, dan ColorRamp tidak lagi bersifat eksperimental. (Ica9e2)
  • ComplicationPersistencePolicy dan ComplicationDisplayPolicy sekarang ditandai dengan benar sebagai T API. (I31d88)
  • Konstruktor ComplicationSlotOverlay yang sudah tidak digunakan lagi sekarang memiliki DeprecationLevel.WARNING, yang memungkinkannya dipanggil dari Java sekali lagi. (Ib308c)
  • Kami telah memperbaiki beberapa masalah kompatibilitas Java dengan ComplicationRequestListener, CanvasComplication, ComplicationTapFilter, dan InteractiveWatchFaceClient dengan menganotasinya dengan @JvmDefaultWithCompatibility (Id94fc)
  • Kami telah menghapus ProtoLayoutComplicationData dan ListComplicationData eksperimental. Pengalaman developer tentang hal ini tidak jelas, kami berharap dapat membukanya kembali di masa mendatang. (I9df05)
  • Kami telah menambahkan ValueType kembali ke RangedValueComplicationData. WeightedElementsComplicationData kini mendukung warna latar belakang. Kami telah menghapus DiscreteRangedValueComplicationData karena fungsinya adalah subset dari WeightedElementsComplicationData. (I6446c)

Perbaikan Bug

  • Menyertakan isForScreenShot di kode sama dengan dan hash. Pastikan onRenderParametersChanged mendapatkan nilai isForScreenshot yang benar (I04a41)
  • Memperbaiki kebocoran WatchFaceControlService dari klien headless. (e90e00)

Versi 1.2.0-alpha03

5 Oktober 2022

androidx.wear.watchface:watchface-*:1.2.0-alpha03 dirilis. Versi 1.2.0-alpha03 berisi commit ini.

Fitur Baru

  • Tidak ada fitur baru, tetapi kami telah memperbaiki beberapa bug editor tampilan jam.

Perubahan API

  • UserStyleSchema.userStyleSettings tidak digunakan lagi karena rootUserStyleSettings menjadi non-eksperimental (Ie96e3)
  • Memindahkan rootUserStyleSettings dari eksperimental (I8d6b3)
  • Kami menandai WatchFaceColors sebagai eksperimental karena tidak didukung oleh semua sistem (I6d75d)
  • Mengekspos DisconnectReasons di API publik agar dapat berfungsi dengan IntDef. (I791f8)

Perbaikan Bug

  • Menutup semua editor tampilan jam yang terbuka jika SysUI mati. Jika SysUI mati dan editor tampilan jam tidak tertutup, tampilan jam dapat dibiarkan dalam status yang tidak konsisten karena sistem bergantung pada SysUI untuk mempertahankan setiap perubahan gaya pengguna.(ba762a
  • Memperbaiki kebocoran memori dalam ComplicationDataSourceInfoRetriever jika kelanjutan coroutine kotlin bertindak sebagai root gc dan mempertahankan aktivitas editor.(33ee06)

Versi 1.2.0-alpha02

21 September 2022

androidx.wear.watchface:watchface-*:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Fitur Baru

  • Beberapa tampilan jam memiliki konfigurasi di luar UserStyle yang memengaruhinya secara visual, (misalnya memilih foto latar belakang). Kami telah menambahkan Renderer.sendPreviewImageNeedsUpdateRequest yang memungkinkan tampilan jam meminta gambar pratinjau yang diperbarui. Perlu diperhatikan bahwa penambahan ini memerlukan update sistem terkait agar dapat berfungsi.

  • Kami juga telah menambahkan API untuk tampilan jam guna mengekspos warna ke sistem yang dapat memilih palet warnanya berdasarkan hal ini. Perhatikan bahwa fitur ini telah dibuat eksperimental dalam patch selanjutnya.

  • Hampir semua jenis ComplicationData kini mendukung SmallImages.

Perubahan API

  • Pengelola wallpaper terkadang dapat terlepas dari mesin dan membuat wallpaper lagi. Kami telah menambahkan int def DisconnectReason dan memperluas ClientDisconnectListener dengan metode baru yang menyertakan DisconnectReason, yang memungkinkan pemroses mengamati terlepasnya mesin. (I45cce)
  • Menambahkan dua parameter opsional nameResourceId dan screenReaderResourceId ke konstruktor ComplicationSlotOverlay (I157e8)
  • Kami telah menambahkan wrapper guava untuk overload getOrCreateInteractiveWatchFaceClient yang baru dengan PreviewImageUpdateRequestedListener. (Ic31f0)
  • Kami telah menambahkan Renderer.sendPreviewImageNeedsUpdateRequest yang berguna untuk tampilan jam yang memiliki status di luar UserStyleSchema yang memengaruhi tampilan (misalnya, tampilan jam dengan gambar latar yang dapat dipilih). Di sisi klien, kami telah menambahkan PreviewImageUpdateRequestedListener sebagai parameter opsional ke getOrCreateInteractiveWatchFaceClient untuk mengamati permintaan ini. (Iff44a)
  • Kami telah menyederhanakan API untuk mengekspos WatchFaceColors. Sekarang telah ada properti sederhana bernama watchFaceColors di Perender yang dapat disetel oleh tampilan jam, dan harus diperbarui sesuai kebutuhan sebagai respons terhadap setiap perubahan gaya. Kami telah menambahkan OnWatchFaceColorsListener ke InteractiveWatchFaceClient, bukan menggunakan WallpaperManager untuk mengamati perubahan warna. (I490bc)
  • Kami telah menambahkan class WatchFaceColors yang menyimpan tiga warna tampilan jam paling menarik dan menambahkan metode terbuka watchfaceColors & notifyWatchFaceColorsChanged ke Perender. Ini memungkinkan sistem mendapatkan warna tampilan jam melalui WallpaperManager.getWallpaperColors. (I3d611)
  • ShortTextComplicationData, RangedValueComplicationData, NoPermissionComplicationData (serta DiscreteRangedValueComplicationData, GoalProgressComplicationData, dan WeightedElementsComplicationData eksperimental) sekarang mendukung SmallImages. Jika tampilan jam memilih untuk merender detail dengan beberapa warna, tampilan jam kini memiliki opsi untuk menggunakan SmallImage multiwarna, yang sebelumnya harus menggunakan gambar monokromatik. (I257df)
  • Memfaktorkan ulang PreviewImageUpdateRequestedListener menjadi Consumer<> sebagai gantinya (Ia875d)
  • Mengganti jenis Single Abstract Method (SAM) kustom OnWatchfaceColorsListener dengan jenis SAM Java generik (Consumer) (I0c489)
  • Kami tidak lagi menggunakan metode getOrCreateInteractiveWatchFaceClient dan listenableGetOrCreateInteractiveWatchFaceClient lama yang tidak menentukan PreviewImageUpdateRequestedListener. (Iec502)

Perbaikan Bug

  • DisconnectReason.BINDER_DIED diganti namanya menjadi DisconnectReason.ENGINE_DIED. (I4eb0e)

Versi 1.2.0-alpha01

10 Agustus 2022

androidx.wear.watchface:watchface-*:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Fitur Baru

  • Kami telah menambahkan dukungan eksperimental untuk berbagai format detail baru. Ini adalah area pengembangan aktif; format baru ini dapat berubah sewaktu-waktu tanpa pemberitahuan dan saat ini tidak ada dukungan perender dari CanvasComplicationDrawable.
  • Kami juga telah menambahkan margin opsional ke slot detail yang membuat detail kecil lebih mudah diketuk.

Perubahan API

  • Class BoundingArc eksperimental kini tidak dapat diubah. (If624a)
  • Detail kecil dapat menjadi sulit diketuk. Untuk membantu mengurangi masalah ini, kami memperkenalkan dukungan untuk margin yang meningkatkan area yang dapat diketuk tanpa memengaruhi rendering. Kecuali jika ditentukan (baik dalam kode maupun melalui XML), ComplciationSlots memiliki margin berukuran nol. (I14089)
  • Mengubah tanda tangan getComplicationSlotInflationFactory(CurrentUserStyleRepository) untuk menampilkan instance factory non-null. Menampilkan null sebelumnya merupakan error, jadi tindakan ini hanya membuat kontrak API lebih jelas. (I0fcc0)
  • Kami telah menambahkan argumen currentUserStyleRepository ke metode WatchFaceService.getComplicationSlotInflationFactory agar konsisten dengan createComplicationSlotsManager. (I2ddd2)
  • UserStyleFlavors telah menjadi fitur non-eksperimental. (I69cdc)
  • Kami telah menghapus ValueType eksperimental dari RangedValueComplicationData dan sebagai gantinya memperkenalkan DiscreteRangedValueComplicationData eksperimental yang seperti RangedValueComplicationData, kecuali untuk rentang & nilai bilangan bulat. Kami juga telah memperkenalkan GoalProgressComplicationData eksperimental yang mirip dengan RangedValueComplicationData, kecuali untuk progres menuju sasaran dengan min yang secara implisit bernilai nol, dan nilainya diizinkan lebih besar dari targetValue. Perlu diketahui, semua varian RangedValue harus menentukan setidaknya satu monochromeImage, teks, atau judul. (I9590c)
  • Kami menghapus boundsWithMargins dari ComplicationSlotState karena software sistem tidak memiliki kasus penggunaan untuk itu. (I42e26)
  • Kami telah menambahkan dukungan eksperimental untuk WeightedElementsComplicationData yang terdiri dari array Element (pasangan tebal dan warna) beserta teks/judul/gambar opsional. Dukungan ini mungkin ditampilkan sebagai diagram lingkaran dengan warna yang bermakna tergantung konteksnya, karena biasanya tidak ada ruang dalam detail untuk merender label. (I87eea)
  • ColorRamps eksperimental yang digunakan secara opsional oleh RangedValueComplicationData dan GoalProgressComplicationData kini memungkinkan Anda menentukan urutan hingga tujuh warna dan flag yang menyatakan apakah warna harus di-tween secara mulus atau apakah langkah warna solid yang berukuran sama harus dirender. (I9f5bf)
  • RangedValueComplicationData.drawSegmented telah diubah menjadi valueType yang merupakan int dengan ValueType IntDef yang sesuai yang memberikan makna semantik ke nilai rentang dan dapat digunakan oleh perender detail untuk memengaruhi gaya. (I0616b)
  • Kami telah menambahkan dukungan eksperimental untuk ColorRanges opsional ke RangedValueComplicationData. Detail biasanya akan dirender dalam warna pilihan tampilan jam, tetapi terkadang ComplicationDataSource paling cocok ditempatkan untuk menetapkan warna, misalnya saat memiliki makna semantik tertentu. Misalnya, merah ke biru untuk suhu. (I5153a)
  • Kami telah menambahkan petunjuk drawSegmented eksperimental ke RangedValueComplicationData. Ini menandakan perender untuk menggambar indikator nilai rentang dengan segmen, dengan 1 segmen = 1 unit. (I7d7c1)

Perbaikan Bug

  • Kami telah menambahkan kemampuan untuk menentukan ComplicationSlotBounds relatif terhadap sistem koordinat layar yang telah ditentukan sebelumnya. (I0985d)

Versi 1.1

Versi 1.1.1

10 Agustus 2022

androidx.wear.watchface:watchface-*:1.1.1 dirilis. Versi 1.1.1 berisi commit ini.

  • Ini adalah rilis perbaikan bug dan pengguna versi 1.1.0 sangat disarankan untuk melakukan upgrade.

Perbaikan Bug

  • Inisialisasi tampilan jam bersifat asinkron dan jika detail diterima sebelum tampilan jam siap, detail akan masuk ke dalam daftar pendingInitialComplications dan diterapkan nanti. Sayangnya, pendingInitialComplications diterapkan terlalu cepat yang berarti ada jangka waktu selama inisialisasi tampilan jam, dengan detail yang masih akan ditempatkan di pendingInitialComplications dan diabaikan. Hal ini sekarang telah diperbaiki. Selain itu, patch ini memperbaiki bug yang menyebabkan ComplicationRenderer salah mencoba memuat placeholder secara asinkron, yang gagal mengarah ke grafik kompilasi yang tidak pernah diperbarui. Terakhir, patch ini memperbaiki bug teoretis yang diharapkan saat beberapa pendingInitialComplications perlu digabungkan. (0d03ba3)

  • Memperbaiki potensi deadlock di InteractiveInstanceManager saat getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance menahan kunci lebih lama dari yang diperlukan. Biasanya kami mengharapkan engine.setUserStyle berjalan cepat, tetapi jika tidak demikian karena alasan tertentu, dapat terjadi deadlock/ANR. Patch ini memindahkan pekerjaan yang tidak perlu, sehingga tidak berpotensi terjadi deadlock.(5a2adca)

  • Memperbaiki beberapa masalah yang mempertahankan WatchFaceService. WakeLock terkadang dapat mempertahankan WatchFaceService, dan menambahkan panggilan release() akan memperbaiki masalah ini. Selain itu, StateFlows dapat mempertahankan WatchFaceService, yang membatalkan perbaikan CoroutineScopes dasar. (fd48138)

  • Menambahkan waktu tunggu ke awaitDeferredWatchFace* dan memperbaiki watchfaceOverlayStyle NullPointerException. Dalam keadaan normal, waktu tunggu ini tidak boleh habis termasuk setelah penginstalan baru dan skenario DirectBoot saat beban CPU tinggi. Kami juga telah memperbaiki NPE jika getWatchfaceOverlayStyle dipanggil setelah close(). (a4c3a5a)

Versi 1.1.0

15 Juni 2022

androidx.wear.watchface:watchface-*:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Perubahan penting sejak versi 1.0.0

Peningkatan Pengeditan:

  • Kami menambahkan dukungan untuk skema hierarkis, yang memungkinkan hierarki gaya ditulis oleh UI editor. Anda kini dapat menentukan ikon terpisah untuk digunakan di editor tampilan jam dan pendamping.
  • Ada dukungan keikutsertaan untuk beberapa instance tampilan jam, setiap instance memiliki ID unik yang tersedia di semua platform API.
  • Anda kini dapat menentukan nama yang dapat dibaca manusia untuk ComplicationSlots agar dapat digunakan di editor.
  • Dukungan eksperimental untuk menata gaya “ragam”, serangkaian gaya pilihan yang akan terlihat dari editor pendamping.
  • Saat pengeditan dua instance tampilan jam dimuat, kini instance tampilan jam dapat berbagi resource sehingga menghemat memori
  • Saat memilih detail di editor tampilan jam, penyedia saat ini telah dipilih sebelumnya.

Peningkatan Detail:

  • Anda kini dapat menentukan ComplicationType untuk sumber data utama dan sekunder, yang memberi developer lebih banyak fleksibilitas untuk pengalaman langsung.
  • Kami menambahkan ComplicationDataTimeline yang menyediakan urutan data yang dibatasi waktu agar dikirimkan ke tampilan jam yang dapat di-cache dan diperbarui secara otomatis. Misalnya, perkiraan cuaca hari ini pada beberapa waktu atau beberapa acara kalender yang akan datang.
  • ComponentName penyedia detail adalah bagian dari ComplicationData.
  • Detail kini di-cache yang memberikan pengalaman yang lebih baik saat beralih antar-tampilan jam.

Perubahan lainnya:

  • UserStyleSchema dan ComplicationSlots sekarang dapat ditentukan dalam XML. Hal ini menyederhanakan konstruksi tampilan jam dan memungkinkan kueri metadata yang lebih cepat dari sistem.
  • Tampilan jam kini dapat memengaruhi warna yang digunakan untuk merender overlay sistem.

Versi 1.1.0-rc01

18 Mei 2022

androidx.wear.watchface:watchface-*:1.1.0-rc01 dirilis. Versi 1.1.0-rc01 berisi commit ini.

Fitur Baru

  • Kami telah membuat beberapa penyesuaian kegunaan untuk dukungan XML tampilan jam, sehingga mempermudah penentuan ComplicationSlotBounds dan referensi pendukung. Eksperimen dengan detail tepi BoundingArc berlanjut, yang menuju ke drawHighlight meskipun tidak direkomendasikan untuk digunakan pada saat itu.

Perubahan API

  • Kami telah menambahkan overload drawHighlight eksperimental yang menerima parameter BoundingArc. (I705f8)
  • XML tampilan jam kini mendukung referensi resource. Ini memungkinkan Anda menggunakan konstanta yang sama baik dalam XML maupun kode Anda. (I3ef61)
  • Kami telah menambahkan kemampuan untuk menentukan ComplicationSlotBounds dalam bentuk center_x, center_y, size_x, size_y. Sekarang Anda juga dapat menggunakan unit lain (yaitu dp) menggunakan referensi resource. (Iace98)

Perbaikan Bug

  • Memperbaiki runBlockingWithTracing yang menjalankan tugas pada konteks yang salah. (4f595fe)
  • Menjadikan BaseEditorSession.close sinkron. Masalah terkait BaseEditorSession.close yang asinkron adalah kami merilis ComplicationDataSourceInfoRetriever terlalu lama yang menyebabkan spam peringatan di logcat. Ini mungkin tidak berbahaya tetapi spam logcat sangat mengganggu dan harus dihindari. (35a5308)

Versi 1.1.0-beta02

11 Mei 2022

androidx.wear.watchface:watchface-*:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Fitur Baru

  • Kami telah menambahkan dukungan eksperimental untuk jenis ComplicationData baru. Namun, dukungan ini belum siap digunakan, terus pantau halaman ini.

Perubahan API

  • Kami telah menambahkan BoundingArc, class eksperimental yang menjelaskan geometri slot detail tepi. Class ini telah ditambahkan ke ComplicationSlot dan ditambahkan ke ComplicationSlotState dan WatchFaceMetadataClient. (I61a40)
  • Kami telah menambahkan kemampuan untuk mewarisi setelan dalam XML UserStyleSetting. Hal ini memungkinkan Anda mengurangi panjang dan berbagi setelan di antara tampilan jam. (Ief841)
  • Kami telah menambahkan dua jenis ComplicationData eksperimental baru: ListComplicationData & ProtoLayoutComplicationData. Saat ini, tidak ada dukungan rendering untuk salah satu jenis ini dan WearOS saat ini tidak mengenali jenis ini jika ditambahkan ke manifes ComplicationDataSource's. (I1811c)

Perbaikan Bug

  • Memperbaiki serialisasi jenis TimeLineEntry. Kami tidak membuat serialisasi jenis TimeLineEntry yang berarti NoData jenis TimeLineEntries yang di-cache akan salah ditafsirkan sebagai memiliki jenis detail induk yang menyebabkan NPE saat kolom wajib diisi yang tidak ada diakses. (55ffdf5)
  • Memperbaiki bug ketika setComplicationData menghapus kolom linimasa (fb392f5)
  • Memperbaiki bug yang terkadang runBlockingWithTracing menyebabkan NPE (12ca62e)
  • Memperbaiki bug yang terkadang menyebabkan kami mendapatkan ClassNotFoundException: android.support.wearable.complications.ComplicationText saat menerima detail.(217942d9)
  • Memperbaiki bug di GlesRenderer.backgroundThreadInitInternal yang hanya memanggil onBackgroundThreadGlContextCreated jika EGL14.eglCreateContext dipanggil. Memperbaiki bug lain saat ada gangguan visual dalam screenshot yang disebabkan oleh verticalFlip.(c674ad2)
  • Memperbaiki pemeriksaan versi XML WatchFaceService, yang dimuat dari paket yang salah.(dfa06f3)
  • Format kabel placeholder kini menggunakan paket dalam. Kami tidak ingin placeholder merusak tampilan jam yang ada dan mungkin menggunakan a.s.w.c.ComplicationData bagian dalam yang tersembunyi. Sebelumnya, format kabel untuk data NoDataComplication menyimpan placeholder di kolom biasa (bermasalah karena tampilan jam lama akan merender string placeholder yang tidak dimaksudkan), tetapi sekarang kami menggunakan paket dalam untuk sepenuhnya mengisolasi ini.(h5e7bd2)

Versi 1.1.0-beta01

20 April 2022

androidx.wear.watchface:watchface-*:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

Perubahan API

  • Metode WatchFaceMetadataClient (getUserStyleSchema, getComplicationSlotMetadataMap, getUserStyleFlavors) dan HeadlessWatchFaceClient.getUserStyleFlavors sekarang menampilkan RuntimeException yang tidak diperiksa, bukan WatchFaceException. (I0718a)
  • WatchFaceMetadataClient.WatchFaceException telah dipindahkan ke luar class untuk memungkinkannya digunakan kembali. (I4e869)

Perbaikan Bug

  • WatchFaceMetadataClient tidak akan lagi error saat mengirim sebagian ComplicationSlotBounds. (Iaafd)

Versi 1.1.0-alpha05

6 April 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

Fitur Baru

  • Anda sekarang dapat mengetahui sumber data mana yang mengirim ComplicationData dengan memeriksa ComplicationData.dataSource, beberapa tampilan jam dapat menggunakan ini untuk menyesuaikan tampilan detail. (I44a73)

Perubahan API

  • Renderer.CanvasRenderer dan Renderer.GlesRenderer tidak digunakan lagi dan digantikan dengan Renderer.CanvasRenderer2 dan Renderer.GlesRenderer2 yang mendukung SharedAssets yang diteruskan ke metode render. Untuk interop java, kami telah memperkenalkan ListenableCanvasRenderer2 dan ListenableGlesRenderer2. (I31ffa)
  • Menambahkan kemampuan @WatchFaceFlavorsExperimental untuk menentukan ragam - daftar tampilan jam bergaya yang telah dikonfigurasi sebelumnya (I04dd0)
  • Renderer.sharedAssets kini menjadi StateFlow dan kami telah menghapus Renderer.SharedAssetsFactory yang tidak digunakan (I12ac5)
  • UserStyleSchema.userStyleSettings digunakan lagi (Iba7e3)
  • Kami telah menambahkan HeadlessWatchFaceClient.getUserStyleSchemaDigestHash yang memungkinkan HeadlessWatchFaceClient agar overhead yang relatif rendah tidak meneruskan skema melalui AIDL sebelum menghitung hash ringkasan. (I33597)
  • Kami telah menambahkan isUserStyleSchemaStatic ke WatchFaceMetadataClient yang benar jika dan hanya jika UserStyleSchema dapat diandalkan untuk tidak berubah, kecuali APK tampilan jam diperbarui. (I45a3f)
  • Kami telah menambahkan getDigestHash ke UserStyleSchema yang menghitung hash ringkasan dari skema. Ini dapat digunakan untuk menentukan secara efisien apakah UserStyleSchema telah berubah. (I2063d)
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED diganti namanya menjadi METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED (I9ba5d)
  • UserStyleSetting.OnWatchEditorData telah diganti namanya menjadi UserStyleSetting.WatchFaceEditorData, yang berisi data yang hanya digunakan oleh editor tampilan jam. (If3afb)

Versi 1.1.0-alpha04

9 Maret 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha04 dirilis. Versi 1.1.0-alpha04 berisi commit ini.

Perubahan API

  • ComplicationData terbaru mungkin tidak selalu tersedia (mis. ComplicationData dalam cache yang sudah tidak berlaku) sehingga kami memperluas NoDataComplication dengan ComplicationData placeholder opsional dan menambahkan ComplicationText.PLACEHOLDER, MonochromaticImage.PLACEHOLDER, SmallImage.PLACEHOLDER, PhotoImage.PLACEHOLDER yang hanya diizinkan untuk digunakan dalam konteks placeholder NoDataComplicationData. Jika dipilih, placeholder ini disarankan untuk dirender dengan kotak/lengkungan abu-abu. (I6285d)
  • Kami telah menambahkan ComplicationData.getNextChangeInstant yang memberi tahu Anda Instant berikutnya setelah Instant referensi dengan kolom detail yang dapat berubah. Ini digunakan secara internal guna menjadwalkan frame untuk update detail. Mis. jika tampilan jam biasanya diperbarui sekali per menit, menyetel detail stopwatch akan menyebabkannya diperbarui sekali per detik. (I7ceb2)
  • EditorSession.watchFaceId sekarang dapat digunakan di semua API level. Selain itu, nilainya sekarang akan selalu konsisten dengan WatchState.watchFaceInstanceId. (I323b9)
  • getPendingIntentForTouchEvent API tidak lagi diperlukan karena masalah yang mendasarinya telah diperbaiki dalam framework, sehingga semua API terkait telah dihapus. Tampilan jam tidak perlu melakukan hal khusus untuk PendingIntents agar aktif, meskipun tombol layar utama baru saja ditekan. (I1f2e8)
  • Kami telah menambahkan RendererParameters.isForScreenShot yang akan bernilai benar jika render adalah untuk screenshot. Beberapa tampilan jam dengan animasi perlu mengetahui hal ini untuk melakukan penyesuaian guna memastikan hasil terbaik. (I96d99)
  • Kami telah menambahkan WatchFaceExceptionReason ke WatchFaceException untuk memberikan beberapa konteks terkait masalah yang terjadi. (I01d15)
  • ComplicationDataSourceService.onImmediateComplicationRequest telah dihapus, sebagai gantinya ComplicationRequest.immediateResponseRequired telah ditambahkan untuk menandakan bahwa penyedia harus merespons dengan cepat (idealnya merespons dalam < 100 md). Perlu diperhatikan bahwa fungsi ini dilindungi dengan izin com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE dengan hak istimewa. (Ie6b23)
  • Mengubah nullability di core dan appcompat agar sesuai dengan Tiramisu DP2 (I0cbb7)

Perbaikan Bug

  • Kini aplikasi tampilan jam mengalami error dengan pengecualian jika validasi skema gagal (Ia400f)

Versi 1.1.0-alpha03

9 Februari 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha03 dirilis. Versi 1.1.0-alpha03 berisi commit ini.

Perubahan API

  • Kami telah menambahkan dukungan eksperimental untuk skema gaya hierarkis. Kami telah menambahkan properti baru ke androidx.wear.watchface.style.UserStyleSetting.Option, ChildSettings yang awalnya hanya digunakan oleh ListOption. Hal ini memungkinkan hierarki gaya dijelaskan untuk digunakan oleh UI Editor, UserStyle yang mendasarinya tidak berubah dan masih berupa Map<String, ByteArray>. (Iaf6f4)
  • Kami telah menambahkan WatchFace.OverlayStyle yang memungkinkan tampilan jam mengonfigurasi rendering overlay status sistem. (I8520d)
  • Kami telah memperkenalkan clearWithBackgroundTintBeforeRenderingHighlightLayer, parameter konstruktor opsional baru untuk CanvasRenderer (default-nya adalah salah (false)). Jika parameternya disetel ke benar (true), kanvas akan dikosongkan dengan warna tint latar belakang. (Ie01e5)
  • Menambahkan kunci metadata androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED yang memungkinkan sumber data detail untuk menunjukkan bahwa kunci ini dapat memberikan nilai default tanpa konfigurasi apa pun (Icc0d4)
  • Tampilan jam umumnya diedit agar terdapat instance interaktif dan headless. Untuk membantu menghemat memori, kami telah memperkenalkan Renderer.SharedAssets yang memungkinkan perender tampilan jam membagikan data yang tidak dapat diubah (misalnya tekstur dan shader) di antara instance. GlesRenderer.setEglConfig dan GlesRenderer.setEglDisplay tidak digunakan lagi. Keduanya tidak dimaksudkan agar dapat disetel, dengan menyetelnya akan menghasilkan perilaku yang tidak ditentukan. (I0d9e7)
  • Kami telah menambahkan setNameResourceId & setScreenReaderNameResourceId (yang merujuk pada resource string) ke ComplicationSlot.Builder dan pengambil yang sesuai di androidx.wear.watchface.client.ComplicationSlotState. Hal ini memungkinkan sistem mengambil nama ComplicationSlots untuk digunakan dalam editor dan pembaca layar. (If6c6a)
  • WatchfaceMetadataClient.getUserStyleSchema dan getComplicationSlotMetadataMap kini menampilkan WatchFaceException, bukan RemoteException. (I86f11)
  • onSynchronousComplicationRequest dan fungsi terkait dalam ComplicationDataSourceService telah diganti namanya menjadi onImmediateComplicationRequest dll... (I87ba0)
  • Editor tampilan jam memiliki real estate layar yang jauh lebih sedikit dibandingkan editor pendamping sehingga akan lebih baik untuk mendukung berbagai ikon di editor tampilan jam. Patch ini menambahkan OnWatchEditorData (saat ini hanya berisi ikon) ke semua UserStyleSettings dan jika sesuai dengan class Option-nya. (If1886)
  • Kami telah menambahkan @JvmOverloads ke konstruktor ListenableGlesRenderer untuk interop java yang lebih baik. (I2974a)

Perbaikan Bug

  • Konstruktor ListenableGlesRenderer kini ditandai dengan benar sebagai @Throws(GlesException::class), dan dapat memperluas class ini di java. (Iac6d0)
  • Memperbaiki bug dengan PhotoImageComplicationData tapAction yang tidak ditangani dengan benar (I1cc30)

Versi 1.1.0-alpha02

12 Januari 2022

androidx.wear.watchface:watchface-*:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Fitur Baru

  • Untuk membantu proses debug dan pengujian, ComplicationData dan subclass terkait kini telah mengganti metode kode hash, sama dengan, dan toString, sehingga lebih mudah digunakan.

Perubahan API

  • Metode WatchfaceMetadataClient sekali lagi menampilkan RemoteExceptions jika sesuai, yang memudahkan kode klien untuk menemukan error dari tampilan jam. (I78785)
  • ComplicationData dan subclass kini memiliki kode hash, sama dengan, dan toString. (I24bc6)

Versi 1.1.0-alpha01

15 Desember 2021

androidx.wear.watchface:watchface-*:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Fitur Baru

  • UserStyleSchema dan ComplicationSlots sekarang dapat ditentukan dalam XML. Ini menyederhanakan konstruksi tampilan jam. Selain itu, kueri WatchFaceMetadataClient lebih cepat karena tidak perlu terikat ke layanan untuk mendapatkan metadata. WatchFaceMetadataClient dan ListenableWatchFaceMetadataClient tidak lagi bersifat eksperimental dan akan menjadi bagian dari API stabil. Sistem dapat mendukung beberapa instance tampilan jam secara opsional, masing-masing dengan opsi gaya yang ditentukan pengguna secara berbeda. Ini akan terlihat di alat pilih tampilan jam. Untuk ikut serta dalam hal ini, tampilan jam harus menyertakan tag metadata berikut dalam manifesnya.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • Beberapa tampilan jam memiliki status yang tidak ditangkap di UserStyle, untuk mendukung hal ini dan beberapa instance, ID instance tampilan jam kini tersedia melalui WatchState.watchFaceInstanceId.

  • ComplicationData sekarang di-cache untuk mengizinkan detail ditampilkan segera setelah dimuat. Terkadang ComplicationData di-cache dalam memori oleh sistem dan terkadang diserialkan oleh library tampilan jam. Saat diserialisasi, tapAction terkait akan hilang, jika ini terjadi, ComplicationData.tapActionLostDueToSerialization akan menampilkan true dan tampilan jam akan merender detail secara berbeda (misalnya berwarna abu-abu atau semi-transparan) untuk menandakan bahwa itu tidak dapat diketuk. Sistem akan mengirimkan ComplicationData yang diperbarui dengan tapAction sesegera mungkin.

  • Beberapa ComplicationData seharusnya tidak di-cache untuk waktu yang lama, untuk mendukung hal ini, kami telah menambahkan fitur ComplicationDataTimeline yang lebih umum. Ini dapat digunakan untuk menyediakan urutan ComplicationData yang dibatasi waktu agar dikirimkan ke tampilan jam yang dapat di-cache dan diperbarui secara otomatis. Misalnya, perkiraan cuaca hari ini pada beberapa waktu atau beberapa acara kalender yang akan datang. ComplicationRequestListener telah diperpanjang dengan metode onComplicationDataTimeline baru yang dapat Anda gunakan untuk menampilkan data ini.

  • DefaultComplicationDataSourcePolicy telah diperluas sehingga Anda dapat menentukan ComplicationType untuk sumber data utama dan sekunder.

  • Kami telah menambahkan dukungan untuk penyedia detail sinkron dengan detail yang diperbarui pada frekuensi yang lebih tinggi dari biasanya, hingga sekali per detik saat tampilan jam terlihat dan non-ambient. Catatan: penyedia detail sinkron mungkin memiliki penggunaan terbatas karena masalah tekanan memori.

  • Perubahan PendingIntentTapListener kemungkinan akan dikembalikan karena kami menyelesaikan masalah yang mendasarinya (tampilan jam tidak dapat meluncurkan aktivitas selama 5 detik setelah menekan tombol layar utama) dalam framework.

Perubahan API

  • ComplicationData.isCached telah diubah menjadi tapActionLostDueToSerialization yang lebih berguna saat menentukan apakah slot detail harus dirender secara berbeda untuk menandakan bahwa slot detail tidak dapat diketuk. (I6de2f)
  • Menambahkan ComplicationDataTimeline ke wear-complication-data-source. Ini dapat digunakan untuk menyediakan urutan ComplicationData yang dibatasi waktu agar dikirimkan ke tampilan jam yang dapat di-cache dan diperbarui secara otomatis. Misalnya, perkiraan cuaca hari ini pada beberapa waktu atau beberapa acara kalender yang akan datang. ComplicationRequestListener telah diperpanjang dengan metode onComplicationDataTimeline baru yang dapat Anda gunakan untuk menampilkan data ini. Terdapat wrapper kotlin baru SuspendingTimelineComplicationDataSourceService untuk menangguhkan layanan sumber data. (Idecdc)
  • Menambahkan PendingIntentTapListener dan WatchFaceControlClient.getPendingIntentForTouchEvent. Hal ini dapat membantu tampilan jam yang perlu meluncurkan intent sebagai respons terhadap ketukan untuk mengatasi masalah saat framework memblokir aktivitas baru selama 5 detik setelah menekan tombol layar utama. (I98074)
  • Memperkenalkan cache ComplicationData per tampilan jam. Hal ini bertujuan agar tampilan jam dapat menampilkan nilai data detail terakhir yang diketahui setelah memuat hingga sistem memiliki kesempatan untuk memperbaruinya. Ada metode API baru WatchFaceControlClient.hasComplicationCache yang ditujukan untuk OEM. Hal ini dapat memengaruhi strategi sistem untuk mengirim detail ke tampilan jam. Selain itu, ComplicationData memiliki properti isCached dan sebaiknya detail yang di-cache dirender secara berbeda karena tapAction tidak dapat di-cache dan akan menjadi null dalam detail yang di-cache. (I404b0)
  • ID instance tampilan jam kini tersedia melalui WatchState.watchFaceInstanceId. Sebagian besar tampilan jam tidak perlu menggunakan ini, tetapi jika ada status tampilan per jam yang tidak disimpan dalam Schema, ini adalah kunci yang digunakan untuk mengidentifikasi instance tampilan jam. Untuk membantu mendukung hal ini, Anda sekarang dapat memberikan ID saat memanggil WatchFaceControlClient.createHeadlessWatchFaceClient. (I1ff98)
  • Memperluas DefaultComplicationDataSourcePolicy dengan kemampuan menetapkan ComplicationTypes default untuk penyedia utama dan sekunder serta untuk penyedia sistem penggantian. ComplicationSlot.defaultDataSourceType tidak digunakan lagi. (If0ce3)
  • ComplicationSlot.configExtras sekarang dapat berubah dan dapat diperbarui sebelum memanggil EditorSession.openComplicationDataSourceChooser(). (I6f852)
  • Menambahkan WatchFace.setComplicationDeniedDialogIntent dan setComplicationRationaleDialogIntent. Intent ini diluncurkan untuk menampilkan dialog alasan sebelum meminta izin detail, dan dialog lain yang menjelaskan bahwa izin detail diperlukan saat mencoba mengedit detail saat izin ditolak (pemilih penyedia akan gagal dibuka sehingga dialog diperlukan). (I3a29c)
  • UserStyleSchema dan ComplicationSlots sekarang dapat ditentukan dalam XML. Hal ini menyederhanakan konstruksi tampilan jam dan membuat kueri WatchFaceMetadataClient menjadi lebih cepat karena kueri tidak perlu terikat ke layanan untuk mendapatkan metadata. (I85bfa)
  • Menambahkan InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent sehingga klien dapat menentukan apakah tampilan jam mendukung getPendingIntentForTouchEvent. (I0b917)
  • WatchFaceMetadataClient dan ListenableWatchFaceMetadataClient tidak lagi bersifat eksperimental. API ini dapat digunakan untuk mendapatkan metadata tampilan jam secara efisien, jika memungkinkan tanpa membuka binder ke tampilan jam. (Ibb827)
  • Menambahkan dukungan untuk penyedia detail sinkron ketika detail diupdate pada frekuensi yang lebih tinggi dari biasanya, hingga sekali per detik saat tampilan jam terlihat dan non-ambient. Untuk menggunakan tag ini, penyedia harus menyertakan tag metadata androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS baru dalam manifesnya dan mengganti onSynchronousComplicationRequest. Bergantung pada sifat sumber datanya, sumber data juga mungkin perlu mengganti onStartSynchronousComplicationRequests dan onStopInteractiveComplicationRequests untuk mendapatkan notifikasi saat detail masuk dan keluar dari mode interaktif. (I8fe9d)

Versi 1.0

Versi 1.0.1

9 Februari 2022

androidx.wear.watchface:watchface-*:1.0.1 dirilis. Versi 1.0.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki bug dengan PhotoImageComplicationData tapAction yang tidak ditangani dengan benar (I1cc30)

Versi 1.0.0

1 Desember 2021

androidx.wear.watchface:watchface-*:1.0.0 dirilis. Versi 1.0.0 berisi commit berikut ini.

Fitur Utama 1.0.0

Paket androidx.wear.watchface adalah library baru yang direkomendasikan untuk mengembangkan tampilan jam WearOS. Library ini memiliki sejumlah fitur baru dibandingkan dengan Wearable Support Library lama.

  • Gaya pengguna (misalnya untuk mengubah palet warna, gaya jarum jam, tampilan tanda jam, dll.) didukung langsung oleh library (lihat androidx.wear.watchface.style). Kini jauh lebih mudah untuk mengembangkan editor tampilan jam menggunakan androidx.wear.watchface.editor dan tampilan jam Anda dapat diedit dari aplikasi pendamping sistem tanpa perlu menulis kode tambahan.
  • Praktik terbaik digunakan. Library akan otomatis membuat label konten pembaca layar untuk detail (Anda juga dapat menambahkan label sendiri), dan kecepatan frame akan otomatis turun saat baterai hampir habis dan tidak mengisi daya untuk meningkatkan masa pakai baterai.
  • Kode yang diperlukan untuk mengembangkan tampilan jam lebih sedikit, terutama untuk detail yang sebagian boilerplate-nya telah dipindahkan ke library.

Perbaikan Bug

  • Memperbaiki EditorSession.userStyle.compareAndSet (I6f676)
  • Memperbaiki penundaan tampilan jam yang sangat singkat (Iffb97)
  • Mengirim InteractiveWatchFaceImpl.onDestroy pada UI thread (I83340)
  • Memperbaiki beberapa masalah dengan penerima siaran (I7d25f)

Versi 1.0.0-rc01

3 November 2021

androidx.wear.watchface:watchface-*:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki dump() (dipanggil oleh adb shell dumpsys) yang rusak oleh migrasi flow. (087cf9e)

  • Memastikan pengurutan writeDirectBootPrefs yang sesuai. Kita ingin writeDirectBootPrefs selalu berjalan setelah initStyleAndComplications atau kita berisiko menunda init UI thread.(37650ac)

  • Memastikan Renderer.onDestroy dipanggil. Dalam skenario ketika perender telah dibuat, tetapi init WF belum selesai dan Engine.onDestroy dipanggil, kita perlu memanggil Renderer.onDestroy. (f9952dc)

  • Pengoptimalan/perbaikan untuk isBatteryLowAndNotCharging. Patch ini memindahkan penyiapan awal isBatteryLowAndNotCharging sebelumnya yang berarti dapat dilakukan secara paralel dengan createWatchFace. Selain itu, sekarang kita mendengarkan ACTION_POWER_DISCONNECTED. (ddffd80

  • InteractiveWatchFaceClientImpl.isConnectionAlive menjadi false setelah ditutup (ab9774e)

Versi 1.0.0-beta01

27 Oktober 2021

androidx.wear.watchface:watchface-*:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Versi 1.0.0-alpha24

13 Oktober 2021

androidx.wear.watchface:watchface-*:1.0.0-alpha24 dirilis. Versi 1.0.0-alpha24 berisi commit ini.

Perubahan API

  • Class dalam paket androidx.wear.watchface.complications telah dipindahkan ke project wear:watchface:watchface-complications yang baru. Perlu diketahui bahwa ini artinya Anda tidak dapat menyertakan library ini serta versi alfa wear:watchface:watchface-complications-data sebelumnya karena Anda akan mengalami error terkait class duplikat. (I97195)
  • Nama Renderer.dump telah diganti menjadi Renderer.onDump dan telah dianotasi dengan @UiThread. (I44845)
  • Nama InteractiveWatchFaceClient.addWatchFaceReadyListener telah diganti menjadi addOnWatchFaceReadyListener dan nama removeWatchFaceReadyListener diganti menjadi removeOnWatchFaceReadyListener. (I48fea)
  • EditorSession getComplicationsPreviewData dan getComplicationsDataSourceInfo tidak lagi menangguhkan fungsi, tetapi keduanya merupakan properti StateFlow<> yang nilai awalnya null. Di ListenableEditorSession, getListenableComplicationPreviewData dan getListenableComplicationsProviderInfo telah dihapus dan diganti dengan objek StateFlow<> baru dari class dasar. Jika Anda harus memproses perubahan dalam kode java, sebaiknya gunakan androidx.lifecycle.FlowLiveDataConversions.asLiveData untuk mengonversi ke LiveData<>. (Ic5483)

Version 1.0.0-alpha23

29 September 2021

androidx.wear.watchface:watchface-*:1.0.0-alpha23 dirilis. Versi 1.0.0-alpha23 berisi commit ini.

Fitur Baru

Library tampilan jam sekarang menjadi grup library tunggal. Oleh sebab itu, library telah dipindahkan dan Anda harus mengupdate impor gradle seperti berikut:

Lama Baru
androidx.wear:wear-complications-data androidx.wear.watchface:watchface-complications-data
androidx.wear:wear-complications-data-source androidx.wear.watchface:watchface-complications-data-source
androidx.wear:wear-watchface androidx.wear.watchface:watchface
androidx.wear:wear-watchface-complications-rendering androidx.wear.watchface:watchface-complications-rendering
androidx.wear:wear-watchface-client androidx.wear.watchface:watchface-client
androidx.wear:wear-watchface-client-guava androidx.wear.watchface:watchface-client-guava
androidx.wear:wear-watchface-data androidx.wear.watchface:watchface-data
androidx.wear:wear-watchface-editor androidx.wear.watchface:watchface-editor
androidx.wear:wear-watchface-editor-guava androidx.wear.watchface:watchface-editor-guava
androidx.wear:wear-watchface-guava androidx.wear.watchface:watchface-guava
androidx.wear:wear-watchface-style androidx.wear.watchface:watchface-style

Perubahan API

  • Memigrasikan library Tampilan jam dan detail androidx.wear yang terpisah menjadi grup library androidx.wear.watchface. (b25f3c0)
  • Menambahkan EditorRequest.canWatchFaceSupportHeadlessEditing untuk memberi tahu klien jika editor tampilan jam mendukung pengeditan headless. Perlu diketahui bahwa akan ada beberapa negatif palsu karena dukungan ditambahkan di asop/1756809, tetapi akan menampilkan nilai yang benar untuk semua tampilan jam di masa mendatang. (ca55590)
  • Perender sekarang memiliki metode dump() yang dapat diganti untuk menambahkan data kustom ke informasi yang dihasilkan oleh layanan aktivitas ABD shell dumpsys WatchFaceService. (95235f9)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener sekarang menentukan eksekutor terlebih dahulu. (563ac2f)
  • StateFlowCompatHelper telah dihapus. Sebagai gantinya, asLiveData (androidx.lifecycle.asLiveData) harus digunakan. (bd35d3)
  • CurrentUserStyleRepository.userStyle tidak lagi dapat diubah. (I44889)
  • WatchFaceReadyListener telah diganti namanya menjadi OnWatchFaceReadyListener. (Ic12a9)

Perbaikan Bug

  • InteractiveInstanceManager.deleteInstance untuk memanggil onDestroy. Ini diperlukan untuk memastikan InteractiveWatchFaceImpl mendapatkan pembersihan sampah memori. (fce4af8, b/199485839)