Tampilan Jam Wear

Membuat aplikasi untuk smartwatch Wear OS by Google.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
12 Januari 2022 1.0.0 - - 1.1.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.1.0-alpha02"

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

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

Kotlin

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

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

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.1.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.1

Versi 1.1.0-alpha02

12 Januari 2022

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

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 berikut 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.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)