Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Wear Watchface

Membuat aplikasi untuk smartwatch Wear OS by Google.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
21 September 2022 1.1.1 - - 1.2.0-alpha02

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.0-alpha02"

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

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

    // 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.0-alpha02"
}

Kotlin

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

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

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

    // 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.0-alpha02"
}

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.2

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 ada properti sederhana bernama watchFaceColors di Perender yang dapat ditetapkan oleh tampilan jam, dan harus diperbarui sesuai kebutuhan sebagai respons terhadap perubahan gaya apa pun. 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 menonjol 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 Elemen (pasangan berat dan warna) beserta teks/judul/gambar opsional. 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 diupdate 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 edge. 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 berikut ini.

Perubahan API

  • Metode WatchFaceMetadataClient (getUserStyleSchema, getComplicationSlotMetadataMap, getUserStyleFlavors) dan HeadlessWatchFaceClient.getUserStyleFlavors sekarang melempar RuntimeException yang tidak dicentang, 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 berikut 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)
  • Mengupdate 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 melempar 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 diupdate 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 diupdate 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 berikut 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 berikut 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 berikut 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 berikut 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)